Рубрика «ненормальное программирование» - 44

image

10 лет назад SEMrush начинался как стартап двух SEO-шников. Сегодня продукт предлагает около 40 инструментов для digital-маркетолога, и произошло это благодаря тому, что в команде всегда поощрялись новые идеи. Поддержание такой среды, в которой идеи драйвят процесс развития – одна из главных задач компании.

Творчество вне рабочей недели


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

В 2016 и 2017 мы провели Неделю Инноваций. Участники делились на команды и создавали инструменты для решения внутренних задач. Каждый выбирал сам, над чем ему интереснее работать: над ботом, подсказывающим, сколько дней отпуска осталось, или над сервисом для создания визиток. Но такой формат получался несколько затянутым, и мы решили попробовать что-то новое.

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

Наш хакатон


Разработчики, UX-дизайнеры, аналитики и маркетологи объединились, чтобы воплотить в жизнь свои задумки. Итого у нас было 60 часов работы и 30 участников в 7 командах. Помня о Неделях Инноваций, мы знали, что у команд может не все пойти гладко. Однако в этот раз все дошли до конца и успели зарелизиться к понедельнику. Итак, вот результаты рабочих выходных наших ребят.
Читать полностью »

7–8 апреля в Контуре был открытый хакатон — 27–часовой марафон по программированию. Разработчики, тестировщики, дизайнеры и проектировщики интерфейсов собрались, чтобы штурмовать задачи. Только темой стали не рабочие проблемы, а игры.

Правила простые до ужаса: вы приходите без каких-либо заготовок и через сутки показываете, что успели сделать. Хакатон проходил в пяти городах: Екатеринбурге, Ижевске, Иннополисе, Новосибирске и Перми. Впервые мы приглашали всех желающих.

Меня позвали его судить, и я совершенно не жалею, что потратил на это выходные. Сегодня я расскажу, как это было в Екатеринбурге, и сделаю обзор лучших игр.

Кибер–бабка, или как мы хакатонили сутки - 1

Не знаю, что я сделал, но это со мной селфятся?

Читать полностью »

image

В процессе движения к долгожданному титулу Lead Senior C++ Over-Engineer, в прошлом году я решил переписать игру, которую разрабатываю в рабочее время (Candy Crush Saga), с помощью квинтэссенции современного C++ (C++17). И так родилась Meta Crush Saga: игра, которая выполняется на этапе компиляции. Меня очень сильно вдохновила игра Nibbler Мэтта Бирнера, в которой для воссоздания знаменитой «Змейки» с Nokia 3310 использовалось чистое метапрограммирование на шаблонах.

«Что ещё за игра, выполняемая на этапе компиляции?», «Как это выглядит?», «Какой функционал C++17 ты использовал в этом проекте?», «Чему ты научился?» — подобные вопросы могут прийти к вам в голову. Чтобы ответить на них, вам придётся или прочитать весь пост, или смириться со своей внутренней ленью и посмотреть видеоверсию поста — мой доклад с Meetup event в Стокгольме:

Примечание: ради вашего психического здоровья и из-за того, что errare humanum est, в этой статье приведены некоторые альтернативные факты.
Читать полностью »

Сортировки обменами - 1

Если описать в паре предложений по какому принципу работают сортировки обменами, то:

  1. Попарно сравниваются элементы массива
  2. Если элемент слева* больше элемента справа, то элементы меняются местами
  3. Повторяем пункты 1-2 до тех пор, пока массив не отсортируется

* — под элементом слева подразумевается тот элемент из сравниваемой пары, который находится ближе к левому краю массива. Соответственно, элемент справа находится ближе к правому краю.
Читать полностью »

image

Функция toString в языке JavaScript наверно самая "неявно" обсуждаемая как среди самих js-разработчиков, так и среди внешних наблюдателей. Она — причина многочисленных шуток и мемов про многие подозрительные арифметические операции, преобразования, вводящие в ступор [object Object]'ы. Уступает, возможно, лишь удивлениям при работе с float64.

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

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

Читать полностью »

Как известно, настоящий программист в своей жизни должен сделать 3 вещи: создать свой язык программирования, написать свою операционную систему и сделать свой ORM. И если язык я написал уже давно (возможно, расскажу как-нибудь в другой раз), а ОС еще ждет впереди, то про ORM я хочу поведать прямо сейчас. А если точнее, то даже не про сам ORM, а про реализацию одной маленькой, локальной и, как изначально казалось, совсем простой фичи.

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

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

Читать полностью »

80+ алгоритмов сортировки

Читать полностью »

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

  • Регистры и их назначение при вызове функций.
  • Передача и возврат простых типов и структур.
  • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
  • Как используется место при многочисленных вызовах функций.
  • Механизм виртуальных вызовов.
  • Оптимизация хвостовых вызовов и рекурсии.
  • Инициализация структур, массивов и векторов.

Осторожно! Статья содержит большое количество кода на C++ и ассемблере (с комментариями), а также множество таблиц с оценками производительности.

Читать полностью »

Введение

В этой краткой заметке будет рассказано о том, как устроена модель атмосферного рассеяния света в нашей последней 4к интре Appear by Jetlag, party-версия которой заняла почётное 12-е место в 4k intro compo на демопати Revision 2018 в апреле этого года.

Cкачать бинарник бесплатно без смс можно здесь.

Если, однако, у вас не Виндовс, или нет мощной современной видеокарты, то есть утешительный утупчик:

Музыку к этой работе написал keen, используя 4klang. За мной же остался весь код и визуальный ряд.

Здесь будет рассказано только о модели рассеяния света. Остальные вещи, как то: инструментарий, модель города, модель освещения и материалов, не затрагиваются. Смелых могу отправить читать исходники, или смотреть записи того, как я часами туплю — большая часть разработки попала на видео.

Читать полностью »

Hello Habr! Эта моя первая статья на Хабре, и родилась она из вопроса на одном из профессиональных форумов. Выглядел вопрос, несколько перефразируя, следующим образом:

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

Задача мне показалась мне интересной и перекликалась с одной из собственных сетевых утилит, планируемых в перспективе.Поэтому в свободный вечер, поразмыслив над ее решением, написал Proof-of-Concept реализацию на Python 2.7 под формат Cisco IOS, IOS-XE и ASA, отвечающую основным требованиям.

В статье попытаюсь воспроизвести ход мысли и прокомментировать основные моменты.
Материал рассчитан на людей, уже базово знакомых с основами сетей и Python.
Всем заинтересовавшимся добро пожаловать под кат!

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js