Вот есть в России VK и Яндекс. Всё у них замечательно, молодцы вообще ребята: и предельно высокая посещаемость, и сложность инфраструктуры, и применяемые технологии, но в мире они не столь популярны. Вот и Китай у большинства любителей, из тех, чей взгляд устремлен в Калифорнию, где каждые 3 месяца появляется hitech-компания в миллиард долларов, в картине мира просто отсутствует. Эта страна во многих вопросах, где дело касается количества, необычная, постоянно ведь на слуху города Китая, метро, мосты, порты; так вот я тут — о массивных китайских сайтах. Сравнивать с DDOS как атакой глупо, та совсем разная и она не обыденность, но есть сайты где инфраструктура заточена для миллионов, хотя бы только поэтому они показались мне интересными.
Александр Трахимёнок @astec
User
Как преуспеть со своим мобильным приложением
16 min
36KRecovery Mode
Translation
Большинство приложений провальны. Эта жестокая реальность приводит многих разочарованных разработчиков к заключению, часто подсознательному, что преуспевание в App Store — всё равно, что разбогатеть на «золотой лихорадке»: нужно быть чертовски удачливым.

Идея «удачи» — опасное успокоительное средство, облегчающее боль неудачи. А боль — это хорошая вещь. Она показывает, что что-то идёт не так. Если моё приложение потерпело крах, я хочу знать почему. Вместо того, чтобы обвинять мироздание, почему бы не посмотреть, что ребята из tap tap tap и Tapbots делают для того, чтобы снова и снова достигать успеха.
Несмотря на то, что безупречное следование этой формуле невозможно, работа в этом направлении резко увеличит ваши шансы на успех. Эти принципы выработаны для iOS, но многие из них могут быть применены и для других платформ.

Идея «удачи» — опасное успокоительное средство, облегчающее боль неудачи. А боль — это хорошая вещь. Она показывает, что что-то идёт не так. Если моё приложение потерпело крах, я хочу знать почему. Вместо того, чтобы обвинять мироздание, почему бы не посмотреть, что ребята из tap tap tap и Tapbots делают для того, чтобы снова и снова достигать успеха.
Несмотря на то, что безупречное следование этой формуле невозможно, работа в этом направлении резко увеличит ваши шансы на успех. Эти принципы выработаны для iOS, но многие из них могут быть применены и для других платформ.
+43
Как из болота вытягивать ITшника или об общении в стрессовых ситуациях
21 min
275KTutorial

Неприятности случаются… Неожиданно плохой фидбек, проблемы с заказчиком или коллегами, не повысили зарплату, странные баги, внезапный овертайм или закрытие проекта — подобные события запускают цепочку реактивных реакций:
- Нет, тут есть ошибка -> сами гады -> а может все не так и плохо -> ппц -> ладно, давай выкручиваться
В этой цепочке человек ведет себя реактивно, предсказуемо… и, часто, совершает глупости. Это напоминает машину состояний, входом в которую являются неожиданное событие. Состояния машины — цепочка психологических защит: отрицание, гнев, торг и депрессия, а выход — принятие новой информации.
Из подобных состояний часто приходится вытаскивать коллег, заказчиков, и себя самого.
Под хабракатом, кроме описания этапов, есть ответы на вопросы:
- Как узнать каждое состояние и предугадать следующее?
- Как помочь выйти себе и собеседнику из цепочки?
- Что не делать, чтобы не усугубить ситуацию?
+173
RESTful API для сервера – делаем правильно (Часть 1)
13 min
334KTranslation
В 2007-м Стив Джобс представил iPhone, который произвел революцию в высокотехнологичной индустрии и изменил наш подход к работе и ведению бизнеса. Сейчас 2012-й и все больше и больше сайтов предлагают нативные iOS и Android клиенты для своих сервисов. Между тем не все стартапы обладают финансами для разработки приложений в дополнение к основному продукту. Для увеличения популярности своего продукта эти компании предлагают открытые API, которыми могут воспользоваться сторонние разработчики. Пожалуй Twitter был первым в этой сфере и теперь число компаний, последовавших этой стратегии, растет стремительно. Это действительно отличный способ создать привлекательную экосистему вокруг своего продукта.
+67
Руководство по оформлению HTML/CSS кода от Google
12 min
361KTranslation
От переводчика
С удовольствием ознакомился с этими рекомендациями и теперь предлагаю вам перевод.
Введение
Это руководство описывает правила для оформления и форматирования HTML и CSS кода. Его цель — повысить качество кода и облегчить совместную работу и поддержку инфраструктуры.
Это относится к рабочим версиям файлов использующих HTML, CSS и GSS
Разрешается использовать любые инструменты для минификации компиляции или обфускации кода, при условии, что общее качество кода будет сохранено.
+277
iPhone 4 на CSS3 без использования картинок
7 min
8.7K
Предисловие
Несколько недель назад в просторах интернета я увидел очень заинтересовавшую меня вещь — iOS иконки на CSS3 полностью без картинок. Первое что подумал — «Я тоже так могу»! А спустя еще 5 минут для себя четко решил — «challenge accepted». Но чтоб не повторяться я решил немножко усложнить задачу — сделать не только иконки, но и сам девайс.
Постановка задачи
Итак, в тот-же день я решил сделать iPhone4 на CSS3 абсолютно без картинок, base64, canvas или SVG и добавить еще некоторую изюминку — интерактивные возможности:
— включение/выключение;
— блокировка при включении и разблокировка как в реальном iPhone;
— анимация «slide to unlock» текста на экране блокировки;
+197
Метод html-верстки кнопок с применением псевдоэлементов
7 min
9KПоявлению этой методики способствовала воистину монстрообразная вёрстка элементов страницы на нашем проекте. Подумать только, для отображения одной кнопки требовалось до семи тегов на один элемент.
Выглядело это примерно так:

