Search
Write a publication
Pull to refresh
3
0
Дмитрий Куликов @DmitryKulikov

User

Send message

Впечатления от использования Google Producer

Reading time4 min
Views11K
Здесь уже была обзорная публикация о возможностях Google Media для издателей и читателей, использующих этот сервис для чтения сайтов на мобильных устройствах. Коротко напомним об основных возможностях, процитировав официальную публикацию: «Теперь все владельцы мобильных устройств на базе Android и iOS могут загрузить русскоязычную версию приложения Google Медиа (Google Currents) и получить бесплатный доступ к онлайн-изданиям, включая российские. А для издателей мы разработали специальную платформу Google Producer, которая позволяет загружать в приложение собственные тексты, видео, картинки и многое другое.», в завершении которой предлагается всем желающим протестировать приложение и поделиться впечатлениями.

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

GitHub Pages переезжают на github.io

Reading time2 min
Views28K
Начиная с сегодняшнего дня все сайты GitHub Pages переходят на новый домен: github.io. Это мера безопасности нацеленна на предотвращение CSRF атак на главный сервер — github.com. Если ваш сайт настроен, как «yoursite.com» вместо «yoursite.github.com» — изменения вас никак не затронут.
Если ваш сайт раньше располагался на домене «username.github.com», последующие запросы будут редиректиться на новый домен: «username.github.io».
C этого момента все сайты, размещенные на субдоменах github.com могут и должны расцениваться как официальные продукты GitHub.
Читать дальше →

Заметки для построения эффективных Django-ORM запросов в нагруженных проектах

Reading time11 min
Views61K
Написано, т.к. возник очередной холивар в комментариях на тему SQL vs ORM в High-Load Project (HL)

Преамбула


В заметке Вы сможете найти, местами, банальные вещи. Большая часть из них доступна в документации, но человек современный часто любит хватать все поверхностно. Да и у многих просто не было возможности опробовать себя в HL проектах.
Читая статью, помните:
  • Никогда нельзя реализовать HL-проект на основе только одной манипуляции с ORM
  • Никогда не складывайте сложные вещи на плечи БД. Она нужна Вам чтобы хранить инфу, а не считать факториалы!
  • Если вы не можете реализовать интересующую Вас идею простыми средствами ORM — не используйте ORM для прямого решения задачи. И тем более не лезте в более низкий уровень, костыли сломаете. Найдите более элегантное решение.
  • Извините за издевательски-юмористический тон статьи. По другому скучно :)
  • Вся информация взята по мотивам Django версии 1.3.4
  • Будьте проще!

И-и-и да, в статье будут показаны ошибки понимания ORM, с которыми я столкнулся за три с лишним года работы с Django.
Читать дальше →

Связные списки в функциональном стиле

Reading time2 min
Views20K
Рассмотрим вариант реализации связных списков через замыкания.

Для обозначения списков будем использовать нотацию, похожую на Haskell: x:xs, где x — начало списка (head), xs — продолжение (tail).



В качестве языка реализации я выбрал JavaScript.

Конструируем список

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

NetFlow, Cisco и мониторинг трафика

Reading time5 min
Views256K
Всем доброго времени суток! Разбираясь с NetFlow, таким простым, удобным и часто используемым протоколом, я осознал, что он не такой уж и простой, и подводных камней при его эксплуатации хватает.
Под катом я собрал все, что для начала необходимо знать о NetFlow и его настройках на Cisco, отдал дань eucariot, пишущему отличные статьи о сетях, и… Картинки, немного веселых картинок.
Поехали!

Сохранение изображения с помощью libpng

Reading time3 min
Views27K

Развлекаясь на досуге с OpenGL, решил научиться делать скриншоты средствами программы, а не системы. Довольно быстро нагуглил функцию glReadPixels, но вот с сохранением картинки вышла проблема. Вспомнил былые времена, когда полностью своим кодом сохранял в bmp, нашел функцию сохранения в tga, понял, что все эти варианты попахивают велосипедизмом и решил использовать широко распространенную библиотеку. Выбор пал на libpng.
Дальше пошли грабли.

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

Кросспостинг из Twitter в ВКонтакте с помощью роутера

Reading time9 min
Views21K
Здравствуйте, меня зовут Евгений, и я алкоголик люблю социальные сети. В силу отсутствия каких-либо намеков на писательский талант я предпочитаю Twitter — его ограничение на 140 символов избавляет от необходимости придумывать что-то длинное. К тому же, только для твиттера есть нормальный java-клиент, которым я раньше пользовался на мобильном телефоне.
С другой стороны, бóльшая часть моя знакомых использует ВКонтакте, да и мне, честно говоря, нравится слушать там музыку и читать новости. Очевидно, что писать самому в две разных соцсети неудобно, нужно это автоматизировать — использовать кросспостинг (перенос постов).
Далее небольшое описание моего не совсем обычного способа кросспостинга.
Читать дальше →

Хипстерский Bootstrap. Вспомни миллениум!

