Как стать автором
Обновить
0
EugeneVC @EugeneVCread⁠-⁠only

Пользователь

Отправить сообщение

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

Время на прочтение5 мин
Количество просмотров27K


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

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

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

Время на прочтение6 мин
Количество просмотров53K
Проблема создания сайтов с разными версиями языков и стран отнюдь не нова, практически все крупные сайты уже давно с ней столкнулись. Каждая компания выбирает свое решение, мы кратко остановимся на основных вариантах и посмотрим, как решить эту задачу лучшим образом.


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

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

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

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

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

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

Читать дальше →
Всего голосов 41: ↑34 и ↓7+27
Комментарии48

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

Время на прочтение3 мин
Количество просмотров36K
Скорее всего, если вы зашли на Хабр и читаете эту статью, то хоть раз в жизни да слышали про MOOC-курсы.

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




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

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

Время на прочтение3 мин
Количество просмотров61K
Сейчас есть мода на умные часы и на спорт, и на умные часы для спортсменов и фитнес-трекеры.

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

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

image
Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии65

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

Время на прочтение5 мин
Количество просмотров291K
image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

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

Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
Читать дальше →
Всего голосов 166: ↑152 и ↓14+138
Комментарии138

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

Время на прочтение2 мин
Количество просмотров44K
Здравствуйте.

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

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

или на банковский счет в банках, указанных в списке на сайте. Список достаточно длинный. Меня интересовал Альфа-Банк, и я его там нашел.
Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии61

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

Время на прочтение5 мин
Количество просмотров41K

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

Это – пошаговое руководство для тех, кто хочет знать, каким боком из Яндекс Директ (на вполне законных, между прочим, основаниях) привлекать недорогой трафик по 0.01 у.е или 30 копеек за переход.
Читать дальше →
Всего голосов 122: ↑116 и ↓6+110
Комментарии59

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

Время на прочтение4 мин
Количество просмотров115K
Здесь уже проскакивали вскользь упоминания об этом фреймворке для сбора данных. Инструмент действительно мощный и заслуживает большего внимания. В этом обзоре я расскажу, как

scrapy

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





Читать дальше →
Всего голосов 87: ↑85 и ↓2+83
Комментарии49

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

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

Задачи

Задачи, которые нам предстояло решить были типичны для любой системы денежного учета: прием платежей, лог транзакций, оплата и повторяющиеся платежи (подписка).
Читать дальше →
Всего голосов 31: ↑25 и ↓6+19
Комментарии18

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

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


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

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

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

Среди всех данных о клиенте самое однозначное, что его определяет — это почтовый индекс (postcode). Этого мало, но это хорошая отправная точка.
Читать дальше →
Всего голосов 75: ↑67 и ↓8+59
Комментарии57

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

Время на прочтение7 мин
Количество просмотров76K
Хочу поделиться простым рецептом, как можно эффективно выполнять большое число 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 запросов в секунду.
Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии12

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

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

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

Читать дальше →
Всего голосов 43: ↑39 и ↓4+35
Комментарии8

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

Время на прочтение4 мин
Количество просмотров30K


Здравствуйте, меня зовут Алексей и я независимый разработчик игр. Два года назад я уволился из Wargaming чтобы немного поэкспериментировать и сделать MMO игрушку, в которую мне было бы интересно играть. Со временем ко мне присоединилась пара замечательных людей — Александр и Елена Дедковы. Сейчас я кратко расскажу что получилось из этой затеи.
Читать дальше →
Всего голосов 74: ↑66 и ↓8+58
Комментарии34

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

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

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

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

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

Время на прочтение7 мин
Количество просмотров219K
Перед вами руководство по настройке 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.
Читать дальше →
Всего голосов 46: ↑37 и ↓9+28
Комментарии54

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

Время на прочтение7 мин
Количество просмотров21K

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

Данная статья предлагает краткий обзор функционала Easylogging++ и примеры использования этой библиотеки.
Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии22

un1c0rn, «Google для уязвимостей»

Время на прочтение2 мин
Количество просмотров25K
На хабре уже появлялись статьи о незащищенных инстансах mongodb и непропатченных openssl с heartbleed.
Проект un1c0rn решил не мелочиться и сделать целый «поисковик уязвимостей», в статье на Motherboard.vice.com un1c0rn даже назвали «Google-ом для уязвимостей».



UPDATE 17.06.14 — un1c0rn стал платным! Теперь для доступа к результатым эксплойтов они просят перевести на их кошелек сумму не менее 0,01 BTC
Warning:
Only part of the leaked data is available.
Send your contribution to… (> 0.01 BTC) to unlock the full leak.


Читать дальше →
Всего голосов 51: ↑50 и ↓1+49
Комментарии29

Django tips & tricks

Время на прочтение9 мин
Количество просмотров52K
Приветствую!

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

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

Читать дальше →
Всего голосов 64: ↑58 и ↓6+52
Комментарии65

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

Время на прочтение5 мин
Количество просмотров33K

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


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

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

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



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

Как решать эти проблемы — под катом
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии14

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность