Часто приходится наблюдать, как разработчик пытается узнать у аналитика или клиента нужную ему информацию. В результате это превращается в бесконечный обмен письмами и совещаниями и не факт, что в результате разработчик получит тот ответ, который ему нужен.
olegi @olegi
Пользователь
Системы позиционирования внутри зданий для мобильных сервисов
4 min
12KСогласно данным Strategy Analytics, в настоящий момент пользователи мобильных приложений, находящиеся внутри зданий, создают до 80% мобильного трафика. В помещениях привычный нам GPS не работает. На фоне большого интереса пользователей и компаний к геолокационным сервисам происходит бурный рост стартапов, пытающихся решить задачу позиционирования внутри зданий (Indoor Location).
Кому это нужно и какие мобильные приложения выиграют от появления новой технологии?
Кому это нужно и какие мобильные приложения выиграют от появления новой технологии?
+9
Стартует второй сезон проекта «Лифт» — реалити шоу для поиска инвесторов в стартап
2 min
600i-Lift.TV — это мульти-медийный проект для ТВ, интернет и мобильных, который в режиме реального времени показывает экосистему стартап-среды, венчурных капиталистов и бизнес-ангелов, а главное — позволяет найти настоящие инвестиции профессиональных инвесторов, частных бизнесменов в инновационные технологии.
Суть проста — нужно заснять видео к своему Elevator Pitch и отправить его на сайт. Ваша заявка пройдет двойной кастинг (открытое и закрытое голосование — от социальных медиа и экспертов соответственно) и тогда, если все будет клево, вы попадаете на реальные съемки проекта «Лифт», где у вас будет возможность в режиме реального времени продать свой проект инвесторам.
Это уже не первый запуск, во 2-м сезоне съемки пройдут в Москве, Вене, Кремниевой Долине и Сан-Франциско: 20 известных бизнесменов и фондов будут 3 месяца искать стартапы для для потенциальных инвестиций.
Список инвесторов: Игорь Агамирзян (РВК), Юрий Мильнер (DST), Дмитрий Коробков (ADG Group), Давид Ян (ABBYY), Николай Прянишников, Павел Черкашин (Microsoft Russia), Владимир Долгов (Google Russia), Олег Тиньков (Тинькофф), Михаил Герчук (МТС), Вадим Дымов (Дымов), Сергей Выходцев (Быстров), Александр Галицкий (Almaz Capital), Аидар Калиев (VTB Capital), Евгений Зайцев (Helix Ventures), Александр Туркот (Сколково), Эдвард Шендерович (Kite Ventures), Паша Романовский (Intersol), Игорь Табер (Intel Capital), Михаил Прохоров (ONEXIM).
Суть проста — нужно заснять видео к своему Elevator Pitch и отправить его на сайт. Ваша заявка пройдет двойной кастинг (открытое и закрытое голосование — от социальных медиа и экспертов соответственно) и тогда, если все будет клево, вы попадаете на реальные съемки проекта «Лифт», где у вас будет возможность в режиме реального времени продать свой проект инвесторам.
Это уже не первый запуск, во 2-м сезоне съемки пройдут в Москве, Вене, Кремниевой Долине и Сан-Франциско: 20 известных бизнесменов и фондов будут 3 месяца искать стартапы для для потенциальных инвестиций.
Список инвесторов: Игорь Агамирзян (РВК), Юрий Мильнер (DST), Дмитрий Коробков (ADG Group), Давид Ян (ABBYY), Николай Прянишников, Павел Черкашин (Microsoft Russia), Владимир Долгов (Google Russia), Олег Тиньков (Тинькофф), Михаил Герчук (МТС), Вадим Дымов (Дымов), Сергей Выходцев (Быстров), Александр Галицкий (Almaz Capital), Аидар Калиев (VTB Capital), Евгений Зайцев (Helix Ventures), Александр Туркот (Сколково), Эдвард Шендерович (Kite Ventures), Паша Романовский (Intersol), Игорь Табер (Intel Capital), Михаил Прохоров (ONEXIM).
-8
$20k в одни руки: InCube запускает акселератор стартапов
3 min
8.2KПервой площадкой, которая начала форсировано выращивать стартап-проекты, стал Y Combinator. Из под его крыла вышли Airbnb, Dropbox, Omnisio (технология редактирования видео, которую Google приобрел для Youtube). Другие акселераторы тоже могут похвастаться выпускниками: геолокационный сервис Scoville вышел из европейского Seedcamp, сайт для размещения презентаций SlideShare создавался в 500startups. Проекты, за считанные месяцы созданные в условиях акселераторов, отлично показывают себя на рынке.
На Хабре уже не один раз велась речь о том, почему в России не существует аналогичных программ. Теперь существует! Бизнес-инкубаторе InCube запускается акселератор, работающий по классической западной схеме – такой, которая позволяет акселераторам регулярно выпускать успешные стартапы.
Акселераторы обеспечивают стартапы всем, что нужно для построения бизнеса — экспертной поддержкой, связями с инвесторами и финансированием, достаточным чтобы несколько месяцев посвятить только любимому проекту.
На Хабре уже не один раз велась речь о том, почему в России не существует аналогичных программ. Теперь существует! Бизнес-инкубаторе InCube запускается акселератор, работающий по классической западной схеме – такой, которая позволяет акселераторам регулярно выпускать успешные стартапы.
Что это дает?
Акселераторы обеспечивают стартапы всем, что нужно для построения бизнеса — экспертной поддержкой, связями с инвесторами и финансированием, достаточным чтобы несколько месяцев посвятить только любимому проекту.
+53
oAuth для iOS приложений
3 min
12K
Вечерело. Теплая августовская суббота предрасполагала к реализации oAuth авторизации на Google и Facebook для iOS клиента клуба интеллектуальных игр.
Поверхностный поиск в сети нам намекнул, что обе компании предоставляют средства для разработчиков, позволяющие поскорее автоматизировать эту рутину, и вернуться к более интересным задачам непосредственного программирования игрового процесса.
Быстрые ссылки на сами библиотеки: Google — gtm-oauth2, Facebook — facebook-ios-sdk
О нюансах интеграции под катом.
+23
Синхронная загрузка UIWebView
4 min
6KПриветствую, Хабр!
Все началось с поиска решения задачи отображения форматированного текста внутри UITableViewCell, причем не строго заданного формата (тогда можно было бы использовать набор UILabel c заданным font) а произвольного. Да так, чтобы форматирование можно было задать простейшими html тегами. Решить такую задачу можно по-разному:
Как читеталь мог догадаться из заголовка статьи, я остановился на последнем способе, однако те из вас кто пробовал этот сопособ знают об очень неприятном подводном камне. Как от него избавиться я расскажу под катом.
Все началось с поиска решения задачи отображения форматированного текста внутри UITableViewCell, причем не строго заданного формата (тогда можно было бы использовать набор UILabel c заданным font) а произвольного. Да так, чтобы форматирование можно было задать простейшими html тегами. Решить такую задачу можно по-разному:
- Реализовать кастомный компонент с использованием CoreText (не подходит если нужна iOS3.x совместимость)
- Реализовать кастомный компонент с использованием CoreGraphics (очень объемная работа)
- Реализовать кастомный компонент с динамическим число UILabels в качестве subviews (довольно мутно в связи с переносами и прочим)
- UIWebView c загрузкой через loadHTMLString
Как читеталь мог догадаться из заголовка статьи, я остановился на последнем способе, однако те из вас кто пробовал этот сопособ знают об очень неприятном подводном камне. Как от него избавиться я расскажу под катом.
+6
Правильная работа с БД в Android
7 min
154KПриветствую всех дроидеров в эти непростые для нас времена.
Честно говоря, заколебала эта шумиха о патентах, войнах и т.д., но в данной статье речь пойдет не об этом.
Я не собирался писать статью на данную тему, так как везде всего полно о работе с базой данных в Android и вроде бы все просто, но уж очень надоело получать репорты об ошибках, ошибках специфичных и связанных с БД.
Поэтому, я рассматрю пару моментов с которыми я столкнулся на практике, чтобы предостеречь людей, которым только предстоит с этим разбираться, а дальше жду ваших комментариев на тему решения указанных проблем после чего внесу изменения в пост и мы сделаем отличный туториал, который будет образцом работы с SQLite в Android не только для начинающих, но и для тех, кто уже знаком с основами и написал простые приложения.
Честно говоря, заколебала эта шумиха о патентах, войнах и т.д., но в данной статье речь пойдет не об этом.
Я не собирался писать статью на данную тему, так как везде всего полно о работе с базой данных в Android и вроде бы все просто, но уж очень надоело получать репорты об ошибках, ошибках специфичных и связанных с БД.
Поэтому, я рассматрю пару моментов с которыми я столкнулся на практике, чтобы предостеречь людей, которым только предстоит с этим разбираться, а дальше жду ваших комментариев на тему решения указанных проблем после чего внесу изменения в пост и мы сделаем отличный туториал, который будет образцом работы с SQLite в Android не только для начинающих, но и для тех, кто уже знаком с основами и написал простые приложения.
+39
Как MySQL оптимизирует ORDER BY, LIMIT и DISTINCT
16 min
15KЕсть задачи, которые в рамках реляционных СУБД не имеют универсальных решений и для того чтобы получить хоть какой-то приемлемый результат, приходится придумывать целый набор костылей, который ты потом гордо называешь “Архитектура”. Не так давно мне как раз встретилась именно такая.