html
Видно, что запутаться в таком коде проще простого, тем паче, что вариантов кнопок на проекте накопилось не менее 30. Попытка создать такую кнопку на серверной стороне вызывала негодование у коллег «пехапистов».
Поэтому моей негласной задачей стало максимальное упрощение кода.
Выглядело это примерно так:

html
<div class="large_button"><br> <span class="buttons submit_v2-button clickable"><br> <i class="left left2"></i><br> <i class="body"><br> <b>В архив</b><br> <i class="end"><br> <i></i><br> </i><br> </i><br> </span><br></div>
Видно, что запутаться в таком коде проще простого, тем паче, что вариантов кнопок на проекте накопилось не менее 30. Попытка создать такую кнопку на серверной стороне вызывала негодование у коллег «пехапистов».
Поэтому моей негласной задачей стало максимальное упрощение кода.
+26
Многоязычные модели Django для начинающих
4 min
21KВводная
Работаю я, как и все адекватные программисты, над социальным порталом который покорит всех от грудничков до маразматиков. И так как цели наполеоновские — нужно учесть возможность использования сервиса даже теми представителями человечества, которые не владеют великим и могучим. Знаю, что многие долго боролись с вопросом локализации именно контента (перевод отдельных полей модели на разные языки), т.к. локализация интерфейса, в пределах общепринятых, в Django решена. Суть проблемы в том, чтобы одна и та же модель (это важно! к примеру пункты единого для всех языков каталога) имела переводы своих полей на разные языки. Те кто давно «на игле» этого фреймворка уже наверняка нашли для себя наиболее подходящую методу решения этой проблемы, я же хочу предложить способ решения и набросать порядок действий для начинающих, чтобы они не сбежали по рельсам на рубиновые копи.
+24
Использование Storyboard
4 min
60KВступление
В недавно вышедшем iOS 5 появился удобный механизм разработки интерфейса программы — Storyboard. Этот механизм позволяет заметно уменьшить количество кода связанного с переходами между экранами, показами Popover'a и даже с настрокой ячеек в таблице.
Задача: По нажатию на кнопку показать следующий экран поместив его в текущий NavigationController.
Решение без Storyboard:
DDetailViewController* nextController = [DDetailViewController new];
[self.navigationController pushViewController:nextController animated:YES];
[nextController release];
Решение с использованием Storyboard:

Вот и все! Никакого кода!
+38
Обзор стартап-мероприятий России. Куда пойти, чтобы себя показать?
7 min
2.5K
Программ и мероприятий для поддержки стартапов развелось очень много! Что они могут дать? Зачем в них участвовать? На эти вопросы пытаются ответить многие, и мы внесем в этот гам свои пять копеек. Сразу хочется отметить что в статье поясняются достаточно простые вещи, которые человеку, более-менее погруженному в тему могут показаться банальными. Но мы считаем, что есть огромное количество людей, для которых эта информация может оказаться полезной.
У стартапа множество возможностей запуститься и у каждого из них есть свои преимущества. Можно тихой сапой просто делать свой гениальный проект, потом выскочить как чертик из коробочки и взорвать рынок.
Но на это способны не все, многим людям периодически требуется небольшой эмоциональный допинг, который можно получить на стартаперских тусовках. Некоторым еще очень нужны деньги, связи, умные советы или команда. Итак, какие же мероприятия и программы могут помочь молодому ИТ-предпринимателю?
+42
DealHunter – как мы делали foursquare для любителей скидок и распродаж
5 min
946Привет всем! Хочу рассказать об опыте создания и запуска мобильного геосоциального сервиса DealHunter, в котором мы постарались совместить несколько наиболее актуальных и интересных трендов и механик.
Идея сервиса, где пользователи могли бы сами добавлять скидки и распродажи, родилась больше года назад, когда в интернете и мобильных приложениях стремительно набирало силу два тренда: daily deals (порожденный Groupon и подхваченный сотнями аналогичных сервисов) и геосоциальные приложения с игровой механикой (одними из первых были Foursquare и Gowalla, потом Foodspotting и чекинизация всего и вся – от факт просмотра телепередачи до количества выпитых кружек пива). Причина, по которой Foursquare за последние 2 года набрал больше 10 миллионов пользователей и собрал с помощью них беспрецедентную базу данных о различных местах и заведениях по всему миру – это влияние еще одного тренда – применение игровых механик к неигровым сервисам (gamification). С одной стороны многие сделали это ради баллов и бейджей – то есть статуса в игровой вселенной Foursquare. Но многих также мотивировал и простой альтруизм, желание предостеречь других пользователей от посещения «плохих» мест и порекомендовать хорошие.

На перекрестке всех этих трендов, от любви к скидкам и прочей халяве до желания обойти других в статусах и рейтингах родился Deal Hunter. Если раньше о распродаже в магазине или о бизнес-ланче в ближайшем кафе узнавали только ваши друзья и коллеги, то почему бы не дать возможность рассказать об этом другим людям вокруг вас, которых вы никогда не видели, но которым эта информация может быть полезна. А вы за это получите очередную виртуальную награду.
От трендов к идее
Идея сервиса, где пользователи могли бы сами добавлять скидки и распродажи, родилась больше года назад, когда в интернете и мобильных приложениях стремительно набирало силу два тренда: daily deals (порожденный Groupon и подхваченный сотнями аналогичных сервисов) и геосоциальные приложения с игровой механикой (одними из первых были Foursquare и Gowalla, потом Foodspotting и чекинизация всего и вся – от факт просмотра телепередачи до количества выпитых кружек пива). Причина, по которой Foursquare за последние 2 года набрал больше 10 миллионов пользователей и собрал с помощью них беспрецедентную базу данных о различных местах и заведениях по всему миру – это влияние еще одного тренда – применение игровых механик к неигровым сервисам (gamification). С одной стороны многие сделали это ради баллов и бейджей – то есть статуса в игровой вселенной Foursquare. Но многих также мотивировал и простой альтруизм, желание предостеречь других пользователей от посещения «плохих» мест и порекомендовать хорошие.

На перекрестке всех этих трендов, от любви к скидкам и прочей халяве до желания обойти других в статусах и рейтингах родился Deal Hunter. Если раньше о распродаже в магазине или о бизнес-ланче в ближайшем кафе узнавали только ваши друзья и коллеги, то почему бы не дать возможность рассказать об этом другим людям вокруг вас, которых вы никогда не видели, но которым эта информация может быть полезна. А вы за это получите очередную виртуальную награду.
+33
Принципы партнёрства в стартапе MyClasses.org — история, манящая в Доминикану
9 min
1.6KВ этом посте я расскажу реальную историю о том как четыре человека (экспат-проказник, москвич, лимитчик да косолапый мишка) договорились о принципах партнёрства, закрепили эти договорённости простым письмом по электронной почте и, доверившись друг другу, за 9 месяцев географически-распределённой работы приблизились к своей мечте о независимости. Лично у меня эта мечта зародилась давно, но окончательно сформулировалась после прочтения «Четырёхчасовой рабочей недели» Тима Ферриса: идея о том, что надо создавать продукт, а не просто работать за зарплату, стала просто навязчивой.
Немного предыстории. Три года назад я поставил крест на своём предыдущем двухгодичном самоокупаемом, но слабо растущем проекте и начал регистрировать домены для нового: MyClasses.org — сеть локальных справочников (уровня города) о всевозможных курсах и уроках. На сайтах организуется процесс общения между школами, учителями и учениками. Этакая смесь Yellow pages + CMS + CRM + Feedback/Review + Social network. Локально-глобального масштаба.

Регистрировал домены я много, увлечённо и постоянно. Домейнерство, не в прямом смысле этого слова, — моя слабость — появилась идея и бац! — надо срочно зарегистрировать домен! Потом ажиотаж проходит, и появляется понимание что ни сил, ни времени, ни достаточных перспектив нет. Но домены остаются. Иногда их удавалось продать (3 раза по запросу, сам никогда не выставляю на продажу, лучшая сделка — $2.200, всего на $3.000 — не разбогатеешь). Но в этот раз всё было не так.
Очередная авантюра подкупала целым набором благоприятных факторов:
Немного предыстории. Три года назад я поставил крест на своём предыдущем двухгодичном самоокупаемом, но слабо растущем проекте и начал регистрировать домены для нового: MyClasses.org — сеть локальных справочников (уровня города) о всевозможных курсах и уроках. На сайтах организуется процесс общения между школами, учителями и учениками. Этакая смесь Yellow pages + CMS + CRM + Feedback/Review + Social network. Локально-глобального масштаба.

Регистрировал домены я много, увлечённо и постоянно. Домейнерство, не в прямом смысле этого слова, — моя слабость — появилась идея и бац! — надо срочно зарегистрировать домен! Потом ажиотаж проходит, и появляется понимание что ни сил, ни времени, ни достаточных перспектив нет. Но домены остаются. Иногда их удавалось продать (3 раза по запросу, сам никогда не выставляю на продажу, лучшая сделка — $2.200, всего на $3.000 — не разбогатеешь). Но в этот раз всё было не так.
Очередная авантюра подкупала целым набором благоприятных факторов:
+75
Как хороший договор спасает нервы и монетку
14 min
62KДоговоры, отчеты, акты — кому охота заниматься этой скукотой, когда вокруг бьет ключом и фонтанирует идеями креативная жизнь? Особенно, если заказчик снисходительно хлопает творческого подрядчика по плечу: «Да ладно, зачем какие-то договоры. Мое слово — закон!» Остается только радостно согласиться и приступить к работе.
На заре существования нашего агентства мы вообще не стремились формализовать отношения с дорогими клиентами. Типовой договор умещался на двух машинописных листах. Содержал он минимум информации: предмет договора, сроки, цена. Если заказчиков немного, и все они — старые знакомые, то в известной степени можно положиться на их добропорядочность. Но когда клиентская база активно растет, то и проблемы множатся: задерживают выплаты, не выполняют обязательства, злоупотребляют лояльностью исполнителя. Столкнувшись с ними в полном объеме, мы собрались, подумали и составили новый типовой договор.
На заре существования нашего агентства мы вообще не стремились формализовать отношения с дорогими клиентами. Типовой договор умещался на двух машинописных листах. Содержал он минимум информации: предмет договора, сроки, цена. Если заказчиков немного, и все они — старые знакомые, то в известной степени можно положиться на их добропорядочность. Но когда клиентская база активно растет, то и проблемы множатся: задерживают выплаты, не выполняют обязательства, злоупотребляют лояльностью исполнителя. Столкнувшись с ними в полном объеме, мы собрались, подумали и составили новый типовой договор.
+134
Экспорт событий из email в Google-календарь в один клик — подводные камни
2 min
11K
Как одну из возможностей сервиса предварительной записи клиентов zabroniruy.com реализовывали идею, чтобы клиент получал всю информацию о предстоящих события в формате, который можно легко экспортировать (желательно в один клик) в существующие планировщики задач. В ходе работы столкнулись с тем, что не все планировщики одинаково “дружелюбны” к разработчикам.
+23
Скорость и стоимость работы с данными Google App Engine в таблицах
5 min
2.6KСтолкнувшись с вопросом выбора базы данных для проекта, провел небольшое исследование Google App Engine на предмет скорости работы с данными. Результаты исследования оформил в виде таблиц.
Эти подсчеты сэкономят время тем, кто ищет площадку для размещения своего проекта, но не уверен подходит ли ему Google App Engine. Кроме того эти таблицы можно использовать как некую «шпаргалку», чтобы примерно ориентироваться сколько времени займет обработка запроса и как его лучше оптимизировать.

