Pull to refresh
0
@SkLightread⁠-⁠only

User

Send message

«Never say never» или Работаем с таймзонами правильно

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

TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

Читать дальше →
Total votes 84: ↑79 and ↓5+74
Comments103

Руководство для дизайнера по DPI

Reading time27 min
Views321K


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

Автор — Sebastien Gabriel.

Я не знаю всего, так что, если по вашему мнению я где то ошибаюсь или вам нужно уточнить что-то, либо у вас есть предложения или вопросы для улучшения данного руководства, отправьте письмо (на англ) на sgabriel.contact@gmail.com. Вы также можете найти на меня Twitter, G+ или Facebook.
Читать дальше →
Total votes 92: ↑88 and ↓4+84
Comments19

Как использовать API сайта, у которого нет API?

Reading time4 min
Views80K
У меня достаточно часто появляется задача получить данные от стороннего сайта, при этом далеко не всегда этот сайт предоставляет возможность удобно получить эти данные через API. Единственное решение в таком случае — парсить html содержимое страниц. Когда-то я писал регэкспы, потом появились библиотеки, позволяющие получить нужное содержимое по css-селектору, а сейчас и это кажется сложной задачей, которую хотелось бы упростить.

Сегодня я хочу рассказать вам о моей небольшой библиотеке, позволяющей описать в API-стиле http-запросы и парсить ответ сервера в нужный вам формат.
Читать дальше →
Total votes 115: ↑105 and ↓10+95
Comments40

Персональные финансы 2: Money Never Sleeps — как себя финансово защитить?

Reading time18 min
Views75K
После вводной первой части переходим, наконец, к обещанной конкретике. Ее получилось так много, что я сначала думал разделить ее на две части, но народ опять начнет просить крови говорить, что по делу мало написано — и я решил не делить. Для тех, кому все равно мало — изначальная цель была донести мысль о том, что такое существует, что это не сложно и т. д. Поэтому стараюсь давать информацию в развернутом формате. А для тех, кому много и сложно — не переживайте, это же все вводится постепенно, поэтому вы особо не напрягаетесь. Это здесь я вывалил все в одну кучу и сразу. Поехали.

Краткий обзор нижеследующего текста:
1. Как накопить безболезненно?
2. Куда девать накопленное?
3. Преимущества и подводные камни разных инструментов.
4. Как накопить больше?
5. Как объединить это все в систему (немного цифр)?

Я здесь специально не буду рассматривать вопросы учета и оптимизации расходов (об этом уже было несколько статей на Хабре) — мы будем говорить именно о том случае, когда вы зарабатываете больше, чем тратите. Если это не так — дальше читать нет смысла, пока вы не научитесь контролировать свои расходы — иначе вам элементарно не будет, чем управлять. Ведь, вы должны понимать, что человек зарабатывающий 10 000 долларов и тратящий 9999 долларов в данном контексте проигрывает человеку, который зарабатывает 1000 долларов и тратит 900 долларов.

Как накопить безболезненно. Золотое правило


Я писал о том, насколько важно время — чем раньше начнешь, тем лучше будет результат. Так вот здесь я хочу дополнить это правило третьим пунктом — дисциплина. Причем приоритетность этих пунктов снова не в пользу самих денег (читай «суммы денег»): ВРЕМЯ, ДИСЦИПЛИНА, ДЕНЬГИ. Именно в такой последовательности, и никак иначе.

Много интересного
Total votes 55: ↑45 and ↓10+35
Comments59

Доставка из США за 5-10 дней по цене USPS

Reading time4 min
Views161K
До наступления 2013 года оставалось 30 дней, когда я решил подарить жене ipad mini. Официальный store.apple.com не справлялся со спросом на mini, о чем красноречиво свидетельствовала надпись est shipping in 2 weeks.

Отказываться от mini в качестве подарка не было никакого желания, поэтому был штурмом взят ebay, цены на котором заметно подросли, и 16gb+cellurar модель ушла за $500.

До наступления 2013 года оставалось 15 дней, у меня был выигранный лот и туманная перспектива получить его в Спб до 31 числа…
И я ее получил, за 10 дней, тариф за отправку составил $48.5.
Читать дальше...
Total votes 150: ↑138 and ↓12+126
Comments160

Как обмануть Корпорацию Добра или покупаем Nexus 7 в России без гуглолотереи

Reading time4 min
Views260K
В недавней статье на Хабре уже шла речь о том, как закупаться на Google Play в разделе Devices прямо из нашего захолустья. Тема бесспорно интересная: Nexus 7 пока в России и близлежащих странах вообще не водится, а Galaxy Nexus, скорее всего, просто обойдется вам значительно дороже, если, конечно, вы не живете в Москве или Питере. Проблема только в том, что рецепт оказался несколько нестабильный: лично меня Самая Добрая Корпорация небезосновательно заподозрила в подтасовке личных данных, а судя по комментариям – я такой оказался далеко не один.

Неделя мучений и попыток обмануть Google Wallet привела-таки к положительному результату в виде возможности покупать что угодно и где угодно на Google Play, более того, решение, строго говоря, лежало на поверхности и никаких сложных действий не требовало.

Под катом новый рецепт и совсем чуть-чуть скриншотов.
Читать дальше →
Total votes 99: ↑91 and ↓8+83
Comments110

Видео докладов с конференции DevConf 2014

Reading time2 min
Views23K
Этим летом в Москве проходила конференция профессиональных веб-разработчиков DevConf 2014. Мы в Badoo поддерживали конференцию, выступали с докладами и сделали видео докладов, которые были интересны нашим разработчикам. Так как спикеры были «за», то мы делимся видео с нашими подписчиками.

1. «StatsCollector, или «Мама! Он и меня посчитал!»».
Старынин Валерий, PHP разработчик отдела BI, Badoo.
Доклад о том, как мы собираем статистику для каждого пользователя, обсчитываем каждое открытие страницы (и не только!), обрабатываем 120000 событий в секунду и планируем расширяться.



Читать дальше →
Total votes 60: ↑55 and ↓5+50
Comments16

Поиск жилья без посредников в 21-м веке

Reading time6 min
Views168K
Полагаю, все мы однажды искали себе жилье. Кто-то — в собственность, большинство, вероятно, в аренду. Все, кто хоть раз пытался найти реальные предложения на досках объявлений, знают — это нереально. Такого количества спама нет, пожалуй, ни в одной другой сфере. После того, как окунешься в этот ад, обычно руки начинают чесаться применить свою IT-шность на благо ближнему. Результатом для меня стал проект Sobnik, о котором я и хочу рассказать.

Sobnik — это плагин для Chrome, который помечает посредников на досках объявлений. Пока работает только с Avito.ru, в ближайшем будущем я добавлю Irr.ru и другие крупные доски. Всех, кто сидит на чемоданах и кому не терпится попробовать, прошу в Google Web Store. Под катом я расскажу о технической стороне проекта, о его перспективах и о моих наблюдениях за противником посредниками. Любители критиковать чужой JS-код также велкам, исходник клиентской части плагина доступен на github.

Читать дальше →
Total votes 106: ↑104 and ↓2+102
Comments103

Continuous Delivery hecho en Alawar

Reading time7 min
Views5.8K
Около года назад перед нашей командой была поставлена задача стартовать разработку серверных частей ряда игровых MMO проектов. Специфика такого рода проектов помимо требований к гибкости, стабильности и масштабируемости также включает в себя:

  • необходимость A/B-тестирования разных версий одной и той же игры
  • возможность по максимуму переиспользовать функциональность от одной игры в другой
  • высокую вероятность географической удаленности от разработчиков занимающихся клиентской частью игры

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

Цель данной статьи – рассказать о проделанных шагах, принятых решениях и описать полученный результат.

image

Читать дальше →
Total votes 25: ↑20 and ↓5+15
Comments4

Мерчиум + Яндекс.Деньги = Бесплатные и мощные интернет-магазины

Reading time3 min
Views24K
Привет, Хабр!

Меня зовут Константин, и я расскажу вам о проекте Мерчиум, который наша команда запустила совместно с командой Яндекс.Денег.

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

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



Под катом я подробнее расскажу об истории проекта, о его нынешнем состоянии и наших планах.
Читать дальше →
Total votes 28: ↑17 and ↓11+6
Comments33

Как правильно разрабатывать API с поддержкой обратной совместимости. Семинар в Яндексе

Reading time7 min
Views35K
Привет! Меня зовут Сергей Константинов, в Яндексе я руковожу разработкой API Карт. Недавно я поделился опытом поддержки обратной совместимости со своими коллегами. Мой доклад состоял из двух неравных частей. Первая, большая, посвящена тому, как правильно разрабатывать API, чтобы потом не было мучительно больно. Вторая же про то, что делать, если вам нужно что-то рефакторить и не сломать по дороге обратную совместимость.



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

Для разработчика обратная совместимость в первую очередь подразумевает, что единожды принятое обязательство предоставлять какую-либо функциональность невозможно отменить, исправить или перестать поддерживать.
Читать дальше →
Total votes 68: ↑66 and ↓2+64
Comments24

Как использовать психологию цвета для увеличения конверсии

Reading time6 min
Views97K
Чтобы сформировать мнение о продукте, пользователю достаточно 90 секунд. Определяющую роль на мнение пользователей оказывает выбранная цветовая гамма. Цвет управляет эмоциями посетителей и определяет отношение к сайту и бренду в целом. Когда вы смотрите на какой-либо цвет, ваши глаза взаимодействуют с определенной областью головного мозга, известной как гипоталамус. Он посылает сигнал в гипофез к эндокринной системе, и затем к щитовидной железе. А щитовидная железа дает сигнал на выработку специальных гормонов, которые влияют на настроение, эмоции и поведение.

Нейл Патель из компании QuickSprout утверждает, что цвет на 85% влияет на решение о приобретении той или иной продукции. Поэтому многие компании вкладывают большие деньги в исследования и создание продающей упаковки для своего товара. Тоже самое правило работает и для продающих сайтов: используйте правильные цвета, и вы всегда будете в выигрыше.
Читать дальше →
Total votes 44: ↑29 and ↓15+14
Comments13

Пара полезных команд, которые могут пригодиться при DDoS и не только

Reading time3 min
Views82K
В моем случае, в качестве frontend сервера, стоит nginx и формат access-лога имеет вид:

log_format main '$remote_addr — $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" -> $upstream_response_time';

Что на выходе дает что-то вроде такой строки:

188.142.8.61 — - [14/Sep/2014:22:51:03 +0400] «www.mysite.ru» «GET / HTTP/1.1» 200 519 «6wwro6rq35muk.ru» «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.191602; .NET CLR 3.5.191602; .NET CLR 3.0.191602» "-" -> 0.003

1. tail -f /var/log/nginx/nginx.access.log | cut -d ' ' -f 1 | logtop

Позволяет получить общую картину: распределение уникальных IP, с которых идут запросы, кол-во запросов с одного IP и т.д.
Самое ценное — что все это работает в режиме реального времени и можно мониторить ситуацию, внося какие-либо изменения в конфигурацию (например просто забанить ТОП 20 самых активных IP через iptables или временно ограничить географию запросов в nginx через GeoIP http://nginx.org/ru/docs/http/ngx_http_geoip_module.html).
Читать дальше →
Total votes 105: ↑101 and ↓4+97
Comments21

HLS против RTMP — сухая статистика

Reading time4 min
Views72K
Если кто-то решил сделать самостоятельно обработку, хранение и передачу видео для своего онлайн-проекта, а не использовать сайты вроде YouTube, он неизбежно приходит к вопросу о том, какой протокол передачи использовать для трансляции видео на устройства пользователей. Выбор невелик, т.к. есть ряд отраслевых стандартов, которые поддерживают те или иные устройства. Кроме того, выбор протокола во многом зависит от «класса» видео — живая трансляция или видео-по-запросу. От выбора протокола также зависит и выбор медиа-сервера, который будет двигателем вашей медиа-машины: будете ли ставить несколько разнородных серверов или построите сеть доставки на одном решении? Поэтому нужно взвесить всё и принимать решение исходя из критериев вашего бизнеса.

В общем, получается уравнение со многими неизвестными. Здесь немаловажна динамика процесса — а куда вообще идёт индустрия? Вдруг я вложусь в поддержку технологии, а она загнётся через год, ведь такое уже бывало. Или поставлю на модную технологию, а её никто не поддерживает?

Мы решили оценить, как менялась доля разных протоколов с течением времени — посмотреть в динамике весь процесс. Данные взяли за последний год.

Расклад по протоколам на начало августа 2014

Как менялась карта мира
Total votes 8: ↑7 and ↓1+6
Comments19

Раскрываем возможности map в nginx

Reading time6 min
Views136K
map — мощная директива, которая может сделать ваши конфиги простыми и понятными.
Возможно, это самая недооцененная директива, из за того, что не все знают всех её возможностей.
Она в компактной форме помогает обрабатывать переменные, GET параметры, заголовки, куки и наборы бекендов (upstream).
Попробую раскрыть её возможности хабрапользователям.
Раскрыть возможности map
Total votes 91: ↑91 and ↓0+91
Comments11

О размере экрана, пикселя и элемента

Reading time9 min
Views195K


Привет, username. Свой первый пост я хочу посвятить актуальной проблеме, связанной с появлением большого количества новых форматов дисплеев и непрекращающейся гонкой за плотностью пикселей. В свете появления таких устройств, как очки дополненной реальности, смартчасов, 4к-мониторов и еще более широкого спектра планшетов и ноутбуков, возникает вопрос: какой размер графического элемента/текста следует считать оптимальным и в чем его измерять. Android-разработчики, несомненно, тут же воскликнут: «Да, конечно, в dp!». Но практика показывает, что дела обстоят несколько сложнее.
Читать дальше →
Total votes 93: ↑92 and ↓1+91
Comments28

Приводим в порядок css-код. Опыт Яндекса

Reading time6 min
Views90K
Всем привет!

Я работаю над фронтендом огромного проекта — поисковой выдачи Яндекса. И у нас, как и у любого другого большого веб-проекта, есть огромное количество css-кода и немаленькая команда, которая с ним взаимодействует.

Когда много людей, используя разные инструменты, пишут и редактируют css, со временем этот css может получиться очень запутанным, неконсистентым и в целом начинает выглядеть плохо. Например, кому-то удобнее писать вендорные префиксы в одном порядке, кому-то — в другом, кто-то ставит кавычки вокруг url, кто-то — нет, а кто-нибудь фикся срочную багу к релизу мог бы, к примеру, написать position: relative в начале блока свойств, незаметив что где-нибудь внизу между color и box-shadow, уже есть position: absolute, и долго гадать, почему у него ничего не работает.



Но несмотря на то, что все пишут код по-разному, у нас в репозитории идеальный порядок: css-код полностью консистентен, и прекрасно выглядит. Весь.

Как мы этого добились, можно прочитать под катом.
Читать дальше →
Total votes 174: ↑169 and ↓5+164
Comments70

Yii2 и организация мультиязычности

Reading time7 min
Views93K
Долгожданный выход Yii 2.0 Beta дал стимул многим разработчикам, использующих Yii, к переходу на вторую версию фреймворка. Разработчики фреймворка указали, что постараются не трогать обратную совместимость и в основном будут сосредоточены над исправлением ошибок и заканчивать документацию. Это дает еще больший импульс к использованию Yii2 в реальных проектах.

Мы решили не отставать от новшеств и выбрали именно вторую версию замечательного фреймворка Yii. При разработке проекта возникла необходимость в организации мультиязычности на сайте.
Читать дальше →
Total votes 20: ↑14 and ↓6+8
Comments30

Разработка кросс-браузерных расширений

Reading time5 min
Views10K
В своей прошлой статье, я упомянул о выпуске браузерного расширения для Google Chrome, который способен повысить эффективность поиска, за счет предоставления релевантной информации из статей понравившихся вам в социальных сетях.

На сегодня мы поддерживаем 3 главных браузера Chrome, Firefox и Safari, причем, не смотря на разницу платформ, все собираются из одной кодовой базы. Я расскажу, как это было сделано и как упростить себе жизнь разрабатывая браузерные расширения.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments9

Заставьте сайт работать на сенсорных устройствах

Reading time8 min
Views68K


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

Читать дальше →
Total votes 40: ↑33 and ↓7+26
Comments7

Information

Rating
Does not participate
Registered
Activity