...

суббота, 20 сентября 2014 г.

[Перевод] Тестирование для мобильных устройств: эмуляторы, симуляторы и удалённая отладка

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

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


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


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


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



Эмуляторы и симуляторы


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


Симулятор iOS

Для тестирования яблочных устройств, айфонов и айпадов, есть несколько вариантов. Первый среди них – официальный Apple iOS Simulator, входящий в поставку Xcode. Позволяет тестировать разные комбинации софта и железа – но только на Mac.



Установите и запустите Xcode. Потом ПКМ и выберите «Show Package Contents». Затем пройдите “Contents” → “Applications” → “iPhone Simulator.”



Хотя найти его нелегко, использовать симулятор просто. Откройте Safari в симуляторе и тестируйте свой сайт. Можно переключаться между разными устройствами iPhone и iPad, менять версию iOS, поворачивать устройство и т.п.


Если у вас нету Mac’а, придётся заморачиваться. Можно взять iPadian, симулятор iPad для Windows. Кроме него существует ещё несколько вариантов, в частности онлайновые. Но, честно говоря, они не особенно хороши.


Эмулятор Android

У андроида эмулятор кросс-платформенный. К сожалению, он сложен в настройке.


Для начала, скачайте подборку, включающую Android Development Tools (ADT) для Eclipse и Android software development kit (SDK). Затем следуйте инструкциям по установке, не забудьте кроме настроек по-умолчанию установить и “Intel x86 Emulator Accelerator (HAXM installer)”. Также вам понадобится установить HAXM (IntelHaxm.dmg на Маке и IntelHaxm.exe на PC).



Затем создайте Android virtual device (AVD) для тестируемого устройства. В менеджере AVD есть список готовых устройств в “Device Definitions”. Для начала выберите одно из них и нажмите “Create AVD”



Выберите любой CPU, и поставьте “No skin“ и “Use host GPU”. Теперь можно запускать виртуальное устройство и использовать браузер Android для тестирования.



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


Как альтернативу, можно использовать Manymo – эмулятор, встраиваемый в браузер. Его даже можно встроить в страницу.


Другие симуляторы и эмуляторы:


BlackBerry

Windows Phone Emulator для Windows 8

Opera Mini Emulator


Удалённое тестирование


Эмуляторы и симуляторы полезны, но не на 100% достоверны. Всегда нужно пытаться проводить тестирование на максимальном количестве реальных устройств.


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


Для тестирования устройств от Samsung, таких, как Galaxy S5, можно бесплатно воспользоваться услугами Samsung Remote Test Lab – они предоставляют для тестирования большой выбор своих устройств.


Также можно пользоваться ресурсами Keynote Mobile Testing. Они недёшевы, но количество доступных устройств поражает, и некоторыми можно пользоваться бесплатно.


Если вам нужны физические устройства, можно обратиться в Open Device Lab, где есть список ближайших доступных лабораторий тестирования.


Удалённая отладка


Удалённая отладка на МУ выявляет множество трудностей. К примеру, как получить осмысленные данные от небольшого, сравнительно дохленького устройства?


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


iOS

С выходом 6-й версии Apple представила инструмент для отладки МУ через Safari Web Inspector.


Для начала надо разрешить удалённую отладку на устройстве. “Settings” → “Safari” → “Advanced” и разрешить “Web Inspector”



Затем подключите устройство к компьютеру через USB. Потом откройте Safari (версии не ниже 6) и в “Preferences” → “Advanced” выберите “Show Develop menu in menu bar”.


В этом меню вы увидите ваше устройство и несколько страниц с настройками.



На каждой из страниц представлено много инструментов, DOM Inspector и подобные.



Кроме DOM Inspector, iOS’ вы можете использовать:


— временной график для просмотра сетевых запросов, раскладки и рендеринга страниц, работы JavaScript

— отладчик с возможностью установки точек останова

— консоль JavaScript


Подробно всё это описано в “Safari Web Inspector Guide”.



Как и в случае с симулятором iOS, удалённой отладкой можно заниматься только с Мака.


Android

В случае с Андроидом инструменты удалённой отладки позволяют работать с десктопа при помощи Chrome’s Developer Tools. Кроме того, инструменты эти опять-таки кросс-платформенные.


Сначала, на телефоне пройдите в “Settings” → “About Phone” (для Android 4.4+), или “Settings” → “About Tablet”. Затем нужно нажать на “Build Number” семь раз. Кроме шуток. После этого вы увидите сообщение насчёт разработчика.


Затем обратно в основных настройках “Developer Options” нужен пункт “USB debugging”.



В адресной строке браузера Chrome наберите about:inspect. Разрешите “Discover USB devices”, и вы увидите в меню своё МУ.



Также вы должны увидеть открытые закладки в мобильном браузере. Выберите нужную, и вам будут доступны:


DOM Inspector,

Сетевая панель с внешними ресурсами

Панель исходного кода, для отладки JavaScript

Консоль JavaScript


Подробности можно найти в тьюториале “Introduction to Chrome Developer Tools, Part One.”



Также можно заниматься удалённой отладкой в эмуляторе Андроида.


Weinre

Если вам приходится отлаживать устройство с iOS на Windows, или Linux, или отлаживать устройство, работающее под Windows Phone или BlackBerry – попробуйте Weinre (web inspector remote). Работает везде.


Настройка weinre сложновата, т.к. его надо устанавливать и на сервере, и на странице. Сначала вам понадобится установить Node, а затем установить модуль Weinre:


npm install –g weinre


Затем запустите сервер отладки (подставляем ip-адрес компьютера):


weinre --boundHost 10.0.0.1


Затем проходим на localhost:8080 и копируем содержимое тега . Его нужно будет вставить на отлаживаемую страницу.