Reading time1 min
Views46K
Сейчас стало модным трендом использовать twitter bootstrap и всевозможные форки с различными темами. Есть даже уже биржи с готовыми шаблонами для сайтов на основе бустрапа. Хипсторы вовсю купаются в тренде закосов под старину. Так вот специально для хипстеров предлагается олдскульная типографика со всеми вытекающими. Вам надоел вебдваноль? Тогда этот форк

divshot.github.io/geo-bootstrap
(ссылка на гитхаб github.com/divshot/geo-bootstrap)

для вас! Превосходная типографика, куча анимации! Долой статичный вэб!

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

Коаны Vim

Reading time5 min
Views28K
Читать дальше →

Несколько подробностей об std::string

Reading time10 min
Views78K
Недавно заинтересовался реализацией std::string в libstdc++. Не в связи с принятием нового стандарта, а чтобы разобраться. Благо требования к строковму типу почти не изменились.

Основным средством для анализа кода несомненно является метод пристального вглядывания, но чтобы сузить область вглядывывания и сделать процедуру более захватывающей можно реализовать для строки идиому «трассер» подсмотренную в «C++ Templates: The Complete Guide». Трассировка позволяет выявлять подозрительные интересные операции над строками.

Как известно, std::string это псевдоним для
std::basic_string<char>
и нам ничего не мешает определить
std::basic_string<X>
. В X можно определить несколько статических счетчиков и итерировать их в конструкторе, деструкторе и остальных методах. Выполняя разные операции над такой строкой можно будет проследить эффективность применяемых алгоритмов в терминах количества операций.
Кроме того, в g++ для
std::string a(«entrails»); 
выражение
std::cout << reinterpret_cast<char*>(*((void**)(&a))); 

выведет содержимое строки. Т.е. std::string — является, по сути, указателем на char.
Вобщем, эти и другие шокирующие поднобности под катом.
Читать дальше →

Завершилось соревнование по дата-майнингу Heritage Health Prize

Reading time3 min
Views11K

Крупнейшее со времен Netflix Prize соревнование в области анализа больших массивов данных подошло к концу. И хотя официальные результаты первой десятки и победитель будут объявлены через два месяца, итоги уже можно подводить.
Целью было спрогнозировать госпитализацию пациентов в течение будущего года на основании данных за предыдущие два года лечения. По замыслу спонсора это позволит больше внимания уделять именно тем пациентам, которые больше всего в нем нуждаются, за счет чего сэкономить часть из 30 млрд. $, ежегодно затрачиваемых в США на госпитализацию.
Заявленный организаторами приз в 3 000 000$ был недостижим из-за установленного предела точности в 0.4 RMSLE(меньше-лучше; лучший достигнутый результат 0.46; разница между первым и сотым местом 0.008; RMSLE — среднеквадратическое отклонение логарифмов) и предоставленных данных — в них просто не содержалось достаточного для достижения такого уровня точности количества информации. Поэтому фактически борьба шла за 500 000$, достающиеся лучшей команде, фонд промежуточных финишей и бесценный опыт.
Читать дальше →

Проксификаторы или как оно работает

Reading time3 min
Views39K
К услугам программ-проксификаторов прибегали многие, но как они работают знают не все. Я расскажу об алгоритме положенному в их основу и практической реализации.
Читать дальше →

Открытое правительство и все остальные госструктуры как платформы

Reading time2 min
Views4.3K
Давайте ка я порассуждаю вслух.

Настоящее Открытое Правительство

Я считаю что самое настоящее Открытое Правительство буквальном значении — это API к сайту government.ru. Сделать его несложно, важно, нужно и можно. Но никто не сделал до сих пор. Идеально — если это сделает аппарат пр-ва, неидеально — это мы сами парсим его и делаем API. Я знаю как сделать второе и вообще-то мне ничто не мешает это сделать. И даже больше я — это сделаю, желательно, причем не своими руками — на все просто рук не хватит. Нужен квалифицированный разработчик желающий это сделать — бесплатно или за деньги.

Задача разбивается на 4 шага:
1. Провести анализ данных на сайте — набросать модели данных и архитектуру решения.
2. Распарсить данные на сайте согласно моделям и настроить регулярное обновление данных. Данные загрузить в NoSQL базу типа MongoDB или CouchDB
3. Сделать API веб-сервиса по предоставлению данных в JSON (возможно и в XML)
4. Сделать описание API.

Что дальше?

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

Big Data Week в Москве. 25-27 апреля

Reading time1 min
Views3.4K
Как-то не выдавался раньше случай рассказать тут про наш проект Мансарда (Facebook, ВКонтакте). И вот выдался.

В этом году Москва является участником Big Data Week — мирового фестиваля, посвященного теме обработки больших объемов данных. В Москве мероприятия будут проходить 3 дня — 25-27 апреля на Мансарде объединенной компании Афиши и Рамблера. Регистрироваться можно (и нужно!) уже сейчас.

image

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

Оперативная реакция на DDoS-атаки

