Pull to refresh
282
0
Денис Потапов @PatapSmile

Обо всём и ни о чём

Send message

20_20 — год, в котором подчеркивание в числовых литералах победило

Reading time 3 min
Views 10K

Вдруг вы не знали, но в языке, на котором вы пишите, вы можете использовать _ в числах. Например, следующий код на PHP:


<?php

print(1_00);
print(100);

Выведет 100100 (проверить онлайн). Этот синтаксический сахар появился в Ada в 1980 году, и он имел переменный успех последние 40 лет. Но за последний год его добавили в javascript, PHP, Go, Scala и даже консервативный Erlang. Я не могу объяснить, что послужило всплеском популярности, поэтому в статье просто опишу историю разделителей в цифрах.

Читать дальше →
Total votes 50: ↑49 and ↓1 +48
Comments 36

readable — еще один линтер для PHP

Reading time 2 min
Views 3.5K

Хочу представить линтер для PHP readable. Сейчас в нем 16 правил, которые должны улучшить читабельность кода. К основным преимуществам можно отнести:


  • скорость — меньше секунды на 1000 файлов
  • настройка baseline — можно не исправлять все ошибки в проекте сразу, а создать конфигурацию с текущими ошибками. И игнорировать их, но реагировать на новые.
  • правила писать проще чем в аналогах (субъективно)


Важные два дисклаймера:


  1. Я основной контрибьютор, поэтому могу быть субъективным. Изначально, readable написан для бельгийской компании officient. Они уже некоторое время его используют у себя внутри, и решили сделать readable открытым проектом.
  2. Он написан на JS.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 15

Субпиксельный рендеринг произвольных векторных изображений (Haarmony LCD)

Reading time 2 min
Views 7.2K

Субпиксельный рендеринг (вики)— способ увеличить видимое разрешение LCD или OLED дисплея путем рендеринга пикселей с учетом свойств экрана. Используется тот факт, что каждый пиксель экрана фактически состоит из отдельных красных, зеленых и синих субпикселей.


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



Как выглядят исходные изображения


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


Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 12

Уместить звездное небо на WebGL в 1009 байт JavaScript

Reading time 3 min
Views 9.5K
Две вещи наполняют душу всегда новым и все более сильным удивлением и благоговением, чем чаще и продолжительнее мы размышляем о них, — это звездное небо надо мной и моральный закон во мне. Иммануил Кант

JS1k — ежегодное соревнование, где надо вместить демо, игру или все что угодно, в 1024 символа на JavaScript. В этом году мое демо заняло четвертое место (до третьего не хватило каких-то два балла). Посмотреть демо можно на сайте JS1k. У кого не открывается или не работает, выглядеть должно так:



Минифицированный и полный исходный код лежит на github. А под катом разбор того, как сейчас минифицируют JavaScript для таких конкурсов.

Total votes 51: ↑43 and ↓8 +35
Comments 23

PornHub как замена VK

Reading time 2 min
Views 91K


11 декабря PornHub опубликовал ежегодный отчет о своей работе в 2018. В 20 стран с наибольшим трафиком в этом году впервые вошла Украина. Занимая 16 место по трафику, украинские пользователи поднялись сразу на 11 позиций в сравнении с 2017 годом.


Неочевидной причиной столь резкого роста популярности PornHubʼа стал запрет вконтакте на территории Украины с мая 2017 года. Часть аудитории социальной сети, которая пользовалось вконтакте как PornHubʼом на протяжении последних полутора лет плавно мигрировала на PornHub.


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

Читать дальше →
Total votes 116: ↑92 and ↓24 +68
Comments 131

Сервис такси разыгрывает базу контактов клиентов и водителей

Reading time 4 min
Views 28K
Популярный украинский сервис такси Uklon регулярно устраивает розыгрыши среди своих водителей и клиентов. По результатам каждого розыгрыша они публикуют на свою facebook страницу видео с контактными данными участников: имя и адрес электронной почты (пример, видео удалили). Фрагмент кадра:


В оригинальном видео адреса не размыты, их для статьи размыл я, чтобы не распространять эти данные дальше. На мое письмо в их поддержку, что это не очень хорошая идея:
Добрый день!
Нельзя в видео (ссылка) выкладывать адреса и имена людей.
1. Во-первых, ваши конкуренты могут получить список ваших клиентов и водителей
2. Во-вторых, вы нарушаете закон Украины про доступ к персональным данным

Они ответили, что им все равно:
Здравствуйте, Денис, при регистрации каждый пользователь дает согласие на использование его персональных данных uklon.com.ua/document/useragreement — пункт 2.6. Большое спасибо за ваш отзыв.

Поэтому я решил написать небольшой пост, как можно получить контактные данные с видео, не используя какие-то специальные умения. Дисклаймер: этот пост носит образовательный характер, и демонстрирует как не стоит обращаться с данными клиентов.
Читать дальше →
Total votes 64: ↑62 and ↓2 +60
Comments 40

Эрланг для веб-разработки (2) -> БД и деплой;

Reading time 10 min
Views 13K

В первой статье мы познакомились с Эрлангом и фреймворком n2o. В этой части мы продолжим делать наш блог:
  • добавим авторизацию через фейсбук, для этого будем из клиента вызывать функции на сервере;
  • будем сохранять комментарии и посты в NoSQL базе;
  • развернем наш блог на DigitalOcean и замерим производительность (спойлер — 1300 запросов в секунду).


Код из статей https://github.com/denys-potapov/n2o-blog-example, готовый проект можно посмотреть по адресу http://46.101.118.21:8001/.

Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Comments 13

Эрланг для веб-разработки (1) -> Знакомство;

Reading time 7 min
Views 29K

Продолжение о базе данных и деплое во второй статье.

Я начинаю публиковать серию статей о веб-разработке на Эрланге. Многие хотят попробовать Эрланг, но сталкиваются с проблемой, что вводные курсы в основном касаются Эрланга как функционального языка и далеки от реальных проектов (Learn You Some Erlang for great good! — хорошая и подробная книга). С другой стороны все обучающие материалы по веб-разработке подразумевают, что читатель уже хорошо знает Эрланг.

Эта серия статей рассчитана для разработчиков, у которых есть опыт в веб-разработке (PHP, Ruby, Java), но не имеют опыта разработки на Эрланге.

Задачей будет сделать блог. Код из статей https://github.com/denys-potapov/n2o-blog-example, готовый проект можно посмотреть по адресу http://46.101.118.21:8001/. Особенности проекта:
  • обновление комментариев в реальном времени;
  • авторизация через фейсбук;
  • данные храним в mnesia.

В основе проекта феймворк n2o. Выбор довольно субъективен, но из живых Эрланг фреймворков, n2o мне показался наиболее «эрлангоподобным», в тоже время ChicagoBoss больше похож на MVC фреймворки в других языках.
Читать дальше →
Total votes 32: ↑29 and ↓3 +26
Comments 121

Простыми словами о Twelve-Factor App

Reading time 5 min
Views 62K
Известный провайдер heroku поддерживает манифест, который называется «12-факторное приложение» (Twelve-Factor App). Это набор лучших практик для разработки современных веб приложений на любой платформе. Практики описывают приложения, которые готовы:
  • к горизонтальному масштабированию;
  • к непрерывному развертыванию;
  • к современным облачным хостингам.

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

Манифест (на хабре есть отличный перевод) слишком подробен и хорош для детального изучения. В этой же статье, я коротко остановлюсь на основных преимуществах.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Comments 1

Открытая бухгалтерия в Министерстве образования и науки Украины

Reading time 2 min
Views 30K
В 2009 Тим Бернерс-Ли в своем выступлении на TED говорил об открытых данных и будущем интернета. На 10 минуте он вместе с залом скандирует «Raw data, now!» (сырые данные, сейчас же). Рекомендую всем, кто этого еще не сделал, посмотреть это выступление.



21 февраля 2014 года студенты заняли здание Министерства образование и науки Украины с требованиями перемен. Вместе с политическими требованиями, они выдвинули требования открытой бухгалтерии. Уже 24 марта новый министр подписал указ №85-а о ежедневной публикации всех бухгалтерских проводок за день на сайте министерства. Само по себе открытие данных не должно было занять время, но оказалось, что в МОН фактически не было учетной системы, и, например, главная книга велась на бумаге.

Сегодня данные доступны на сайте министерства (UPD: спасибо за новую ссылку sad. Дамп можно скачать по ссылке), а под катом короткая инструкция как обрабатывать данные, кабель на миллион гривен (около 50 тыс. долларов), и почему пока открытая бухгалтерия не так эффективна.
Читать дальше →
Total votes 84: ↑66 and ↓18 +48
Comments 47

Стартапы вдохновленные сексом: плюсы, минусы, подводные камни

Reading time 4 min
Views 103K
Когда стартап сосредоточен на сексе, он встречает массу препятствий на пути от финансирования до рекламы. Вивьен Зянг рассказывает, как ориентированные на секс стартапы ищут пути чтобы оплатить счета без ущерба для своей миссии.

От переводчика: Статья рассказывает о трудностях со стартапами только для взрослых на западе, и надо помнить, что в постсоветских реалиях большинство из описанных стартапов попадают под действие статей 242 УК РФ (до шести лет) или 301 УК Украины (до семи лет).

Текст без картинок
Total votes 78: ↑54 and ↓24 +30
Comments 69

Дэвид Чэппел о облаках и будущем разработки

Reading time 7 min
Views 14K
На конференции DevDay*Kyiv 2014 мне удалось пообщаться с автором ключевого доклада Дэвидом Чэппелом. Дэвид — известный спикер, консультант и автор книг, многие из которых используются для обучения в MIT и ETH. В своей работе он стремится помочь людям в ИТ понимать, использовать и принимать решения о новых технологиях.

image

Дэвид — специалист в облачных технологиях в корпоративном секторе, и поэтому ответы интересны, как взгляд из корпоративного мира на современные технологии и их разработку:
  • Какая компания сейчас сможет выйти на рынок публичных облаков?
  • Будут ли компьютеры частью интернета вещей?
  • Как плавающие релизы связанны с маркетингом?

Вопросы и ответы
Total votes 19: ↑18 and ↓1 +17
Comments 3

Генерация xkcd паролей на PHP

Reading time 2 min
Views 22K
Известный комикс xkcd подсказывает нам, что пароль, который состоит из 4 часто употребляемых слов — легко запомнить и сложно подобрать.


Перевод, оригинал

Все текущие реализации этого метода генерации паролей рассчитаны на английские слова, а значит пароли сложнее запомнить русскоязычным. Я вооружился частотным словарем русского языка, и сделал PHP библиотеку, которая поддерживает генерацию паролей из нескольких наборов слов:
  • английские слова (например, «idea critic happy chinese»);
  • русские слова (например, «порошок земля нуль платье»);
  • транслитерированные русские слова (например, «vysota razum bumazhka razmer»).

Код и списки слов на GitHub.

Описание библиотеки
Total votes 53: ↑43 and ↓10 +33
Comments 53

Объектная гимнастика

Reading time 7 min
Views 36K
В первых двух абзацах оригинального текста автор описывает как он пил пиво с друзьями. Я заменил их пятничной картинкой о гимнастике из детства.

Объектная гимнастика (англ. Object Calisthenics) — это упражнения в программировании, которые состоят из 9 правил, которые Джефф Бей описал в своей книге «The ThoughWorks Anthology». Пытаясь как можно точней следовать этим правилам, вы измените свои привычки написания кода. Это не значит, что вы должны постоянно соблюдать все эти правила. Найдите баланс и используйте только те, которые вам удобны.

Эти правила сфокусированы на читаемости, тестируемости, понятности и поддерживаемости вашего кода. Если вы уже пишите код, который читаем, тестируем, понятен и поддерживаем, тогда эти правила помогут сделать его более читаемым, тестируемым. Понятным и поддерживаемым.

Ниже я прокомментирую этих 9 правил:
  1. Только один уровень отступа в методе
  2. Не используйте Else
  3. Оберните все примитивные типы и строки
  4. Коллекции первого класса
  5. Одна точка на строку
  6. Не используйте сокращения
  7. Сохраняйте сущности короткими
  8. Никаких классов с более чем 2 атрибутами
  9. Никаких геттеров, сеттеров и свойств

Читать дальше →
Total votes 53: ↑26 and ↓27 -1
Comments 23

Идеи для конкурса Nokia

Reading time 2 min
Views 11K
К выходу Lumia 1020 Nokia организовывала конкурс Future/Capture (о нем писали на хабре). На конкурс можно было подать три идеи приложений, которые в полной мере используют 41-мегапиксельную камеру. Я воспользовался этой возможностью, но не прошел отбор.

Мои идеи довольно сильно привязаны к большому разрешению фотографий, и я не вижу как их реализовать в таком виде. Обидно оставлять их пылиться, поэтому, я передаю три идеи приложений в общественное достояние (CC0), и буду рад если они кому нибудь пригодятся или натолкнут на какие-нибудь другие идеи.

1. Где Вальдо?


Интерактивное приложение с игровым процессом похожим на книги и игры "Где Вальдо".

Как работает?

  1. Вы делаете фотографию с большим количеством мелких деталей, например концерт, пляж или лес.
  2. Вы делаете квест из вашей фотографии — отмечаете маленькие зоны интереса (например вас, котят, небольшие предметы).
  3. Делитесь квестом с вашими друзьями.
  4. Задача ваших друзей найти точки, которые вы отметили. Это могут быть соревнования между друзьями, поиски на время или рейтинги.

3 котенка


Еще 2 идеи ...
Total votes 32: ↑21 and ↓11 +10
Comments 5

Притча о покрытии кода тестами

Reading time 2 min
Views 42K

Ранним утром программист спросил великого мастера:
— Я готов писать модульные тесты. К какому покрытию кода я должен стремиться?
Великий мастер ответил:
— Не переживай о покрытии, просто пиши хорошие тесты.
Программист улыбнулся, поклонился и ушел.

Немного времени спустя другой программист задала этот же вопрос. Великий мастер указал на котел с кипящей водой и сказал:
— Сколько зерен риса я должен положить в этот котел?
Программист с озадаченным видом ответила:
— Как я могу ответить наверняка? Все зависит от того, сколько людей вам надо накормить, насколько они голодны, какие еще блюда вы подаете, сколько риса у вас есть и от многого другого.
— Совершенно верно. — сказал великий мастер.
Второй программист улыбнулась, поклонилась и ушла.
В конце дня...
Total votes 143: ↑127 and ↓16 +111
Comments 65

Таблица для выбора диагонали экрана и разрешения

Reading time 2 min
Views 182K
Когда у вас возникнет вопрос, как выбрать диагональ экрана, или в каком разрешении скачать фильм, предлагаю воспользоваться таблицей Головина для выбора диагонали экрана (pdf, 85 Кб). Название я придумал сам, надеюсь, Головин был бы не против.



С появлением первых телевизоров с разрешением 4к (3840 × 2160), я хотел обновить график для определения оптимального расстояния до экрана. Но, поскольку там указаны рекомендуемые расстояния, это бы снова вылилось в субъективные обсуждение возможностей зрения каждого. Новая таблица, теоретически, должна помочь каждому сделать выбор, в не зависимости от остроты зрения.

Инструкция и теория
Total votes 117: ↑107 and ↓10 +97
Comments 31

Баннер Автокадабры и ГОСТ Р 52289-2004

Reading time 1 min
Views 11K
Баннер Автокадабры на Хабре висит лет 5 (ссылка для тех, кто не видит рекламу). На привычные вещи не обращаешь внимания годами, пока не увидишь на них изъян, который потом будешь замечать каждый раз.

Поэтому, я не могу больше это видеть, и прошу администрацию исправить баннер:
  1. Машинки должны двигаться в правильном направлении.
  2. Заменить одинарную на двойную сплошную, а прерывистую перед пешеходным переходом на сплошную.



Разметку можно посмотреть на панорамах Яндекса или почитать в ГОСТ Р 52289-2004 пункты 6.2.3. и 6.2.7.

UPD: С подачи Werdas — тротуар с противоположной стороны.
Total votes 302: ↑277 and ↓25 +252
Comments 68

Анимированный GIF со звуком

Reading time 4 min
Views 80K
«Что позволило остаться GIF, это — циклическое проигрывание анимации, которое добавил Netscape. Если бы Netscape не добавил поддержку GIF в свой браузер, GIF умер бы в 1998»

— Александр Тревор (Alexander Trevor),
руководитель команды по созданию GIF в CompuServe

Формат GIF в июне этого года отпраздновал свое 25-летие, и является сегодня самым старым графическим форматом, который распространен в интернете. Посвящая выходные просмотру смешных анимированных гифок понимаешь, что некоторые из них были бы в разы лучше со звуком. Все текущие решения для циклической анимации со звуком (например: coub.com, gifsound.com) предлагают отказаться от GIF, но это — не выход. И я решил пожертвовать просмотром гифок на выходных для решения этой крайне важной проблемы.

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

Гифок под катом не будет, а будет процесс создания расширения для стандарта, написания конвертера и плеера.
детали реализации
Total votes 68: ↑61 and ↓7 +54
Comments 39

Что записано внутри бесконтактных карт Киевского метрополитена?

Reading time 9 min
Views 89K
Бесконтактные карты в киевском метро начали вводить в 2007 году (информация на сайте метро, укр), но широкое распространение и внедрение они получили только к концу 2008 года. На сегодняшний день существуют два основных типа проездных билетов: проездные со сроком действия, и проездные на количеств поездок. В проездных используются бесконтактные карты MIFARE Classic 1K.


Фото — Metromuseum.net

Об уязвимостях чипов MIFARE Classic стало известно в 2007 году. Подробную историю открытия уязвимостей можно почитать в статье. Статья хоть и 2008 года, но до сих пор актуальна, и в ней перечислены основные этапы нахождения уязвимостей. Совместив эти знания можно посмотреть, что же записывается в карты киевского метро на примере проездного на количество поездок.

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

Согласен
Total votes 123: ↑120 and ↓3 +117
Comments 84
1

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity