| # | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ | 
|---|---|---|---|---|---|
| 1 | 
                    
                                                 Singleton - Intro
                 | 
                
                     | 
                |||
| 
                        Рекомендуемая литература: Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Структуре синглтона Сложности: найти время Комментарии: Похожее использовал не раз, но именно в таком ракурсе, интересно посмотреть это в работе.  | 
                |||||
| 2 | Singleton - Config - Final | 
                     | 
                |||
| 
                        Мы начинаем серию коротких уроков по созданию класса  считывания данных из конфигурационного файла. Для начала мы организуем несколько конфигурационных параметров в виде констант и расположим их в основном классе Program. Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Данный способ хорошо подходит для хранения каких-то важных, внутренних настроек ПО, которые не хотелось бы, чтобы кто-либо менял, в нашем случае параметр даты рождения не изменен, имя и фамилия по сути разрешено менять, отчасти верный метод, а вот вес меняется периодически и данный способ не подходит, лучше вынести его в конфиг или сделать не final, чтобы можно было поменять в процессе работы приложения или запросить это значение при запуске.  | 
                |||||
| 3 | Singleton - Config - Git init | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы про инициализируем git репозиторий  для проекта, который мы создали на прошлом уроке. Систему git мы будем использовать для контроля версий наших исходников, коммититить рабочие варианты решения одной и той же задачи, да и просто дополнительная практика использования git в разработке. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Полезное действие, в будущем очень интересно пройтись по истории изменений кода, бывает что замечаешь то, на что ранее не обратил внимание и приходят новые идеи, так же git помогает не делать банальных ошибок в коде, от чего код становится чище.  | 
                |||||
| 4 | Singleton - Config - Static | 
                     | 
                |||
| 
                        На этом уроке мы продемонстрируем, как  обращаться к константам из отдельного класса. Для этого мы создадим новый класс Process(), добавим в него метод demo(), в котором реализуем вывод данных из констант класса Program(). Константы необходимо будет сделать статичными. Так же мы порефакторим имена констант, чтобы они были по стандарту ЗАГЛАВНЫМИ буквами. Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Я ещё вначале урока сделал имена заглавными, а потом позже и на видео решили это сделать =) намного веселее прошлого варианта, так как доступ к настройкам из любой части кода программы, но идём дальше, изучаем варианты и выбираем лучшее.  | 
                |||||
| 5 | Singleton - Config - Git add | 
                     | 
                |||
| 
                        На этом уроке мы зафиксируем очередные изменения нашей программы с помощью команды commit в git репозитории. Для начала мы посмотрим, что изменилось с последнего коммита. Добавим изменённый и новый файлы на сцену и закоммитим их в историю репозитория для фиксации очередной рабочей версии нашей программы. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Всё ок, идём дальше.  | 
                |||||
| 6 | Singleton - Config - Class | 
                     | 
                |||
| 
                        На этом уроке мы выделим всё, что касается  конфигурации в отдельный класс. Для этого мы создадим новый класс Config() и перенесём туда наши константы. Так же нам нужно будет исправить появившиеся ошибки, указав новое расположение констант. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Вот, уже ближе к теме, мне тоже такой вариант больше нравится, идём дальше.  | 
                |||||
| 7 | Singleton - Config - Git commit | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы заново попрактикуемся в работе с git. Вначале мы попробуем закоммитить изменения, но увидим, что новый файл не попал в коммит. Так как он не отслеживался системой git, его необходимо вначале добавить на сцену и только потом закоммитить. В дальнейшем система git будет отслеживать изменения данного файла автоматически. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Так как коммит, который надо откатить последний по счёту, то для отказа хорошо подходит команда git reset. Если в процессе разработки оказалось так, что несколько коммитов назад добавили не совсем полезный коммит, то откат делать надо при помощи команды git revert, но это уже другая история со своими камушками =)  | 
                |||||
| 8 | Singleton - Config - FileReader | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы с вами доработаем класс Config(),  чтобы параметры хранились и загружались из файла. Для этого создадим файл конфигурации, перенесём в него настройки программы и в классе Config() добавим метод считывания из нашего конфигурационного файла. Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Реaлизoвaл ceкцию finally{} в методe load() класcа Config(). Отличный урок, уже лучше, но ещё не идеально, идём дальше.  | 
                |||||
| 9 | Singleton - Config - Git default | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы закоммитим все наши изменения. Для начала мы создадим копию конфигурационного файла с именем config.default.txt. Это необходимо делать, чтобы небыло конфликтов из-за того, что у каждого разработчика будет своя версия config.txt для корректной работы приложения. Так же изменим значения файла config.default.txt на значения для примера, чтобы каждый смог изменить их под себя. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Получилось аж 3 коммита отдельных: 1 - добавил конфиг в гитигнор. 2 - добавил конфиг по умолчанию. 3 - добавил поддержку загрузки настроек из конфига. см. скриншоты.  | 
                |||||
| 10 | Singleton - Config - Static field | 
                     | 
                |||
| 
                        На этом уроке мы поэкспериментируем с оптимизацией  загрузки конфигурационного файла. Остановимся на варианте глобальной версии с передачей в другие классы в качестве параметра. Так же закоммитим наши изменения в git репозиторий. Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Отличный урок! Реализация намного лучше, чем в прошлом уроке. Руки чесались так же сделать, но решил не бежать впереди паровоза, выполняя пошагово каждый урок, внося незначительные изменения если очень надо =)  | 
                |||||
| 11 | Singleton - Config - Static class | 
                     | 
                |||
| 
                        На этом уроке мы продолжим оптимизации, сделав всё в классе Config() статичным. Так же оптимизируем классы Program() и Process() для использования статичной версии класса Config(). После чего добавим загрузку конфига в классе Program(). Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Вот вот уже красивее класс конфига выглядит, статичненько и практичненько, по поводу наследования класса конфига, не могу представить кто его может унаследовать и зачем. Но идём дальше, делаем из статики - синглтонику =)  | 
                |||||
| 12 | Singleton - Config - Using pattern | 
                     1 тест  | 
                |||
| 
                        Мы рассмотрели множество рабочих вариантов  реализации, но на деле их эффективность зависела от конкретной реализации и при определённых условиях требовалась доработка. На этом уроке мы наконец реализуем шаблон проектирования: Синглтон (Singleton). Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Шаблону Синглтон Сложности: найти время Комментарии: Очень часто подобные вещи делал в коде программ/игр, чтобы выделялась память именно тогда, когда это нужно, оказалось, что есть идеальный шаблон для этого, спасибо за уроки, высший пилотаж!  | 
                |||||
| 13 | Singleton - Config - Cant extend | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы вынесем из класса Config() код синглтона в класс Singleton() и попробуем унаследовать его. Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Перепробовал кучу вариантов возможности данного этюда, но суть в том, что даже если ухитриться и реализовать в итоге, то ломается сама суть синглтона, а не получается унаследовать, потому что конструктор приватный.  | 
                |||||
| 14 | Singleton - Config - Super child | 
                     | 
                |||
| 
                        На этом уроке мы всё же разделим класс Config() на две логические части. Для этого мы выделим логику Синглона в отдельный класс ConfigSingleton(). Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Использованию Синглтон шаблона для уникальности экземпляра класса. Сложности: найти время Комментарии: Очень интересный мини курс получился, отличный вариант реализации в данном уроке, получилась эдакая алтернатива для вызова класса Config() через Синглтон, тем самым уверенно зная, что данный класс будет задействован всего 1 раз и больше экземпляров создано не будет. Естественно никто не мешает использовать и на прямую без Синглтона, но это скорее особенность данной реализации =) которую зная, можно не использовать вовсе.  | 
                |||||
| 15 | Singleton - Timer - Pattern Design | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы начинаем создание класса Секундомер() для засекания времени работы различных участков программы. Для разработки этого класса мы воспользуемся шаблоном проектирования Синглтон. Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: После инициализации репозитория git, не мог не добавить несколько начальных коммитов, где добавил базовые файлы, которые как мантра должны быть в репозитории, единственное только README.md не добавил, но это уже мелочи =) Отличный урок как в прочем и всегда, спасибо Игромистру.  | 
                |||||
| 16 | Singleton - Timer - Start / Click | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы продолжим создание класса  Timer() при помощи шаблона синглтон. Для начала мы добавим метод start() в класс Timer() для запуска секундомера. Так же мы добавим метод click(), чтобы увидеть сколько времени прошло. Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Я думаю не стоит делать рестарт в методе, который предназначен для отображения пройденного времени, ведь для этого есть метод старт, он уже фиксирует текущее время и при повторном вызове будет обновлять его тем самым делая аналогию рестарта, поэтому я сделал по своему эти два метода, не смог реализовать так же как и в видео по идейным соображениям. Но урок всё равно отличный, спасибо, идём дальше.  | 
                |||||
| 17 | Singleton - Timer - Program | 
                     | 
                |||
| 
                        На этом уроке мы наконец добавим основной  класс для нашей программы: Program() и добавим в метод Program.main() необходимый код для демонстрации работы синглтона Timer(). Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Как видно из скриншотов, при выводе текста в консоль тратится доп. время. Сам же метод Math.cbrt() намного быстрее работает. Данный синглтон можно использовать для дэбага работы отдельных участков кода программы, дабы изучив статистику понимать, где требуется оптимизация в первую очередь =)  | 
                |||||
| 18 | Singleton - Timer - String vs Buffer Speed | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы сравним скорость работы  между String и StringBuffer. Для этого мы создадим новый класс StringSpeed() с методами runString() и runStringBuffer(). Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Я не мог не добавить для тестирования ещё и StringBuilder, так как знаю, что он быстрее StringBuffer, что явно видно на скриншоте, так как он лучше подходит для однопоточных программ. Как я и говорил на прошлом уроке, отлично подходит для тестироваться отдельных участков кода, если это игрушка, то можно выводить дебаг информацию по скорость работы к примеру: отрисовки кадра, отрисовки теней, наложение эффектов, отрисовке частиц и т.д. В целом результату сравнения не удивлён, знал что именно так и будет изначально, так как ранее это всё было уже протестировано =)  | 
                |||||
| 19 | Singleton - Timer - Experiment | 
                     | 
                |||
| 
                        На этом уроке мы изучим класс Timer()  и выделим часть кода для нового синглтона. Для этого нам понадобиться новый класс Log() который будет реализован как синглтон и заниматься логированием в консоль. Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Отличный урок, можно добавить так же синглтоны для вывода текста в файл, передача по сети, отправка на мыло, так же по формату, в котором будет выводиться информация (json, xml, plain, html...)  | 
                |||||
| 20 | Singleton - Timer - Log class | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы разделим наш синглтон Timer()  на две части: Timer() и SingleTimer(). Тот же эксперимент проведём и с классом Log(). После чего будет ясно, что лучше так не делать и вернём код в состояние на момента начала урока. Отчёт отправил: 10558. Иван Воронин Выполнено за 25 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Данный метод использовать можно, но только там, где есть реальная необходимость в этом, если в случае с Timer() это ещё как то выглядит красиво, то в случае с Log() смысла нет изза того, что всего лишь один метод остаётся в классе после данных изменений. Дублирующий код "синглтон" тоже напрашивается на спаривание =)  | 
                |||||
| 21 | ФИНАЛЬНЫЙ УРОК | 
                    без видео 7 тестов  | 
                |||
| 
                        Поздpaвляю! Твoя зaдaча - прoверить cебя и пpойти тест, см. вкладку "Тест". Напиши отзыв или видеообзор по этому видеокурсу. Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Отличный шаблон проектирования. Много где можно использовать, уже активно им пользуюсь там где есть в этом необходимость =)  | 
                |||||
| 22 | VIP - Singleton - Timer - Enum | 
                     1 тест  | 
                |||
| 
                        На этом уроке мы реализуем синглтон  с использованием перечислений. Для этого мы переделаем Log() из класса (class) в перечисление (enum). Тоже самое мы проделаем и с классом Timer() Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Enum синглтону Сложности: найти время Комментарии: Отличный урок, замечательная альтернатива реализации синглтона, по тестам enum быстрее варианта с классом где-то на 30-35% в нашем случае идеально подходит, думаю логично использовать этот вариант пока не упрёшься в ограничения enum, тогда уже можно и на основе класса.  | 
                |||||
| Итого: 22 видеоурока | 
                    2 час. 24 мин. 18 тестов  | 
                13 чел. | |||
| Финалисты: Иван Воронин, Сергей Соколов, Станислав, Povilas Abramovicius, Sergej Šugajev, Александр, Новопашин Владимир, Tekashnik, Andrei, Dmitry Sinitsin, Yefim, Anatoli, Tom . | |||||