Pull to refresh
1
0
Александр Бирюков @fobos

Фронтенд разработчик

Send message

Многоязычный Badoo: «трудности перевода»

Reading time10 min
Views26K


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

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

В этой статье мы вкратце расскажем о тех аспектах локализации, которым нужно уделить внимание в первую очередь, и поделимся опытом, который мы накопили при переводе Badoo на 46 языков. Это очень обширная тема, и мы продолжим рассказывать в деталях, как мы реализовали те или иные инструменты. В конце статьи вы можете проголосовать и выбрать тот аспект, о котором вам интересно узнать в первую очередь.
Читать дальше →
Total votes 75: ↑69 and ↓6+63
Comments30

Искусство управления IT-проектами, 2-е изд

Reading time4 min
Views26K
Издательство Питер решило вспомнить о хорошей, но забытой книге Скотта Беркуна «Искусство управления IT-проектами, 2-е изд.»

image

Вот, что говорит сам автор о своей книге:


«С годами созидательного труда и сопоставления своего личного опыта с опытом других менеджеров, программистов и проектировщиков, я неплохо освоил искусство управления проектами, которое включает в себя подходы к руководству командами, работу над идеями, организацию работы над проектами, выдерживание рабочего графика, улаживание конфликтных ситуаций и достижение конкретных результатов даже перед лицом серьезных испытаний и неблагоприятно складывающейся обстановки. Несмотря на широкое толкование названия этой книги, большую часть своего рабочего опыта я приобрел в технической области, работая, в частности, в корпорации Microsoft. Я проработал в этой корпорации с 1994 по 2003 год, возглавляя команды специалистов, работающих над такими проектами, как Internet Explorer, Microsoft Windows и MSN. Несколько лет я проработал в группе совершенствования разработок корпорации Microsoft, отвечая за обучение и консультации команд в рамках всей компании, и довольно часто получал приглашения выступить с докладами на публичных конференциях, в корпорациях и университетах. Большинство советов, уроков и историй, приводимых в этой книге, являются плодами этого опыта работы. Хотя у меня за плечами богатое прошлое разработчика программного обеспечения и веб-приложений, при работе над книгой я расширил область исследований, обратившись к источникам и технологиям, выходящим за рамки разработки и управления. В книге содержится много полезных сведений для людей, принадлежащих миру бизнеса. Я убежден, что трудности в организации, руководстве, разработке и производстве имеют много общего, независимо от области деятельности. В процессе изготовления тостеров, строительства небоскребов, производства автомобилей, создания веб-сайтов и программных продуктов во многом приходится сталкиваться с одними и теми же трудностями, и эта книга написана в первую очередь о том, как эти трудности преодолеть.В отличие от некоторых других книг о руководстве проектов».

Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments10

30 полезных сервисов для веб-разработчика

Reading time2 min
Views163K
Решил собрать сервисы, которые могут быть полезны веб-разработчикам и дизайнерам. Буду рад, если кто-то найдет для себя полезный сервис. Осторожно, под катом куча картинок!
Читать дальше →
Total votes 180: ↑156 and ↓24+132
Comments48

Стиль именования коммитов

Reading time4 min
Views124K
the Octobi Wan Catnobi

Про многие моменты разработки есть очень много информации. Как писать комментарии, как именовать классы, методы, какие паттерны использовать и т.д. и т.п. Но есть одна область, в которой многие даже и не задумываются о том, что можно что-то улучшить — это написание коммитов.
Читать дальше →
Total votes 59: ↑43 and ↓16+27
Comments51

Привет, это новый 2ГИС, о котором говорят твои друзья

Reading time3 min
Views54K
2ГИС полностью обновился. Впервые мы его показали 19 ноября с урезанным функционалом и, пусть и не критичными, но ошибками — всё-таки это была стадия публичного бета-тестирования.

За пять месяцев мы, конечно, многое исправили и допилили. О результатах уже разосланы пресс-релизы. Например, про то, что у нас 400 000 фотографий и 500 000 отзывов или, что мы знаем входы в почти один миллион организаций страны.

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

