Архив за 20 сентября 2014

Наверняка многие уже слышали о подходе FRP для организации асинхронного кода. На хабре уже писали об FRP (Реактивное программирование в Haskell, FRP на Bacon.js) и есть хорошие доклады на эту тему (Программировние UI с помощью FRP и Bacon.js, Functional Reactive Programming & ClojureScript, О Bacon.js от Juha Paananen — автора бекона)

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

Вот что это дает по сравнению с обратными вызовами:

1) Поток событий (Event stream) и значение меняющаяся во времени (Property / Behavior) становятся объектами первого класса. Это значит что их можно передавать в функции и возвращать из функций.

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

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

К примеру можно написать функцию, возвращающую поток перетаскиваний (drag). В качестве параметров она будет принимать 3 потока — начало перетаскивания, движение, конец перетаскивания. Дальше можно передать в эту функцию: либо потоки для соответствующих событий мыши (mousedown, mousemove, mouseup), либо для touch событий (touchstart, touchmove, touchend). Сама же функция не будет ничего знать об источниках событий, а будет работать только с абстрактными потоками. Пример реализации на Bacon.

2) Явный state

Второе большое преимущество FRP это явное управление состоянием. Как известно, state — один из самых главных источников сложности программ, поэтому грамотное управление им позволяет писать более надежные и простые в поддержке программы. Отличный доклад от Рича Хикки о сложности (complexity) «Simple Made Easy».

FRP позволяет писать бОльшую часть кода на «чистых функциях» и управлять потоком данных (dataflow) явно (с помощью потоков событий), а состояния хранить тоже явно в Property.

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

Несмотря на то, что iPhone 6 и iPhone 6 Plus поступили в продажу одновременно, версия с большей диагональю сразу же стала дефицитной. Вчера, работая над постом о разборе «шестерки», я получал информацию о настоящей битве, развернувшейся в Европе за iPhone 6 Plus. Честно говоря, был момент, когда надежда оперативно получить экземпляр для разбора почти растаяла. В Париже, в Ницце, в Мюнхене – везде первый фаблет (или смартшет, как кому нравится) Apple поступил в продажу в ничтожном количестве и был мгновенно расхватан. И уже около полуночи пришла весть – один экземпляр все же удалось добыть. Утром в субботу он прибыл в дружественный сервисный центр, и мы сразу же приступили к тотальному разбору.

Разумеется, не для того, чтобы посмотреть на начинку, а для наблюдений за ходом инженерной мысли Apple, оценки ремонтопригодности и сравнения с iPhone 6 и iPhone 5s.

iPhone 6 Plus наш! Разбираем до основания самый большой смартфон Apple, сравнивая с iPhone 6 и 5SЧитать полностью »

Дизайн интерфейсов в эпоху Больших Экранов

Несмотря на годы сопротивления, Apple наконец-то сдалась, и недавно представленный iPhone 6 теперь тоже может похвастаться (или «похвастаться») большим экраном. Всего лишь в течение прошедшего понедельника, 15 сентября, Apple продала более четырёх миллионов новых смартфонов по предзаказам. Всего лишь за одну ночь они продали почти половину от общего количества iPhone 5s и 5c, проданных за первые выходные в прошлом году.

Всё говорит о том, что устройства с дисплеями 3,5-4 дюйма неизбежно и очень быстро уходят в прошлое. Согласно Adobe 2014 Mobile Benchmark Report количество просмотров со смартфонов с 4-дюймовыми дисплеями снизилось на 11%.

Дизайн интерфейсов в эпоху Больших Экранов

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

Это восемнадцатая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.

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

В предыдущей статье «Почему люди не растут: чем больше вариантов роста, тем хуже», мы договорились продолжить препарирование этой темы и перейти к ответу на вопрос «А как все-таки расти?»

Особенно, видимо, вопрос зацепил тех, кто сейчас работает больше всех и начинает что-то подозревать…

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

История 1: не пофигическая

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

Как все запущено

Слава Панкратов, бизнес-тренер, управляющий партнер Школы менеджеров Стратоплан.

Моя схема получения первой менеджерской позиции – «Карьерный лифт»: мой менеджер стал директором новой компании и позвал меня на позицию руководителя отдела тестирования ПО. Я учился на 4 курсе института (первая вышка), стационар, 22 года.
Читать полностью »

Привет!
Ничего не писал со времен своей первой статьи, решил, что пора это исправить.

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

Ниже я даю рецензии на книжки, которые считаю очень полезными в различных разделах computer science, которые используются в геймдеве. Я намеренно опускаю книги по C++ и алгоритмам: мне кажется, эта тема уже настолько изучена и освещена, что больше про нее не стоит рассказывать.

Я старался покрыть максимальное количество разных топиков, особенно тех, что спрашивают на собеседованиях. Я старался воздерживаться от domain-specific литературы: профессионалы и так знают. Все картинки содержат ссылки на амазон.

А какие книжки нравятся вам?
Также в комментах можете писать, на какие темы вам были бы интересны посты.

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

Данное руководство – серия считающихся классическими постов блога человека с ником pmarca, а в жизни – Марка Андреессена, создателя браузера Mozaic, из которого вырос Netscape, а затем и Mozilla.
Ссылки специально даются на старые версии сайтов, современные статьям, сохранённые в интернет-архиве.

В этой серии постов я поделюсь с вами моими знаниями и опытом по созданию высокотехнологичных стартапов.

Мой опыт в данной области собран при работе в трёх компаниях, в которых я был со-основателем: Netscape, продана America Online в 1998 за $4.2 миллиарда; Opsware (бывш. Loudcloud), софтовая компания с капитализацией порядка $1 миллиарда; Ning, интернет-компания, предоставляющая платформу для социальных сетей.

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

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

Данная статья — перевод моего туториала, который я изначально писал на английском. Однако этот перевод содержит дополнения и улучшения по сравнению с оригиналом.
Туториал не требует знания Lua, а вот C++ нужно знать на уровне чуть выше базового, но сложного кода здесь нет.

Когда-то я написал статью про использование Lua с C++ с помощью Lua C API. В то время, как написать простой враппер для Lua, поддерживающий простые переменные и функции, не составляет особого труда, написать враппер, который будет поддерживать более сложные вещи (функции, классы, исключения, пространства имён), уже затруднительно.
Врапперов для использования Lua и C++ написано довольно много. С многими из них можно ознакомиться здесь.
Я протестировал многие из них, и больше всего мне понравился LuaBridge. В LuaBridge есть многое: удобный интерфейс, exceptions, namespaces и ещё много всего.
Но начнём по порядку, зачем вообще использовать Lua c С++?
Читать полностью »

В давние времена разработки мобильных сайтов и приложений отладка была сложной задачей. Да, можно было заполучить устройство и быстренько проверить работу – но что было делать, если ты обнаруживал баг?

При отсутствии инструментов отладки приходилось полагаться на разные хаки. В целом они сводились к попыткам воспроизвести баг в десктопном браузере и затем отловить его при помощи Chrome Developer Tools или где-то ещё. К примеру, можно было уменьшить размер окна браузера или поменять user agent.

Грубо говоря, эти хаки не работали. Если ты правишь баг на десктопе, ты не уверен, что он исправлен на мобильном устройстве (МУ). Поэтому приходилось постоянно метаться между устройством и десктопом.

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

В этой статье мы разберём несколько эмуляторов и симуляторов, которые позволяют быстро и легко тестировать сайты и приложения. Затем посмотрим на инструменты для удалённой отладки, позволяющие подключаться к МУ.
Читать полностью »

Popcorn Time — обновление до версии 0.3.3

17 сентября 2014 года состоялся выпуск Popcorn Time версии 0.3.3 — программного обеспечения с открытым исходным кодом предоставляющего пользователю простой и понятный интерфейс для потокового просмотра фильмов и сериалов по протоколу BitTorrent.
На Хабре уже не раз упоминали Popcorn Time и попытки закрытия проекта (Popcorn Time: самая удобная программа для просмотра торрентов, Разработчики Popcorn Time исчезают один за другим, Popcorn Time закрылся из-за «угрозы юридических преследований и закулисных махинаций», MPAA добилась удаления форков Popcorn Time с GitHub), но Popcorn Time по прежнему жив и активно разрабатывается. Кому интересно что нового привнесла версия 0.3.3 — добро пожаловать под кат.
Читать полностью »


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