Предположим, имеется некоторые сущности А и Б, связанные между собой по принципу One-to-Many. Количество экземпляров данных сущностей достаточно велико. При отображении сущностей для пользователя необходимо применить ряд независимых критериев, как для сущности А так и для сущности Б. Причем результатом применения критериев являются множества достаточно большой мощности — порядка нескольких миллионов записей. Критерии фильтрации и принцип сортировки задается пользователем. Как (я бы ещё спросил: Зачем им миллионы записей на одном экране? — но говорят надо) показать все это пользователю за время 0 секунд?
Решать такие задачи всегда интересно, но их решение сильно зависит от СУБД, под управлением которой крутится твоя база данных. Если у тебя в рукаве козырной туз в виде Oracle, то есть шанс, что эти костыли он подставит сам. Но спустимся на землю — у нас есть только MySQL, так что придется почитать теорию.

Предположим, имеется некоторые сущности А и Б, связанные между собой по принципу One-to-Many. Количество экземпляров данных сущностей достаточно велико. При отображении сущностей для пользователя необходимо применить ряд независимых критериев, как для сущности А так и для сущности Б. Причем результатом применения критериев являются множества достаточно большой мощности — порядка нескольких миллионов записей. Критерии фильтрации и принцип сортировки задается пользователем. Как (я бы ещё спросил: Зачем им миллионы записей на одном экране? — но говорят надо) показать все это пользователю за время 0 секунд?
Решать такие задачи всегда интересно, но их решение сильно зависит от СУБД, под управлением которой крутится твоя база данных. Если у тебя в рукаве козырной туз в виде Oracle, то есть шанс, что эти костыли он подставит сам. Но спустимся на землю — у нас есть только MySQL, так что придется почитать теорию.
+105
Путь новичков-оптимистов в лабиринте iOs разработки. Дорогу осилит идущий
10 min
17K
15 июля 2010 года. За утренним чаем весь коллектив нашей конторы с восторгом рассматривал интерактивную книгу “Alice in Wonderland” от Atomic Antelope на iPad'е.
Идея создания подобного приложения настолько нас вдохновила, что на следующий же день мы с коллегой сели вдвоем и примерно представили себе то, что нам потребуется для реализации замысла:
- детский писатель;
- художник;
- программист;
- переводчики (мы сразу решили делать английскую и испанскую версии нашей книги).
Техническая база у нас на работе и дома уже была — техника Apple в наличии имелась.
Надо сразу сказать, что по роду деятельности к разработке приложений мы не имели ни малейшего отношения, поэтому весь процесс создания книги представляли себе крайне смутно.
+131
MySQL: оптимизация конструкции between
13 min
23KОптимизация явно не является коньком MySQL сервера. Цель данной статьи объяснить разработчикам, которые плотно не работают с базами данных и иногда не понимают, по какой причине запрос, который успешно отрабатывает в других СУБД, в MySQL безбожно тормозит, каким образом оптимизируется конструкция between в MySQL.
MySQL использует rule based оптимизатор. Зачатки cost based оптимизации в нем конечно присутствуют, но не в должной мере, в какой их хотелось бы видеть. По этой причине часто мощности получаемых после применения фильтров множеств вычисляются неверно. Это приводит к ошибкам оптимизатора и выбору неверного плана выполнения. При чем полученные between оптимизации невозможно изменить явным указанием: индексов для выполнения запроса и порядка соединения таблиц.
MySQL использует rule based оптимизатор. Зачатки cost based оптимизации в нем конечно присутствуют, но не в должной мере, в какой их хотелось бы видеть. По этой причине часто мощности получаемых после применения фильтров множеств вычисляются неверно. Это приводит к ошибкам оптимизатора и выбору неверного плана выполнения. При чем полученные between оптимизации невозможно изменить явным указанием: индексов для выполнения запроса и порядка соединения таблиц.
+47
Асинхронная загрузка в iOS
3 min
8.4KНаверное на эту тему есть достаточно материалов, в том числе и у Apple, но я опишу свой опыт и приведу свой код.
Задача следующая: для некоторого View, имеющего определенное количество subview в которые можно грузить изображения (UIImageView к примеру), нужно асинхронно загрузить некоторое количество изображений без блокировки основного UI.
Задача следующая: для некоторого View, имеющего определенное количество subview в которые можно грузить изображения (UIImageView к примеру), нужно асинхронно загрузить некоторое количество изображений без блокировки основного UI.
+12
Windows Phone. Rush for Apps
2 min
7.6KДрузья! В преддверии запуска Windows Phone “Mango” в России мы решили объявить марафон разработки приложений под WP7, в рамках которого мы поможем вам сделать свое первое или не первое приложение.


+21
О синглтонах и статических конструкторах
8 min
29KИзначально автор хотел назвать эту статью следующим образом: «О синглтонах, статических конструкторах и инициализаторах статических полей, о флаге beforeFieldInit и о его влиянии на deadlock-и статических конструкторов при старте сервисов релизных билдов в .Net Framework 3.5», однако в связи с тем, что многострочные названия по неведомой автору причине так и не прижились в современном компьютерном сообществе, он (автор) решил сократить это название, чудовищным образом исказив его исходный смысл.
-------------------------
Любая реализация паттерна Синглтон в общем случае преследует две цели: во-первых, реализация должна быть потокобезопасной, чтобы предотвратить создание более одного экземпляра в многопоточном мире .Net; а во-вторых, эта реализация должна быть «отложенной» (lazy), чтобы не создавать экземпляр (потенциально) дорого объекта раньше времени или в тех случаях, когда он вообще может не понадобиться. Но поскольку основное внимание при прочтении любой статьи про реализацию Синглтона отводится многопоточности, то на «ленивость» зачастую не хватает ни времени не желания.
-------------------------
Любая реализация паттерна Синглтон в общем случае преследует две цели: во-первых, реализация должна быть потокобезопасной, чтобы предотвратить создание более одного экземпляра в многопоточном мире .Net; а во-вторых, эта реализация должна быть «отложенной» (lazy), чтобы не создавать экземпляр (потенциально) дорого объекта раньше времени или в тех случаях, когда он вообще может не понадобиться. Но поскольку основное внимание при прочтении любой статьи про реализацию Синглтона отводится многопоточности, то на «ленивость» зачастую не хватает ни времени не желания.
+50
Алгоритм определения попадания точки в контур на основе комплексного анализа
4 min
131KПривет всем Хабра людям. Хочу представить уважаемым читателям пример, когда сухая и далекая от жизни в нашем понимании высшая математика дала не плохой практический результат.


