Search
Write a publication
Pull to refresh
150
0
Евгений @rule

Предприниматель в IT

Send message

Как нам удалось построить видеохостинг за 1¢/ГБ

Reading time4 min
Views26K

Почему видеохостинг такой дорогой


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

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

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

Чтобы решить эту проблему, нам пришлось сделать софт умнее.


Читать дальше →

Три наиболее значимых нововведения с приходом watchOS2

Reading time6 min
Views10K
Итак, о чем действительно стоит упомянуть при переходе к разработке на watchOS2 — это следующие три пункта:

  • WKInterfacePicker
  • Complications
  • WCSession

В данной статье я коротко расскажу о каждом из них.
Читать дальше →

С чего начать новичку в Go

Reading time2 min
Views161K
Если вы решили попробовать замечательный язык Go, но не знаете с чего начать, вам прямая дорога в этот пост, где я постарался перечислить все необходимые для новичков ресурсы.
Читать дальше →

Изучаем net/context в Go

Reading time11 min
Views63K
Не секрет, что основная ниша использования Go это сетевые сервисы: всевозможные серверы, бекенды, микросервисы, распределенные базы данных и файловые хранилища. Такой класс программ очень активно использует сетевые запросы, весь необходимый функционал для которых есть в стандартной библиотеке, но один аспект разработки сетевых архитектур остается для многих темным пятном — контексты запросов. В этой статье я хочу рассмотреть этот аспект повнимательней и показать, какой это мощный и важный инструмент.


Читать дальше →

Машинное обучение, предсказание будущего и анализ причин успеха в электронной коммерции

Reading time10 min
Views28K


Мы продолжаем публиковать материалы с летней конференции Bitrix Summer Fest. На этот раз хотим поделиться выступлением Александра Сербула, посвящённым текущим трендам в сфере машинного обучения, доступным методикам, а также практическим способам использования математики для увеличения конверсии и удержания клиентов.

Материал ни в коем случае не претендует быть формальным и научно строгим. Воспринимайте его как лёгкое, весёлое, полезное и ознакомительное «чтиво».
Читать дальше →

Создаем первое приложение для Apple watchOS 2

Reading time6 min
Views13K
Совсем недавно, в сентябре, Apple выпустила ожидаемый многими апдейт, вторую версию операционной системы watchOS. По написанию программ для нее статей на Хабре вроде еще не было, попробуем исправить этот момент.

Что нового


Все знают, что ключевым недостатком всех «умных часов» является малое время работы от батарей. Инженеры Apple решили исправить этот момент весьма простым способом — максимально разгрузить процессор часов. Для этого было придумано оригинальное решение — на часах хранились лишь ресурсы программы, а все вычисления делались на процессоре телефона. Программа для часов состояла из 2х компонентов: Watch App (то что хранится на часах) и WatchKit Extention (хранится на телефоне). Т.е. по сути, это было неким вариантом «удаленного рабочего стола» для смартфона — без наличия рядом телефона приложение работать не могло. В качестве канала связи скорее всего, использовался не отличающийся быстротой Bluetooth LE. Пользователи в итоге часто жаловались на «заторможенность» интерфейса, что было следствием этого принципа. В общем, несмотря на оригинальность, концепция «не взлетела». Так вот, основное отличие OS2 — теперь приложение хранится на часах полностью. Однако абсолютно независимым оно все равно не является — хотя приложение на часах работает автономно, должна быть «основная» программа для iPhone, вместе с которой это приложение ставится. Все это сильно похоже на «костыль», и в следующей версии такого ограничения наверно не будет. Впрочем, посмотрим.

Если говорить о железе, то программисту доступны 2 варианта часов для отладки:

— экран 38mm, разрешение 272x340,
— экран 42мм, разрешение 312x390.

Остальных характеристик (память, процессор и пр), на сайте Apple их найти не удалось. Впрочем, для нашего проекта это не столь важно. Перейдем к проекту (осторожно, траффик).
Читать дальше →

Проблемы первого мира, о которых должен знать iOS-разработчик, или «Как сделать удобное приложение для iPad»

Reading time7 min
Views18K


Если вам когда-нибудь случалось перехватывать iPad из одной руки в другую, чтобы нажать кнопку в приложении, вы уже знаете, зачем мы затеяли исследование в нашей usability-лаборатории. Мы решили проанализировать интерфейс iPad-приложения с точки зрения физиологии. Насколько удобно юзерам пользоваться iPad в типичных позах — нажимать кнопки лежа, листать фото сидя, свайпать, набирать текст? В результате мы обнаружили целый ряд проблем чисто физиологического характера.

Хотя армия владельцев iPad насчитывает, например, 4 миллиона в России и 80 миллионов в США, нам не удалось найти упоминаний о подобных исследованиях. Видимо, раньше о физиологии при разработке приложений для iPad никто не задумывался — хотя для смартфонов такие исследования проводили.

Мы анализировали действия пользователей на примере приложения Почты Mail.Ru, однако наши находки можно и нужно использовать при проектировании любых iPad-приложений. Подробно о том, что мы обнаружили (с картами «мертвых зон» и рекомендациями), — ­ под катом.
Читать дальше →

10 шагов к построению отличной команды

Reading time5 min
Views11K
image

Хорошая команда — это не просто группа хороших людей.
Исследования показывают, что составляющие понятия «продуктивная команда» не всегда очевидны, а иногда бросают вызов общепринятым представлениям. Поговорим об этом?
Читать дальше →

Deep Linking для мобильных приложений

Reading time8 min
Views143K
На WWDC 2015 инженеры компании Apple заявили, что пересмотрели подход к Deep Linking, в прошлом году компания Google анонсировала App Index — как новый взгляд на глубинные ссылки, в начале 2015 года в мире мобильной разработки заговорили о контекстных Deep Links. Что это за инструмент и как с ним работать применительно к iOS — расскажу в этой статье.

Что это?


Один из способов увеличения конверсии при продвижении IT-продукта — уменьшение барьеров для достижения пользователями искомой цели. В мобильной разработке эта проблема еще актуальней. При использовании e-mail, push или sms-рассылок с информацией о промо-акциях упрощение доступа к функционалу приложения просто необходимо. В такой ситуации просто запуск приложения из внешнего источника — не решение, ведь промо-акция — это конкретное спец.предложение в конкретном разделе. Чтобы после запуска приложения пользователю не пришлось по нему бродить, искать и раздражаться, нужен дополнительный инструмент, предопределяющий навигацию. И такой инструмент есть.
Deep Linking (глубинное связывание) — технология, благодаря которой пользователь может перемещаться между приложениями в заранее определенные разделы.


Читать дальше →

Распознавание речи с помощью CMU Sphinx

Reading time4 min
Views85K
CMU Sphinx сейчас является крупнейшим проектом по распознаванию человеческой речи. В инструментарий входят следующие программы и библиотеки:

  • Pocketsphinx — небольшая программа, которая принимает на вход произвольные акустические модели, грамматики и словари, а также звуковой поток(либо звуковой файл, либо сам берет поток с микрофона). На выходе получается распознанный текст. Написана на C, работает быстро.
  • Sphinxbase — библиотека необходимая для работы Pocketsphinx
  • Sphinx4 — гибкая библиотека для распознавания, написана на Java.
  • Sphinxtrain — программа для обучения акустических моделей.

Для работы со CMU Sphinx важно запомнить несколько определений и понять их отличия.

  • Акустическая модель — отвечает за сопоставление звуку произнесенной фонемы. Акустическую модель для русского языка можно скачать на сайте проекта. Русская акустическая и языковая модели. А также словарь.
  • Словарь — это файл, в котором написаны сопоставлены лексемы и фонемы (слово и его транскрипция). Например, калькулятор (k ay ll k u ll ja t ay r). Он необходим для преобразования фонем, распознанных акустической моделью в лексемы.
  • Грамматика — это формальные правила, которые описывают простые правила построения предложений. Лексемы, полученные на предыдущем шаге пытаются сопоставиться с грамматикой и если удачно, то выводится результат.
  • Языковая модель — это статистическая модель языка. Она описывает вероятности слов и их комбинаций. Таким образом распознавание лексем — это максимизация правдоподобности распознанной фразы.

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

Начинаем любить Go

Reading time5 min
Views27K
Если что, это вольный перевод статьи из блога Jeremy Mikkola.

Эта статья о том, как некоторое время спустя я распробовал и таки полюбил язык Go (аки golang).

Жалобы

Еще год назад у меня было полно жалоб на тот или иной аспект Go. В основном я жаловался на то, что при том, что ты не можешь использовать Go как «настоящий системный язык» (в плане написать-на-нем-операционку), тебе все равно приходится думать о том, о чем обычно приходится думать в системных языках: например, использовать тут указатель или нет. Система типов лежит в непродуктивном ущелье между достаточной строгостью, чтобы стать «автоматичной» (привет адептам Haskell!) и достаточной динамичностью, чтобы не отвлекать (как в Python). Какое-то время я тупил на таких вещах, как проход по юникодовой строке не символами, а байтами, и всякое такое. Я обвинял Go в том, что он так-то не всегда следует своему принципу простоты, так как в нем есть много разных узких штук, вроде make(). И конечно же я жаловался на то, что при работе с Go постоянно приходится повторять блоки if err != nil { return err }.

Поначалу я точно не мог назвать себя фанатом Go.

В техническом плане я согласен с тем, что большинство моих жалоб корректны. Я согласен с тем, что систему типов можно было бы придумать и покруче, а от указателей не помешало бы немного абстрагироваться. Но как только я начинаю понимать, что (не все, но многие) проблемы, на которые я жаловался, на самом деле вроде как даже и не непрягают. В действительности это напоминало нытье на целый лес, из-за пары некрасивых деревьев. В повседневном использовании языка большинство вещей, о которых я так волновался, вообще не давали о себе знать. Я ни разу не встречал баг, так или иначе связанный с проходом по строке. В реальном коде ты почти не кастишь interface{} так часто, как хотелось бы тем ребятам, которые дрочат на системы типов. Ах да, нет беды в том, чтобы вызывать make() в одном месте и new() в другом. Больше всего я ругался на те архитектурные решения языка, которые усложняли создание абстракций. Ты не можешь просто так сделать структуру данных, которая станет альтернативой к встроенным структурам данных (привет кодогенерации!). Без обобщений ты не сможешь строить большие обобщенные абстракции. Скорее всего, это сделано намеренно.
Читать дальше →

Android архитектура клиент-серверного приложения

Reading time13 min
Views106K
Клиент-серверные приложения являются самыми распространенными и в то же время самыми сложными в разработке. Проблемы возникают на любом этапе, от выбора средств для выполнения запросов до методов кэширования результата. Если вы хотите узнать, как можно грамотно организовать сложную архитектуру, которая обеспечит стабильную работу вашего приложения, прошу под кат.


Читать дальше →

Рассылка пуш уведомлений на Go

Reading time9 min
Views30K

Если вы последний год пользовались мобильными приложениями от ВКонтакте (пусть даже не официальными), то этот материал раскроет немного данных по тому, как у нас это время работают пуш уведомления. Пушилка реализована на языке Go, и рассылает до 9 миллиардов пушей в сутки на четыре целевых платформы: GCM, APNS, MPNS, WNS.

В этом посте решил рассказать об общей архитектуре пушилки, проблемах и их обходе, нагрузках и производительности решения. Много букв и мало кода.
Читать дальше →

Русификация всех моделей часов Pebble без перепрошивки

Reading time1 min
Views57K
image

Теперь пользователи умных часов Pebble могут скачать и установить русский language pack поверх оригинальной прошивки. Русификацию можно ставить на любую версию прошивки и железа — классические Pebble, Pebble Steel, Pebble Time или Pebble Time Steel. Language pack достаточно установить один раз, при обновлении оригинальной прошивки он будет сохраняться.
Читать дальше →

Пишем документацию API при помощи RAML

Reading time10 min
Views77K
RAML

Удобство работы с любым API во многом зависит от того, как написана и оформлена его документация. Cейчас мы ведём работу по стандартизации и унификации описания всех наших API, и вопросы документирования для нас особенно актуальны.
После долгих поисков мы решили оформлять документацию в формате RAML. Так называется специализированный язык для описания REST API. О его возможностях и преимуществах мы расскажем в этой статье.
Читать дальше →

Налаживаем коммуникацию между клиентом и UX: как избежать испорченного телефона

