All streams
Search
Write a publication
Pull to refresh
1322
0
Анатолий Ализар @m1rko

автор, переводчик, редактор

Send message

Как HBO делала приложение Not Hotdog для сериала «Кремниевая долина»

Reading time23 min
Views24K


Сериал HBO «Кремниевая долина» выпустил настоящее приложение ИИ, которое распознаёт хотдоги и не-хотдоги, как приложение в четвёртом эпизоде четвёртогого сезона (приложение сейчас доступно для Android, а также для iOS!)

Чтобы добиться этого, мы разработали специальную нейронную архитектуру, которая работает непосредственно на вашем телефоне, и обучили её с помощью TensorFlow, Keras и Nvidia GPU.

Ubuntu для мобильных устройств: посмертный анализ

Reading time15 min
Views115K

Так выглядела Ubuntu Touch, когда проект анонсировали 2 января 2013 года. Изображение: Canonical

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

Чтобы резюмировать моё участие в проекте: я использовал Ubuntu Touch на Nexus 7 постоянно и периодически с момента его анонса в 2013 году и до декабря 2014 года, начал работать над приложениями Click в декабре 2014-го, начал писать статью из 15-ти частей “Hacking Ubuntu Touch” об устройстве системы в январе 2015-го, был инсайдером по программе Ubuntu Phone Insider, получил Meizu MX4 от Canonical, организовал конкурс для разработчиков приложений UbuContest и был его спонсором, работал над баг-репортами и приложениями примерно до апреля 2016 года, а затем продал или переделал все мои оставшиеся устройства в середине 2016-го. Так что думаю, что могу поделиться какими-то мыслями о проекте, его проблемах и о том, где мы могли сработать лучше.

Пожалуйста, обратите внимание, что эта статья не затрагивает проект UBPorts, который продолжает работать на операционной системе телефонов, Unity 8 и другие компоненты.
Читать дальше →

Сжатие фотографий без видимой потери качества: опыт Yelp

Reading time11 min
Views24K
На Yelp хранится более 100 миллионов пользовательских фотографий, от картинок ужинов и причёсок до одной из наших последних фич, #yelfies. Эти изображения составляют основную часть трафика для пользователей приложения и веб-сайта, а их хранение и передача обходятся недёшево. Стараясь предоставить людям наилучший сервис, мы усиленно работали над оптимизацией всех фотографий и добились среднего уменьшения размера на 30%. Это экономит людям время и трафик, а также сокращает наши расходы на обслуживание этих изображений. Ах да, и мы сделали это без ухудшения качества фотографий!

Исходные данные


Yelp хранит пользовательские фотографии уже 12 лет. Мы сохраняем lossless-форматы (PNG, GIF) как PNG, а все остальные форматы в JPEG. Для сохранения файлов используются Python и Pillow, а загрузки фотографий начинаются примерно с такого сниппета:

# do a typical thumbnail, preserving aspect ratio
new_photo = photo.copy()
new_photo.thumbnail(
    (width, height),
    resample=PIL.Image.ANTIALIAS,
)
thumbfile = cStringIO.StringIO()
save_args = {'format': format}
if format == 'JPEG':
    save_args['quality'] = 85
new_photo.save(thumbfile, **save_args)

Читать дальше →

Оптимизация расходов на AWS в SaaS-бизнесе

Reading time5 min
Views7.3K

Расходы Cronitor на AWS за последние 12 месяцев

В первые 30 дней после перевода Cronitor на AWS в январе 2015 года мы собрали платежей на $535 и заплатили $64,47 за хостинг, передачу данных и доменное имя. С тех пор мы наращивали потребление услуг, апгрейдили инстансы, добавляли сервисы. Несмотря на репутацию AWS как дорогого пистолета, чтобы выстрелить себе в ногу, наши счета сохранялись на уровне 12,5% от дохода. Смотрите сами.
Читать дальше →

Connect: советы по современному фронтенду

