Search
Write a publication
Pull to refresh
27
0
Maksim @MuLLtiQ

Software engineer

Send message

Когда-то я говорил…

Reading time2 min
Views173K
Когда-то я* говорил, что без идеального задокументированного кода с многоуровневой плагинной архитектурой заказчик будет мучиться в конвульсиях каждый раз, когда его пальцы будут соприкасаться с клавиатурой. Теперь я заказчик и понимаю, что мне нафиг не нужен идеальный код, депенденси инджекшены и два синьора по цене одного. Главное, чтобы работало и было сделано в срок. И желательно бесплатно.

Когда-то я говорил, что к собеседованию должен готовиться не только соискатель, но и интервьювер. Теперь я сам провожу собеседования, но после десятого интервью все соискатели выглядят как китайцы – одинаково.

Когда-то я говорил, что опаздывать на встречи могут только пид$расы. Теперь я сам часто опаздываю на встречи, но в то же время не сплю с мужиками.

Когда-то я говорил, что главное в любом проекте – правильный процесс. Ну и еще печеньки. Теперь у меня только православный скрам, настоянный на канбане, но проекты факапятся с таким же успехом.
Читать дальше →

Путь JavaScript модуля

Reading time28 min
Views121K


На момент написания этой статьи в JavaScript еще не существовало официальной модульной системы и все эмулировали модули как могли.

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

Вот в JavaScript своя атмосфера — в языке нет официальных модулей, более того все файлы лежат удаленно, один поток приложения. Приходится постоянно решать какие-то странные проблемы с загрузкой, хитро паковать модули в один файлы, чтобы ускорить время загрузки. Бывает, что нужно воевать с двойными стандартами, адаптировать модули другого формата.

Дело в том, что раньше не думали, что на JavaScript можно делать огромные проекты, а не просто «пропатчить DOM», поэтому о модулях не думали. Да и вообще не думали о будущем. И тут Внезапно будущее нагрянуло! Все вроде-бы уже есть, а модули в JavaScript, мягко говоря, запаздывают. Поэтому разработчикам приходится крутиться и выдумывать какие-то эмуляторы модульности.

Думаю многие из вас читали прекрасную статью Addy Osmani Writing Modular JavaScript With AMD, CommonJS & ES Harmony, которая стала одной из глав его книги Learning JavaScript Design Patterns в этой статье рассказывается про «современные» JavaScript модули или же читали достаточно старую статью JavaScript Module Pattern: In-Depth 2010 года про «старые» модули.

Я не буду переводить эти статьи и не буду делать из них солянку. В своей статья я хочу рассказать о моем модульном пути. О том как я проделал путь от «старых» модулей к «новым» и что использую сейчас и почему.
Читать дальше →

Необыкновенный способ генерации лабиринтов

Reading time6 min
Views87K
В этой статье я расскажу об одном необычном подходе к генерации лабиринтов. Он основан на модели Амари́ нейронной активности коры головного мозга, являющейся непрерывным аналогом нейронных сетей. При определенных условиях она позволяет создавать красивые лабиринты очень сложной формы, подобные тому, что приведен на картинке.

Вас ждет много анализа и немного частных производных. Код прилагается.
Прошу под кат!

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

Первая версия Opera 15 для компьютеров

Reading time5 min
Views189K


Из ещё не остывшей после релиза Opera 14 для Андроида печи, прямиком для вас — первая версия Opera 15 для компьютеров на основе движка Blink. Называется она Opera 15 потому, что сделана на Chromium 28 (тогда как Opera 14 на Chrome 26). Но не слишком увлекайтесь нумерологией (мы устали отвечать на вопросы про магию числа 13), наш новый вечнозелёный браузер будет обновляться достаточно часто, чтобы номера версий потеряли смысл — давайте лучше поговорим о том, что внутри первой версии.
Читать дальше →

Как хвост виляет собакой. Азбука пропаганды

Reading time4 min
Views210K
Чем доступнее информация, тем больше её вокруг. Чем быстрее она распространяется, тем меньше остаётся времени на то, чтобы её проверить. Постепенно информационная среда превращается в некое подобие «белого шума». Всё труднее строить внутри себя новые информационные фильтры, чтобы отсеять лишнее: убрать в сторону лозунги, агитацию, пропаганду, а оставить только то, что на самом деле кроется за ними. А манипулировать нашими мыслями пытаются постоянно, и я говорю не о 25-ом кадре (он не работает), а о более земных вещах — приёмах пропаганды, которые так умело (а зачастую — очень топорно) используют политики, рекламщики и вообще, все, кому не лень. Об этих приёмах и пойдёт речь в статье.

Хвост виляет собакой. ("Wag the dog") — чтобы избежать большого скандала или «замять», оставить незамеченным какое-нибудь важное, но неприятное событие, часто используется простой, но хитрый и ловкий приём, который англоязычные политтехнологи называют «Wag the dog», а русскоязычные — «Хвост виляет собакой». Он заключается в том, чтобы вовремя поднять волну обсуждения вокруг вопроса второстепенной важности, на фоне которой другое, более важное событие или действие пройдёт незаметно.
Примеры таких вопросов: Отмена перехода на зимнее время, российское гражданство Депардье, поездка Путина или Саши Грей на Ладе Калине по России, полёты со стерхами и т.д.
Своё название этот приём получил в честь английского выражения tail wagging the dog, который, в свою очередь, появился из следующего народного пассажа:
— Почему собака виляет хвостом?
— Потому, что собака умнее, чем хвост. Если бы хвост был умнее, он вилял бы собакой.

Ещё 7 приёмов - под катом

Корпус с масляным охлаждением компонентов

Reading time3 min
Views188K

Давно мечтал собрать нечто подобное, но не было повода.
Недавно начал экспериментировать с майнингом на разных видеокартах в разных корпусах. Пришел к выводу, что меньше всего карты высокого уровня греются без корпуса. Но при установке нескольких карт уровня 7950/7970 приходится городить сверху вентиляторы — конструкция хлипкая, шумная и занимает много места.
Пробовал серверные корпуса — 1U и 4U. Шумят так, что глохнешь, а охлаждают не очень эффективно — пара карт уровня FirePro V9800 и S10000 перегревались на штатных частотах уже через 10 минут. При достижении 100 градусов станция зависала. Да и работать на таких температурах не безопасно. Для достижения стабильности в таких условиях приходилось снижать нагрузку на четверть, что шума и жара не убавляло, а эффективности — напротив. О шуме я не думал — оборудование стояло в серверной, а вот терморежим проседал, несмотря на работающие кондиционеры и кулера на полную мощность.
И тут я вспомнил о своей старой задумке с масляным охлаждением и решил воплотить ее в жизнь

Самая маленькая сбойная программа на C

Reading time2 min
Views112K
Шведский студент Йеспер Эквист (Jesper Öqvist) получил в универе домашнее задание: написать самую маленькую программу C, которая вылетает с ошибкой (segfault, SIGFPE). Обычно студенты в таких ситуациях используют деление на ноль.

int main()
{
    return 1/0;
}

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

int main()
{
    i=1/0;
}
Читать дальше →

Дистрибутив Fedora Linux для Raspberry PI теперь…

Reading time1 min
Views279K

Движок V8 и браузер Google Chrome станут лучше поддерживать Asm.js

Reading time2 min
Views23K
Около двенадцати часов назад Джон Резиг нащебетал в Твиттер, что на конференции Google I/O было объявлено об улучшении поддержки Asm.js в движке V8 и во браузере Google Chrome.

Так как про Asm.js упоминали на Хабрахабре (1, 2), то достоинства его могли стать известны многим читателям. Тем приятнее им предвкушать теперь в самом скором времени появление этих достоинств не только во браузере Firefox (где они впервые были внедрены Фондом Мозиллы), но и в движке V8 (а значит — и в построенном на его основе движке Node.js!), и во браузере Google Chrome.

Но для тех читателей, которые до сих пор пропускали эту новинку мимо себя, я также вкратце напомню суть. Asm.js это особое подмножество языка JavaScript: ограничившись им в своём скрипте, автор скрипта обеспечивает возможность оптимизации интерпретируемого кода не только в момент исполнения (just-in-time, JIT), но даже и заблаговременно (ahead-of-time, AOT), то есть такому джаваскрипту становится возможно один раз однозначно заранее поставить в соответствие некоторый машинный код. Эффект этот достигается ценою заметных усилий по самоограничению. (В частности, при помощи операции «|0» и других подобных специальных приёмов тип значения каждого входного параментра функции, равно как и выходного значения, оказывается однозначно заданным и неизменным.) Зато его итогом становится небывалый рост скорости исполнения джаваскрипта — теперь по скорости он уступает скомпилированной программе (на Си или Си++) не более чем в два раза.

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

Вычисление N-го знака числа Пи без вычисления предыдущих

Reading time4 min
Views135K
С недавних пор существует элегантная формула для вычисления числа Пи, которую в 1995 году впервые опубликовали Дэвид Бэйли, Питер Борвайн и Саймон Плафф:
image

Казалось бы: что в ней особенного — формул для вычисления Пи великое множество: от школьного метода Монте-Карло до труднопостижимого интеграла Пуассона и формулы Франсуа Виета из позднего Средневековья. Но именно на эту формулу стоит обратить особое внимание — она позволяет вычислить n-й знак числа пи без нахождения предыдущих. За информацией о том, как это работает, а также за готовым кодом на языке C, вычисляющим 1 000 000-й знак, прошу под хабракат.
Читать дальше →

Одиннадцатая заповедь: «Не откладывай»

Reading time4 min
Views136K
Сегодня мне позвонили из библиотеки и попросили вернуть книгу. Я не удивился, так как помнил, что недавно истёк срок сдачи и хотел уже сходить сдать книгу в библиотеку. Каково же было моё удивление, когда я узнал, что задолжал книгу больше, чем на год!



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

И вот, что я обнаружил:
Читать дальше →

jsFind. Выборка данных из массива объектов

Reading time4 min
Views16K
Задача: Язык javascript. Имеется большой массив объектов. Нужно выбрать из массива некоторые объекты, в зависимости от значений свойств этих объектов.

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

Работа с «плохими» файлами в командной строке в Linux

Reading time4 min
Views79K
При работе в командной строке администраторы часто сталкиваются с необходимостью что-то сделать с определенным файлом: удалить, переместить, скопировать. При выполнении подобных задач зачастую приходится обращаться к файлам по имени, что может быть затруднительно, поскольку в именах файлов могут встречаться самые разные символы. Даже те, которых нет на клавиатуре. В этом плане работу может облегчить файловый менеджер, в котором файл можно просто выделить и совершить с ним нужное действие. Но для тех, кто привык работать исключительно в командной строке, предлагаются следующие способы.

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.
Читать дальше →

Cборка target platform. Equinox для разработчика

Reading time4 min
Views5.1K
Когда я начинал пользоваться OSGi вопрос, собственно, разработки и отладки встал сам собой. Отлаживать самостоятельное приложение на платформе, которая встроена в Eclipse было нерационально, слишком много бандлов он содержит и слишком много зависимостей — это с одной стороны. С другой стороны не хотелось, чтобы платформа расширялась при каждом обновлении Eclipse и обрастала новыми зависимостями. Короче говоря, мне от платформы нужен был только Jetty, OSGi консоль, EclipseLink и RAP/RWT.

Я хотел полностью контролировать состав среды выполнения и отлаживать проект именно в ней. А для этого надо было выделить OSGi платформу из Eclipse и натравить его на нее обратно. Как это сделать — я расскажу в этой статье.
Читать дальше →

JAVA+Swing в 2013. Стоит ли?

Reading time8 min
Views98K
На Хабре Swing не любят. Поиск по «Swing» дает либо нейтральные, либо негативные упоминания. Вот некоторые из них:
  • «Java-апплеты (доразвивались до смертельной болезни под названием Swing)»
  • «Swing — мягко говоря не самый оптимальный UI фреймворк»
  • «Swing был ужасен»

Я не возьмусь утверждать, что Swing — идеал. Это неправда. Однако я постараюсь описать те плюсы и минусы с которыми пришлось столкнуться.
Читать дальше →

PHP создан, чтобы умирать