Эти подсчеты сэкономят время тем, кто ищет площадку для размещения своего проекта, но не уверен подходит ли ему Google App Engine. Кроме того эти таблицы можно использовать как некую «шпаргалку», чтобы примерно ориентироваться сколько времени займет обработка запроса и как его лучше оптимизировать.

+57
Компания Microsoft представила поддержку Python в Visual Studio
1 min
5K
Компания Microsoft выпустила в режиме бета-тестирования пакет Python Tools for Visual Studio (PTVS), предназначенный для обеспечения поддержки языка Python в интегрированной среде разработки Visual Studio 2010. Код пакета разработан в недрах Microsoft и открыт в рамках лицензии Apache 2.0.
+122
OAuth 2.0 простым и понятным языком
7 min
891K
На хабре уже писали про OAuth 1.0, но понятного объяснения того, что такое OAuth 2.0 не было. Ниже я расскажу, в чем отличия и преимущества OAuth 2.0 и, как его лучше использовать на сайтах, в мобильных и desktop-приложениях.
Что такое OAuth 2.0
OAuth 2.0 — протокол авторизации, позволяющий выдать одному сервису (приложению) права на доступ к ресурсам пользователя на другом сервисе. Протокол избавляет от необходимости доверять приложению логин и пароль, а также позволяет выдавать ограниченный набор прав, а не все сразу.
+138
Непрерывное тестирование питонопроекта
7 min
24KПрограммист зверь ленивый, поэтому всё, что будет делаться больше одного раза надо непременно заскриптовать.
Я уже некоторое время ковыряю TDD и задача постоянного контроля качества для меня становится всё актуальней. Особенно при пополнении команды новыми разработчиками.
Сначала я запускал тесты руками: save, switch, $ nosetests. Потом к тестам добавились проверялки качества кода и пришлось всё засунуть в скрипт:
Скрипт запускать каждый раз ужасно лениво, поэтому небольшая оболочка на inotifywait стала запускать тесты и проверки после каждого сохранения:
Тут я стал более-менее доволен происходящим и даже на некоторое время расслабился. Но ведь программист кроме того, что ленив ещё и горд, поэтому результаты хочется кому-нибудь показать. Чтобы вести историю происходящего (которая очень помогает когда заходит начальник начальника и спрашивает: «ну-с, чем вы занимались последний месяц?») уже есть система контроля версий. Но она показывает только, что сделано и не даёт обзора успешности каждой ревизии. Получается что код лежит, но непонятно в каком он состоянии и что где ещё надо сделать.
Кроме того довольно тяжело следить за коллегами, которые тоже могут что-то сделать и забыть прогнать тесты, в результате в репозитории лежит битый код, не прошедший code review и при очередном pull может внезапно начаться clusterfuck.
И тут очень вовремя kmmbvnr@lj выпустил скринкаст, в котором он демонстрировал интеграцию тестирования для django-проектов с сабжем Jenkins (бывш. Hudson). Посмотрел я на все эти красоты, графики и отчёты и тоже захотел чтобы всё само пело и играло. Но у него django-jenkins, как и следует из названия, встраивается в джангу и генерит отчёты используя хитрую систему. Мой проект до джанги не дорос и скорее всего не дорастёт — это достаточно тривиальное WSGI-приложение, которое правда стремительно разрастается. Пришлось поднимать всё с нуля.
Воскресенье я на это убил, но в целом всё довольно прямолинейно и теперь у меня есть симпатичные отчёты:

