• Советуют разработчики: подборка популярных книг о программировании, языках, алгоритмах

      В сегодняшнем материале мы собрали одни из наиболее популярных книг, отобранных самими разработчиками — резидентами Reddit, Quora, Stack Exchange, Stack Overflow и Hacker News.

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

      Читать дальше →
    • Разбираемся с SOLID: Инверсия зависимостей

        Давайте глянем на определение принципа инверсии зависимостей из википедии:


        Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

        Формулировка:

        A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
        B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

        Читать дальше →
      • Математика для искусственных нейронных сетей для новичков, часть 1 — линейная регрессия

        Оглавление

        Часть 1 — линейная регрессия
        Часть 2 — градиентный спуск
        Часть 3 — градиентный спуск продолжение

        Введение


        Этим постом я начну цикл «Нейронные сети для новичков». Он посвящен искусственным нейронным сетям (внезапно). Целью цикла является объяснение данной математической модели. Часто после прочтения подобных статей у меня оставалось чувство недосказанности, недопонимания — НС по-прежнему оставались «черным ящиком» — в общих чертах известно, как они устроены, известно, что делают, известны входные и выходные данные. Но тем не менее полное, всестороннее понимание отсутствует. А современные библиотеки с очень приятными и удобными абстракциями только усиливают ощущение «черного ящика». Не могу сказать, что это однозначно плохо, но и разобраться в используемых инструментах тоже никогда не поздно. Поэтому моей первичной целью является подробное объяснение устройства нейронных сетей так, чтобы абсолютно ни у кого не осталось вопросов об их устройстве; так, чтобы НС не казались волшебством. Так как это не математический трактат, я ограничусь описанием нескольких методов простым языком (но не исключая формул, конечно же), предоставляя поясняющие иллюстрации и примеры.

        Цикл рассчитан на базовый ВУЗовский математический уровень читающего. Код будет написан на Python3.5 с numpy 1.11. Список остальных вспомогательных библиотек будет в конце каждого поста. Абсолютно все будет написано с нуля. В качестве подопытного выбрана база MNIST — это черно-белые, центрированные изображения рукописных цифр размером 28*28 пикселей. По-умолчанию, 60000 изображений отмечены для обучения, а 10000 для тестирования. В примерах я не буду изменять распределения по-умолчанию.
        Читать дальше →
      • Перевод С++ проекта на разработку с юнит-тестированием/TDD

        Полгода назад на моем проекте было примерно около 0% покрытие кода юнит-тестами. Простых классов было достаточно мало, создавать для них юнит-тесты было легко, но это было относительно бесполезно, так как на самом деле важные алгоритмы находились в сложных классах. А сложные, с точки зрения поведения, классы было трудно юнит-тестировать так как такие классы были завязаны на другие сложные классы и классы конфигурации. Создать объект сложного класса и тем более его протестировать юнит-тестами было невозможно.


        Некоторое время назад я прочёл "Writing Testable Code" в Google Testing Blog .


        Ключевая идея в статье заключается в том, что C++ код, пригодный для юнит-тестирования, пишется совсем не так, как привычный C++ код.

        Читать дальше →
      • 8 лекций, которые помогут разобраться в машинном обучении и нейросетях




          Мы собрали интересные лекции, которые помогут понять, как работает машинное обучение, какие задачи решает и что нам в ближайшем будущем ждать от машин, умеющих учиться. Первая лекция рассчитана скорее на тех, кто вообще не понимает, как работает machine learning, в остальных много интересных кейсов.
          Читать дальше →
          • +43
          • 79.2k
          • 5
        • Сколько пыльцы в воздухе и какая пыльца вызывает аллергию

            Аллергосезон 2016 открыт: в середине марта полетела первая пыльца. Аллергия вообще и аллергия на пыльцу в частности — тема широкая, и о ней будет несколько публикаций в блоге компании Тион.



            Для начала предлагаем бросить два «пристрелочных» взгляда на пыльцу: количественный и качественный. Количественный взгляд: сколько пыльцы в воздухе, которым мы дышим, и на какие сервисы пыльцевого мониторинга стоит обратить внимание. Качественный взгляд: какими признаками должна обладать аллергенная пыльца и как она выглядит под электронным микроскопом.
            Читать дальше →
          • От STUPID кода к SOLID коду

            • Translation
            На прошлой неделе я выступил с докладом об Объектно-ориентированном программировании в Мишлене, в компании, где я работаю. Я рассказывал о написании более эффективного кода, от STUPID коду SOLID коду! STUPID, а также SOLID являются акронимами, и рассматривались довольно много в течение длительного времени. Однако эти мнемоники не всегда известны, таким образом, имеет смысл распространить эту информацию.

            image

            Далее я познакомлю вас с принципами STUPID и SOLID. Следует иметь в виду, что это принципы, а не законы. Однако, рассматривая их в качестве законов было бы хорошо для тех, кто хочет усовершенствоваться в написании кода.
            Читать дальше →
            • –2
            • 58k
            • 8
          • Масштабирование наоборот: БЭМ-методология Яндекса на небольших проектах

              В разработке интерфейсов отдельные фреймворки уже не так важны: когда инструменты доступны, наша задача сводится к выбору нужных. Чтобы сделать правильный выбор, следует начать с общего подхода, с методологии. Большинство методологий, однако, разработаны крупными компаниями. Применимы ли они в маленьких проектах или для успешного использования их нужно переизобретать заново?

              Скорее всего, вы уже знаете об одной из таких методологий, разработанной Яндексом, — БЭМ. БЭМ утверждает, что трёх сущностей (блоков, элементов и модификаторов) достаточно для написания HTML и CSS, задания структуры кода и компонентной структуры с последующим масштабированием проекта до самого высокого уровня.

              Я проработал в Яндексе достаточно долго и видел, как эта методология работает на больших проектах. В Яндексе БЭМ используют для разработки CSS- и JavaScript-компонент, с помощью этой методологии также пишут шаблоны и задают зависимости между компонентами. Есть БЭМ-инструменты, поощряются различные эксперименты с кодом, исследования. В масштабах большой компании эти трудозатраты окупаются и дают Яндексу возможность быстро и качественно разрабатывать сотни сервисов одновременно.

              Могут ли маленькие команды получить от БЭМ то же самое? Я совершенно не был в этом уверен. Всё же БЭМ — абстракция, которая поставляется вместе с инструментами и технологиями. Для маленькой компании польза от переключения на «полный стек» этих технологий — сомнительна, многие из инструментов изначально приспособлены под крупные и сложные задачи. Быть может, тогда полезной окажется сама идея, сама методология?

              Изначально эта моя статья была опубликована в известном многим журнале Smashing Magazine. Но я решил, что и на Хабре она может быть интересна, ведь многие здесь занимаются собственными небольшими проектами.

              Читать дальше →
            • Bootstrap 4 вышел в alpha версии

                image

                Те кто так или иначе связан с веб разработкой скорее всего знает что такое Bootstrap.
                Лично я познакомился с фреймворком Bootstrap версии 2.x и он на меня произвел неизгладимое впечатление. Можно было без участия дизайнера получить вполне сносный интерфейс. Встроенный перфекционист ликовал. Можно ругаться, что интернет стал очень уж бутстраповым, но нужно отдать должное, парни, работающие над ним в целом молодцы и делают нужное, а то, что народ ленивый – проблема другая.

                Сегодня день рождения этого замечательного фреймворка. В свой день рождения был объявлен Bootstrap 4.


                Читать дальше →
              • Подборка полезных ссылок от команды дизайнеров e-Legion

                  image

                  Привет! Мы команда дизайнеров, которые проектируют и создают дизайн приложений для Android, iOS и Windows.

                  image

                  За 10 лет работы в e-Legion мы сделали проекты разной сложности: от интернет-магазина до мобильного банка. Идеи архитерктуры приложения / дизайна мы искали в разных источниках, что-то придумывали сами, искали интересные решения в интернете. И за время работы у нас накопилось достаточно полезных ссылок, которыми мы хотим поделиться.
                  Читать далее
                  • +8
                  • 21.8k
                  • 5
                • По стопам Meteor, или велосипедируем реактивность


                    Доброе время суток, хабраюзер! Сегодня мы попытаемся немного разобрать реактивность, которая лежит в основе одного из самых хипстерских фреймворков — Meteor.

                    Для начала приведем немного сухой теории из Википедии:
                    Реактивное программирование — парадигма программирования, ориентированная на потоки данных и распространение изменений. Это означает, что должна существовать возможность легко выражать статические и динамические потоки данных, а также то, что выполняемая модель должна автоматически распространять изменения сквозь поток данных.

                    К примеру, в императивном программировании присваивание a = b + c будет означать, что переменной a будет присвоен результат выполнения операции b + c, используя текущие (на момент вычисления) значения переменных. Позже значения переменных b и c могут быть изменены без какого-либо влияния на значение переменной a.

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

                    * велосипедируем — пишем свой велосипед, подглядывая на уже готовую реализацию.
                    Читать дальше →
                  • Битовые операции в PHP на примерах

                      Навеяно статьей об обработке критических ошибок в PHP. Обратил внимание, что несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, что в примерах статьи, что в комментариях, для проверки кодов ошибок используются обычные операторы сравнения.

                      Например, встречались такие варианты:
                      if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR){…}
                      или
                      if(in_array($error['type'], array(E_ERROR, E_PARSE,  E_COMPILE_ERROR)) {…}

                      В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.
                      Читать дальше →
                    • Как не угробить архитектуру сразу же? Видео с лекции Евгения Кривошеева

                        Всем привет!

                        Две недели назад в Москве прошла очередная встреча CodeFreeze. Нашим гостем стал Евгений Кривошеев, признанный российский эксперт в области архитектуры программных систем, консультант из Scrumtrek/Skilltrek. Евгений прочитал офигеннейшую лекцию по архитектуре, как он любит и умеет.



                        В рамках этой встречи Евгений предложил обсудить последовательность решений, критичных для архитектуры любой системы. Выстраданная последовательность действий такова:
                        • Точки зрения на систему, или Почему мы слепнем при проектировании
                        • Адресация ключевых рисков, или Гордыня убивает
                        • Учитываем контекст, или Как не долбиться в закрытую дверь

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



                          В поисках интересных стартапов на Кикстартере мы обратили внимание на довольно часто попадающиеся на глаза проекты создания портмоне и кардхолдеров, представленных в той или иной форме, с тем или иным функционалом. Более того, оказалось, что тема «идеального бумажника» стала даже объектом исследования — зачем люди вообще берутся за креатив в этой области? И, как выяснилось, в основе этих изысканий лежит очень простой факт — абсолютно все недовольны своим бумажником. А что и как можно улучшить — давайте посмотрим вместе со стартаперами.
                          Читать дальше →
                        • Несколько интересностей и полезностей для веб-разработчика #40

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

                            NativeScript




                            Открытый фреймворк для создания мобильных приложений под iOS, Android и Windows Phone основанный на NodeJS. И весь цимус в том, что это не очередная кроссплатформенная оболочка над WebView (аля PhoneGap), NativeScript со слов разработчиков обеспечивает на JavaScript такие же возможности, какие обеспечивают нативные Objective-C, Java или .NET.

                            Также хочу упомянуть о NW.js, который до появления IO.js назывался Node-Webkit. Проект по такому же принципу позволяет писать десктопные приложения под Windows, Mac и Linux с помощью веб-технологий. Более того микроконтроллеры, умные дома, интернет вещей, Oculus Rift, Nest выпускают API на JS. Вспоминая все эти новости, хочется сказать, что JavaScript все чаще и чаще представляется как унифицированное средство для кроссплатформенной разработки.
                            Читать дальше →
                            • +35
                            • 60.6k
                            • 9
                          • 3 лучших инструмента для описания RESTful API


                              Взаимодействие различных сервисов с использованием АPI, из новаторства превращается в обыденность. Количество бесплатных и платных API уже исчисляется тысячами, и с каждым днем их число активно растет. А почему бы и нет? Продажа удаленных запросов к своему новаторскому сервису может принести больше прибыли, чем распространение услуг через свою площадку. И пусть, в таком случае, уже ваши клиенты ломают голову и тратят деньги на привлечение аудитории. Используя свой опыт работы, я предлагаю краткий обзор лучших решений по реализации API на сегодняшний день.
                              Читать дальше →
                            • PC Buyer's Guide: охлаждение

                                Всем привет! В прошлом выпуске PC Buyer’s guide мы кратко рассмотрели современные материнские платы, чипсеты, сокеты, а также одним глазком взглянули на рынок современных процессоров. Подробнее о «пламенных моторах» поговорим в другой раз, а вот сегодня нас ждёт немного другая тема, которая напрямую связана как с личным комфортом пользователя ПК, так и со здоровьем «железного коня». Речь пойдёт о системах охлаждения для различных комплектующих.


                                Читать дальше →
                              • Pebble Time – новые умные часы от Pebble с цветным E-Paper дисплеем



                                  Сегодня Pebble анонсировала новую модель умных часов Pebble Time и одновременно запустила краудфандинг-кампанию на Kickstarter для сбора денег на первую партию. Поддержавшие компанию смогут получить часы за $159.

                                  На сбор необходимых $500,000 у компании ушло меньше 30 минут – это абсолютный рекорд для Kickstarter.

                                  Основная особенность новинки — постоянно работающий цветной дисплей. Корпус Pebble Time выполнен из алюминия, а дисплей защищен стеклом Gorilla Glass. Несмотря на 20% более тонкий корпус по сравнению с оригинальным Pebble время автономной работы осталось прежним — 5-7 дней.
                                  Читать дальше →
                                • Танки на ZX Spectrum

                                    Тема WOT сейчас очень популярна. Каюсь, сам грешен…

                                    Давным давно, в 1984-м году, когда большинства современных танкистов еще не было даже в проекте, на ZX Spectrum вышла игра Tank Duel 3D!

                                    Вид от первого лица, трехмерная графика, несколько видов танков! Мультиплеера, конечно, не было, но у нас тогда был только магнитофон. Особенностью физики игры является то, что снаряды летят медленно. Это дает возможность уворачиваться от них, как Нео (нажимаем назад и влево/вправо).

                                    Совсем немного подробностей
                                  • Подборка интересных CSS-рецептов «Голые пятницы #4»

                                    • Tutorial
                                    голые пятницы

                                    Здравствуй, дорогой читатель хабра!
                                    Сегодня мы поговорим о «липких» блоках, новом свойстве для изображений object-fit, продвинутом использовании CSS-счетчиков, ключевом слове currentColor, и о том, есть ли анимация в z-index.
                                    Читать дальше →