Наконец, кликните на ссылке вверху user interface for debugging clients (http://localhost:8080/client/#anonymous). Теперь, когда вы откроете страницу на устройстве, её можно будет увидеть в списке целей (targets).



После этого можно использовать инструменты для отладки.



Weinre позволяет тестировать любое устройство, но он не настолько продвинутый, как родные решения для iOS и Android. К примеру, нельзя пошагово отлаживать JavaScript.


Ещё один вариант удалённого тестирования называется Ghostlab.


Заключение


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


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


Что ещё почитать перед сном:

Mobile Emulators and Simulators: The Ultimate Guide,” Maximiliano Firtman

Introduction to Chrome Developer Tools, Part One,” Seth Ladd, HTML5 Rocks

About Safari Web Inspector,” Safari Developer Library, Apple

Enable Remote Debugging With Safari Web Inspector in iOS 6” Dave Ackerman, Modus Create

Remote Debugging on Android With Chrome,” Chrome Developer Tools

Weinre as Remote Debugger,” Mozilla Developer Network


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge

Програмируем символы валют для дисплея покупателя

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


Подключение




В отличие от Windows, где нужны драйверы, в Linux всё просто, если у вас дисплей с интерфейсом USB, то надо просто его подключить к Raspberry Pi, после чего новое устройство будет доступно через /dev/ttyUSB0. При этом дисплей покупателя выступает в качестве ведомого устройства, а для управления и вывода информации на экран индикации используется протокол управления запрограммированный в контролере самого дисплея. Есть несколько разных протоколов передачи информации для управления дисплеем покупателя, но де-факто все они основаны на формате ESC/POS команд от Epson.

Для начала работы инициализируем дисплей покупателя очистив память и экран индикации командой ESC @:



$ echo -n -e \\x1B\\x40 > /dev/ttyUSB0




И стандартная проверка:

$ echo -n -e Hello, world!\\n > /dev/ttyUSB0




Если всё сделано правильно, то строка будет выведена на дисплей.

Отображение




Для индикации в дисплеях покупателя используется VFD или LCD панель обычно содержащая 2-е строки по 20 символов. Каждый символ в зависимости от модели дисплея может состоят из матрицы от 5*7 до 8*8 точек. Для данного примера используется дисплей с размером символа 5 точек по горизонтали и 7 точек по вертикали.

Символы закодированы в ПЗУ дисплея и доступны для вывода в диапазоне от 0x20 до 0xFF байта. И если диапазон от 0x20 до 0x7F, это стандартная кодовая страница ANSI, то диапазон от 0x80 до 0xFF выделен для дополнительных кодовых страниц, например кириллицы. Для переключения кодовых страниц используется команда ESC t n, где n, это номер кодовой страницы. Пример:



$ echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
$ echo -n -e \\x87\\xA4\\xE0\\xA0\\xA2\\xE1\\xE2\\xA2\\xE3\\xA9\\x2C\\x20\\x95\\xA0\\xA1\\xE0\\x21\\n > /dev/ttyUSB0





Рисование




Это хорошо, если все символы уже запрограммированы в дисплеи, но очень часто, купив дисплей в Китае, приходится сталкиваться с тем, что ПЗУ полностью заполнено иероглифами, а на кириллицу место не осталось. Тогда можно воспользоваться специальной командой ESC & s n m [a (p1..pa)]*m-n для загрузки в ОЗУ дисплея недостающих символов. Эта команда подойдёт и нам для загрузки символов валют в память для последующего вывода на дисплей при продажах. Команда программирования символов ESC & содержит аргументы, которые можно разделить на две части, первые, это постоянные, вторые, переменные.

Постоянная часть состоит из трёх аргументов s, n и m, где: s — количество байт в строке матрицы символы, в нашем примере значение равно 1; n — байт места в кодовой странице для программирования первого символа; m — байт места для программирования последнего символа, и если программируется один символ, то n=m.


Переменная часть состоит из блоков a p1...pa, где количество блоков зависит от количества программируемых символов. Каждый блок начинается с значения a, это количества вертикальных столбцов в матрице символа, в нашем примере оно может быть в диапазон от 1 до 5. После значения a идут по-байтно закодированные в p1, p2, p3, p4 и p5 значения состояния диодов каждого столбца матрицы символа, где старший бит верхняя строка диодов, а младший соответственно нижняя.


В этом году был официально включён в Юникод символ российского рубля(₽, код 20BD), но за 5 лет до этого был принят символ родной мне с ноября 1993 года казахстанской тенге(₸, код 20B8). По этом начнём программирования с него. Если представить символ тенге в виде по-битной матрице 5*8, то он будет выглядеть так, как представлено на рисунке ниже. Верхняя строка дополнена старшим 8-ым битом, но в данном примере на дисплей она выведена не будет.



Итог, для замены символы доллара(код 0x26 в таблице символов нашего дисплея) на символ тенге с таким-же кодом, нам понадобится ESC/POS команда следующего вида:



$ echo -n -e \\x1b\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5f\\x50\\x50 > /dev/ttyUSB0




Включаем загруженные символы командой ESC % n, где значение n единица или ноль в зависимости от того, включены или нет загруженные символы:

$ echo -n -e \\x1b\\x25\\x01 > /dev/ttyUSB0




Проверяем работу:

$ echo -n -e 1500$ > /dev/ttyUSB0




Результат на экране:


Программирование




Теперь осталось сделать автоматическим при подключении инициализацию кириллицы и загрузку символа тенге. Для этого нам необходимо установить для udev правила автоматического запуска bash-скрипта при подключение дисплея покупателя к Raspberry Pi. Командой udevadm узнаём код вендора и модели нашего дисплея.

$ udevadm info -q all -n /dev/ttyUSB0 | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'



E: ID_MODEL_ID=2303
E: ID_VENDOR_ID=067b




Создаём правила 90-init-vfd-display.rules:

$ sudo nano /etc/udev/rules.d/90-init-vfd-display.rules




, следующего содержания:

ACTION=="add", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", RUN+="/usr/local/bin/init-vfd-display.sh"




и скрипт:

$ sudo nano /usr/local/bin/init-vfd-display.sh



#!/bin/bash

sleep 20

echo -n -e \\x1B\\x40 > /dev/ttyUSB0
echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
echo -n -e \\x1B\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5F\\x50\\x50 > /dev/ttyUSB0

sleep 3




Делаем исполняемым bash-скрипт и активируем наши правила:

$ sudo chmod +x /usr/local/bin/init-vfd-display.sh
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger --action=add
$ sudo service udev restart




Пробуем одновременно использовать символ доллара и тенге переключая их поочерёдно.

$ echo -n -e 1$ =\\x1B\\x25\\x01 181,95$ \\x1B\\x25\\x00 > /dev/ttyUSB0





Заключение




Приведённый здесь пример необязательно выполнять используя Raspberry Pi, все описанные команды доступны независимо от дистрибутива Linux, главное, это наличие в нём службы udev для автоматического выполнения скрипта загружающего символы в дисплей покупателя. В качестве закрепляющего материала, предлагаю запрограммировать символы ещё двух валют из таблицы Юникода, российского рубля и украинской гривны, по матрицам на рисунках, ну а знак евро вы уже сможете сделать самостоятельно.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Перевод] 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 — добро пожаловать под кат.



Основные изменения:



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

  • Автообновление не поддерживается в этом релизе. Обещают в будущем поправить.

  • Репозиторий с исходным кодом перемещен на собственный сервер, теперь он находится по адресу http://ift.tt/1sh3ZXo

  • Исправлено мерцание при запуске приложения.

  • Иконки теперь реализованы с помощью шрифтов FontAwesome (раньше были в формате PNG).

  • Переосмыслены настройки, теперь они выглядят проще и понятнее, некоторые настройки перемещены в раздел расширенных настроек.

  • Добавлены 3 новые темы. В будущем будет поддержка сторонних тем.

  • Добавлены новые настройки: Поверх других окон, Настройки главной страницы, Показывать рейтинг фильмов поверх постеров, Затенять или скрывать просмотренные фильмы.

  • Множественные улучшения пользовательского интерфейса.

  • Реализовано масштабирование постеров на лету (Ctrl+ и Ctrl- в режиме просмотра постеров).

  • Добавлена возможность сразу перейти к следующей непросмотренной серии сериала.

  • Встроена справка.

  • Добавлена возможность выбора стороннего видеопроигрывателя (VLC, XMBC, MPlayer, mpv и другие) который будет использоватся вместо встроенного.

  • Добавлена поддержка синхронизации с Trakt.tv (позволяет синхронизировать просмотренные эпизоды, избранные фильмы / сериалы, оценки и многое другое)

  • Начата экспериментальная поддержка Chromecast и Airplay

  • Добавлено HTTP API для управления Popcorn Time из других приложений


Скриншоты

