Как стать автором
Обновить
0
0.1

Пользователь

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

История о том, как Graphviz и бор взломали шифр от Sony

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

Мою первую статью я желаю посвятить истории о том, как я решил заняться исследованием часто встречающихся в модулях PlayStation Portable непонятных байтовых строк. Никакой документации в Homebrew коммьюнити найти не удалось, так что я взялся за дело сам.

Как это было
Всего голосов 117: ↑117 и ↓0+153
Комментарии16

Вы пожалеете об использовании естественных ключей

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров20K

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

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

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

Читать далее
Всего голосов 45: ↑42 и ↓3+55
Комментарии126

Пайплайны в GitLab для микросервисов

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

Какие два самых любимых дела у программистов? Автоматизировать и переписывать на микросервисы. Так сложилось, что в нашу команду выделенных серверов тоже постучались микросервисы. Но в этой статье не будет плюсов и минусов архитектурных подходов. Вместо этого я расскажу про организацию CI для автоматизации сборки, тестирования и деплоя приложений.

Начнем с основ на примере монолитного приложения, а потом усложним их микросервисами и постараемся избавиться от однотипного кода. А еще…
Читать дальше →
Всего голосов 57: ↑57 и ↓0+74
Комментарии4

Как я обработал один миллиард строк в PHP

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

Вероятно, вы уже слышали о соревновании под названием "The One Billion Row Challenge" (1brc), если же нет, то предлагаю ознакомиться с репозиторием 1brc Гуннара Морлинга.

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

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

Читать далее
Всего голосов 66: ↑64 и ↓2+72
Комментарии33

Генерация и валидация чисел по алгоритму Луна

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров16K

Алгоритм Луна (Luhn algorithm) - это процесс вычисления контрольной цифры для числа в соответствии со стандартом ISO/IEC 7812. Процесс предназначен, в первую очередь, для выявления ошибок, вызванных с непреднамеренным искажением данных. Например, при ручном вводе номера карты или любого другого числа.

Разберём как он работает и рассмотрим инструмент для формирования номеров по алгоритму.

Читать далее
Всего голосов 13: ↑11 и ↓2+15
Комментарии32

Истинный двигатель прогресса. Почему порно может стать локомотивом развития искусственного интеллекта

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

Что общего у кабельного ТВ, онлайн-платежей и даже книгопечатанья? Все эти инновации распространились благодаря "взрослому контенту". А теперь порноиндустрия может придать импульс целому направлению развития искусственного интеллекта. Почему так - разбираем на примере покупки порно-империи канадским фондом этичных инвестиций (wat?).

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

Плюсы и минусы 30 способов продвижения интернет-магазинов

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров56K

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

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

PHP Internals News Эпизод #38: предзагрузка и WeakMaps

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

Перевод транскрипции подкаста подготовлен в преддверии старта курса «Backend-разработчик на PHP»





Описание


В этом эпизоде «PHP Internals News» я беседую с Никитой Поповым (Twitter, GitHub, Сайт) о проблемах предзагрузки PHP 7.4 и его RFC WeakMaps.

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

Методы Монте-Карло для марковских цепей (MCMC). Введение

Время на прочтение10 мин
Количество просмотров11K
Привет, Хабр!

Напоминаем, что ранее мы анонсировали книгу "Машинное обучение без лишних слов" — и теперь она уже в продаже. Притом, что для начинающих специалистов по МО книга действительно может стать настольной, некоторые темы в ней все-таки затронуты не были. Поэтому всем заинтересованным предлагаем перевод статьи Саймона Керстенса о сути алгоритмов MCMC с реализацией такого алгоритма на Python.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии2

Практический опыт обновления MySQL 5.7 до версии 8.0

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

Недавно мы обновили свои сервера с MySQL 5.7 на 8.0.

Оставим за рамками этой статьи зачем и какие новые плюшки появились в MySQL 8.0, а вместо этого расскажем о том, с какими сложностями мы столкнулись в процессе обновления.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии12

Как CSS Grid меняет представление о структурировании контента

Время на прочтение8 мин
Количество просмотров18K
Каждый, кто хотя бы немного занимался созданием веб-сайтов, знает, что теги <div> — являются важным строительным блоком для контроля над макетом.

HTML5 представил новые семантические элементы, чтобы помочь в этом. И хотя они являются фантастическим дополнением к языку, они немного похожи на украшение к нашему супу из <div> элементов.



С приходом CSS Grid, нам больше не нужно полагаться на элементы <div> для создания структуры страницы или даже более сложного компонента. Структура буквально определяется родительским элементом, а не тем, как расположено содержимое внутри него.

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

Всего голосов 22: ↑21 и ↓1+20
Комментарии19

4G-роутер в роли универсального сервера для IoT

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

Роутеры серии ICR-3200 призваны заменить классическую связку: одноплатный компьютер + модем + роутер. Теперь можно запускать всю необходимую логику прямо на роутере. Благодаря мощному ARM-процессору, 512 МБ оперативной памяти и ~2ГБ встроенной флеш-памяти, на роутере можно даже запустить сервер nodejs!

Последовательные интерфейсы RS-232/485 также встроены в роутер и доступны сразу в операционной системе с полным root-доступом. Открытое окружение для сборки собственных программ и библиотеки C/C++ для работы с низкоуровневым аппаратным API также в наличии.
Функция глубокого сна позволит экономить энергию при работе от аккумулятора: роутер можно активировать только тогда, когда связь действительно необходима.

В статье мы разберем интересные функции устройства и попробуем на практике поработать с интерфейсом ввода-вывода из shell-скриптов.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии14

Вулканический поросенок, или SQL своими руками

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


Сбор, хранение, преобразование и презентация данных — основные задачи, стоящие перед инженерами данных (англ. data engineer). Отдел Business Intelligence Badoo в сутки принимает и обрабатывает больше 20 млрд событий, отправляемых с пользовательских устройств, или 2 Тб входящих данных.


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


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

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

Делаем действительно умный поиск: пошаговый гайд

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

Поиск в корпоративной информационной системе — уже от самой этой фразы вязнет во рту. Хорошо если он вообще есть, о положительном user experience можно даже не задумываться. Как перевернуть отношение пользователей, избалованных поисковыми системами, и создать быстрый, точный, понимающий с полуслова продукт? Надо взять хороший кусок Elasticsearch, горсть интеллектуальных сервисов и замешать их по этому гайду.


Статей о том, как к существующей базе прикрутили полнотекстовый поиск на основе Elasticsearch, в интернете уже предостаточно. А вот статей, как сделать действительно умный поиск, явно не хватает.


При этом сама фраза «Умный поиск» уже превратилась в баззворд и используется к месту и нет. Что же такого должна делать поисковая система, чтобы её можно было считать умной? Ультимативно это можно описать как выдачу результата, который на самом деле нужен пользователю, даже если этот результат не совсем соответствует тексту запроса. Популярные поисковые системы вроде Google и Яндекс идут дальше и не просто находят нужную информацию, а напрямую отвечают на вопросы пользователя.

Окей, сразу на ультимативное решение замахиваться не будем, но что можно сделать чтобы приблизить обычный полнотекстовый поиск к умному?

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

8 простых UI приёмов чтобы сделать дизайн-прототип динамичным, не прибегая к анимации

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


Материал этой статьи является следствием моих дизайн-экспериментов и выводов за последний год-полтора непрерывного дизайн гринда. Я неустанно собирал ui kit’ы, экспериментировал с контентом в плейсхолдерах, стилями, тенями текстами и состояниями, чтобы понять влияет ли это на конверсию. Иначе говоря, смогу ли я увеличить продажи дизайн-продуктов для Figma, если добавлю немного визуальной динамики в статичные дизайн-макеты, чтобы сделать темплейты интереснее и функциональнее.
Читать дальше →
Всего голосов 43: ↑37 и ↓6+31
Комментарии21

Ещё лучшая ZIP-бомба

Время на прочтение25 мин
Количество просмотров129K
В статье показано, как создать нерекурсивную zip-бомбу, которая обеспечивает высокую степень сжатия путём перекрытия файлов внутри zip-контейнера. «Нерекурсивная» означает, что она не зависит от рекурсивной распаковки декомпрессорами файлов, вложенных в zip-архивы: здесь всего один раунд. Выходной размер увеличивается квадратично от входного, достигая степени сжатия более 28 миллионов (10 МБ → 281 ТБ) в пределах формата zip. Ещё большее расширение возможно с помощью 64-разрядных расширений. Конструкция использует только наиболее распространённый алгоритм сжатия DEFLATE и совместима с большинством парсеров zip.

  • zbsm.zip 42 kB → 5.5 GB
  • zblg.zip 10 MB → 281 TB
  • zbxl.zip 46 MB → 4.5 PB (Zip64, менее совместима с парсерами)

Исходный код:
git clone https://www.bamsoftware.com/git/zipbomb.git
zipbomb-20190702.zip

Данные и исходники иллюстраций:
git clone https://www.bamsoftware.com/git/zipbomb-paper.git
Читать дальше →
Всего голосов 176: ↑176 и ↓0+176
Комментарии53

Генерируем тайловые уровни и прячем квадраты от игрока

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

Генерация уровней в Unexplored 2


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

Нам не пришлось заново изобретать велосипед. В Unexplored 1 мы уже создали техники, которые сильно повлияли на успех первой игры. Unexplored 2 просто продолжила начатое. Фундамент нашей технологии состоит из двух частей: мы применяем многоэтапную генерацию, которая почти имитирует процесс, очень похожий на работу живого дизайнера уровней. Поверх него мы используем технику под названием "циклическая генерация подземелий", которая гораздо лучше справляется с генерацией естественно выглядящих уровней, чем большинство стандартных приложений генеративного создания контента. В этом посте я расскажу о первом аспекте. Адаптация циклической генерации подземелий к Unexplored 2 будет темой будущего поста.

Имитация «человеческого» дизайна уровней


Генератор уровней разбивает процесс генерации уровня на целое множество управляемых этапов. Он проходит путь от высокоуровневого планирования до низкоуровневой детальной карты уровня. По сути, он сначала создаёт набросок уровня, а затем начинает добавлять детали, пока уровень не станет завершённым и заполненным.
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии7

Алан Кэй не изобретал объекты

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

Люди продолжают утверждать, что современные объектно-ориентированные языки, на самом деле "не совсем объектно-ориентированные", поскольку они не соответствуют определению ООП Алана Кэя. На мой взгляд, в этом есть смысл, хотя я и не согласен с выводом. В последнее время мне встречаются люди, которые говорят о том, что именно Кэй изобрёл объекты. Фактически это неверно.


Алан Кэй не изобретал объекты. Они были в Simula, которую приводит в качестве основного источника вдохновения руководство к Smalltalk-72 (с. 117). В выпуске известного журнала Byte за 1981 год, который популяризировал Smalltalk и ООП, говорится, что "основная идея объектов, сообщений и классов пришла из SIMULA". В нем сказано, что Simula позволяет пользователям создавать "объектно-ориентированные системы", что, возможно, слишком, но тем не менее. Команда Smalltalk хорошо знала систему объектов в Simula и черпала вдохновение из неё.


Одной из причин, почему такой миф всё ещё жив, послужило то, что сказал сам Кэй в 1998 году:


Просто напоминаю, что на последней OOPSLA я постарался донести до всех, что Smalltalk — это не только НЕ синтаксис или библиотека классов, но даже не классы. Мне очень жаль, что ранее я ввел термин "объекты" для этой темы, поскольку это заставляет многих людей сосредоточиться на меньшей идее.
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии11

Интервью с Александром Макаровым, Yii core team

Время на прочтение5 мин
Количество просмотров7.4K
Один из ключевых разработчиков Yii, Александр Макаров(SamDark), выступит на DevConf с докладом про пакетные метрики и я воспользовался возможностью задать несколько интересующих меня вопросов про новую версию Yii, новую ORM, сбор денег на OpenCollective, фулл-тайм open source разработку и немного про конференции.

Начну с вопроса, который тебе задают постоянно. Что с Yii? Когда Yii 3? Я довольно долгое время наблюдаю активное создание новых пакетов в github.com/yiisoft

С Yii всё нормально. Ну почти. Чтобы объяснить, нужно немного посмотреть назад.

Когда мы делали версию 2.0 мы несколько переоценили свои силы. Оно и понятно, Qiang Xue сворачивал горы каждый день и казалось нам по силам всё и сразу.

Потом, к сожалению, времени на OpenSource у него не хватило, и поддержка сделанного скушало всё время остальной команды. Ну а так как фуллтайм фреймворком никто не занимался, это выливалось в то, что релизы были не частыми и большими. Вдобавок, при проектировании тогда мы наделали ошибок. Сейчас мне они кажутся очевидными, но тогда мы думали, что так хорошо. Их, к счастью, не так много. Они не делают Yii 2.0 плохим, фреймворк вышел хороший. Но они вылились со временем в то, что обещание обратной совместимости, множество фич и дефицит времени дали нам проблемы с развитием фреймворка: внедрением PSR, ухода от закрытости к общим для всего PHP пакетам и библиотекам, улучшением по части применения более сложных подходов к разработке, лучшей тестируемости.
Читать дальше →
Всего голосов 54: ↑51 и ↓3+48
Комментарии11

Управляем асинхронностью в PHP: от промисов к корутинам

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


Что такое асинхронность? Если кратко, то асинхронность означает выполнение нескольких задач в течение определенного промежутка времени. PHP выполняется в одном потоке, что означает, что в любой момент времени может выполняться только один фрагмент PHP-кода. Это может показаться ограничением, но на самом деле предоставляет нам большую свободу. Нам в итоге не приходится сталкиваться со всей той сложностью, которая связана с многопоточным программированием. Но с другой стороны, здесь есть свой набор проблем. Нам приходится иметь дело с асинхронностью. Нам нужно как-то управлять ей и координировать ее.


Представляем перевод статьи из блога бэкенд-разработчика Skyeng Сергея Жука.

Читать дальше →
Всего голосов 26: ↑22 и ↓4+18
Комментарии2
1

Информация

В рейтинге
3 768-й
Откуда
Киров (Кировская обл.), Кировская обл., Россия
Зарегистрирован
Активность