+77
Почему я не использую платёжный агрегатор…
7 min
65K
Для своего сервиса мы решили не заморачиваться и воспользовались услугами одного платежного агрегатора. Но по мере роста накопилось большое количество замечаний. Стало понятно, что агрегатор — временное решение, и рано или поздно от него придётся отказаться.
Тогда мы попытались подойти к задаче независимо и понять, в каких случаях стоит использовать платежные агрегаторы, а в каких — имеет смысл отказаться от их услуг.
+64
Особенности паттернов параллельного программирования для бизнес приложений [PoEAA]
9 min
9.8KПараллельное программирование давно уже перестало быть уделом матёрых гуру. Трудно представить современное приложение, реализация которого игнорировала бы этот вопрос. Аналогично трудно представить прикладного программиста, который бы не держал на вооружении паттернов корпоративных приложений от Фаулера с компанией. Собственно об особенностях присущих этим паттернам и пойдёт речь в этом посте. Материал представленный далее почти не коррелирует с технологиями реализации, поэтому может быть интересен любым прикладным программистам не смотря на то, что примеры базируются на Java и PostgreSQL. И ещё одно замечание, чтобы не вносить путаницу с названиями паттернов, я буду использовать их оригинальные названия на английском языке.
+25
Месяц с генератором красивых QR-кодов
4 min
20KНа днях нас посетила забавная идея — провести анализ QR-кодов, которые генерируют пользователи. Результаты оказались, с одной стороны, несколько предсказуемыми, с другой — удивили, а с третьей — даже повеселили.
+1
Переделка роутера D-link DIR-620 в Zyxel Keenetic или делаем из г. конфетку
4 min
603KЧто такое D-link DIR-620 и что такое Zyxel Keenetic, и для чего нужно переделывать одно в другое?
Достаточно почитать тему по DIR-620 на хоботе или на родном сайте D-link, чтобы понять что к чему. Имея неплохую элементную базу (чип Ralink 3052 2T2R на 300Мбит, 32Мб RAM и 8Мб Flash, USB порт), роутер подкачал в программном обеспечении — большинство гневных отзывов относится именно к прошивке. Хотя, чего ещё желать от устройства за 54$, позиционируемого для бюджетного сектора. Однако, Zyxel Keenetic собран на той же элементной базе, но отличается как по цене 105$, так и по программному оснащению. Заявлена поддержка USB накопителей, 3G и 4G модемов, торрент-клиент transmission прямо в роутере, и всё это реально работает. А можно ли из DIR-620 сделать Keenetic? Оказалось, что можно.