Reading time4 min
Views51K
Один из ресурсов, за которым я присматриваю, вдруг стал неожиданно популярным как у хороших пользователей, так и у плохих. Мощное, в общем-то, железо перестало справляться с нагрузкой. Софт на сервере самый обычный — Linux,Nginx,PHP-FPM(+APC),MySQL, версии — самые последние. На сайтах крутится Drupal и phpBB. Оптимизация на уровне софта (memcached, индексы в базе, где их не хватало) чуть помогла, но кардинально проблему не решила. А проблема — большое количество запросов, к статике, динамике и особенно базе. Поставил следующие лимиты в Nginx:

на соединения
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 100;

и скорость запросов на динамику (fastcgi_pass на php-fpm)
limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s;
limit_req zone=dynamic burst=10 nodelay;

Сильно полегчало, по логам видно, что в первую зону никто не попадает, зато вторая отрабатывает по полной.

Но плохиши продолжали долбить, и захотелось их отбрасывать раньше — на уровне фаервола, и надолго.

Сначала сам парсил логи, и особо настырных добавлял через iptables в баню. Потом парсил уже по крону каждые 5 минут. Пробовал fail2ban. Когда понял, что плохишей стало очень много, перенёс их в ipset ip hash.

Почти всё хорошо стало, но есть неприятные моменты:
— парсинг/сортировка логов тоже приличное (процессорное) время отнимает
— сервер тупит, если началась новая волна между соседними разборками (логов)

Нужно было придумать как быстро добавлять нарушителей в черный список. Сначала была идея написать/дописать модуль к Nginx + демон, который будет ipset-ы обновлять. Можно и без демона, но тогда придётся запускать Nginx от рута, что не есть красиво. Написать это реально, но понял, что нет столько времени. Ничего похожего не нашёл (может плохо искал?), и придумал вот такой алгоритм.

При привышении лимита, Nginx выбрасывает 503-юю ошибку Service Temporarily Unavailable. Вот я решил на неё и прицепиться!

Для каждого location создаём свою страничку с ошибкой
error_page 503 =429 @blacklist;

И соответствующий именованный location
location @blacklist {
    fastcgi_pass    localhost:1234;
    fastcgi_param   SCRIPT_FILENAME    /data/web/cgi/blacklist.sh;
    include         fastcgi_params;
}

Дальше интересней.
Нам нужна поддержка CGI-скриптов. Ставим, настраиваем, запускаем spawn-fcgi и fcgiwrap. У меня уже было готовое для collectd.

Сам CGI-скрипт
Читать дальше →

Продолжение видео лекций курса «Операционные системы» с Алексеем Брагиным в МГТУ им. Баумана

Reading time1 min
Views23K
Мы продолжаем выкладывать в общий доступ лекции imageАлексея Брагина, который теперь читает авторский курс лекций об операционных системах в МГТУ им. Баумана.

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


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

#FailOverConf — как это было, презентации и видео

Reading time5 min
Views12K


4 апреля мы провели первую FailOver Conference — конференцию, целиком и полностью посвященную отказоустойчивости сайтов и их бесперебойной работе.

Целый день, более 7 часов, мы слушали доклады от разработчиков и архитекторов облачных сервисов, системных администраторов хостинг-провайдеров, опытных DBA, обсуждали их, спорили…

Тема оказалась очень важной и востребованной — более 1200 человек зарегистрировались на онлайн-трансляцию.

Конечно, сложно сразу «переварить» такой большой объем информации. К чему-то хочется вернуться позже, попробовать применить к конкретному проекту. Именно поэтому один из самых часто звучащих вопросов как из зала, так и в онлайне (в твиттере): «А будут ли опубликованы материалы?»

Да, конечно! Мы публикуем и презентации, и видео докладов, и с удовольствием делимся ими с вами!
Читать дальше →

Организация хостинга зашифрованного видеоконтента с помощью HTML5

Reading time5 min
Views15K
Не так давно на хабре обсуждалась новая инициатива от W3С — Encrypted Media Extensions или просто EME. Попробуем же разобраться на практике, что нового и интересного нам предлагают.
Читать дальше →

Асинхронные шаблоны в Knockout.JS

Reading time2 min
Views11K
Knockout.JS — хорошая библиотека для создания сложных веб-приложений. Долгое время мне в ней не хватало асинхронного механизма шаблонов. Реализовать его не получалось, пока я не узнал что window.setTimeout вызывает свой callback не раньше окончания работы текущего контекста. Т.е. в коде
setTimeout("console.log(window.Value)",0),(function (){while (Math.random() < 0.9999999);window.Value = 1;})()
вывод на консоль произойдет только после завершения долгой функции случайного поиска числа очень близкого к единице.
Статья для разбирающихся в механизме биндинга knockout.js и умеющих писать customBindings.
Реализация

Information

Rating
Does not participate
Location
Саров (Нижегородская обл.), Нижегородская обл., Россия
Date of birth
Registered
Activity