Reading time12 min
Views20K
Мы недавно выпустили новую и улучшенную версию Connect, нашего набора инструментов для платформ и магазинов. Группа дизайна Stripe много работала для создания уникальных посадочных страничек, которые рассказывают историю для наших основных продуктов. К релизу мы подготовили посадочную страничку Connect, чтобы отразить эти замысловатые, передовые возможности, но в то же время не утратив ясности и простоты изложения.

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

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

Reading time5 min
Views18K


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

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

Цель была в том, чтобы открывать дверь телефоном или носимым гаджетом. Было несколько способов, как подойти к проблеме. В теории, мы могли использовать приложение, интеграцию в другую платформу или всё, что может отправить сигнал для открытия замка.
Читать дальше →

Уроки, извлечённые из трёх миллионов загрузок на AppStore

Reading time6 min
Views8.2K
В январе 2011 года у меня были летние каникулы [разработчик из южного полушария, а именно из Новой Зеландии — прим.пер.], но вместо поиска работы на день или общения с людьми я много времени скрывался от всех в своей комнате, где писал первую версию iOS приложения под названием Class Timetable. Годом ранее я искал простое, лёгкое в использовании приложение для учебных расписаний, и ничего в AppStore не подходило под мои нужды — всё было сложно и трудно использовать. Идея состояла в том, чтобы создать простое, без суматохи, прямолинейное решение, нечто более простое и более убедительное, чем бумажное расписание. За несколько месяцев я потратил около 500 часов, проектируя и кодируя его. На сегодня у программы более трёх миллионов загрузок, много положительных отзывов, а временами оно было моим основным источником дохода. Не слышали о приложении? Да, оно ещё не взлетело в США, но довольно популярно в Австралии/Новой Зеландии/Великобритании, по крайней мере, среди студентов колледжей и школьников.


Читать дальше →

10 базовых принципов визуального дизайна

Reading time7 min
Views54K
Вчера я слушал подкаст и обратил внимание, как кто-то задавал вопрос и по ходу дела сказал: «Старый фанат, впервые звоню». По какой-то причине это заставило меня подумать о Medium. Я читаю тут статьи давным-давно, но никогда не вставлял свои два цента. Сегодня тот день, когда это изменится.

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

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

Итак, готовы? Всё начинается с…
Читать дальше →

Как улучшить legacy-код

Reading time8 min
Views20K
Это случается хотя бы раз в жизни каждого программиста, менеджера проекта или тимлида. Вы получаете целую кучу парного навоза. Если повезёт, то всего несколько миллионов строк. Первоначальные авторы давно улетели в тёплые страны, а документация, если она имеется, безнадёжно устарела.

Ваша задача: выбраться из этого бардака.

После того, как отпустила первая инстинктивная реакция (сбежать подальше), вы начинаете работать над проектом, отлично понимая, что руководители компании следят за вашими успехами. Провал не вариант. Но пока что, судя по раскладу, именно провал кажется наиболее вероятным исходом. Так что делать?

Мне (не) повезло оказаться в такой ситуации несколько раз. И мы с небольшой группой друзей выяснили, что при должных навыках это очень выгодное дело — брать на себя такие кучи дымящегося убожества и превращать их в здоровые поддерживаемые проекты. Вот некоторые хитрости, которые мы используем:
Читать дальше →

Как сделано интро на 64k

Reading time13 min
Views38K

Введение в интро


Демосцена — это о создании классных штук, которые работают в реальном времени (как бы «крутятся в вашем компьютере»). Их называют демки. Некоторые из них по-настоящему маленькие, скажем, 64k или меньше — такие называются интро. Название происходит от рекламирования или представления взломанных программ (crack intro). Итак, интро — это просто маленькая демка.

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

Бинарник под Windows: guberniya_final.zip (61.8 kB) (немного ломается на картах AMD)

Машинный интеллект в клавиатуре Gboard

Reading time6 min
Views6K
Большинство людей значительную часть времени каждый день проводят за клавиатурой на мобильном устройстве: составляя письма, сообщения в чатах, социальных сетях и т. д. Однако мобильные клавиатуры всё ещё довольно нескладные. Средний пользователь печатает с мобильной клавиатуры примерно на 35% медленнее, чем с физической. Чтобы изменить это, мы недавно представили много замечательных улучшений в Gboard for Android. Мы стремимся создать умный механизм, который позволяет быстрее вводить текст, в то же время предлагая подсказки и исправляя ошибки, на любом языке на ваш выбор.

Учитывая факт, что мобильная клавиатура преобразует прикосновения в текст примерно так же, как система распознавания речи транслирует голос в текст, мы применили систему Speech Recognition. Сначала мы создали надёжные пространственные модели, которые сопоставляют нечёткие последовательности прикосновений к таскрину с клавишами клавиатуры, точно как акустические модели сопоставляют последовательности звуковых фрагментов с фонетическими единицами. Затем мы создали мощный движок декодирования, основанный на конечных преобразователях (FST) для определения самой вероятной фразы для данной последовательности прикосновений. Мы знали, что с его математическим формализмом и широким успехом в голосовых приложениях FST-декодер обеспечит необходимую гибкость для поддержки всего разнообразия сложных вариантов ввода, а также языковые функции. В данной статье мы расскажем подробно, что входило в разработку обеих этих систем.
Читать дальше →

Chrome победил

Reading time5 min
Views77K
Примечание: Я семь лет работал в Mozilla и был техническим директором, прежде чем два года назад ушёл ради основания стартапа в области ИИ

Неделю назад Mozilla опубликовала блог-пост, где подчеркнула свои усилия, чтобы сделать десктопный Firefox снова конкурентоспособным. В своё время я внимательно следил за рынком браузеров, но уже пару лет не изучал его. Пришло время посмотреть на некоторые цифры:



Диаграмма вверху показывает рыночную долю в процентах каждого из четырёх основных браузеров за последние шесть лет. Это данные StatCounter, и вы можете поспорить, что данные искажены множеством разных способов, но в глобальном смысле придётся с уверенностью сказать, что Chrome захватывает рынок браузеров, а всё кроме Safari уничтожается.
Читать дальше →

Анонимность в Tor: что нельзя делать

Reading time18 min
Views533K

Посещать собственный сайт в анонимном режиме


«Интересно, как выглядит мой сайт, когда я анонимный?» [1]

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

Такое поведение ведёт к утечке анонимности, поскольку после посещения веб-сайта вся схема Tor становится «грязной». Если сайт малопопулярен и не получает много трафика, то выходные узлы Tor могут быть почти уверены, что посетитель этого сайта — владелец сайта. С этого момента разумно предположить, что последующие соединения с этого выходного узла Tor тоже идут с компьютера этого пользователя.

Источник: [2]
Читать дальше →

Создание JPEG из ниоткуда

Reading time4 min
Views22K
Вот интересная демонстрация возможностей afl; меня реально удивило, что она работает!

$ mkdir in_dir
$ echo 'hello' >in_dir/hello
$ ./afl-fuzz -i in_dir -o out_dir ./jpeg-9a/djpeg

В сущности, я создал текстовый файл только со словом "hello" и попросил фаззер выдавать поток в программу, которая ожидает на входе изображение JPEG (djpeg это простая утилита, которая идёт вместе с распространённой графической библиотекой IJG jpeg; libjpeg-turbo тоже должна подойти). Конечно, мои входные данные не похожи на валидное изображение, так что утилита быстро отвергает их:

$ ./djpeg '../out_dir/queue/id:000000,orig:hello'
Not a JPEG file: starts with 0x68 0x65
Читать дальше →

Тёмные паттерны LinkedIn или Почему вам спамят друзья, призывая зарегистрироваться в LinkedIn

Reading time9 min
Views26K
В декабре 2013 года я удалил свой аккаунт LinkedIn. Как я повторял в эмоциональном посте на Facebook, выяснилось, что я рассылаю друзьям назойливые письма «Дэн Шлоссер пригласил вас присоединиться к LinkedIn». Смущённый, я потратил несколько часов, копаясь в настройках и меню LinkedIn в поисках причины.