Что внутри?
Я уже некоторое время ковыряю TDD и задача постоянного контроля качества для меня становится всё актуальней. Особенно при пополнении команды новыми разработчиками.
Сначала я запускал тесты руками: save, switch, $ nosetests. Потом к тестам добавились проверялки качества кода и пришлось всё засунуть в скрипт:
pyflakes *.py
pep8 *.py
pylint *.py
nosetests
Скрипт запускать каждый раз ужасно лениво, поэтому небольшая оболочка на inotifywait стала запускать тесты и проверки после каждого сохранения:
while true; do
inotifywait -e modify project/*.py -qq; clear
./do_tests
done
Тут я стал более-менее доволен происходящим и даже на некоторое время расслабился. Но ведь программист кроме того, что ленив ещё и горд, поэтому результаты хочется кому-нибудь показать. Чтобы вести историю происходящего (которая очень помогает когда заходит начальник начальника и спрашивает: «ну-с, чем вы занимались последний месяц?») уже есть система контроля версий. Но она показывает только, что сделано и не даёт обзора успешности каждой ревизии. Получается что код лежит, но непонятно в каком он состоянии и что где ещё надо сделать.
Кроме того довольно тяжело следить за коллегами, которые тоже могут что-то сделать и забыть прогнать тесты, в результате в репозитории лежит битый код, не прошедший code review и при очередном pull может внезапно начаться clusterfuck.
И тут очень вовремя kmmbvnr@lj выпустил скринкаст, в котором он демонстрировал интеграцию тестирования для django-проектов с сабжем Jenkins (бывш. Hudson). Посмотрел я на все эти красоты, графики и отчёты и тоже захотел чтобы всё само пело и играло. Но у него django-jenkins, как и следует из названия, встраивается в джангу и генерит отчёты используя хитрую систему. Мой проект до джанги не дорос и скорее всего не дорастёт — это достаточно тривиальное WSGI-приложение, которое правда стремительно разрастается. Пришлось поднимать всё с нуля.
Воскресенье я на это убил, но в целом всё довольно прямолинейно и теперь у меня есть симпатичные отчёты:

Что внутри?
+51
Пост-продакшн для iOS приложения: как сделать качественную видео-презентацию
3 min
2.9KЯ так подозреваю, что очень многие разработчики софта для iPhone/iPad будут просто счастливы прочитать этот пост.
Я уже давненько пользуюсь гаджетами фирмы Apple и регулярно просматриваю тематические ресурсы на предмет обзоров разных приложений. И если честно, меня очень раздражают видео-обзоры, которые сделаны не очень качественной камерой и явно видно, что деланы непрофессионально.
Конечно, когда бюджет разработки невелик, то вписать в статью затрат качественный видео ролик – это роскошь. Сегодня я расскажу, как сделать качественный видеоролик-презентацию приложения для айДевайсов.
Я уже давненько пользуюсь гаджетами фирмы Apple и регулярно просматриваю тематические ресурсы на предмет обзоров разных приложений. И если честно, меня очень раздражают видео-обзоры, которые сделаны не очень качественной камерой и явно видно, что деланы непрофессионально.
Конечно, когда бюджет разработки невелик, то вписать в статью затрат качественный видео ролик – это роскошь. Сегодня я расскажу, как сделать качественный видеоролик-презентацию приложения для айДевайсов.
+26
Новая версия Developer Tools
1 min
6.4KВ beta channel появилась новая версия инструментов разработчика с очень приятными изменениями.
Во вкладке Network
- Появилась информация о фазах каждого запроса: сколько времени ушло на прокси, DNS, ожидание, отправку и получение данных
- HTTP заголовки теперь берутся прямо из тела ответа, до того, как они были интерпретированы вебкитом, поэтому можно увидеть в точности то, что отправил сервер
- Добавлена подсветка синтаксиса в теле ответа
+88
Information
- Rating
- Does not participate
- Location
- Ирландия
- Date of birth
- Registered
- Activity