Попробовать
Читать дальше →
Total votes 122: ↑114 and ↓8+106
Comments133

О роли _албанского в тестировании

Reading time5 min
Views9.7K
Кто-то наверняка помнит, что в 2012 году 2ГИС вышел за пределы СНГ и появился в итальянской Падуе. Это был первый релиз нашего продукта за рубежом и не на привычном и родном русском языке.

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

Команде 2ГИС Онлайн делать предстояло немало:

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

Challenge, как говорится, accepted. Забегая вперед, скажем, что всё вышеописанное было выполнено, а полученный опыт и наработки использовались в следующих зарубежных проектах. Позже 2ГИС вышел на Кипре, в Чехии, на подходе еще пара стран. Но сейчас мы вернемся в прошлое и расскажем, как команда тестирования 2ГИС Онлайн решала поставленные задачи.


Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments13

Отчет о конференции DUMP-2014

Reading time8 min
Views6.7K
14 марта в Екатеринбурге в четвертый раз прошла конференция для разработчиков DUMP. В этом году она получилась действительно самой большой на Урале — нам удалось собрать на одной площадке чуть больше 900 разработчиков, дизайнеров, аналитиков, тестировщиков, верстальщиков и людей, занимающихся наукой в сфере IT. Участники съехались из 19 городов России и мира.

image

Формат конференции

Доклады читались в 6 параллельных потоках и 8 секциях: Fronttalks, Serverside, Управление разработкой, Проектирование интерфейсов, Mobile, Аналитика, Тестирование, Rocket science. Кроме этого, прошел круглый стол на тему «Бизнес в IT».

Читать дальше →
Total votes 19: ↑15 and ↓4+11
Comments4

Оптимизируем Gruntfile

Reading time9 min
Views20K

Введение


Если Grunt — новое для вас слово, то вы можете сначала ознакомиться со статьей Криса Койерса «Grunt для людей, кто думает, что такие вещи как Grunt уродливы и тяжелы». После введения от Криса, у вас будет свой собственный Grunt проект и вы уже попробуете на вкус все возможности, которые Grunt нам предоставляет.

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

  • Как сохранить ваш Gruntfile аккуратным и опрятным
  • Как сильно улучшить время вашей сборки
  • Как быть постоянно в курсе состояния сборки

Читать дальше →
Total votes 34: ↑32 and ↓2+30
Comments16

«Умные» телевизоры LG шпионят за пользователями

Reading time4 min
Views262K
Всё началось с того, что я обратил внимание на рекламу, которую показывает мой новый SmartTV от LG. После небольшого расследования, я наткнулся на видео для корпоративных заказчиков, рассказывающее о рекламных возможностях LG. Видео достаточно длинное, суть заключается в том, что LG Smart Ad собирает информацию о любимых программах пользователя, его поведении в сети, включая сбор ключевых слов, используемых при поиске, и прочую информацию о личных пристрастиях. Все это используется для показа таргетированной рекламы.

image
Читать дальше →
Total votes 267: ↑266 and ↓1+265
Comments198

Несколько полезностей по работе с NPM

Reading time2 min
Views90K
image

NPM — пакетный менеджер для node.js, аналог GEM в RoR. В статье несколько советов по его использованию.

Установка пакетов


Все знают
# Устанавливает пакет express
npm install express

Какие варианты еще есть?
Читать дальше →
Total votes 96: ↑84 and ↓12+72
Comments12

Tig — консольный GUI для Git

Reading time2 min
Views37K
Никогда не был фанатом gitk и пользовался им редко, предпочитая консоль и настроенные алиасы. Благодаря хабраюзеру grossws, я открыл для себя tig. Это то, чего мне не хватало. После месяца использования его в работе хочу поделиться находкой с вами.

Tig это консольный GUI(TUI) для Git, основанный на Ncurses.
Основные преимущества:

  • потрясающая скорость, 20,000 коммитов готовы к просмотру за четверть секунды
  • консольный
  • управление в vim стиле

Cкриншоты основных режимов и сравнение с gitk.
Читать дальше →
Total votes 64: ↑60 and ↓4+56
Comments46

Правильные способы исключения файлов в Git

Reading time1 min
Views209K
Иногда встречаю в файле .gitignore то, чего там быть никак не должно. Например, папка .idea, в которой лежат конфиги известных IDE от JetBrains. Это часть вашего рабочего окружения и она никаким боком не относится к проекту и репозиторию. Если над проектом работает несколько человек и каждый из них добавит конфиги своего окружения в .gitignore, то он превратится в нечитаемую помойку.

В этом топике я расскажу о правильных способах исключения файлов и о том когда какой способ использовать.
Читать дальше →
Total votes 98: ↑74 and ↓24+50
Comments68

Учимся писать userscript'ы

Reading time7 min
Views291K
Доброго времени суток всем желающим приобщиться к миру пользовательских скриптов (они же userscript, userJS, юзерскрипты).

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

Внимание: предполагается минимальное знание javascript.
На практике доказано: юзерскрипты может писать человек, не знакомый с программированием, но обладающий усидчивостью и желанием изучить javascript!
О том, что такое javascript и как с ним обращаться, можно узнать на javascript.ru.
Поехали!
Total votes 144: ↑134 and ↓10+124
Comments44

Асинхронное программирование на JavaScript — Остаться в живых

Reading time14 min
Views35K
Программисты принимают некоторые особенности как должное — последовательное программирование, к примеру, при записи алгоритма, который делает один шаг только после другого.

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

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

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

Сообщество JavaScript в курсе этого, особенно сообщество Node.JS, так как Node.JS ставит акцент на асинхронном коде.
Читать дальше →
Total votes 38: ↑34 and ↓4+30
Comments22

Джон Резиг об интернационализации JavaScript-приложений

Reading time6 min
Views13K
Недавно мне пришлось заниматься интернационализацией веб-приложения на Node.js+Express, над которым я сейчас работаю, и, как мне кажется, получилось довольно неплохо (иностранные пользователи очень довольны, и я вижу заметный приток трафика из неанглоязычных стран). Стратегия интернационализации, которую я опишу, не слишком сильно завязана на Node и может подойти любому веб-приложению.

Мне часто приходилось пользоваться многоязычными сайтами или заходить на англоязычные сайты из разных стран мира, так что я хорошо представлял, каким требованиям должна удовлетворять интернационализация:
Читать дальше →
Total votes 51: ↑46 and ↓5+41
Comments19

Как релизится GitHub

Reading time3 min
Views43K
Yac 2013 посетил Jason Rudolph из GitHub. Я считаю его доклад про API был одним из самых интересных на конференции. Яндекс обещал выложить в сеть записи, так что советую на досуге посмотреть его всем, кто не видел.

Но речь пойдет не о докладе. На картинке график релизов GitHub на продакшн.



Когда я услышал цифру, я не поверил своим ушам. У GitHub'а сотни обновлений в неделю. В команде около сорока разработчиков и ни одного QA.

К счастью Джейсон после доклада еще какое-то время находился рядом со сценой и я смог расспросить его с пристрастием о том как они это делают.
Читать дальше →
Total votes 124: ↑121 and ↓3+118
Comments67

Производительность фронтэнда. Часть 2 — кешируем динамический контент с помощью etagify

Reading time5 min
Views5.7K
От переводчика: Это шестая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





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

Эта статья посвящена etagify — модулю middleware для Connect, который генерирует ETag-и на лету на основе MD5-хешей ответов, и хранит эти хеши в памяти. Etagify избавляет от лишней рутины при сборке проекта, предельно прост в использовании и увеличивает производительность больше, чем можно было бы ожидать (в своих тестах мы получили ускорение загрузки страниц на 9%):

myapp = require('express').createServer();
myapp.use(require('etagify')());
...
app.get('/about', function(req, res) {
  res.etagify(); 
  var body = ejs.render(template, options);
  res.send(body);
});

Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments0

Охотимся за утечками памяти в Node.js (1-я из 12 статей о Node.js от команды Mozilla Identity)

Reading time7 min
Views27K
От переводчика: Это первая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Как клиентская, так и серверная часть Persona написаны на JavaScript. В ходе работы команда проекта создала несколько инструментов на все случаи жизни — от локализации до отладки, управления зависимостями и многого другого. В этой серии статей разработчики Mozilla делятся с сообществом своим опытом и этими инструментами, которые пригодятся любому, кто пишет высоконагруженный сервис на Node.js.

Первая статья цикла посвящена распространённой проблеме Node.js — утечкам памяти, особенностям утечек в высоконагруженных проектах и библиотеке node-memwatch, которая помогает найти и устранить такие утечки в Node.




Зачем заморачиваться?


Вы можете спросить, зачем вообще отслеживать утечки памяти? Неужели нет более важных дел? Почему бы просто не перезапускать процесс время от времени, или просто добавить памяти на сервер? Есть три причины, по которым устранять утечки всё-таки важно:

  1. Возможно, вы не сильно переживаете об утечках памяти, но этого нельзя сказать о V8 (движок JavaScript на котором работает Node). Чем больше памяти занято, тем активнее работает сборщик мусора, замедляя ваше приложение. Так что в Node утечки напрямую вредят производительности.
  2. Утечки могут привести к другим проблемам. Протекающий код может блокировать ограниченные ресурсы. У вас могут закончиться файловые дескрипторы или вы вдруг не сможете открыть ещё одно соединение с БД. Такие проблемы могут возникнуть задолго до того, как кончится память, но обрушат ваше приложение ничуть не хуже.
  3. Рано или поздно ваше приложение упадёт. И это наверняка случится во время наплыва посетителей. Вас все засмеют и будут писать про вас гадости на Hacker News.

Откуда доносится звук падающих капель?
Total votes 63: ↑61 and ↓2+59
Comments1

Как находить и устранять утечки памяти на примере Яндекс.Почты

Reading time8 min
Views66K
На первый поверхностный взгляд, слова JavaScript и «утечка памяти» рядом стоять не могут. Настоящих утечек памяти в JS, конечно, не может быть, потому что процесс сборки мусора происходит автоматически и не может контролироваться из нашего кода. Выделить память под объект и забыть освободить невозможно. Но могут быть ситуации, связанные с ошибками в логике работы приложения, которые приводят к утечкам памяти другого рода. Например, забиндили обработчик, в котором что-то делаем с методами общего объекта и забыли его анбиндить. Или же посылаем письмо с большим телом и не очищаем тело даже после отправки.

image

Мы в Яндекс.Почте, сложном и массовом проекте, накопили заметный опыт в поиске и устранении таких утечек, и хотим им поделиться.
Итак, больше подробностей
Total votes 147: ↑143 and ↓4+139
Comments13

Git rebase «по кнопке»

Reading time9 min
Views23K

Когда мы говорим об автоматизации процесса разработки и тестирования, мы подразумеваем, что это очень масштабное действие, и это действительно так. А если разложить его по частям, то станут видны отдельные фрагменты всей картины ― такая фрагментация процесса очень важна в двух случаях:
  • действия выполняются вручную, что требует сосредоточенности и аккуратности;
  • жёсткие временные рамки.

В нашем случае налицо лимит по времени: релизы формируются, тестируются и выкатываются на продакшн-сервер два раза в день. При ограниченных сроках в жизненном цикле релиза процесс удаления (отката) из релизной ветки задачи, содержащей ошибку, имеет важное значение. Для её выполнения мы используем git rebase. Так как git rebase ― это полностью ручная операция, которая требует внимательности и скрупулезности и занимает продолжительное время, мы автоматизировали процесс удаления задачи из релизной ветки.
Читать дальше →
Total votes 73: ↑72 and ↓1+71
Comments13

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity