Search
Write a publication
Pull to refresh
0
EugeneVC @EugeneVCread⁠-⁠only

User

Send message

OK Google, заведи мне машину

Reading time5 min
Views28K


Будущее всё ближе. Лет 10 назад я и не мог подумать, что буду заводить машину с помощью голосовой команды!

Последние годы я с интересом наблюдал за бурным развитием голосовых ассистентов. После выхода Google Home Mini, решил что и мне уже пора попробовать, так как цена стала более-менее адекватной для «игрушки». Первый проект — интеграция голосового помощника с GSM модулем StarLine для автозапуска, контроля координат, напряжения аккумулятора и других параметров, отдаваемых сигнализацией автомобиля. Итак, поехали?
Читать дальше →

Разбираемся с построением мультирегиональных сайтов

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


Варианты построения URL-ов

Конечно, в жизни существует больше групп, например, часть сайтов хранят региональные настройки в cookie-файлах, другие передают параметром ?lang=ru, однако это непопулярные решения и основными являются:

1. Версия сайта на другом домене:

example.com, example.ru
Самый кардинальный способ. Этот вариант может быть удобен компаниям, имеющим локальные представительства в разных странах и работающих относительно независимо от главного офиса, например, на другом движке сайта.

2. Версия сайта на поддомене:

ru.example.com, ua.example.com
Очень похож на предыдущий вариант, но легче в администрировании. Эти два варианта легко реализуются на физически разных хостах, поэтому могут быть размещены в разных странах.

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

Обзор некоторых MOOC Coursera по компьютерным наукам

Reading time3 min
Views37K
Скорее всего, если вы зашли на Хабр и читаете эту статью, то хоть раз в жизни да слышали про MOOC-курсы.

Но если все же не слышали, то MOOC (по-русски принято произносить «мук») означает «Massive Open Online Course» — массовый открытый онлайн-курс. Это настоящий феномен в образовании XXI века. Газета «New York Times» назвала даже 2012 год «годом MOOC» в связи с появлением на рынке дистанционного образования 3-х «китов» — Coursera, Udacity и EdX. MOOC-ам посвящено множество статей, кто-то видит в них будущее образования, кто-то, наоборот, угрозу. Пытаются также предсказать «традиционную» и «дистанционную» составляющии обучения будущего.




Однако в этой статье я не буду обсуждать перспективы развития дистанционного образования, а расскажу про свой опыт знакомства с курсами на платформе Coursera. Эти курсы будут полезны студентам, изучающим прикладную математику и информатику, в особенности анализ данных. Многое из того, что мне дали эти курсы, как я потом понял — это знания, которыми должен обладать любой уважающий себя исследователь данных (так я предпочитаю переводить профессию Data Scientist).
Читать дальше →

История пульсометров

Reading time3 min
Views62K
Сейчас есть мода на умные часы и на спорт, и на умные часы для спортсменов и фитнес-трекеры.

Одна из важных функций таких гаджетов — измерение пульса. До того, как я открыл Хабр и начал писать этот пост, я и не знал, что первый беспроводной ЭКГ монитор сердечного ритма был изобретен в 1977 году — для Финской национальной лыжной сборной… А сейчас обычные на вид часы способны передавать на устройства на Android или iOS различные данные, такие как активность, количество подъемов по лестнице, и, конечно, пульс и многое другое.

Какие старые пульсометры (и новые) должны быть ещё в обзоре? Пишите в комментарии, пожалуйста!

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

Работа для программиста в США: 5 простых шагов

Reading time5 min
Views292K
image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

Мой опыт несколько отличается от нижеописанного (я попала на работу в США после стажировки). Но за 4 года в США пообщалась с людьми, которые попали сюда разными путями и набрала кое-какой опыт. Так что если бы я очень хотела найти работу в США сегодня, то я бы действовала примерно так, как описано ниже.

Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
Читать дальше →

Получение денег с AdSense через Rapida Online на банковский счет

Reading time2 min
Views45K
Здравствуйте.

Не так давно столкнулся с необходимостью получить деньги за публикуемое приложение на Андроид Маркете. Самое первое, что опробовал — чек. Как большинству известно, чек в России обналичить — дело непростое (процесс состоит из отправки чека обратно в Америку почтой и возвращении денег назад почтой и занимает до 60 рабочих дней), поэтому, разочаровавшись, начал искать альтернативы.

В аккаунте AdSense меня очень заинтересовала графа Rapida, где было написано, что деньги можно в течение 2 дней получить на почте. Я пошел на рапиду и волей случая попал не на Rapida, а на Rapida Online. Rapida Online — это своеобразный электронный кошелек, дающий возможность перечислять с него деньги на другие кошельки:
  • Qiwi
  • Яндекс.Деньги
  • Web Money

или на банковский счет в банках, указанных в списке на сайте. Список достаточно длинный. Меня интересовал Альфа-Банк, и я его там нашел.
Читать дальше →

Трафик из Яндекс.Директ: грузите посетителей по центу

Reading time5 min
Views41K

Можно ли приводить много заинтересованных посетителей из Директа по 30 копеек за посетителя? Можно и нужно, особенно, если ваш ресурс только встает на ноги и нужно быстро и недорого привести на сайт заинтересованных людей.

Это – пошаговое руководство для тех, кто хочет знать, каким боком из Яндекс Директ (на вполне законных, между прочим, основаниях) привлекать недорогой трафик по 0.01 у.е или 30 копеек за переход.
Читать дальше →

Собираем данные с помощью Scrapy

Reading time4 min
Views117K
Здесь уже проскакивали вскользь упоминания об этом фреймворке для сбора данных. Инструмент действительно мощный и заслуживает большего внимания. В этом обзоре я расскажу, как

scrapy

  • создать паука, выполняющего GET запросы,
  • извлекать данные из HTML документа,
  • обрабатывать и экспортировать данные.





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

Разработка своей системы биллинга на Django

Reading time4 min
Views36K
При разработке большинства сервисов возникает потребность во внутреннем биллинге для аккаунтов сервиса. Так и в нашем сервисе возникла такая задача. Готовые пакеты для её решения мы так и не смогли найти, в итоге пришлось разрабатывать систему биллинга с нуля.
В статье хочу рассказать о нашем опыте и подводных камнях, с которыми пришлось столкнуться во время разработки.

Задачи

Задачи, которые нам предстояло решить были типичны для любой системы денежного учета: прием платежей, лог транзакций, оплата и повторяющиеся платежи (подписка).
Читать дальше →

Автоматическое определение пола по имени

Reading time3 min
Views24K
Продолжая рассказывать о технологиях, которые используются в нашем сервисе email-маркетинга Pechkin-mail.ru, мы просто обязаны упомянуть об автоматическом определении пола подписчика по имени. Еще в 2007 году, разрабатывая сервис sms-рассылок, мы очень хотели реализовать возможность автоматического подставления окончаний в прилагательные “Уважаемый”, “Дорогой” и так далее. Обычно такая подстановка осуществляется на основании дополнительного поля в адресной базе клиента. Однако, как нам кажется, это полный отстой.
На это есть 3 причины:
  1. заставлять подписчика задавать свой пол глупо (чем больше полей в форме, тем ниже вероятность ее заполнения)
  2. определять вручную — долго, а значит дорого
  3. от ошибок человек не застрахован ровно так же, как и машина.


Но мы не лингвисты, поэтому реализовать такой модуль было бы слишком сложно для нас, да и функция “не первой необходимости”. Но недавно, работая над склонениями текстов бесконечных актов, договоров и прочих юридических документов, мы вспомнили об используемом нами уже 2 года сервисе Морфер. Это прекрасный лингвистический сервис, специализирующийся на русском языке и позволяющий склонять по падежам слова, целые предложения, числительные, а также получать текст из цифр. В общем, потрясающая разработка всего одного человека — Сергея Слепова.
Подробнее о реализации функции определения пола на нашем сервисе

Распознавание почтовых адресов

Reading time15 min
Views25K
Дело началось с того, что одна небольшая английская компания решила рассылать рекламные листовки своим существующим и потенциальным клиентам.
Обнаружилась проблема: есть отдельная внутренняя база клиентов, делавших заказы по телефону; отдельная база веб-клиентов, делавших заказы на сайте; и несколько баз «потенциальных клиентов» от разных информаторов.
Тысячи клиентов попали сразу в несколько баз, или даже несколько раз в одну базу.
Если клиент, «засветившийся» пять раз, получит пять одинаковых рекламных листовок с немного отличающимся написанием имени или адреса, то эффект от такой кампании получится противоположный — не говоря уже о бессмысленных расходах на лишние листовки.
Как же отсеять повторы в списке рассылки?

Среди всех данных о клиенте самое однозначное, что его определяет — это почтовый индекс (postcode). Этого мало, но это хорошая отправная точка.
Читать дальше →

Эффективная многопоточность в Python

Reading time7 min
Views78K
Хочу поделиться простым рецептом, как можно эффективно выполнять большое число http-запросов и других задач ввода-вывода из обычного Питона. Самое правильное, что можно было бы сделать — использовать асинхронные фреймворки вроде Торнадо или gevent. Но иногда этот вариант не подходит, потому что встроить event loop в уже существующий проект проблематично.

В моем случае уже существовало Django-приложение, из которого примерно раз в месяц нужно было выгрузить немного очень мелких файлов на AWS s3. Шло время, количество файлов стало приближаться к 50 тысячам, и выгружать их по очереди стало утомительным. Как известно, s3 не поддерживает множественное обновление за один PUT-запрос, а установленная опытным путем максимальная скорость запросов с сервера ec2 в том же датацентре не превышает 17 в секунду (что очень не мало, кстати). Таким образом, время обновления для 50 тысяч файлов стало приближаться к одному часу.

Питонисты с детства знают, что от использования потоков (тредов операционной системы) нет никакого толка из-за глобального лока интерпретатора. Но немногие догадываются, что как и любой лок, этот время от времени освобождается. В частности, это происходит при операциях ввода-вывода, в том числе и сетевых. А значит, потоки можно использовать для распараллеливания http-запросов — пока один поток ожидает ответа, другой спокойно обрабатывает результат предыдущего или готовит следующий.

Получается, всего-то нужен пул потоков, который будет выполнять запросы. К счастью, такой пул уже написан. Начиная с версии 3.2 для унификации всей асинхронной работы в Питоне появилась библиотека concurrent.futures. Для второй версии Питона есть бекпорт под именем futures. Код до безобразия прост:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(concurrency) as executor:
    for _ in executor.map(upload, queryset):
        pass

Здесь concurrency — число рабочих потоков, upload — функция, выполняющую саму задачу, queryset — итератор объектов, которые по одному будут передаваться в задачу. Уже этот код при concurrency в 150 смог пропихнуть на сервера Амазона ≈450 запросов в секунду.
Читать дальше →

PyCon Russia 2014 — два дня python-счастья

Reading time5 min
Views16K
2-3 июня в Екатеринбурге прошла вторая международная конференция python-разработчиков PyCon Russia 2014. Участники съехались из 23 городов России и мира.

IMG_0636.jpg
Участники PyConRu 2014

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

MMORPG без лишних деталей

Reading time4 min
Views30K


Здравствуйте, меня зовут Алексей и я независимый разработчик игр. Два года назад я уволился из Wargaming чтобы немного поэкспериментировать и сделать MMO игрушку, в которую мне было бы интересно играть. Со временем ко мне присоединилась пара замечательных людей — Александр и Елена Дедковы. Сейчас я кратко расскажу что получилось из этой затеи.
Читать дальше →

Яндекс закрывает блогохостинг Я.ру и хостинг на Яндекс.Видео

Reading time2 min
Views48K
Мы закрываем наш хостинг блогов — Я.ру. До конца лета все блоги и клубы перестанут быть доступны. Не беспокойтесь, никакие материалы при этом не пропадут. Уже сегодня у пользователей Я.ру появилась возможность перенести все свои записи в Живой Журнал — создать новый аккаунт или добавить к существующему. Все ваши друзья с Я.ру, которые зарегистрированы в ЖЖ, автоматически окажутся у вас в друзьях и там. Переехать можно до 1 ноября. Кроме того, мы сохраним полный архив каждого пользователя — все записи, комментарии и посты в клубы. Архив вы сможете найти на Яндекс.Диске.

Я.ру был открыт в апреле 2007 года. В 2009 году сервис был одним из четырёх крупнейших блогохостингов в рунете — вместе с LiveJournal, Blogs.Mail.ru и LiveInternet. После этого популярность Я.ру стала уменьшаться — собственно, вместе со спадом популярности блогосферы в целом и ростом соцсетей. Разработка была заморожена, и сервис фактически перестал развиваться.

Сейчас хотя бы раз в месяц обновляется около 0,3% из открытых на сервисе дневников. В сутки появляется в среднем всего 1500 новых комментариев. Очевидно, что большинство людей предпочитает писать и общаться в социальных сетях на других площадках. В такой ситуации поддерживать Я.ру становится сложно и нецелесообразно. Поэтому мы и приняли решение о закрытии.
Читать дальше →

Django на production. uWSGI + nginx. Подробное руководство

Reading time7 min
Views225K
Перед вами руководство по настройке production окружения для Django. Здесь будут описаны необходимые шаги по настройке Django, uWSGI и nginx. Руководство охватывает все три компонента — полный стек серверного ПО для веб-приложений.

Подразумевается, что вы используете Unix-подобную операционную систему и менеджер пакетов, эквивалентный aptitude. Найти эквивалент aptitude почти для любой операционной системы, в том числе и для Mac OS X, для вас не составит никакого труда.

Руководство написно для версий Django 1.4 или выше. Если вы используете более раннюю версию, то вам придется самостоятельно найти wsgi модуль для нее. Также вы заметите, что файловая структура проекта будет немного отличаться от представленной здесь.

Общая идея


Веб-сервер может по запросу отдавать пользователям файлы из своей файловой системы, однако он не может напрямую работать с Djangо приложениями. Веб-серверу нужен интерфейс, который будет запускать Django приложение, передавать ему запрос от пользователя и возвращать ответ.

Для выполнения этих задач был разработан Web Server Gateway Interface — WSGI — стандарт взаимодействия Python программ и веб-сервра.

uWSGI — одна из реализаций WSGI. В этом руководстве мы установим и настроим uWSGI для создания Unix сокета и взаимодействия с веб-сервером по протоколу WSGI.
Читать дальше →

Логирование сообщений с Easylogging++

Reading time7 min
Views22K

Система логирования — незаменимый инструмент для протоколирования работы приложений. Для тех, кто не хочет реализовывать его самостоятельно, на C++ уже существует бессчётное количество готовых библиотек (Log4cplus, Apache log4cxx, Boost.Log и тд.), однако Easylogging++ отличается простотой использования и компактностью, не требует сторонних библиотек или инсталляции. Весь её код содержится в одном единственном заголовочном файле, который просто необходимо включить в код приложения.

Данная статья предлагает краткий обзор функционала Easylogging++ и примеры использования этой библиотеки.
Читать дальше →

Django tips & tricks

Reading time9 min
Views52K
Приветствую!

В этом посте — небольшие советы по работе с Django, которые могут пригодиться начинающим разработчикам. Как я хотел бы знать это в начале моего пути освоения Django!..
Рассматривать эти советы следует с долей критицизма. Буду рад, если вы найдёте неточности / лучшее решение, или предложите свои «фишки» для django, которых нет в документации.

Итак, начнём издалека, а уж потом перейдём к деталям.

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

Масштабируем Elasticsearch на примере кластера с индексами в несколько терабайт

Reading time5 min
Views34K

Низкая скорость поисковых запросов


Работая над поисковым движком по социальной информации (ark.com), мы остановили свой выбор на Elasticsearch, так как по отзывам он был очень легок в настройке и использовании, имел отличные поисковые возможности и, в целом, выглядел как манна небесная. Так оно и было до тех пор, пока наш индекс не вырос до более-менее приличных размером ~ 1 миллиарда документов, размер с учетом реплик уже перевалил за 1,5 ТБ.

Даже банальный Term query мог занять десятки секунд. Документации по ES не так много, как хотелось бы, а гуглинг данного вопроса выдавал результаты 2х-летней давности по совсем не актуальным версиям нашего поискового движка (мы работаем с 0.90.13 — что тоже не достаточно старая вещь, но мы не можем позволить себе опустить весь кластер, обновить его, и запустить заново на текущий момент — только роллинг рестарты).

Низкая скорость индексации



Вторая проблема — мы индексируем больше документов в секунду (порядка 100к), чем Elasticsearch может обрабатывать. Тайм-ауты, огромная нагрузка на Write IO, очереди из процессов в 400 единиц. Все выглядит очень страшно, когда смотришь на это в Marvel.

Как решать эти проблемы — под катом
Читать дальше →

Chef для новичков

Reading time7 min
Views78K
На тему систем централизованного управления конфигурациями на Хабре написано немало статей и, в частности, про Chef есть несколько хороших статей. Однако, количество релизов Chef растет, и я решил немного освежить его описание для читателей Хабра. Статья предназначена как для новичков, так и для тех, кто уже знакомился с системой, но по какой-то причине отложил изучение и хочет все-таки продолжить. А продолжать стоит! Поскольку, Chef полезен и для администрирования нескольких VPS, и для управления большим парком серверов. Особенно, если вам часто приходится заниматься настройкой серверов с нуля, подключением дополнительных нод в кластер и т.д.
Подробности под катом

Information

Rating
Does not participate
Registered
Activity