Дмитрий @Keyten
JavaScript
Лёгкий способ писать iOS приложения на вебе
9 min
84KВсем привет. Не так давно Габриель подарил нам игру 2048. Это тот самый удивительный случай, когда клон игры становится более популярный, чем оригинал. Не малая часть успеха Габриеля — открытый код и, вуаля, MIT лицензия. Набрав чуть больше 20к очков, захотелось поделиться результатом с друзьями, кроме как сделать скриншот не получилось. Глянул аппстор на наличие клона с геймцентром или чем-то подобным — пусто. И тут подумал, почему бы нет?
Забегая вперёд, на создание приложения и всех «ништяков» к нему ушло 4 дня. На выходе универсальный код, который от части работает и в вебе и легко портируется на иос/андроид. Однако, давайте по порядку.

Забегая вперёд, на создание приложения и всех «ништяков» к нему ушло 4 дня. На выходе универсальный код, который от части работает и в вебе и легко портируется на иос/андроид. Однако, давайте по порядку.

+52
Как правильно лгать с помощью статистики
7 min
242KСуществуют три вида лжи: ложь, наглая ложь и статистика (источник)
Есть такой замечательный жанр — "вредные советы", в котором детям дают советы, а дети, как известно, всё делают наоборот и получается всё как раз правильно. Может быть и со всем остальным так получится?
Статистика, инфографика, big data, анализ данных и data science — этим сейчас кто только не занят. Все знают как правильно всем этим заниматься, осталось только кому-то написать как НЕ нужно этого делать. В данной статье мы именно этим и займемся.

Hazen Robert "Curve fitting". 1978, Science.
Структура статьи:
- Введение
- Предвзятая выборка (Sampling bias)
- Правильно выбираем среднее (Well-chosen average)
- И еще 10 неудачных экспериментов, про которые мы не написали
- Играем со шкалой
- Выбираем 100%
- Скрываем нужные числа
- Визуальная метафора
- Пример качественной визуализации
- Заключение и дальнейшее чтение
+306
Что должен знать каждый участник крупного MMO-проекта
5 min
66K
Рядовые программисты обычно всё это прекрасно знают. А вот менеджерский состав нередко считает, что совершенно не обязательно разбираться в игровой экономике, клиент-серверной архитектуре и психологии игрового комьюнити. Ведь есть же крутая команда спецов, которые обо всём позаботятся.
Итог очевиден: трудно вспомнить хотя бы один крупный MMO-проект, выпущенный за последние два года, который избежал бы стандартного набора граблей. Такое ощущение, что MMO-индустрия не способна учиться на своих ошибках.
Итак, список вопросов, ответы на которые должен знать каждый, от топ-менеджера до работника техподдержки крупного MMO-проекта.
+60
Самая сложная игра всех времён
3 min
198K
Robot Odyssey
Нью-йоркский программист Дэвид Ауэрбах (David Auerbach) вспоминает компьютерную игру, для прохождения которой ему понадобилось 13 лет и которая определила его будущее как программиста.
+153
BITcommander — ваш следующий файловый менеджер
2 min
21KМопед не мой, я просто хочу обратить внимание общественности на этот интересный проект. Может быть кто-то захочет его поддержать.

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

BITcommander это файловый менеджер нового поколения для Windows, целью которого является собрать лучшие из уже имеющихся решений и, переосмыслив их с точки зрения удобности использования, реализовать в виде новой программы, дающей пользователю более комфортный опыт навигации и управлении данными.
+45
Девушкам: пять причин выйти замуж за айтишника и пять причин как следует подумать перед этим
6 min
83K
Disclaimer: все описанное ниже — плод личного опыта, а так же результаты наблюдения за друзьями и знакомыми. Ну и не принимайте все чересчур серьезно.
Несмотря на календарный понедельник, близкий новый год вселяет пятничное настроение, которое, в свою очередь, побуждает поговорить о чем-нибудь жизненном. Этот пост адресован девушкам, которым довелось встречаться или даже выйти замуж за айтишника, и рассказывает кое-что о сильных и слабых сторонах ваших избранцев. Кроме того, думаю, не помешает его прочесть и парням: быть может, он поможет понять причину негодования вашей любимой.
Пять причин выйти замуж за айтишника
1. Надежность и ответственность
Большинство моих знакомых коллег обладают высоким чувством ответственности — оно, видимо, волей-неволей вырабатывается в ходе профессиональной деятельности. Женясь на вас, айтишник возьмет на себя ответственность за ваш комфорт и достаток, и, будьте уверены, сделает все, чтобы их обеспечить. Здесь же стоит упомянуть и о способности фокусироваться на цели и достигать ее: обычно тихий и неподвижно медитирующий у монитора, ваш избранник может проявить бешенную активность и за невероятно короткие сроки свернуть горы. К примеру, если в какой-то момент он поймет, что негоже второй месяц сидеть в наполовину ободранном жилище, к концу следующей недели вы можете обнаружить себя в чистенькой и отремонтированной квартире. Так же на личном опыте проверенно, что один программист может за два-три часа привести в идеальный порядок двухкомнатную квартиру, которая общими усилиями замусоривалась в течение предыдущего месяца.
2. Интересный собеседник
Вопреки расхожему стереотипу, у большинства айтишников есть увлечение за рамками их основной специальности, и почти все из их них могут на эту тему много, понятно и интересно рассказывать. Повинуясь привычке, полученной в основной профессии, ваш парень вникает во все тонкости своего хобби, и если вам удастся нащупать эту тему, вы можете узнать много нового как о теме, так и о нем. Среди моих коллег есть много музыкантов, кое-кто здорово рисует, третьи увлекаются боевыми искусствами (и не только их теоретической стороной), четвертые — заядлые коллекционеры. Кстати, геймеров среди них почти нет.
Если так получится, что у вас хобби общее — вам можно будет только позавидовать. А если же нет — в тот момент, когда ваш любимый поймет, чем увлекаетесь вы, он наверняка предпримет небольшое исследование, просто чтобы иметь возможность по-настоящему оценить ваши достижения, ну и разговор поддержать. Впрочем, увы, новейшие веяния моды и новый альбом поп-звезды он вряд ли будет обсуждать…
+164
Spine — первые шаги
5 min
133KTutorial

Привет Хабр!
Относительно недавно на кикстартере завершился сбор денег на новый инструмент для игроделов, но на Хабре это не было освещено. Spine —программа для создания скелетной 2d анимации. Этот инструмент будет интересен не только инди-разработчикам и начинающим гейм дизайнерам, но также опытным игрокам рынка. Простота в использовании и притягательный дизайн создают впечатление творящегося на экране волшебства.
Всех заинтересовавшихся прошу под кат (много картинок).
+48
Hot Dot Parallax Engine под лицензией MIT
2 min
30K
Более 300 сайтов использовали движок до публикации.
Девять месяцев назад мы запустили сайт студии. Он быстро набрал популярность, мы получили несколько наград, о нас написали профильные СМИ.
Сайт так же быстро оброс клонами. Некоторые скопировали нас полностью. Попадались и подобные забавные вещи. Сайт на нашем движке попал на One Page Love, а после выявления воровства был удален из рейтинга. Когда количество клонов превысило три сотни, мы решили сделать исходный код движка открытым.
+53
Изобретаем JPEG
28 min
178KTutorial

Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье «Декодирование JPEG для чайников»). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.
Знание алгоритма JPEG очень полезно не только для сжатия изображений. В нем используется теория из цифровой обработки сигналов, математического анализа, линейной алгебры, теории информации, в частности, преобразование Фурье, кодирование без потерь и др. Поэтому полученные знания могут пригодиться где угодно.
Если есть желание, то предлагаю пройти те же этапы самостоятельно параллельно со статьей. Проверить, насколько приведенные рассуждения подходят для разных изображений, попытаться внести свои модификации в алгоритм. Это очень интересно. В качестве инструмента могу порекомендовать замечательную связку Python + NumPy + Matplotlib + PIL(Pillow). Почти вся моя работа (в т. ч. графики и анимация), была произведена с помощью них.
Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.
+351
250 строк кода, распознающих дату на русском языке
2 min
47KОколо года назад мне понадобилось распознавать даты в тексте, который вводят пользователи. Пришлось немного разобраться в регулярных выражениях и написать функцию, на вход которой поступает текстовая строка, а в результате получается распознанная дата.

Пример и код в jsFiddle.

Пример и код в jsFiddle.
+110
Для первопроходцев. На волнах вместе с Jolla (UPD)
11 min
62K
После того, как разочарование от поступка Нокии по расформированию всего подразделения Maemo/Meego достигло своего максимума, в интернете появились слухи о том, что некий стартап может возродить эту великолепную операционку и продолжить её развитие. Далее было много всяких слухов, якобы Nokia подарила все разработки этому стартапу (чего, конечно же, не было). Вскоре всплыло и название этого самого стартапа — Jolla. Целый год в интернет попадали обрывки информации о будущем телефоне, скриншоты, новости, идеи и вот, наконец, в декабре 2013 года этот телефон появился в открытой продаже. Сначала ещё в июне был открыт предзаказ на сумму 100 евро, за который высылалась футболка и письмо со словами благодарности в оказанном доверии и поддержке, ну а сам телефон пришёл только через полгода — этой зимой. Наконец-то, я держу в руках это долгожданный аппарат и хочу поделиться своими впечатлениями о нём. Всё же, телефон ещё редкий и возможности пойти в магазин, чтобы своим руками «пощупать», пока нет.
+62
Несколько JavaScript хаков для хипстеров
3 min
55KTranslation

JavaScript занимательный язык программирования.
Постоянные опасения совершить ошибки в коде заставляют все время думать. Навыки программирования улучшаются из-за того, что приходится постоянно выполнять код в уме, другого способа нет.
Вот почему важно, чтобы код был аккуратный, компактный и изящный. Такой, в который можно влюбиться. В противном случае, JavaScript может и отпугнуть.
Я подобрал для вас несколько интересных сниппетов, которые радуют меня самого, и которые я сам использую вместо скучного кода, занимающего много места. Некоторые из них делают код короче, другие четче и яснее. Еще парочка — это хаки для отладки.
Все это я узнал, изучая проекты с исходным кодом, но здесь я пишу так, как будто бы это я их придумал.
+45
TempusJS — работаем с датой в javascript
7 min
20KВсем привет!
Мне часто приходится работать со статистическими данными и там очень много завязано на датах. Притом, одна и та же дата может быть использована на странице в разных форматах (например, в удобном для машины и в удобном для человека). Я думаю, что большинство из вас отлично представляют весь этот ужасающий по размерам код, который получается при использовании объекта Date.
К примеру, чтобы получить текущую дату в формате ДД.ММ.ГГГГ нам потребуется сделать следующее:
А когда таких строк становится много? Легко ли упомнить, что в javascript месяц начинается с нуля, когда разрабатываешь не только на нем? Или то, что тут миллисекунды, а не секунды, как почти везде на бэкенде? Можно решить часть задач популярной библиотекой Moment.js, но она работает весьма медленно.
Рассматриваемая библиотека решает эти проблемы.
Если интересно, предлагаю вам прочитать этот небольшой обзор.
Мне часто приходится работать со статистическими данными и там очень много завязано на датах. Притом, одна и та же дата может быть использована на странице в разных форматах (например, в удобном для машины и в удобном для человека). Я думаю, что большинство из вас отлично представляют весь этот ужасающий по размерам код, который получается при использовании объекта Date.
К примеру, чтобы получить текущую дату в формате ДД.ММ.ГГГГ нам потребуется сделать следующее:
var d = new Date(),
fd = d.getDate() + '.' + (d.getMonth()+1) + '.' + d.getFullYear();
А когда таких строк становится много? Легко ли упомнить, что в javascript месяц начинается с нуля, когда разрабатываешь не только на нем? Или то, что тут миллисекунды, а не секунды, как почти везде на бэкенде? Можно решить часть задач популярной библиотекой Moment.js, но она работает весьма медленно.
Рассматриваемая библиотека решает эти проблемы.
Если интересно, предлагаю вам прочитать этот небольшой обзор.
+44
Генератор визуальных интерфейсов с генетическим алгоритмом в помощь дизайнерам
2 min
13K
Результат генерации первого поколения
Я не дизайнер. Но иногда приходится для каких-то своих проектов придумывать какой-то дизайн, чего я очень не люблю делать. Колдуя несколько часов в фотошопе в голову ничего интересного так и не приходит. Вроде сделаю какой-никакой макет, но чего-то не хватает. Что-то не то. Нужно вдохновение. Именно так и родилась идея сделать генератор визуальных интерфейсов, который служил бы источником вдохновения, подсказывал какие-нибудь формы и их положение. А потом в мою неспокойную голову пришла идея сделать генетический алгоритм, где в роли фитнесс-функции буду выступать я со своей субъективной оценкой. Забегая вперед скажу, что ничего особенного из этой идеи не вышло.
0
Задачи на собеседованиях в Яндексе
15 min
360KОткрытые вакансии на должность разработчика в Яндексе есть всегда. Компания развивается, и хороших программистов не хватает постоянно. И претендентов на эти должности тоже хоть отбавляй. Главная сложность – отобрать действительно подходящих кандидатов. И в этом плане Яндекс мало чем отличается от большинства крупных IT-компаний. Так что базовые принципы, описываемые в этой статье, могут быть применимы не только к Яндексу.
Однако стоит оговориться, что статья все же про подбор разработчиков. Т.е. собственно тех восьмидесяти процентов сотрудников, на которых держится массовая разработка. Часто мы нанимаем людей на специальные вакансии: например, разработчиков систем компьютерного зрения, лингвистов, экспертов по машинному обучению. В этом случае формат собеседования может заметно отличаться.

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