Reading time5 min
Views8.5K
image Аналитик — арбитр между бизнесом, проектированием и разработкой, который периодически смещается в ту или иную сторону, но при этом удерживает процесс создания мобильного продукта в поле здравого смысла. Он обеспечивает коммуникацию между всеми участниками процесса, транслируя знания от одной группы в другую, чтобы выдвинутые гипотезы и принятые впоследствии решения были обеспечены достаточным количеством информации.
  • Бизнес — всегда думает о достижении своих KPI, но редко понимает сложность разрабатываемой системы и удобство для пользователей.
  • UX-проектировщик — всегда думает о пользователе, иногда в ущерб бизнесу. Не всегда явно понимает цель бизнеса и пытается навязывать свои идеи.
  • Разработчик — думает, как сделать все классно с точки зрения архитектуры системы и программного кода. Пытается примерять пользовательские сценарии на себя, но является технически подкованным человеком, что не свойственно для большинства пользователей.
Если про передачу требований от уровня бизнеса к системному уровню сказано немало и выработался определенный инструментарий, то вот какие артефакты использовать для взаимодействия и передачи знаний между бизнесом, аналитиком и UX-проектированием — вопрос открытый. Этой темой я продолжаю цикл статей по бизнес-анализу в мобильной разработке.
Читать дальше →

Пример работы с технологией iBeacon с помощью Swift

Reading time4 min
Views14K
Учитывая возрастающий интерес к использованию Bluetooth маячков в различных областях начиная от чипирования животных, навигации в музейной экспозиции и заканчивая наиболее востребованной функцией уведомлений по акциям в магазинах, мы в Techmas подготовили введение для их внедрения на практике. Возможно, кому-нибудь из разработчиков, кто только планирует создавать свои приложения и еще не знает с чего начать, инструкция ниже поможет разобраться с основными понятиями и возможностями технологии. Несмотря на то, что уже существует набор SDK для работы с маячками, мы используем только Swift и библиотеки CoreLocation и CoreBluetooth.



Читать далее

Android Devs Meetup 2: видео и презентации с прошедшей встречи

Reading time2 min
Views7.1K


5 августа в нашем московском офисе прошла вторая встреча Moscow Android Devs. Здесь собрались разработчики, желающие поделиться своим опытом и перенять опыт других, рассказать о различных затруднениях, с которыми они сталкивались в ходе разработки, и способах решения. В рамках официальной программы было три выступления, и далее вы найдете ссылки на видеозаписи и презентации.
Читать дальше →

Обзор способов и протоколов аутентификации в веб-приложениях

Reading time18 min
Views676K


Я расскажу о применении различных способов аутентификации для веб-приложений, включая аутентификацию по паролю, по сертификатам, по одноразовым паролям, по ключам доступа и по токенам. Коснусь технологии единого входа (Single Sign-On), рассмотрю различные стандарты и протоколы аутентификации.

Перед тем, как перейти к техническим деталям, давайте немного освежим терминологию.

  • Идентификация — это заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, итд.
  • Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” — истинный, подлинный).
  • Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.


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

Аналогично эти термины применяются в компьютерных системах, где традиционно под идентификацией понимают получение вашей учетной записи (identity) по username или email; под аутентификацией — проверку, что вы знаете пароль от этой учетной записи, а под авторизацией — проверку вашей роли в системе и решение о предоставлении доступа к запрошенной странице или ресурсу.

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

Обработка 1 миллиона запросов в минуту c Go

Reading time8 min
Views39K
Предлагаю читателям «Хабрахабра» перевод статьи главного архитектора компании Malwarebytes о том, как они достигли обработки 1 миллиона запросов в минуту всего на 4 серверах.

У нас в Malwarebytes мы переживаем бешеный рост и с тех пор, как я присоединился к компании около года назад в Кремниевой Долине, одной из моих основных обязанностей было проектирование и разработка архитектур нескольких систем для развития быстрорастущей компании и всей необходимой инфраструктуры для поддержки продукта, который используют миллионы людей каждый день. Я работал в индустрии антивирусов более 12 лет в нескольких разных компаниях, и знаю, насколько сложными получаются в итоге эти системы, из-за колоссальных объемов данных, с которыми приходится иметь дело ежедневно.
Читать дальше →

Information

Rating
Does not participate
Location
Sydney, New South Wales, Австралия
Date of birth
Registered
Activity