Как стать автором
Обновить
7
0
Юрий Орлов @e_Hector

software engineer

Отправить сообщение

Теория типов

Уровень сложностиСредний
Время на прочтение43 мин
Количество просмотров29K

Мы так привыкли к типам, что редко задаёмся вопросом, что же они такое на самом деле? А главное - почему возникла необходимость в их использовании? Этот поверхностный обзор сделан для того, чтобы продемонстрировать, как типы и другие связанные абстракции являются следствием из обобщения условий различных задач.

Что можно узнать из этой статьи?
Всего голосов 75: ↑75 и ↓0+75
Комментарии70

Как фронтендеру стать мобильным разработчиком, или Перевод API React в Jetpack Compose

Время на прочтение11 мин
Количество просмотров3.8K

Привет, я Данильян, работаю в Самокате фронтенд-разработчиком, разрабатываю бэкофисное приложение с использованием React. Когда я только начинал изучать Jetpack Сompose, я наткнулся на статью, в которой простым языком для людей, пришедших из мира веб-технологий в мир мобильной разработки, расписано, как писать код для мобильных устройств, чтобы было как в React. Из материала в статье особенно подкупали примеры: вот, что вы делали в React, а вот, как в Jetpack Compose получить то же самое. 

Делюсь с вами переводом этой статьи.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии2

Как подружить React и D3

Время на прочтение8 мин
Количество просмотров24K

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


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


Однако, интеграция D3 в web-приложение, построенное на React, на практике оказывается не самой простой задачей.


Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии2

Используйте Stream API проще (или не используйте вообще)

Время на прочтение7 мин
Количество просмотров179K

С появлением Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода. Однако оказалось, что многие даже с использованием Stream API пишут длиннее, чем надо. Причём это не только делает код длиннее и усложняет его понимание, но иногда приводит к существенному провалу производительности. Не всегда понятно, почему люди так пишут. Возможно, они прочитали только небольшой кусок документации, а про другие возможности не слышали. Или вообще документацию не читали, просто видели где-то пример и решили сделать похоже. Иногда это напоминает анекдот про «задача сведена к предыдущей».


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

Читать дальше →
Всего голосов 71: ↑71 и ↓0+71
Комментарии50

Как писать кривые запросы с неоптимальным планом и заставить задуматься СУБД

Время на прочтение8 мин
Количество просмотров18K
Всё просто. Тут можно найти «Основы разбора запросов для чайников» в случае PostgreSQL и замечательные невыдуманные примеры из продакшена о том, как не надо писать запросы на PostgreSQL и MySQL и что бывает, если их так всё-таки писать.

Ознакомиться с подробностями
Всего голосов 30: ↑26 и ↓4+22
Комментарии24

Глубокое обучение для новичков: распознаем изображения с помощью сверточных сетей

Время на прочтение27 мин
Количество просмотров100K

Введение


Представляем вторую статью в серии, задуманной, чтобы помочь быстро разобраться в технологии глубокого обучения; мы будем двигаться от базовых принципов к нетривиальным особенностям с целью получить достойную производительность на двух наборах данных: MNIST (классификация рукописных цифр) и CIFAR-10 (классификация небольших изображений по десяти классам: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик).


Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии19

Глубокое обучение для новичков: распознаем рукописные цифры

Время на прочтение11 мин
Количество просмотров103K

Представляем первую статью в серии, задуманной, чтобы помочь быстро разобраться в технологии глубокого обучения; мы будем двигаться от базовых принципов к нетривиальным особенностям с целью получить достойную производительность на двух наборах данных: MNIST (классификация рукописных цифр) и CIFAR-10 (классификация небольших изображений по десяти классам: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик).



Читать дальше →
Всего голосов 39: ↑35 и ↓4+31
Комментарии5

«Правда, чистая правда и статистика» или «15 распределений вероятности на все случаи жизни»

Время на прочтение15 мин
Количество просмотров243K
Статистика приходит к нам на помощь при решении многих задач, например: когда нет возможности построить детерминированную модель, когда слишком много факторов или когда нам необходимо оценить правдоподобие построенной модели с учётом имеющихся данных. Отношение к статистике неоднозначное. Есть мнение, что существует три вида лжи: ложь, наглая ложь и статистика. С другой стороны, многие «пользователи» статистики слишком ей верят, не понимая до конца, как она работает: применяя, например, тест Стьюдента к любым данным без проверки их нормальности. Такая небрежность способна порождать серьёзные ошибки и превращать «поклонников» теста Стьюдента в ненавистников статистики. Попробуем поставить точки над i и разобраться, какие модели случайных величин должны использоваться для описания тех или иных явлений и какая между ними существует генетическая связь.
Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии29

Полное практическое руководство по Docker: с нуля до кластера на AWS

Время на прочтение39 мин
Количество просмотров1.6M



Содержание



Вопросы и ответы


Что такое Докер?


Определение Докера в Википедии звучит так:


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



Ого! Как много информации.

Читать дальше →
Всего голосов 125: ↑124 и ↓1+123
Комментарии44

PostCSS. Будущее после Sass и Less

Время на прочтение11 мин
Количество просмотров49K

Андрей Ситник (Iskin, Злые марсиане)


Андрей Ситник

В 2013 году Holowaychuk анонсировал свой проект Rework в статье «Модульный CSS-препроцессинг с Реворком» (http://tjholowaychuk.tumblr.com/post/44267035203/modular-css-preprocessing-with-rework ).

Как раз тогда я искал какой-то инструмент для того, чтобы сделать автопрефиксер. Когда я прочитал эту статью, я был поражен, потому что это был действительно революционный подход, он менял все. И поэтому первые версии автопрефиксера базировались на Rework’е. Но, к сожалению, Rework – это был Proof Of Concept, это было первое поколение, чтобы доказать, что это вообще работает. Поэтому мы его жестко форкнули, переманили всех разработчиков, устроили маленькую революцию и сделали PostCSS.

PostCSS – это второе поколение модульного процессора.
Всего голосов 41: ↑40 и ↓1+39
Комментарии65

Долг знаний

Время на прочтение3 мин
Количество просмотров33K

Если вы — программист, то вам приходится учиться очень много. Вспомните свой первый "Hello, World!". У меня это было в четвертом классе. Мы изучали С++, и наш учитель написал программу от руки на доске. Мы использовали Turbo C++, копировали ее на дискету, чтобы экспериментировать дома.


img


В том время я не думал, что Turbo C++ это редактор. Я не думал о нем как об IDE. Для меня Turbo C++ был языком C++. Это был единственный известный мне способ программировать. Я не знал, что значит "компиляция", не знал, зачем нужен #include  в начале файла. Я не понимал, что делает main и что printf может принимать любое количество аргументов. Я просто скопировал программу с доски, нажал Run и увидел вывод на экране.


Это круто. Так и нужно учить программированию. Нужно делать что-то до того когда еще не понимаешь, как это работает. Некоторое время нужно умышленно быть в неведении о деталях. Детали отвлекают.

Читать дальше →
Всего голосов 107: ↑84 и ↓23+61
Комментарии58

Опасный target="_blank"

Время на прочтение2 мин
Количество просмотров200K
Большинство создают внешние ссылки через target="_blank" и не знают одного интересного нюанса — страница, на которую мы попадем таким образом, получит частичный контроль над ссылающейся на нее страницей через js свойство window.opener.

Через window.opener.location мы сможем сделать редирект на, к примеру, фишинговую страницу. Это своего рода tabnabbing, только более продвинутый. Так как жертва меньше всего ожидает подмены страницы, в открытой ранее, доверенной вкладке браузера.
Читать дальше →
Всего голосов 132: ↑126 и ↓6+120
Комментарии136

N+5 полезных книг

Время на прочтение5 мин
Количество просмотров58K


Привет! Это пятый с 2010 года список полезных книг. Набралась всего дюжина за два года. Смотрите, что можно скачать в дорогу или просто почитать, когда будет время, и делитесь, пожалуйста, в комментариях своими (я буду поднимать их в пост). В этой подборке довольно много социнжиниринга, точнее, тем около него. Поехали.

Конструкции, или почему не ломаются вещи, Дж. Гордон
Прекрасная, хоть и очень длинная штука, которая рассказывает про сопромат простыми словами и почти для детей. Но на уровне жёсткого хардкора. По своей полезности для осознания физики вокруг может сравниться с не менее прекрасной современной «Квантовая вселенная. Как устроено то, что мы не можем увидеть» Брайана Кокса и Джеффа Форшоу. Рекомендую обе. Будет, что почитать в дороге, если вдруг почувствуете, что играть на планшете надоело. И о чём подумать, когда выяснится, что вся та фигня, которую вам давали на уроках химии, физики и прочего в школе и университете вдруг начинает выстраиваться в стройную теорию.

Evil by Design, Крис Ноддер
Один из лучших подходов к проектированию чего-то хорошего — это спроектировать сначала самое ужасное из возможного. Пользователь обычно не скажет, как сделать ему хорошо, но точно знает, как бывает плохо. Например, юзер не говорит «я хочу, когда нажимаю на ссылку напоминания пароля, там в поле уже была введена почта», зато вполне способен сказать: «слушай, меня дико бесит, когда логинишься, тебе показывают новую страницу про то, что пароль не подошёл, и, чтобы его восстановить, надо ещё один долбанный раз вводить почту». Вся книга Криса состоит из таких «тёмных» шаблонов, когда какие-то гады намеренно вводят вас в заблуждение. Он там очень переживает за этику, поэтому вступления лучше пропустить. Единственная в этом обзоре книга на английском, но довольно простом.
Читать дальше →
Всего голосов 66: ↑64 и ↓2+62
Комментарии34

Теория и практика парсинга исходников с помощью ANTLR и Roslyn

Время на прочтение23 мин
Количество просмотров40K

В нашем проекте PT Application Inspector реализовано несколько подходов к анализу исходного кода на различных языках программирования:


  • поиск по сигнатурам;
  • исследование свойств математических моделей, полученных в результате статической абстрактной интерпретации кода;
  • динамический анализ развернутого приложения и верификация на нем результатов статического анализа.

Наш цикл статей посвящен структуре и принципам работы модуля сигнатурного поиска (PM, pattern matching). Преимущества такого анализатора — скорость работы, простота описания шаблонов и масштабируемость на другие языки. Среди недостатков можно выделить то, что модуль не в состоянии анализировать сложные уязвимости, требующие построения высокоуровневых моделей выполнения кода.



К разрабатываемому модулю были, в числе прочих, сформулированы следующие требования:


  • поддержка нескольких языков программирования и простое добавление новых;
  • поддержка анализа кода, содержащего синтаксические и семантические ошибки;
  • возможность описания шаблонов на универсальном языке (DSL, domain specific language).

В нашем случае все шаблоны описывают какие-либо уязвимости или недостатки в исходном коде.


Весь процесс анализа кода может быть разбит на следующие этапы:


  1. парсинг в зависимое от языка представление (abstract syntax tree, AST);
  2. преобразование AST в независимый от языка унифицированный формат;
  3. непосредственное сопоставление с шаблонами, описанными на DSL.

Данная статья посвящена первому этапу, а именно: парсингу, сравнению функциональных возможностей и особенностей различных парсеров, применению теории на практике на примере грамматик Java, PHP, PLSQL, TSQL и даже C#. Остальные этапы будут рассмотрены в следующих публикациях.

Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии19

Moxy — реализация MVP под Android с щепоткой магии

Время на прочтение16 мин
Количество просмотров146K

Что такое MVP


MVP – это способ разделения ответственности в коде приложения. Model предоставляет данные для Presenter. View выполняет две функции: реагирует на команды от пользователя(или от элементов UI), передавая эти события в Presenter и изменяет gui по требованию Presenter. Presenter выступает как связующее звено между View и Model. Presenter получает события из View, обрабатывает их(используя или не используя Model), и командует View о том, как она должна себя изменить.

У такого подхода к разделению ответственности есть ряд плюсов:
  1. Сильно упрощается написание тестов к коду
  2. Легко менять какую-то часть, не ломая при этом другую
  3. Код разбивается на мелкие кусочки, за счёт чего он становится более понятным и читабельным

В то же время, конечно, есть и минусы:
  1. Кода становится больше
  2. К этому подходу нужно привыкать
  3. На данный момент не сильно распространённый(но известный) подход, поэтому приходится всем рассказывать о нём

Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии46

Лучший Pull Request

Время на прочтение8 мин
Количество просмотров49K
Относительно недавно мне посчастливилось присоединиться к команде разработки Bitbucket Server в Atlassian (до сентября он был известен как Stash). В какой-то момент мне стало любопытно, как этот продукт освещён на Хабре, и к моему удивлению, нашлось лишь несколько заметок о нём, подавляющее большинство которых на сегодняшний день уже устарело.

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

Позвольте начать с перевода статьи Тима Петтерсена «A better pull request» о том, как должен выглядеть pull request, чтобы наиболее эффективно решать возложенную на него задачу.
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии25

Android IDE Template Format

Время на прочтение10 мин
Количество просмотров18K

В процессе создания новых приложений очень часто приходится писать однотипный код и воспроизводить уже проверенные временем структуры классов. IDE (в частности Android Studio) облегчает во многом задачи, связанные с созданием новых компонентов для приложения. Список шаблонных Aсtivity растет с каждой новой версией SDK Tools. Но что если нужно создать свой собственный шаблон? Для одного файла это легко, но что делать, если нужно создать шаблон с созданием нескольких файлов? Зная возможности IDE, это вполне реализуемо, ведь Activity создается вместе с файлом разметки, да и фрагмент к ней добавить можно. Однако описание такой функциональности найдено не было, потому пришлось искать решение для данной возможности самостоятельно.

Под катом хочу рассказать вам о том, как эта возможность реализуется в Android Studio.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии5

Казахстан внедряет свой CA для прослушивания всего TLS-трафика

Время на прочтение2 мин
Количество просмотров105K
Государственный провайдер Казахтелеком, в связи с нововведениями закона Республики Казахстан «О связи», намерен с 1 января 2016 года прослушивать весь зашифрованный TLS-трафик, подменяя сертификаты сайтов национальным сертификатом безопасности, выпущенным Комитетом связи, информатизации и информации Министерства по инвестициям и развитию Республики Казахстан.
Чтобы пользователи не пугались сообщений о подмене сертификата, АО «Казахтелеком» намерен чуть позже в декабре выпустить подробную пошаговую инструкцию по добавлению его в ключницы в мобильные телефоны и планшеты на базе iOS и Android, персональные компьютеры и ноутбуки на базе Windows и MacOS, на сайте www.telecom.kz
Согласно Закону операторы связи обязаны осуществлять пропуск трафика с использованием протоколов, поддерживающих шифрование, с применением сертификата безопасности, за исключением трафика, шифрованного средствами криптографической защиты информации на территории Республики Казахстан.

Национальный сертификат безопасности обеспечит защиту казахстанских пользователей при использовании протоколов шифрованного доступа к зарубежным ресурсам сети Интернет.

По словам Управляющего директора по инновациям АО «Казахтелеком» Нурлана Мейрманова, пользователям сети Интернет необходимо установить национальный сертификат безопасности, который будет доступен через Интернет-ресурсы АО «Казахтелеком». «Пользователю необходимо зайти на сайт www.telecom.kz и установить на своих устройствах выхода в сеть Интернет данный сертификат, следуя пошаговой инструкции по установке» — подчеркнул Н. Мейрманов.
Читать дальше →
Всего голосов 68: ↑67 и ↓1+66
Комментарии174

Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

Время на прочтение39 мин
Количество просмотров167K
Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

Если вы хотите убедиться что базы данных пишут не только на C, найти проекты для работы с большими данными или нейронными сетями, пишите свой язык программирования для JVM и хотите посмотреть как это уже сделано или же просто хотите узнать какие новые возможности можно найти в Java мире open-source то это статья вам, думаю, может пригодится.

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.


Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


Читать дальше →
Всего голосов 51: ↑43 и ↓8+35
Комментарии49
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Черногория
Дата рождения
Зарегистрирован
Активность