Reading time8 min
Views157K
Дисклеймер: у меня за спиной более десяти лет разработки на PHP. Я начал использовать его, когда PHP4 был совсем малышом, а PHP5 — только мечтой компании Zend. С помощью него я сделал многое, я любил его, проклинал и не без стыда наблюдал за тем, как он растёт и развивается. Я всё ещё использую его в некоторых доставшихся по наследству проектах, но предпочитаю больше его не применять. Также хочу отметить, что я не сотрудничаю с создателями фреймворков или инструментов, упомянутых в статье.

TL;DR (англ. too long; didn't read. Так, в частности, говорят, когда лень читать статью целиком — прим. пер.): если ваш проект основан на функциях фоновых процессов (фоновых служб, демонов — прим. пер.), избегайте PHP.

По-моему, в большинстве случаев ненавистники PHP упускают один весьма важный момент: PHP создан, чтобы умирать. Это не значит, что довольно способный (в какой-то степени) язык программирования исчезнет в никуда; это всего лишь означает, что ваш PHP код не может выполняться вечно. В настоящее время, спустя 13 лет после первого официального релиза в 2000 году, эта мысль до сих пор кажется мне вполне обоснованной.
Читать дальше →

*nix-way: Даже если тебя съели, у тебя есть как минимум два выхода

Reading time2 min
Views31K
В процессе работы с операционными системами GNU/Linux обычно привыкаешь делать какие-то операции одними и теми же средствами. Философия UNIX (*nix-way) предполагает наличие большого количества простых программ для выполнения простых действий, а результаты работы можно передавать между разными программами через потоки. Но вот представьте, что возникает ситуация, когда кто-то нечаянно, по глупости или из нехороших побуждений удалил исполнимый файл, который являлся бинарным файлом какой-то команды, которой вы более или менее часто пользовались. И что тогда делать?

И вот здесь начинается самое интересное. Практика показывает, что многие вещи можно делать более чем одним способом. Я попытался составить небольшой список взаимозаменяемых действий, которые в Linux могут быть выполнены более чем одним способом.

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

Чем опасен rebase, или как получилось, что 2*3=5

Reading time2 min
Views96K
Однажды старший программист Антон искал причину очередного бага в очень важном проекте компании:
git bisect start
git bisect bad
git bisect good
…

В компании использовали rebase, история коммитов была линейной, и поиск по ней доставлял Антону одно удовольствие.
— Ага, нашел. Ну конечно: в коде написано «2*3=5», ещё бы оно работало с этим бредом! Какой @#$%^ это написал?
Читать дальше →

Почему Erlang?

Reading time6 min
Views20K
Оригинал статьи: smyck.net/2012/04/22/why-erlang

Шансы, что вы читаете эту статью на устройстве с многоядерным процесcором, растут каждый день, вот почему все постоянно говорят про параллелизм (concurrency). Параллелизм для наших web приложений и API бэкендов, это когда вывод htop выглядит примерно как на картинке:

Concurrente htop

Я недавно был на великолепной Ruby конференции и три или четыре доклада были про параллелизм. Сообщество Ruby достаточно открыто и обсуждалось достаточно много возможностей: использовать потоки, использовать различные среды выполнения Ruby, чтобы обойти GIL, использовать больше процессоров, использовать модель акторов через библиотеки как Celluloid или даже использовать Akka через JRuby.

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

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

Valve тестирует биологические обратные связи в своих играх

Reading time1 min
Views33K
Компания Valve начала тестирование новых технологий биологической обратной связи, основанных на выделении пота и движении глаз – это часть общих усилий, направленных на учет эмоций пользователей в играх компании. Майк Амбиндер, постоянный психолог-экспериментатор Valve, обсудил разработку на конференции NeuroGaming Conference and Expo, которая прошла на прошлой неделе в Сан-Франциско.

Как говорит Амбиндер, Valve уже начала эксперименты с потеющими игроками в Left 4 Dead, где уровень выделения пота корелировался с волнением, которое испытывает игрок. Полученные данные передавались программе, и геймплей подстраивался под них (вот тут, кстати, совершенно потрясающая презентация об AI в L4D).

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

Information

Rating
Does not participate
Date of birth
Registered
Activity