+135
Направленное освещение и затенение в 2D-пространстве
8 min
49K
Добрый день, Хабравчане!
Хотелось бы рассказать об одном из способов отрисовки освещения и затенения в 2D-пространстве с учетом геометрии сцены. Мне очень нравится реализация освещения в Gish и Super MeatBoy, хотя в митбое его можно разглядеть только на динамичных уровнях с разрушающимися или перемещающимися платформами, а в Гише оно повсеместно. Освещение в таких играх мне кажется таким «тёплым», ламповым, что непременно хотелось нечто подобное реализовать самому. И вот, что из этого вышло.
+93
Пузырьковая сортировка и все-все-все
5 min
641K
Все отлично знают, что из класса обменных сортировок самый быстрый метод – это так называемая быстрая сортировка. О ней пишут диссертации, её посвящено немало статей на Хабре, на её основе придумывают сложные гибридные алгоритмы. Но сегодня речь пойдёт не про quick sort, а про другой обменный способ – старую добрую пузырьковую сортировку и её улучшения, модификации, мутации и разновидности.
Практический выхлоп от данных методов не ахти какой и многие хабрапользователи всё это проходили ещё в первом классе. Поэтому статья адресована тем, кто только-только заинтересовался теорией алгоритмов и делает в этом направлении первые шаги.
image: пузырьки
+91
Динамическое освещение и неограниченное количество источников произвольной формы в 2D
6 min
40KПродолжая тему велосипедостроения, хочу поделится тем, как я делал освещение в пиксель-арт игрушке.
Особенность этого метода заключается в том, что эти источники света не ограничиваются ни количеством ни формой.

Особенность этого метода заключается в том, что эти источники света не ограничиваются ни количеством ни формой.

+72
Еще раз об обфускации JavaScript или сказ о том, как я обфускатор писал. Часть 1
3 min
14KВозникла тут задача, написать код на php, который принимает js-код и обфусцирует его по самое не балуй. После курения гугла и хабра (в том числе, как правильно подсказывает monolithed, вот этой статьи) я приступил к работе. Как и следовало, я начал того, что запустил консоль JS в хроме и начал пытаться получать строки из месива символов, вот что получилось (с пояснениями):
«false»
[] — пустой массив
! — операция логическое НЕ, особенность js (и не только), в том, что при булевых операциях если операнд равен 0, false, undefined, null, '' (пустой строке), то он приводится к false. Во всех остальных случаях — к true. (спасибо oshibka404 за поправки)
То есть (![]) = false
+ — операция сложения и объединения строк, если оба операнда числа, то произойдет сложения, иначе это будет объединение строк с приведением типов. Кстати, тут есть особая магия типов, но это позже.
(![]+[])
«false»
[] — пустой массив
! — операция логическое НЕ, особенность js (и не только), в том, что при булевых операциях если операнд равен 0, false, undefined, null, '' (пустой строке), то он приводится к false. Во всех остальных случаях — к true. (спасибо oshibka404 за поправки)
То есть (![]) = false
+ — операция сложения и объединения строк, если оба операнда числа, то произойдет сложения, иначе это будет объединение строк с приведением типов. Кстати, тут есть особая магия типов, но это позже.
+24
Information
- Rating
- 6,741-st
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity