• История игрового рынка, часть 1



      Приближается день рождения одной из самых известных компьютерных игр в мире — Тетриса. И тем большую гордость вызывает тот факт, что авторство принадлежит нашему соотечественнику, Алексею Пажитнову. Разошедшаяся с тех пор колоссальными тиражами, эта игра так и не принесла своему создателю никаких дивидендов. Во многом это произошло из-за ряда объективных причин, одной из которых было отсутствие как такового игрового рынка в СССР. С тех пор много воды утекло, произошло множество перемен. В России сформировался игровой рынок, прошедший через различные стадии роста. И сегодня мы хотели бы вспомнить о том, как протекал этот процесс, вспомнить о памятных вехах, которых набралось не так уж мало за 30 лет, прошедшие с момента создания Тетриса.

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

        Мы продолжаем рассказывать о технологиях, используемых на нашем сервисе email-маркетинга Pechkin-mail.ru. Одной из ключевых задач любого сервиса, связанного с данными клиентов, является загрузка этих данных на сервис. Для Печкина очень важно быстро и без проблем для пользователя загружать адресные базы, содержащие email-адреса, имена, фамилии и другие дополнительные данные.

        Что использовать в качестве инструмента?


        В качестве базового стандарта, используемого при импорте адресных баз, мы взяли Microsoft Excel. Объясняется это просто:
        • это стандартный инструмент, которым на базовом уровне владеют 100% пользователей компьютеров. Более того, в бизнесе — это де-факто корпоративный стандарт и используется даже, если на рабочих компьютерах Mac или Linux.
        • Практически все CRM-, CMS-, облачные или десктопные системы имеют экспорт в Excel или CSV, который простым пересохранением приводится к формату XLS или XLSX.
        • Известно также, что “90% ошибок ПО сидит в полуметре от монитора”. Не в обиду будет сказано рядовым пользователям, но мы должны учитывать самый базовый уровень подготовки и тех. поддержке для объяснения достаточно сказать “Загрузите Excel-файл”, а не объяснять процедуру подготовки файла в нужном формате.


        Проблему пользователей при импорте адресных баз сняли. Но тут возникает уже проблема непосредственно разработки.
        Прочитать о быстрой реализации импорта из Excel на PHP и LibXL
      • Рендеринг WEB-страницы: что об этом должен знать front-end разработчик

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

        Данное направление можно и нужно оптимизировать на этапе вёрстки/frontend-разработки, поскольку, очевидно, что разметка, стили и скрипты принимают в рендеринге непосредственное участие. Для этого соответствующие специалисты должны знать некоторые тонкости.
        Читать дальше →
      • AndroidSocialNetworks — удобная работа с социальными сетями


        AndroidSocialNetworks — это библиотека для Android, которая делает работу с соц. сетями проще. Если вы когда-либо пробовали работать с соц. сетями, то знаете насколько это тяжело. Нужно прочитать документацию для каждой соц. сети, скачать и подключить SDK или стороннюю библиотеку, позаботиться о жизненном цикле http запросов. AndroidSocialNetwork должна сделать вашу жизнь проще, она содержит общий интерфейс для Facebook, Twitter, LinkedIn и Google Plus — просто сбилдите SocialNetworkManager с помощью SocialNetworkManager.Build -> добавьте его в FragmentManager -> настройте AndroidManifest.xml -> работайте с настроенными соц. сетями. Вы сможете делать login, постить обновление статуса, постить фотки, добавлять / удалять друзей.
        Читать дальше →
      • Режимы наложения слоёв в Web

          Привет, Хабр!
          Одна из главных причин тяжёлых увечий дизайнеров претензий к неопытным дизайнерам от верстальщиков, при получении от них PSD-макетов — это наличие слоёв с заданными режимами смешивания, отличными от normal. Вполне возможно, что скоро это уйдёт в прошлое!
          Читать дальше →
        • Опубликован код движка для рендеринга PDF в браузере Chrome

            Компания Google опубликовала под свободной лицензией BSD исходный код PDFium — движка, который осуществляет рендеринг PDF в браузере Chrome. Он осуществляет очень точный и быстрый рендеринг документов, не уступая Acrobat Reader.

            Движок PDFium разработан при участии коммерческой компании Foxit Software, которая выпускает много проприетарных программ для работы с PDF, в том числе редакторы документов, быстрые индексаторы архивов, SDK для внедрения в сторонние продукты. Разработчики заявляют, что их программное обеспечение по производительности примерно в три раза превосходит любой другой софт для работы с PDF, включая фирменные программы от Adobe.

            Судя по всему, Google лицензировала у Foxit Software движок рендеринга и добилась разрешения выложить исходный код в общественное пользование.
            Читать дальше →
          • Вкладки (страницы) на одной странице на html/css с помощью :target

            Рассмотрим один из вариантов создания нескольких страниц или вкладок (в том числе вложенных) на html и css без скриптов, списков и таблиц, на одной html странице. Только дивы, только хардкор. Подходит для небольших портфолио и элементов интерфейса. Не будьте буратинами используя это везде подряд.
            Суть:

            image
            Читать дальше →
          • Всё, что вы должны знать о прототипах, замыканиях и производительности

            • Translation
            • Tutorial

            Не всё так просто


            На первый взгляд, JavaScript может показаться достаточно простым языком. Возможно, это из-за достаточно гибкого синтаксиса. Или из-за схожести с другими известными языками, например, с Java. Ну или из-за достаточно малого количества типов данных, по сравнению с Java, Ruby, или .NET.

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

            В JavaScript поиск данных зависит от двух вещей: прототипного наследования и цепочек областей видимости. Для разработчика понимание этих двух механизмов совершенно необходимо, ибо ведет к улучшению структуры, а, зачастую, ещё и производительности кода.
            Читать дальше →
          • Десктопные CRM: практическая травматология внедрений

              Когда фирмы обращаются за консультацией по поводу автоматизации бизнеса в целом и внедрения CRM в частности, нередко наблюдается один и тот же симптом: нужна не инфраструктура с нуля, нужна замена другому софту. Это зачастую сложная ситуация, особенно, когда видишь, что софт стоит адекватный, хоть и старой версии, а пользоваться им не умеют или не хотят. Приходится собирать представителей клиента и с сожалением объяснять, что кнопка «Сделать всё» так и не создана, а любое ПО требует ответственной работы со стороны человека.

              Читать дальше →
            • Замыкания в Javascript [Часть 1]

              Перевод статьи Ричарда Корнфорда Javascript Closures.

              • Введение
              • Разрешение имен свойств объектов
                • Присваивание значений
                • Чтение значений

              • Разрешение имен идентификаторов, контексты исполнения и цепь областей видимости
                • Контекст исполнения
                • Цепь областей видимости и свойство [[scope]]
                • Разрешение имен идентификаторов

              • ...

              Введение


              Замыкание
              Замыкание — это выражение (обычно функция), которое может иметь свободные переменные, вместе со средой, которая привязывает эти переменные (т.е. “замыкает” это выражение).

              Замыкания относятся к наиболее мощным особенностям ECMAScript (javascript), но они не могут быть применены должным образом без понимания. Несмотря на то, что их легко создать, даже случайно, их создание может иметь пагубные последствия, в частности, в некоторых относительно распространенных окружениях браузеров. Чтобы избежать случайных столкновений с недостатками и использовать преимущества замыканий, необходимо понимать их механизм. Это сильно зависит от роли цепи областей видимости в разрешении имен идентификаторов (identifier resolution) и от разрешения имен свойств в объектах.

              Самое простое объяснение замыкания в том, что ECMAScript допускает вложенные функции, определения функций и функции-выражения (function expressions) внутри тел других функций. И эти вложенные функции имеют доступ ко всем локальным переменным, параметрам и функциям, находящихся внутри их внешней функции (внешних функций). Замыкание образуется, когда одна из этих вложенных функций становится доступной вне той функции, в которую она была включена, таким образом, она может быть выполнена после завершения внешней функции. В этот момент она все еще имеет доступ к локальным переменным, параметрам и внутренним декларациям функций (function declarations) своей внешней функции. Эти локальные переменные, параметры и декларации функций (изначально) имеют те же значения, которые были во время завершения внешней функции и могут взаимодействовать с внутренней функцией.

              К сожалению, правильное понимание замыканий требует понимания механизмов, которые стоят за ними, и немало технических подробностей. Хотя некоторые из алгоритмов, определенных в ECMA 262, затронуты в начале последующего объяснения, большинство не могут быть опущены или просто приведены к упрощенному виду. Если вы знакомы с разрешением имен свойств объектов, то можете пропустить этот раздел, но только люди, уже знакомые с замыканиями, могут позволить себе пропустить последующие разделы и прямо сейчас перестать читать и вернуться к их использованию.
              Читать дальше →
            • waSlideMenu.js. Многоуровневое прокручивающееся меню

                jQuery-плагин, который превращает вложенное (древовидное) меню в систему прокручивающихся меню.

                Репозиторий: github.com/webasyst/waslidemenu
                Попробовать: jsfiddle.net/7LnSY/
                Пример: demo-ru.webasyst.com
                Подробнее о плагине
              • Интерфейс приложения: наши ошибки и 16 советов как их не повторить

                  Как только мы сделали первую версию iOS приложения, я начал упорно приставать к людям на футбольных полях и баскетбольных площадках с просьбой установить Topic и пощелкать его прямо при мне.

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


                  Изображение №1: поиск игр (Find a game в меню приложения)
                  Читать дальше →
                • Виртуальная клавиатура скоро может стать реальной



                    Сегодня мы постоянно находимся онлайн и практически интегрированы в виртуальный мир. Kinnect и Wii позволяют использовать всё наше тело в физическом плане, а Google Glass и аналогичные продукты скоро откроют абсолютно новый мир для всех.

                    Также вскоре наравне с этими продуктами на рынок будет выпущена совершенно необычная виртуальная клавиатура, созданная исследователями из MDH. Этот новый девайс, используя новейшие технологии, полностью заставит поменять мировоззрение на работу за компьютером или ноутбуком.
                    Читать дальше →
                  • Функция reduce

                    • Tutorial
                    JavaScript в последние годы набрал нешуточную популярность, в связи с чем его подводные камни также стали явственно видны. Справедливости ради, стоит отметить, что любой язык в некоторой мере имеет как своё legacy, так и подводные камни.
                    Конкретно JavaScript обладает целым огородом камней. Подводным огородом.

                    На практике, подводные камни встречаются не так часто, напротив, хороший код склонен быть описанным в рамках здорового подмножества языка. Это также является и причиной, почему запомнить все заковырки языка достаточно сложно: они не являются необходимыми для каждодневной практики. Тем не менее, разнообразные граничные случаи использования языковых конструкций это отличная разминка для ума, а также стимул узнать язык немного лучше. Сегодняшний экземпляр попался мне на глаза в процессе прохождения JavaScript Puzzlers.

                    Меня заинтересовал вопрос номер 3:
                    Каков результат этого выражения (или нескольких)?

                    [ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]
                    

                    В качестве ответа авторами, на выбор, даются следующие варианты:
                    * ошибка
                    * [9, 0]
                    * [9, NaN]
                    * [9, undefined]

                    Попробуйте и вы, без запуска интерпретатора, пользуясь только своим умом ответить на этот вопрос.

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

                    А в этой статье вы найдёте:
                    * Разбор задачки.
                    * JavaScript reduce с чисто практической точки зрения.
                    * Несколько акробатических этюдов с reduce (reduce с академической точки зрения).
                    * Репозиторий с плюшками к статье.
                    * Несколько других reduce.
                    reduce, reduce, reduce
                  • 25 Laravel Tips and Tricks

                    • Translation
                    Было время, достаточно недавно, когда PHP и его сообщество ненавидели. Главная шутка была про то, насколько ужасен PHP.

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

                    Но позже, на удивление, вещи начали меняться — и достаточно быстро. Как будто пока ведьма помешивала горшочек, из ниоткуда начали появляться новаторские проекты. Наверно, самый заметный проект был Composer: наиболее полный менеджер зависимостей для PHP (как Bundler для Ruby или NPM для Node.js). В прошлом PHP разработчики были вынуждены совладать с PEAR (что было страшным сном, на самом деле), сейчас, благодаря Composer, они могут просто обновить JSON файл, и немедленно подтянуть все нужные зависимости. Здесь — профайлер, там — фреймворк для тестирования. Это занимает секунды.
                    Читать дальше →
                  • Представляем Intel XDK – инструмент кросс-платформенной разработки для мобильных устройств


                      Нашим постоянным читателям, конечно, известно, что Intel предоставляет богатый набор инструментов для разработчиков в области высокопроизводительных вычислений – компиляторы, математические библиотеки и многое другое. В этой статье пойдёт речь о весьма нетипичной для нашего блога теме – инструменте для программирования мобильных приложений на HTML5 Intel XDK.
                      Читать дальше →
                    • Отладка асинхронного JavaScript с помощью Chrome DevTools

                      • Translation

                      Вступление


                      Возможность асинхронной работы с помощью callback-функций(далее просто возвращаемых функций) — отличительная особенность JavaScript. Использование асинхронных возвращаемых функций позволяет вам писать событийно-ориентированный код, но так же добавляет кучу проблем, ведь код перестает выполняться в линейной последовательности.

                      К счастью, теперь в Chrome Canary DevTools вы можете отслеживать весь стек вызовов асинхронных функций в JavaScript!
                      Под катом 10Mb трафика
                    • jWidget — объектно-ориентированный JavaScript MV* framework

                        Есть замечательный сайт http://todomvc.com/, на котором демонстрируется решение одной и той же задачи с помощью разных JavaScript MV* (Model-View-[Controller]) фреймворков. Сейчас там представлены десятки различных фреймворков, у каждого из которых есть свои преимущества и недостатки. Есть там и такие гиганты, как Angular, Ember и Backbone. Несмотря на высокую конкуренцию, я все равно хотел бы продемонстрировать свой MV* фреймворк — jWidget.

                        Я быстро просмотрел все решения, представленные на сайте TodoMVC, и не нашел ни одного фреймворка, похожего на jWidget. Дело в том, что, помимо JavaScript, я много программирую на объектно-ориентированных языках программирования, таких как Java, C#, а в прошлом и на C++. Поэтому я большой фанат объектно-ориентированного программирования, SOLID принципов и паттернов объектно-ориентированного проектирования. Мне не нужен фреймворк, который стеснял бы меня в возможности применения стандартных объектно-ориентированных решений. То, что я увидел в существующих решениях TodoMVC, не внушает доверия в этом отношении. Как правило, они предоставляют некий декларативный синтаксис и мощный шаблонный движок, но объектно-ориентированная основа всего этого, даже если она существует, скрыта от наших глаз.

                        Читать дальше →
                      • Библиотека для обмена событиями, данными и задачами между вкладками браузера

                          Приветствую, уважаемое Хабрасообщество!

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

                          Сейчас библиотека выложена с парой примеров на GitHub, а под хабракатом хотелось бы осветить некоторые тонкости её применения и часть внутренней логики. Буду рад, если моя библиотека поможет кому-то сэкономить n-ое количество времени и позволит избежать изобретения собственного велосипеда.

                          Кому интересно — добро пожаловать под кат.
                          Читать дальше →
                        • Full stack web developer

                            Довольно давно в различных источниках всплывала очень интересная тема Full Stack developer'a. А именно, что должен из себя представлять такой разработчик, каким опытом, знаниями и умениями должен обладать, с какими технологиями работать? И если с вопросом что должен из себя представлять все более менее понятно – должен уметь самостоятельно написать с нуля не тривиальное приложение, т.е. frontend, backend, работа с сетью, с БД и другие плюшки, архитектурные решения и т.д. То с последующими вопросами все не так ясно. Заинтересовавшихся прошу подкат…
                            Читать дальше →