Оказалось, что во время регистрации аккаунта несколько лет назад LinkedIn хитростью заставил меня импортировать адресную книгу. Если бы они использовали её содержимое только для предложения контактов на LinkedIn, может, я бы не возражал, но они пошли дальше. На странице «Люди, которых вы можете знать» LinkedIn вставил несколько кнопок для приглашения контактов из адресной книги на LinkedIn и сделал эти кнопки в таком стиле, как будто эти люди уже на LinkedIn и я могу связаться с ними. Отличие между этими двумя видами кнопок было ничтожным. В результате я отправлял эти спамерские письма, думая что отправляю запрос на добавление в друзья внутри социальной сети.
Читать дальше →

Как удалить свой IP из чёрного списка Gmail

Reading time10 min
Views62K

Если ваши пользователи перенаправляют почту на Gmail, то они вероятно перенаправляют и спам. Gmail не волнует, что почта была перенаправлена. Их системы видят, что ваш сервер присылает спам, и заносят его в чёрный список.

Проблемы с чёрным списком Gmail? Вы пришли по адресу.

Используя описанный ниже процесс, мы успешно разрешили почти все случаи включения в чёрный список Gmail, с которыми сталкивались.
Читать дальше →

Твоя идея — ерунда

Reading time5 min
Views28K
Я думал, что достиг желанного. Один из моих open-source проектов начал набирать небольшую аудиторию фолловеров на GitHub. Больше никакой нытливой неуверенности в себе, ведь около тысячи наблюдателей за звёздами следят за моим проектом — это всё, что нужно для подтверждения ценности. Это то, что можно вспоминать в моменты неуверенности. Напоминание, что я действительно достиг того, чего стою на самом деле. Никогда не думал, что звёзды могут отвернуться от меня.

* * *

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

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

Объяснение нейронных машин Тьюринга

Reading time9 min
Views29K
Я обнаружил, что подавляющее большинство онлайновой информации об исследованиях в области искусственного интеллекта делится на две категории: первая рассказывает о достижениях непрофессиональной аудитории, а вторая — другим исследователям. Я не нашёл хорошего ресурса для людей с техническим образованием, которые не знакомы с более продвинутыми концепциями и ищут информацию для восполнения пробелов. Это моя попытка заполнить данную пустоту, предоставив доступные, но в то же время (относительно) подробные объяснения. Здесь я объясню научную статью Грейвса, Уэйна и Данихейки (2014) о нейронных машинах Тьюринга (NTM).

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

Сравнение структур разделов GPT и MBR

Reading time11 min
Views708K
Вы когда-нибудь задумывались о том, как загружается компьютер? Независимо от аппаратуры и операционной системы, все компьютеры при загрузке используют или традиционный метод BIOS-MBR, или более современный UEFI-GPT, реализованный в последних версиях ОС.

В этой статье мы сравним структуры разделов GPT и MBR; GPT означает GUID Partition Table, а MBR — Master Boot Record. Начнём с того, что разберём сам процесс загрузки.

В следующих главах выделяются различия между стилями разделов GPT и MBR, в том числе приводятся инструкции, как осуществить преобразование между двумя стилями, и советы, какой из них выбрать.
Читать дальше →

Как мы оптимизировали Twitter Lite

Reading time13 min
Views12K

Twitter Lite и высокопроизводительные прогрессивные веб-приложения на React




Взгляд на то, как удаляли обычные и необычные узкие места в производительности при создании одного из крупнейших в мире прогрессивных веб-приложений (PWA) на React.js — Twitter Lite

Создание быстрого веб-приложения требует многих циклов измерений, куда тратится время. Нужно понять, почему это происходит, и применить потенциальные исправления. К сожалению, не бывает одного простого решения. Производительность — это бесконечная игра, где мы ищем и измеряем области для улучшения. В Twitter Lite сделано много маленьких улучшений в разных сферах: от первоначального времени загрузки до рендеринга компонентов React (и предотвращения повторного рендеринга), загрузки изображений и много другого. Большинство изменений небольшие, но они складываются, и в конечном результате мы получили одно из самых больших и быстрых прогрессивных веб-приложений.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity