• Заменяй и властвуй — подход SOLID для разработки повторно используемых компонентов в вебе

      При разработке любого, даже простого веб-приложения возникает необходимость повторного использования кода. В разных местах сайта рано или поздно обнаруживаются схожие участки разметки и логики, которые совсем не хочется дублировать. Однако, в решении этой задачи очень легко наступить на грабли и сделать все очень плохо.


      Эта статья во многом вдохновлена докладом Павла Силина на РИТ 2017, однако здесь много моего собственного опыта и размышлений. Примеры будут на React + TypeScript, однако подход не привязан к какой-либо технологии.


      Читать дальше →
    • Зачем нам UML? Или как сохранить себе нервы и время

      Многие программисты, столкнувшись со сложной задачей, пренебрегают этапом проектирования, ссылаясь на то, что проектирование — это потеря времени, и в данном случае оно будет мне только мешать.


      Зачастую это утверждение оказывается верным, если задача и правда небольшая и квалификации программиста достаточно для определения наиболее оптимального решения.

      Программисты, не использующие UML, делятся на несколько групп:

      • начну писать код, а в процессе пойму, что да как;
      • почитаю форумы, хабр, medium, stack overflow, книгу, записи на стенах, знаки свыше…;
      • поспрашиваю у коллег, может, кто-то знает, как решить подобную задачу;
      • начну рисовать квадратики и схематично покажу, какое видение задачи сформировалось у меня в сознании.
      Читать дальше →
    • UML, Классы и Отношения

        Существует много разработанных теорий, задокументированных технологий и парадигм программирования. Перед тем как углубиться с головой в их изучение было бы мудро изучить сам принцип взаимодействия программ и их структур. UML предлагаем вам разработанный стандарт что бы сделать это.

        подробности
      • Бесплатные практические курсы по основам программирования на JavaScript

          Привет, Хабр!

          Мы на Хекслете закончили полный цикл курсов по обучению PHP-программистов и переключились на стек JavaScript. Первые два курса новой программы уже доступны, и они бесплатные!

          Курс «Основы программирования» — это знакомство с миром разработки и языком JavaScript. Курс рассчитан на новичков без опыта в программировании, но будет полезен и многим практикующим программистам, потому что покрывает таки темы как рекурсивные и итеративные процессы, чистые функции и побочные эффекты, автоматические тесты и модульное тестирование.

          Читать дальше →
        • Расчет биномиальных коэффициентов на Си (С++) и Python

            При решении задач комбинаторики часто возникает необходимость в расчете биномиальные коэффициентов. Бином Ньютона, т.е. разложение image также использует биномиальные коэффициенты. Для их расчета можно использовать формулу, выражающую биномиальный коэффициент через факториалы: image или использовать рекуррентную формулу:image Из бинома Ньютона и рекуррентной формулы ясно, что биномиальные коэффициенты — целые числа. На данном примере хотелось показать, что даже при решении несложной задачи можно наступить на грабли.
            Читать дальше →
          • Как делать сайты в 2019 году

            • Translation
            • Tutorial

            Веб стремительно меняется, не отставай и ты!



            Я писал подобную статью в 2018 году, но веб меняется так быстро, что те гайдлайны уже безнадёжно устарели.


            Давайте-ка шаг за шагом разберём важнейшие принципы веб-дизайна в 2019 году.


            Обязательно дайте пользователю знать, что у сайта есть мобильное приложение


            Это важнейший принцип, и на то есть свои причины. Фокус-группы, на которые мы уже потратили кучу денег, показали что первое же, чего захочет пользователь попав на ваш сайт — установить мобильное приложение.


            Ну а кратчайший путь к этому — показать здоровенное модальное окно:



            В качестве необязательной опции можно добавить кнопку или ссылку, чтобы закрыть это окно, но принципиально важно, чтобы текст на ней был слабо различим и сформулирован так, как будто пользователю должно быть стыдно отказываться или он ещё захочет установить приложение в будущем.


            Совет: Если у вас нет мобильного приложения, не беда! Просто запихните весь сайт в  webview с отключенной безопасностью и пишите, что это мобильное приложение!

            Читать дальше →
          • Отношения классов — от UML к коду

            Введение

            Диаграмма классов UML позволяет обозначать отношения между классами и их экземплярами. Для чего они нужны? Они нужны, например, для моделирования прикладной области. Но как отношения отражаются в программном коде? Данное небольшое исследование пытается ответить на этот вопрос — показать эти отношения в коде.
            Читать дальше →
          • Ежедневные собрания в Agile разработке: 15 минут, без которых не видать релиза

              Большинство IT-компаний привыкли к ежедневным внутренним митингам, статусным собраниям или коротким stand up, которые призваны оптимизировать процессы и синхронизировать работу всех членов команды. Оптимально, если такие встречи не будут превышать 15-20 минут.

              image
              Читать дальше →
            • Пишем первое приложение для Android

              В любом деле самое сложное — это начало. Часто бывает тяжело войти в контекст, с чем столкнулся и я, решив разработать свое первое Android-приложение. Настоящая статья для тех, кто хочет начать, но не знает с чего.

              Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).

              Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.

              Читать дальше →
            • Выбираем доменную зону

                Более 24 лёт прошло с изобретения доменных имён (и 18 — с создания Всемирной паутины), а люди так до конца и не освоились в вопросе выбора доменного имени для сайта.

                До сих пор распространено нелепое суеверие, будто домены третьего уровня менее привлекательны, нежели домены второго уровня; более того, не так давно мне приходилось сталкиваться с утверждениями, будто домен в зоне .info неприличен — и почему? только лишь из-за низкой цены!

                Тем, кто ещё недостаточно уверенно чувствует себя в этом вопросе, а также некоторым из тех, кто чувствует себя вполне уверенно, я решил рассказать, какими же соображениями, на мой взгляд, следует руководствоваться при выборе доменной зоны.

                Читать дальше →
              • Дискретная математика для первокурсников: опыт преподавателя

                • Tutorial
                Сегодня у меня необычный текст, совершенно не связанный с машинным обучением (для новых читателей: этот текст – часть блога компании Surfingbird, в котором я в течение последнего года рассказывал о разных аппаратах машинного обучения в приложении к рекомендательным системам). В этом посте математической части практически не будет, а будет описание очень простой программки, которую я написал для своих студентов. Вряд ли кто-то узнает для себя из этого поста много содержательно нового, но мне кажется, что некоторую ценность представляет сама идея – многие люди просто не задумываются о том, что «и так можно». Итак…

                Читать дальше →
              • Код Прюфера

                Деревья. Кратко напомним


                Дерево – частный случай графа. Деревья широко применяются в программировании. Дерево – это связный граф без циклов. Дерево называется помеченным, если каждой вершине соответствует уникальная метка. Обычно это число.


                Читать дальше →
              • Иногда стартап должен быть медленным

                  Выкладываю перевод статьи про стартапы, которые оказались слишком… быстрыми и опередили свое время. С другой стороны, каждая идея принесла успех, но немного позже.

                  Предпринимателям, должно быть, ужасно горько смотреть, как другие зарабатывают миллиарды благодаря идее или продукту, которые были у них. Но такова жизнь.

                  Итак, перед вам несколько историй неуспеха, в каждой вы без труда заметите, во что это переросло.
                  Читать дальше →
                • Алгоритмы на графах — Часть 2: Сортировка сетей

                    Пролог

                    В продолжение опубликованной на выходных статьи.

                    Компиляторы — пожалуй одна из самых интересных тем системного программирования.
                    Эта статья не расскажет как написать идеальный, или, хотя бы, работающий компилятор, но она поможет прояснить пару аспектов его работы, при помощи метода топологической сортировки сети.
                    Читать дальше →
                  • Графы для самых маленьких: Ford & Bellman или как понять, что ты попал в бесконечно далекое прошлое

                      В предыдущих частях цикла мы рассмотрели алгоритмы DFS и BFS, позволяющие найти путь в графе и обладающие рядом других интересных свойств. Но в жизни очень часто оказывается, что гораздо проще выглядит модель задачи в виде графа с неодинаковыми длинами ребер. Поиском кратчайшего пути во взвешенном графе мы и займемся под катом.
                      Читать дальше →
                      • +24
                      • 56.2k
                      • 4
                    • Число Бейкона и Графы

                      Число Бейкона


                      Немного истории, Кевин Бейкон американский актёр сыгравший во множествах фильмам, в 1994 отметил что актёры, с которыми он снимался, работали со всеми голливудскими (и не только) актёрами. Общественность тут же отреагировала и создала игру “назвать имя актёра и связать его с Кевином Бейконом”. Корпорация добра даже встроила игру в свой поисковик, например Число Бейкона для актёра Джона Траволты равно 2 (Джон снимался с Оливией Ньютон-Джон в фильме Бриолин, она же, в свою очередь, сыграла с Кевином Бейконом в фильме “У нее будет ребенок”).

                      А теперь давайте поговорим о том, как эту игру можно представить, и как можно вычислить число Бейкона при помощи графа.
                      Читать дальше →
                    • Алгоритмы на графах — Часть 1: Поиск в глубину и проблема взаимоблокировок

                        Недавно на Хабре была статья, посвященная алгоритмам на графах. С позволения автора, мой первый хабратопик продолжит цикл.

                        Хотелось бы осветить вопросы применения некоторых алгоритмов, для решения задач программирования.
                        Достаточно жизненный пример, с которым сталкивался не один разработчик — это deadlock. По сути deadlock – это взаимоблокировка, в результате которой система, или какие-то отдельные процессы начинают конкурировать за один ресурс.
                        В жизни такие ситуации встречаются, например, когда два человека желают пропустить друг друга на входе, предположим, в аудиторию. Однако после 3-4 фраз «только после вас!», кто-нибудь всё же пройдет первым.
                        На уровне программного обеспечения всё сложнее, пока программы не способны думать, машинный аналог фразы «только после вас!» будет повторяться вплоть до перезагрузки.
                        Как исполняющая система может повлиять на этот процесс? Вот тут нам на помощь и приходят алгоритмы на графах.
                        Для начала определимся, что же будет элементами нашего графа, и как его составить.
                        Читать дальше →
                      • Поиск нечетких дубликатов. Алгоритм шинглов для веб-документов

                          Ранее я показал элементарную реализацию алгоритма шинглов, позволяющую определять, являются ли два документа почти дубликатами или нет. В этот раз я поясню реализацию алгоритма, описанную Зеленковым  Ю. Г. и Сегаловичем И.В. в публикации «Сравнительный анализ методов определения нечетких дубликатов для Web-документов».
                          Этим я начинаю серию из трех теоретических статей, в которых постараюсь доступным языком описать принцип алгоритмов шинглов, супершинглов и мегашинглов для сравнение веб-документов.
                          Читать дальше →
                        • Об информационном поиске, нахождении оптимальных путей просмотра результатов поиска и многом другом

                            Задача нахождения оптимальных путей просмотра результатов поиска является моей основной темой кандидаткой работы. Сегодня я хочу поделиться промежуточными результатами исследований, а также приложениями и SDK, которые были использованы в работе.

                            Решение о написании данной статьи было принято после просмотра семинара из цикла «Информационный поиск и анализ данных» на тему «Семантический анализ текстов с использованием Википедии», докладчиком которого был Максим Гринёв — доцент, старший преподаватель кафедры системного программирования, заведующий отделом ИСП РАН.

                            Вы можете посмотреть доклад, скачать доклад или посмотреть расписание других докладов.
                            Читать дальше →
                            • +12
                            • 2.7k
                            • 6
                          • Простое объяснение алгоритмов поиска пути и A*

                            • Translation
                            image

                            Часть 1. Общий алгоритм поиска


                            Введение


                            Поиск пути — это одна из тех тем, которые обычно представляют самые большие сложности для разработчиков игр. Особенно плохо люди понимают алгоритм A*, и многим кажется, что это какая-то непостижимая магия.

                            Цель данной статьи — объяснить поиск пути в целом и A* в частности очень понятным и доступным образом, положив таким образом конец распространённому заблуждению о том, что эта тема сложна. При правильном объяснении всё достаточно просто.

                            Учтите, что в статье мы будем рассматривать поиск пути для игр; в отличие от более академических статей, мы опустим такие алгоритмы поиска, как поиск в глубину (Depth-First) или поиск в ширину (Breadth-First). Вместо этого мы постараемся как можно быстрее дойти от нуля до A*.
                            Читать дальше →