Для скачивания доступен исходный код приложения и готовые сборки для Windows, Linux и Mac OS. Для пользователей Ubuntu также доступен неофициальный репозиторий.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Google глазами инсайдера

Привет, Хабрахабр!

Около года назад я написал свой предыдущий пост на Хабре Amazon глазами инсайдера. Я трижды проходил практику в компании Амазон и, тут нечего скрывать, привязался к этой компании, принял многие ее принципы, и многому научился. Причем увидел я компанию с разных сторон, так как довелось поработать и в Amazon Retail и в Kindle, и в Сиэтле и в Калифорнии. Однако моей целью, начиная со второго курса, была практика в Гугле. Поэтому, когда меня наконец пригласили на интервью, и по его результатам позвали в Mountain View на практику в качестве Software Engineer, отказаться я не смел. Провел я там три месяца, работая в команде Gmail Spam & Abuse. Поневоле и бессознательно, я сравнивал жизнь и работу в Гугле с Амазоном, о чем и хочу поделиться.

Дисклеймер: в предыдущей статье я рассказывал обо всем как есть без сравнений. Это отчасти потому, что про внутреннюю культуру Амазон мало что известно. Про Гугл же, напротив, знают все. Рассказать о Гугле «с чистого листа» не получится. Поэтому здесь приведены мои сугубо личные наблюдения и сравнения. Надеюсь, ничьих чувств не задену.

image
О местонахождении



Калифорния — земля обетованная. Особенно NorCal. Тут вам и океан чтоб серфить, и горы чтоб сноубордить, и замечательной красоты город Сан Франциско, и лучшие университеты мира, Стенфорд и Беркли, и Силиконовая Долина. Facebook, Apple, Oracle, и тысячи других компаний и стартапов в буквальном смысле окружают штаб квартиру Гугла. Это вам не вечнохмурый Сиэтл с Амазоном посередине и Майкрософтом в соседнем Редмонде. Однако, надо признать, что есть у жизни в Силиконовой Долине и недостатки, среди которых я на первое место вынесу непомерные налоги и заоблачные цены на недвижимость (не только владение, но и аренда). Уверен, что тем Хабражителям кто долго живет в Калифорнии, есть еще что рассказать о плюсах и минусах, но я за свои полгода проведенные в Долине, больше всего обратил внимания именно на эти аспекты.
О зданиях



Здания Амазона в Сиэтле и в Саннивейле (Калифорния) — истинное воплощение корпоративщины. Будучи менее помпезными и более уютными чем здания того же Оракла и Майкрософта, они все же являют собой многоэтажные стеклянные офисы. Штаб квартира Гугла качественно отличается тем, что кампус «корпорации добра» довольно сильно смахивает на университетские кампусы: невысокие здания, образующие вместе единый комплекс. Вкупе с многочисленными завлекалками, такими как скелет Ти-Рекса, гамаками, горками, велосипедами, столами для бильярда, волейбольными кортами и т.п., разбросанными по кампусу, этот комплекс намного более уютное место, где хочется проводить больше времени.
Об устройстве и отделениях



Если у Амазона в устройстве компании все логично, то у Гугла с этим некоторые «странности». Например, работая в команде Gmail Spam & Abuse, мы являлись частью Google Social, нежели частью Gmail. Google Maps, с точки зрения иерархии, является подразделением YouTube. Я спрашивал о том, как так получилось, и в ответ получал неудовлетворительные рассказы о бюрократических и исторических причинах. Но вот в чем соль: в Амазоне крайне редко появляются новые команды из инициатив работников. Зачастую, новые команды и отделения появляются по решению высших слоев менеджмента, исходя из стратегических планов. В Гугле же тьма маленьких команд, которые образовались из 20-процентных проектов. (Пояснение для непосвященных: в Гугле до 20% рабочего времени разрешается уделять на работу в других командах, свои проекты, обучение, менторинг, и преподавание внутри Гугла). С таким огромным количеством маленьких стартапов внутри компании, тяжело всем находить логичное место в иерархии. Кроме того, суть и назначение некоторых команд меняется с течением времени. Отсюда и небольшой беспорядок.
Об отношении к бизнесу



Здесь содержатся критические различия между двумя компаниями. В Амазоне запуск нового продукта или нового отдела — вопрос изучения рынка и рентабельности. Да, Амазон ставит на первое место своих клиентов, иногда вовред своим же собственным интересам. Но в вопросах развития компании все диктуют прогнозы и перспективы. В Гугле, как говорилось ранее, запускаются тысячи мини-проектов, которым самим предоставлено доказать свою рентабельность. Из сотни запущенных проектов, только единицы окажутся действительно стоящими, а 2-3 зададут новое веянье. Это похоже на два типа добычи ресурсов: интенсивный (вглубь) и экстенсивный (вширь). Гугл копает вширь и нет-нет, да и наткнется на пару алмазов высшего качества. Надо понимать, что далеко не каждая компания может себе позволить похоронить сотни проектов, чтобы найти несколько стоящих.
Парадокс и ирония, но внутренний поисковик Гугла — кусочек какашки



Это действительно так. По сравнению с внутренним поисковиком Амазона, Гугловский интранет — крайне разочаровывающий опыт. На то есть несколько причин. Во первых, закономерно всплывающий вопрос: почему бы не применить тот же алгоритм индексирования для внутренних страниц Гугла, что и для всего интернета? Ответ прост: алгоритм индексирования рассчитывает на тот факт, что ссылок в корпусе документов больше, чем самих документов. Если это правда для интернета в целом, то для Гугловского интранета это не так. Другая причина отстойности внутреннего поисковика — разрозненность контента. Зачастую внутренние страницы являются документами, хранящимися в Google Drive. Причем пишутся эти страницы — кто во что горазд. В Амазоне эта проблема была решена централизованным вики-справочником, поиск по которому производить гораздо легче.
О культуре



В свое первое лето в Амазоне я написал письмо CEO Джефу Безосу с приблизительно следующим содержанием: «Привет Джеф! Я интерн в твоей компании. Знаешь, этим летом нас собралось около 900 человек (интернов) в Сиэтле. И я подумал, почему бы тебе не собрать нас на час-другой в каком нибудь большом зале и не произнести вдохновенную речь. Было бы круто.» Как и следовало ожидать, это письмо осталось без ответа. Оно бы осталось без ответа в 99.99% компаниях, так что нечего обижаться на Джефа.

Приятно было, что в Гугле даже не пришлось просить. Каждый четверг Сергей Брин и Ларри Пейдж сами выходят на сцену в кафешке Charlie's на кампусе в Mountain View и рассказывают о событиях и новшествах в компании. В конце собрания они отвечают на вопросы из внутреннего микроблога и… на вопросы из зала. Присутствовать на данном собрании могут все работники Гугла, находящиеся в Mountain View. Нужно лишь пораньше занять место в аудитории. Соответственно, пообщаться со всемогущими основателями Гугла может любой присутствующий. И это здорово!
О расточительности



О боже какой Гугл расточительный! Да, Амазон привил мне стремление к бережливости. Надо понимать, что Амазон тебя не урезает в том, что тебе нужно. Но никаких излишек! В Гугле тебе предоставлено все что тебе нужно, было бы приятно иметь, и не нужно. Да, речь идет о массаже, декорациях, мебели, роботах для видео конференций и т.д. Верхом моего удивления была отправка целого отделения на несколько дней на курорт за счет компании — и это засчитывалось как рабочее время, а не отпуск. Конечно, с точки зрения рабочего это круто. Конечно, кто-то скажет, что компания этим подкупает, а кто-то скажет, что компания действительно заботится о счастье сотрудников и строит командный дух. Но с тем, что это дорого и в этом нет необходимости, согласятся все. Вообще, проводя время в Гугле, и наблюдая за его щедростью/расточительностью, я задавался вопросом: действительно ли эта щедрость — хороший и важный вклад в работоспособность, усердие и верность своих работников? Действительно ли компания, в конечном счете, получает от них больше и процветает, или же все-таки она процветает НЕСМОТРЯ на такие расходы?
О тренажерных залах и спорте



Тренажерные залы в Гугле откровенно плохи. Куча людей, старые тренажеры, нет нужного железа, мало места. Бассейна нет в принципе — есть только что называется infinite pool. Это такая ванная, где вода движется против твоего движения, — как беговой тренажер, только для плавания. Зато замечательные поля и парки для пробежки и холмы для байкинга совсем рядом с кампусом. Волейбольные корты и поля для футбола — то что надо. Заниматься с инструктором или в секции не пробовал, но приятно знать, что была такая возможность. Справедливости ради замечу, что в Амазоне по умолчанию нет и плохого тренажерного зала. Но дважды я все-таки получал бесплатное посещение: в первый раз Амазон поселил меня в отеле, у которого была договоренность с местной качалкой; во второй раз — работал в снимаемом офисе, который входил в один комплекс с замечательным спортивным клубом. Люблю Америку за перепадающую халяву!
О доверии к интернам



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



В Гугле и в Амазоне выдается приблизительно одинаковый набор для разработчика: стационар с парой экранов для разработки и лэптоп для почты и митингов. Интервью тоже довольно стандартное: два технических собеседования по 45 минут по телефону. После прохождения этих интервью, проходит процесс определения в команду. Здесь может оказаться трудно попасть именно туда, куда хотелось бы, так как команды выбирают кандидатов сами. Но если цель просто попасть в Гугл, то скорее всего куда-нибудь, да определят. (Внимание: эта информация только для подающих на интерншип). Компенсация (так называют з/п и бонусы в Штатах) тоже на одинаковом уровне в этих двух компаниях. Правда, нужно учесть, что в Амазоне надо еще тратиться на еду, когда в Гугле об этом не приходится беспокоиться.

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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Делаем универсальный ключ для домофона

Презентация с помощью impress.js – просто и элегантно

impress.js — популярный фреймворк предназначенный для создания неординарных, искрящихся профессиональным блеском презентаций, которые демонстрируются просто в браузере*.

В опубликованной несколько дней назад статистике GitHub impress.js занимает 2-е место по количеству звездочек среди проектов, созданных одним автором. Совсем небольшой фреймворк, главный прикол которого заключается в том, что он служит не для создания слайдов, а для отображения переходов между слайдами и, очень часто, для отображения сразу нескольких слайдов в трехмерном пространстве.


3D трансформации между слайдами делают игру.



На habrahabr.ru уже была публикация посвященная impress.js, но это было почти 2 года назад, поэтому стоит поновому пройтись по ключевым моментам использования этого замечательного фреймворка.


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


Я познакомился с этим фреймворком, когда понадобилось сделать презентацию быстрого старта работы с веб-сервисом TheOnlyPage. Поэтому в качестве примера работы с фреймворком impress.js будем использовать несколько первых слайдов этой длинной и скучной презентации.


Общие подходы




Для начала обсудим основы основ, чтобы понять логику применения impress.js.

Фреймворк работает с последовательностью слайдов, каждый слайд в терминологии фреймворка именуется шаг (step).


Что, и каким образом отображается внутри каждого слайда, определяется с помощью обычных средств HTML-разметки и CSS-стилей. Не предусмотрены предустановленные темы для дизайна презентаций.


Все слайды размещаются в неком трехмерном пространстве.


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


Для каждого слайда (шага) могут быть установлены параметры, задающие его местоположение в трехмерном пространстве:



  1. координаты (x, y, z) точки соответствующей центру слайда;

  2. наклон (поворот) слайда вокруг осей X, Y, и Z.




Центр очередного слайда позиционируется в центре экрана.

Кроме положения в пространстве для каждого слайда (шага) может быть указан масштаб слайда.


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


Масштаб слайда не влияет на размеры очередного активного слайда, если это обычный слайд.


Масштаб слайда влияет:



  1. на размеры очередного активного слайда, если это обзорный слайд;

  2. на размеры обычных слайдов на общем обзорном слайде — слайды отображаются в соответствии с их масштабами;

  3. на размеры обычных неактивных слайдов, попавших «в поле зрения» на обычном слайде

  4. на переходные трансформации при переходе от одного обычного слайда к другому — демонстрируется изменение масштабов.




Установка




Чтобы задействовать impress.js достаточно в html-разметке

подключить соответствующий модуль:






Вот и всё. Никакие вспомогательные таблицы стилей (CSS) в состав фреймворка не входят, только один javscript-модуль.

Далее необходимо проинициировать фреймворк, например, так:








Важный момент – загрузка javascript-кода фреймворка должна происходить после загрузки всего html-кода презентации, то есть строка подключения библиотеки должна располагаться внизу html разметки.

Размещение в бесконечном трехмерном пространстве




Вся презентация должна находиться в контейнере, у которого id="impress"







Каждый следующий слайд (шаг) презентации помещается в последовательно расположенном контейнере, класс которого: class="step"












Каждому слайду (шагу) назначаются data-атрибуты, которые определяют его место в пространстве: data-x, data-y, data-z и поворот (вокруг соответствующей оси: X, Y, Z): data-rotate-x, data-rotate-y, data-rotate-z.

Поворот вокруг оси z вместо data-rotate-z может сокращенно определяться атрибутом data-rotate.


Масштаб отображения текущего слайда (по умолчанию 1) задается data-атрибутом data-scale.


Пример презентации




А теперь, чтобы увидеть результаты применения data-атрибутов рассмотрим простенький пример, состоящий из нескольких первых слайдов презентации веб-сервиса TheOnlyPage

Чтобы не усложнять, все слайды расположены в одной плоскости.


Первый слайд обзорный – то есть внутри контейнера нет никаких элементов. Чтобы на экране при отображении этого слайда, поместились все 6 слайдов презентации масштаб установлен data-scale="2"









Второй слайд обычный. Его можно видеть в левом верхнем квадрате обзорного слайда, координаты data-x="-700" data-y="-400". Масштаб установлен data-scale="0.25" чтобы продемонстрировать, что в результате слайд выглядит уменьшенным в общем обзорном слайде, на размеры обычного слайда в активном состоянии масштабирование не влияет, но анимационный эффект масштабирования отрабатывается от второго слайда к третьему, у которого масштаб по умолчанию, равный 1. Класс slide используется для определения в таблицах стилей (CSS) внешнего вида этого слайда.


Создание новой Закладки (1)


Активировать вкладку Закладки










Третий слайд обычный. Его можно видеть в центре верхней строки обзорного слайда, координаты data-x="-200" data-y="-300". Масштаб явно не установлен, значит равен 1. Слайд повернут на 90o вокруг оси Z, так как data-rotate="90". Класс slide2 используется для определения в таблицах стилей (CSS) внешнего вида этого слайда.


Создание новой Закладки (2)


Нажать кнопку в левом верхнем углу экрана Новая Закладка










Четвертый слайд обычный. Его можно видеть в правом верхней квадрате обзорного слайда, координаты data-x="700" data-y="-500". Слайд повернут на 180o вокруг оси Z, так как data-rotate="180". Класс slide2 используется для определения в таблицах стилей (CSS) внешнего вида этого слайда.


Создание новой Закладки (3)


Заполнить все поля формы










Пятый, шестой и седьмой слайды — обычные. Эти слайды расположены последовательно справа налево в нижней строке экрана. Угол поворота каждого следующего вокруг оси Z на 90o больше предыдущего: data-rotate="270", data-rotate="0", data-rotate="90", соответственно. Классы slide и slide1 используются для определения в таблицах стилей (CSS) внешнего вида этих слайдов.


Создание новой Закладки (4)


Для предпросмотра нажать голубую кнопку Просмотр









Создание новой Закладки (5)


Для создания нажать синюю кнопку Создать








Создание новой Закладки (6)


Закладка создана!










При переходе от слайда к слайду меняется хэш (hash) адреса в адресной строке браузера, в нашем примере адреса слайдов будут следующие:

http://ift.tt/1tAe7eSoverview


http://ift.tt/1tAe7eSnew_bookmark_1


http://ift.tt/1tAe7eSnew_bookmark_2


http://ift.tt/1tAe7eSnew_bookmark_3


http://ift.tt/1tAe7eSnew_bookmark_4


http://ift.tt/1tAe7eSnew_bookmark_5


http://ift.tt/1tAe7eSnew_bookmark_6


Используя подобные адреса можно переходить непосредственно к любому из слайдов.


Как видите, хэш адреса каждого слайда содержит уникальный id соответствующего слайда.


Если id слайда (шага) не задан, хэш адреса этого слайда будет иметь вид: #/step-N, где N – номер слайда (шага).


Классы динамически переназначаемые в процессе презентации




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

Сразу после загрузки, если браузер поддерживает функциональность фреймворка для элемента body устанавливается: class="impress-supported", если не поддерживает: class=" impress-not-supported". Что обычно используется для отображения сообщения о необходимости использовать подходящий браузер для просмотра презентации.


В нашем примере, присутствует следующий html-код:



Этот браузер не поддерживает функциональность необходмую для работы с impress.js.


Для лучшего восприятия презентации используйте последнию версию Chrome, Firefox или Safari.









А в таблице стилей определено отображение сообщения только если браузер не поддерживает impress.js


.impress-not-supported .fallback-message {
display: block;
}
.impress-supported .fallback-message {
display: none;
}





В результате, если презентация открывается в неподходящем браузере, например, в браузере Opera отображается сообщение:

image


После инициации презентации, вызовом соответствующей функции:



impress().init();




для элемента body устанавливается: class="impress-enabled".

Также для элемента body устанавливается класс, указывающий на первый слайд (шаг), в нашем примере это будет class="impress-on-overview", а в общем случае имя этого класса задается конструкцией: "impress-on-" + id активного слайда (шага).


Для первого слайда устанавливаются классы: class="present active".


Для остальных слайдов (шагов) устанавливаются класс: class="future"


При дальнейшем просмотре слайдов в элементе body класс, определяемый уникальным id активного слайда имеет вид: "impress-on-" + id активного слайда (шага).


Для просмотренных слайдов устанавливается класс class="past"


Для активного слайда: class="present active"


Оставшиеся непросмотренные слайды, все также содержат класс: class="future"


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


Используемые клавиши




impress.js позволяет перемещаться циклически по слайдам презентации то есть с последнего слайда презентации идет переход не первый слайд.

Переход к следующему слайду задается нажатием одной из клавиш:


таб, пробел, стрелка вправо, стрелка вниз, Page Down


переход к предыдущему слайду задается нажатием одной из клавиш:


стрелка влево, стрелка вверх, Page Up


Применяя API impress.js, можно существенно расширить возможности управления презентацией. Но javascript-программирование с использованием фреймворка это уже тема следующей, отдельной публикации.






*impress.js прекрасно работает в последних версиях браузеров Chrome, Firefox, Safari и IE. Подробнее про поддержку браузеров здесь.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Scottish readers: Undecided about the referendum? Please read How the media shafted the people of Scotland and Scottish Independence, Power And Propaganda.


iPhone 6: разбираем в Москве, оцениваем ремонтопригодность и сравниваем с iPhone 5s

Наши коллеги из iFixit уже разобрали оба новых iPhone. Опередить их у нас не получилось бы при всем желании, потому что одно дело перейти улицу и зайти в Apple Store, а другое – дожидаться самолета из другой страны. Но в итоге iPhone 6 попал нам в руки в первый же день продаж и тут же был разобран до винтика. Работая над этим постом, мы старались не повторять уже сказанное iFixit и не просто сосредоточиться на том, из чего аппарат состоит, а проанализировать его внутренние отличия от предшественника и оценить (в прямом смысле) ремонтопригодность в наших условиях. Также мы засняли процесс разбора на камеру, и вы сможете своими глазами увидеть, как квалифицированный мастер с первого раза разбирает гаджет.


Довольно неожиданным стало, что iPhone 6 де-факто является влагостойким, а компания так высоко оценивает собственные инженерные усилия, что украсила логотипом вообще все компоненты смартфона.


Скажу сразу: дифирамбы ремонтопригодности новых iPhone надо воспринимать осторожно. Да, действительно, многие элементы усилены и/или упрощены, да и подобраться к ним проще. Однако это «компенсируется» тем, что от мастера требуется больше умения и внимательности. Например, в iPhone 6 аж 60 болтиков, большинство из которых впору рассматривать под микроскопом. Потерять или свернуть их – пара пустяков. Так что наколенные мастерские, скорее всего, будут возвращать аппараты после ремонта с пустыми отверстиями. Снаружи это отследить можно, а вот внутри – с трудом.



Что определенно радует – упрощение конструкции шлейфа кнопки Home, совмещенной с Touch ID. В iPhone 5s сканер отпечатка пальцев был еще новинкой, и его работу обеспечивал длинный хрупкий шлейф. Он был одним из самых слабых мест аппарата, а замена кнопки в сборе, между прочим, стоила не менее 5 000 рублей. Теперь есть хороший шанс, что Home будет жить если не вечно, то достаточно долго.






Кнопка из iPhone 5s – слева


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



Вот то есть реально сидели, рисовали, думали.


На нижнем шлейфе существенно усилены разъемы Lightning и наушников. Зачем потрудились над последним – понятно каждому. Штекеры мы суем грубо, разъемы ломаются, и чем крепче – тем лучше. А Lightning усилен тоже не без умысла: ведь теперь к нему тоже можно подключать наушники, и Philips уже анонсировала первую модель. Раз так – нагрузка возрастает, и это уже не зарядка раз в пару дней, а постоянное втыкание-вытыкание. Усиливаем!






Нижний шлейф iPhone 5s вверху


Резко увеличился в размерах вибромотор. На практике, врать не буду, пока не проверял, но по габаритам – должен прошибать штаны с начесом. А если в метро увидите странно подпрыгивающего человека в легкой одежде – не пугайтесь. Возможно у него iPhone 6.



Еще одна причина, не позволяющая пропустить входящий вызов – новый динамик. Он заметно увеличился в размерах и стал раза в два громче. Улучшилось и качество звука. Теперь iPhone конкурирует с расплодившимися портативными колонками. Тем более, что звук идет напрямую, не пережимаясь и не уродуясь по дешевым реализациям Bluetooth.




Динамик iPhone 5s справа.


Камера iPhone 6 немного выступает из корпуса, однако само модуль стал немного тоньше, чем в предшественнике.




Камера iPhone 5s слева.


Обратите внимание, что Apple впервые поставила на камеру свой логотип. Это может быть как совпадением (в iPhone 6 логотип красуется вообще на всех компонентах), так и свидетельством наличия в ней серьезных собственных аппаратных разработок.



Батарея существенно увеличилась в размерах, но емкость по нынешним временам все же скромноватая – 1810 мАч. Трудно тут что-то комментировать. Да, хотелось бы больше. Но Apple считает, что это желание неправильное. Можно проголосовать рублем за какой-то другой продукт. А можно смириться и получать удовольствие.




Батарея iPhone 5s слева


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



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



Материнская плата стала Г-образной. Это вызывает много ассоциаций, но мы решили, что Apple сделала ход конем. Обратите внимание, что и на ней нашлось место логотипу Apple. Раньше он украшал только чипы.






Материнская плата iPhone 5s справа


Несколько слов о ценах на ремонт.


Кнопка Home и разъемы нас будут подводить реже. Кнопки – если вдруг откажут – можно менять по отдельности, и это должно быть дешевле. Утопать iPhone 6 должен гораздо реже, и это тоже хорошая новость.


А вот экран как бился, так и будет биться очень легко. Цены на замену пока, мягко говоря, негуманные. В первые месяцы удовольствие обойдется минимум в 10 000 рублей, если не больше (сейчас китайцы продают вроде бы оригинальные экраны вообще по 500 долларов, но после массового старта продаж должны немного скинуть цену). Так что лучше сразу озаботиться покупкой чехла или бампера – от греха.


Я не сторонник обзоров устройств по итогам нескольких часов использования, поэтому планирую написать вдумчивый текст примерно через неделю. Но по внутреннему устройства аппарат вызывает большое уважение. Мы наверняка не знаем – какова текучка в команде, работающей над iPhone. Но сама инженерная философия остается прежней. Делать каждый раз проще, надежнее и… красивее. Вот именно внутренняя красота и отличает технику Apple от большинства аналогов. Сравниться с ней, по моему личному мнению, могут только топовые представители семейства Lenovo ThinkPad. Сама по себе красота – это, конечно, ерунда. Но за ней обычно стоит глубокая продуманность решений. И вот это уже не мелочи.


Разбор iPhone 6 зафиксирован на видео. Оно довольно длинное – 46 минут. Но, разбирая аппарат, мы старались обращать внимание на важные мелочи. Так что, возможно, вам будет не менее интересно смотреть, чем нам – разбирать.



Завтра, точнее уже сегодня, мы вскроем iPhone 6 Plus.


Автор благодарит интернет-магазин My-Apple-Store.ru за предоставленный для разбора iPhone 6 и сервисный центр Tech-Town.ru за помощь в создании материалов


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Scottish readers: Undecided about the referendum? Please read How the media shafted the people of Scotland and Scottish Independence, Power And Propaganda.


День свободы программного обеспечения


Сегодня особенный день для всех поклонников идей Ричарда Столлмана. Этот человек уже с 1983 года является главным идеологом движения за свободное программное обеспечение. И сегодня отмечается юбилейный, десятый ежегодный день этой самой свободы.


Несмотря на то, что критерии свободного программного обеспечения выглядят довольно дико в условиях повсеместного капитализма, это не помешало появлению и успешному развитию таких всем известных проектов, как Linux, веб-сервер Apache и движок MediaWiki, на котором работает Wikipedia. И это лишь малая часть, а в целом программ, распространяющихся как свободные, просто несметное количество. Сам я в прошлом являлся ярым сторонником открытого ПО, в частности, все началось c Mandrake Linux, а закончилось Arch Linux и безудержным допиливанием конфигов тайлового оконного менеджера Awesome. В то время даже обратил в оную религию некоторых своих друзей и поставил Линуксы на ноутбуки родителям. Сейчас же ярость поутихла, и я спокойно чувствую себя, сидя за свежей версией Ubuntu. :)


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


У нас в Mail.Ru Group тоже есть немало программистов, участвующих в создании и улучшении свободного программного обеспечения. Буквально в прошлом посте в нашем блоге Александр Емелин рассказал про свой открытый проект Centrifuge. Специально к празднику мы попросили рассказать и других сотрудников о том, как СПО помогает им в работе, и о некоторых своих работах, так что слово авторам.



Владимир Дубровин (z3apa3a), руководитель группы тестирования Почты Mail.Ru:


Я всю жизнь работаю с опенсорсным ПО, на опенсорсном ПО и под опенсорсным ПО, поэтому «помогло в работе» не подходит к ситуации, я, можно сказать, в нем живу. Сам разрабатываю проект кросс-платформенного прокси-сервера 3proxy — это прокси-сервер, позволяющий управлять прикладным трафиком, то есть учитывать, ограничивать, фильтровать, перенаправлять трафик по различным критериям и прикладным протоколам. Он входит в порты FreeBSD, NetBSD, Fedora, Gentoo, AltLinux. Достаточно долго коммитил в проект FreeRADIUS, аудит исходного кода и отдельные патчи делал для Postfix, Sendmail, Courier-IMAP и некоторых других известных проектов.


Выборнов Артем (vibornoff), ведущий программист Студии Пушкин:


Я ежедневно пользуюсь СПО в работе. Да, вообще, вся наша инфраструктура на СПО крутится, как же без него? А из проектов у меня есть asmCrypto — криптография для браузеров, работает в разы быстрее похожих библиотек, уже есть крупные внедрения, если немного доработать, получится реализация стандарта W3C Web Crypto API.


Эдуард Искандаров (toidi), программист группы антиспама:


Open-source — наше все. Мы используем открытый софт во многих местах нашей системы. Начиная с систем обработки и визуализации данных, заканчивая специфичными библиотеками. Я сам являюсь злостным сторонником идеи глобальной кооперации, где успешные идеи и реализации могут получить широкое распространение за счет полезности для общества, а не навязчивого маркетинга. С другой стороны, программные проекты, развиваемые под эгидой open-source очень живучие, что несомненно является огромным плюсом как для сообщества, так и для бизнеса. Если проект действительно интересен, вокруг него возникает сообщество, в котором, в случае необходимости, могут появиться новые лидеры или проект может «отпочковаться», чтобы проверить или развить новые идеи, что тоже хорошо.


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


Если того требует работа — можно самому попробовать разобраться в исходном коде, а потом отправить наработки в проект. Люди будут тебе благодарны, а навыки программирования прокачаны. К тому же стоит обратить внимание, что работодатели начинают спрашивать профили на популярных сервисах хостинга исходных кодов, и наличие солидного профиля может сделать выбор в вашу пользу. А, возможно, вы организуете бизнес вокруг open-source проекта. К слову, тут огромное поле для действий. Хороших вам пул реквестов.


Дмитрий Коробкин (Octane), программист проекта Ответы:


Я JavaScript-программист, поэтому чуть ли не ежедневно пользуюсь пакетным менеджером npm, в котором собрано множество open-source модулей. Можно сказать, open-source ПО помогает мне в работе каждый день. Собираю проекты с помощью Grunt, использую UglifyJS для минификации js-файлов, пишу стили на Stylus в связке с nib. Помимо вышеперечисленных, текущий проект, над которым я работаю в Mail.Ru Group, строится на основе следующих open-source решений: Backbone, jQuery, Lo-Dash, LMD, Fest, FileAPI и др.


В npm-копилке присутствует и мой open-source модуль es6-promises – полифил для конструктора Promise из стандарта ECMAScript 6. В отличие от других подобных полифилов, мой реализует только стандартные методы, нет никаких Promise.race или Promise.any, поэтому, когда все браузеры введут поддержку Promise, полифил можно будет безболезненно удалить, использующий его код переписывать не придется. Полифил может работать как в браузере, так и в качестве Node.js модуля. Асинхронность достигается использованием setImmediate.


Леандр Халиуллов (khaliullov), программист группы антиспама:


Рассказывать об использовании открытого ПО можно долго, самое простое, начать с того, что, например, используемый мной Perl во многих проектах — open-source, и был портирован на разные платформы. Использованием nginx, httpd Apache тоже никого не удивишь, а ведь многие сайты работают на них. Также я использую разные open-source фреймворки как на фронтендах, так и на бекэендах. В общем, немыслимо, как было бы трудно жить без свободного ПО! Конечно, я пытался и сам помогать каким-либо проектам, но не так чтобы я стал коммитерем, скорее какой-то патч/фичу запилить: udpxy, Icecast, Asuswrt RT-N56U и т.д., везде помаленьку. Своих опенсорных проектов нет, так, пару модулей для перлячки, раньше не придавал этому особого значения, но всё больше понимаю, как это важно и буду стараться следовать принципам открытого ПО.


Последнее, что замутил, — управление EnerGenie EG-PMS-LAN из перлячки Device::Gembird. Если каждый будет стараться внести свой небольшой вклад в то, чем он интересуется, то эти проекты будут развиваться быстрее.


Николай Тимченко (nickynick), программист мобильных приложений My.Сom:


Я занимаюсь разработкой под iOS. Можно сказать, что еще несколько лет назад культура open-source в этом коммьюнити, как таковая, отсутствовала. Конечно, были некоторые значимые проекты, но не было даже толковых механизмов включения third-party кода в свои проекты — многие разработчики тупо копировали исходники и этим довольствовались. Но потом появился менеджер зависимостей а-ля RubyGems/npm, плюс постепенно переползали разработчики с других платформ, привыкшие к нормальному положению дел, и завертелось.


В своих проектах я использую достаточно большое количество open-source кода, но важно понимать, что каждая следующая подключенная библиотека — это частичная утрата контроля над проектом. К действительно незаменимым можно отнести вещи, связанные со специфическими функциями, например, широко известный ffmpeg или местный GPUImage (библиотека для высокопроизводительной обработки изображений). Еще есть местная реинкарнация Rx, ReactiveCocoa, позволяющая элегантно распутать очень неприятные куски UI кода, связанного с состояниями и реакцией на различные действия пользователя.


В том или ином объеме я контрибьютил в достаточно большое количество проектов, но есть два популярных проекта, в которых я участвую. Это Masonry, удобная обертка над AutoLayout (механизм позиционирования вьюшек на экране), и Mantle — легкий модельный фреймворк, направленный на облегчение жизни и уменьшение количества boilerplate кода. Недавно зарелизил пару собственных проектов, которые в ближайшее время надеюсь довести до состояния production-ready и разрекламировать. Например, ArrayDiff — небольшая штуковина, которая эффективно вычисляет разницу между двумя массивами в виде вставок, удалений и апдейтов.


Марат Радченко (slonopotamus), ведущий программист студии Allods Team:


На работе возникла следующая ситуация: программисты хотят Git, дизайнеры и художники хотят просто коммитить. Попробовали несколько месяцев пожить на Git'е — не работает. Постоянные проблемы с мержами, приведение working copy в странное состояние, куча негатива и мольбы «верните нам SVN». Гугление показало, что есть стремный проект SubGit, еще есть заброшенный (и люто-бешено тормозящий на питоне) git_svn_server и поддержка svn-протокола на github'е, который они дают только в составе GitHub Enterprise за кучу денег.


Почесав репу, мужики сказали «а ху что, мы ж программисты». И родился git-as-svn, фронтенд к git-репозиторию, делающий вид, что он svn. Фичи: checkout/update, log, blame, commit (!), rename detection, svn:eol-style, git-хуки, аутентификация через LDAP, partial checkout, sparse working copy (svn --depth/--set-depth), git submodules. По бенчмаркам сравним (а местами даже обгоняет) нативный svn. В процессе обнаружили невообразимую феерию в svn'е, которая достойна отдельного поста.


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


Андрей Кутузов (dystheist), лингвист Поиска Mail.Ru:


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


Наша группа прикладной лингвистики Поиска Mail.Ru применяет свободное ПО практически во всех задачах. Например, нам была очень нужна качественная утилита для анализа и разбора веб-страниц, снабженных семантической разметкой (RDF, microdata и т.п.). Это нужно для того, чтобы потом использовать эти данные для формирования поисковых сниппетов и других важных вещей. Наш выбор пал на свободную библиотеку any23, развиваемую проектом Apache Software Foundation и, конечно, сообществом. Мы нисколько не пожалели об этом: any23 прекрасно встроилась в наш рабочий процесс. Нам была понятна логика её работы, а в случаях, когда она что-то делала не так, не составило никаких проблем слегка исправить её код. Сейчас при её помощи регулярно обрабатываются миллионы документов, а пользователи поиска получают красивые и информативные сниппеты.


Сам я не считаю себя профессиональным программистом, но если иногда пишу что-то, что может быть полезно для других — всегда выкладываю под свободными лицензиями. Из последних реализованных проектов можно вспомнить систему автоматического разрешения анафоры в русскоязычных текстах. Анафора — это лингвистическое явление, когда слово (обычно местоимение) не имеет значения само по себе, а лишь является указателем на другое слово. Например, во фразе «Динозавр шёл по улице. Петя увидел его и побледнел», слово «его» указывает на динозавра. Определение таких связей важно для многих лингвистических задач. Мы с Максом Ионовым построили систему, которая с неплохой точностью выделяет анафорические связи в произвольном тексте на русском языке. Представили проект на конференции по компьютерной лингвистике «Диалог», сделали некоторые доработки и выложили на github. Сейчас, насколько нам известно, это единственный свободно доступный детектор анафорических связей для русского языка. Можно его попробовать здесь. Будем очень рады комментариям и коммитам. :)


Артем Дроздов (Artyomcool), руководитель группы разработки Агента Mail.Ru под Android:


Очень сложно назвать «случай». У нас все самые критичные места проекта завязаны на опенсорсные библиотеки. Да и, вообще, Андроид же. Он опенсорсен чуть менее, чем полностью, и это очень часто на руку. Вот неполный список опенсорсных проектов, используемых в работе:


LibPhoneNumber — гугловая библиотека, предоставляющая кучу возможностей для работы с телефонными номерами, из разряда распарсить введеный юзером телефон, выцепить код страны/города и т.п.


GreenDao — ORM для андроида основанная на генерации кода. Немного топорная, но работает значительно быстрее, чем всякие там ORMLite. Разработчики несколько странные. Когда был сделан форк они принципиально не принимали пул-реквесты. Теперь принимают, но при условии отправки им отсканенного подписанного соглашения. В их версии генерация кода запускается руками, что опять-таки немного странно, когда на дворе век систем сборки. Я форкнулся от форка, поддерживающего сборку на уровне gradle-plugin'а, позволяющая генерировать соответствующий код автоматически при сборке. Впилил автоматический upgrade для большинства случаев изменения схемы БД, присунул возможность сохранять/загружать данные с кастомными сериализаторами (что позволяет использовать Kryo для максимально быстрого сохранения/загрузки сериализованных данных), ну и расширил возможности gradle-plugin'а для работы с композитными индексами.


GSON — тут в общем-то нечего объяснять, одна из наиболее используемых библиотек для работы с JSON. Неплохо оптимизирована в плане сборки мусора, что позволяет рекомендовать ее для использования в мобилках, где с этим всегда проблемы.


Kryo — наиболее быстрая библиотека для сериализации/десериализации произвольных объектов. Очень удобная.


Guava — тоже, в общем-то, объяснять нечего, куча утилит, много штук, которых просто не хватает в стандартной Java.


Gson-XML — немного спорная библиотека, но позволяет быстро (с точки зрения времени разработки) подоткнуть GSON для десериализации XML.


AndroidAnnotations — это просто нечто. Библиотека, основанная на кодогенерации, позволяющая избавиться от большого количества абсолютно ничего не делающего кода, который так свойственен Java, а тем более Android, и сосредоточиться на, собственно, работе. На порядок упрощает создание и поддержку адекватной архитектуры больших Android-приложений, в т.ч. за счет обеспечения dependency-injection. Весомо облегчает работу с UI, особенно создания собственных компонентов. Вообще жить на андроиде без AndroidAnnotations — очень тяжко.


Каждая из них о-о-очень помогает. Особенно AndroidAnnotations, поэтому я сравнительно часто делаю pull-request'ы в этот проект.


Павел Черенков (pcherenkov), системный программист Моего Мира:


Пример из жизни: в 2001 году мне помог Red Hat 7.3. Был кризис, и я сидел без работы. У меня был старый, маломощный компьютер и совсем не было денег на новый. Я установил Red Hat и получил вполне дееспособную среду для поиска работы по интернету, написания резюме, ведения почты и программирования в POSIX-совместимых системах, на которые я тогда решил профессионально переориентироваться.


Есть небольшой открытый проект в рамках GPLv3, (достаточно широко) известный в среде IPTV-энтузиастов: udpxy — прокси-сервер мультикаст-потоков. Проект стартовал в 2008 году как утилита для роутеров Asus Wl-500g, приложение вошло в открытую прошивку «от Олега». В настоящее время udpxy стандартно входит в различные прошивки «домашних» wifi роутеров, используется IPTV-пользователями и провайдерами, на нём базируется серверная часть многих IPTV OTT решений. Приложение было адаптировано (силами сообщества, в отдельных ветках) для работы на практически всех современных ОС (и аппаратных платформах), поддерживающих POSIX API для работы с сетью.


Арсений Жижелев (primetalk), старший программист студии Allods Team:


Что означает для меня свобода программного обеспечения?


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


Право использования любым способом, произвольной переконфигурации. Для целей системного администрирования возникает потребность в конфигурации несколько изолированных контейнеров с разным набором программ. В случае свободного ПО (Ubuntu) такая возможность доступна. А что делать с проприетарным ПО? Разрешил ли владелец исключительных прав такой способ использования? Предусмотрел ли он его вообще?


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


Отсутствие искусственных ограничений, рассчитанных на пользователей начального уровня. Выпускается версия продукта, которая технически обладает развитыми возможностями, а в лицензии определённые виды использования запрещены. Здесь вообще можно случайно пересечь границу допустимого и использовать ПО неразрешённым способом. Для СПО, в то же время, есть только технические ограничения. Если удалось эти технические ограничения преодолеть, то можно спокойно пользоваться.


Независимость от произвола вендора. Например, Jabber, в отличие от Skype'а, не подвержен внезапному отказу от поддержки старых версий.


Отсутствие внедрённого непроизводительного кода. Тот же Skype содержит код, напрямую доставляющий рекламу пользователям. Зачем же мне реклама?


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


Для публикации своей программы в качестве СПО я вижу такие варианты мотивации:


Стремление поделиться интересными и полезными находками. Например, при работе над проектом могла быть разработана библиотека, полезность которой выходит за рамки проекта. Хотелось бы, чтобы интеллектуальный труд не пропал даром. В частности, библиотека SynapseGrid опубликована, исходя именно из такой мотивации. В проекте Речевой портал была разработана достаточно универсальная библиотека Functional reactive programming, позволяющая конструировать строго типизированный граф из простых функций. Очевидно, такая библиотека могла бы быть полезна и в других проектах. Кроме того, использование библиотеки другими командами позволяет обнаруживать баги или дорабатывать API.


Стремление привлечь широкую аудиторию к своему видению проблематики и путям её решения, а затем каким-либо образом монетизировать аудиторию — либо продавая услуги, либо продавая вторичные продукты (плагины), либо продавая «профессиональную» версию ПО.


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


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


Алексей Кожевников (blackm00n), программист мобильных приложений My.Com:


Я пишу под iOS, а в жизни любого мобильного разработчика СПО проекты занимают важное место. Например, в моем текущем проекте используется почти 20 СПО зависимостей. Если взять типичное мобильное клиент-серверное приложение, то ситуация будет выглядеть примерно так.


Авторизация происходит с помощью номера телефона? Если да, то можно и нужно использовать libPhoneNumber-iOS для форматирования и валидации вводимых телефонных номеров. Облегчить преобразование JSON в персистентные модельные сущности поможет Mantle. Любой проект, использующий CoreData, трудно представить без утилиты mogenerator. Masonry облегчит использование AutoLayout в коде. Если клиент общается с сервером с помощью протокола WebSocket, то наверняка будет присутствовать зависимость от SocketRocket. Ну, и, конечно, для управления этими зависимостями скорее всего будет использоваться cocoapods, тоже СПО утилита. Вообще в мобильной разработке СПО на СПО и СПО погоняет.


Что касается моих проектов, то в порядке уменьшение популярности:

QTree-objc — библиотека для стабильной кластеризации геоданных с помощью алгоритма Quadtree. Простым языком: если пользователю требуется показать большое количество точек на карте (банкоматы, магазины и т.п.), то показывать их все сразу будет не лучшим решением. Будет лучше сгруппировать близко находящиеся точки в кластер, на котором будет, например, написано количество элементов. При зуме карты кластеры будут распадаться на элементы. Эта библиотека помогает реализовать такое поведение.

AKNumericFormatter — для форматирования числовых данных, в т.ч. и на лету.

AKTransliteration — для транслитерации текста по табличным правилам, сейчас есть ru <-> en правила.


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


А как вы связаны со свободным ПО?


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Scottish readers: Undecided about the referendum? Please read How the media shafted the people of Scotland and Scottish Independence, Power And Propaganda.