Переделка состоит из двух частей: прошивки и аппаратной доработки.
Для прошивки понадобится подключиться к последовательному порту внутри роутера. То есть, в любом случае, устройство придётся вскрыть, потеряв при этом гарантию.
Однако, забегая вперед скажу, что полученный результат того стоит.
Дополнение от 25.09.2011
Справедливости ради, стоит отметить, что пользователем deadc0de разработан другой метод перепрошивки в keenetic без перепайки и вскрытия устройства, который заключается в заливке модифицированной прошивки. Поэтому метод, описываемый в этой статье, стал неактуальным. Однако, его можно рассматривать как альтернативный, или аварийный, когда устройство перестало быть доступным по сети.
Достаточно почитать тему по DIR-620 на хоботе или на родном сайте D-link, чтобы понять что к чему. Имея неплохую элементную базу (чип Ralink 3052 2T2R на 300Мбит, 32Мб RAM и 8Мб Flash, USB порт), роутер подкачал в программном обеспечении — большинство гневных отзывов относится именно к прошивке. Хотя, чего ещё желать от устройства за 54$, позиционируемого для бюджетного сектора. Однако, Zyxel Keenetic собран на той же элементной базе, но отличается как по цене 105$, так и по программному оснащению. Заявлена поддержка USB накопителей, 3G и 4G модемов, торрент-клиент transmission прямо в роутере, и всё это реально работает. А можно ли из DIR-620 сделать Keenetic? Оказалось, что можно.

Переделка состоит из двух частей: прошивки и аппаратной доработки.
Для прошивки понадобится подключиться к последовательному порту внутри роутера. То есть, в любом случае, устройство придётся вскрыть, потеряв при этом гарантию.
Однако, забегая вперед скажу, что полученный результат того стоит.
Дополнение от 25.09.2011
Справедливости ради, стоит отметить, что пользователем deadc0de разработан другой метод перепрошивки в keenetic без перепайки и вскрытия устройства, который заключается в заливке модифицированной прошивки. Поэтому метод, описываемый в этой статье, стал неактуальным. Однако, его можно рассматривать как альтернативный, или аварийный, когда устройство перестало быть доступным по сети.
+117
Оголодали? Новый кулинарный поисковик
1 min
6.4KOgoloda.li — сайт для тех, кто не умеет готовить, плохо готовит, не любит готовить, не любит придумывать, что приготовить, а также для тех, кого никто не покормит и для тех, кому надоели макароны и пельмени.


+37
Работа с URL и их хранение
3 min
9.9KНу вот одна из самых вкусных частей БД – она хранит миллиарды разных ссылок, и производит доступ к ним в произвольном порядке.
Сначала очевидно можно заметить что все URL сгруппированы в рамках сайта, т.е. все ссылки внутри 1 сайта можно хранить вместе для скорости. Я выделил URL сайта, и стал хранить список сайтов отдельно – сейчас их 600 тыс и отдельная таблица БД описанной раньше легко с ними справляется. В памяти постоянно находится AVL дерево с CRC всех известных сайтов, и проверяя первым делом существование URL я получаю ID сайта ему соответствующего, если он уже есть в базе.
Остальную часть ссылки – кроме названия сайта я отрезаю, и считаю CRC для нее, назовем ее Hash. Таким образом любая ссылка относительно однозначно имеет индекс (ID сайта, Hash). Все ссылки можно отсортировать по Hash в рамках отдельного сайта, и тогда можно легко искать существующую или нет – пробегать по списку все ссылок данного сайта пока не встретим с нужным Hash или не встретим больший Hash – значит ссылки нет. Ускорение не очень большое, но в 2 раза, все таки, в среднем.
Сначала очевидно можно заметить что все URL сгруппированы в рамках сайта, т.е. все ссылки внутри 1 сайта можно хранить вместе для скорости. Я выделил URL сайта, и стал хранить список сайтов отдельно – сейчас их 600 тыс и отдельная таблица БД описанной раньше легко с ними справляется. В памяти постоянно находится AVL дерево с CRC всех известных сайтов, и проверяя первым делом существование URL я получаю ID сайта ему соответствующего, если он уже есть в базе.
Остальную часть ссылки – кроме названия сайта я отрезаю, и считаю CRC для нее, назовем ее Hash. Таким образом любая ссылка относительно однозначно имеет индекс (ID сайта, Hash). Все ссылки можно отсортировать по Hash в рамках отдельного сайта, и тогда можно легко искать существующую или нет – пробегать по списку все ссылок данного сайта пока не встретим с нужным Hash или не встретим больший Hash – значит ссылки нет. Ускорение не очень большое, но в 2 раза, все таки, в среднем.
+20
Information
- Rating
- Does not participate
- Location
- Москва и Московская обл., Россия
- Registered
- Activity