Как стать автором
Обновить
56
0
Руслан Гроховецкий @ruguevara

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

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

Профилирование python приложений

Время на прочтение2 мин
Количество просмотров16K
Краткая заметка с линками и примерами о профайлинге:
  1. производительности: hotshot или python profile/cProfile + визуализатор логов kcachegrind (есть порт под windows, аналог WinCacheGrind)
  2. использование памяти: dowser с web-интерфейсом

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

Концепции практического использования генетических алгоритмов

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

Предисловие


На написание статьи вдохновили две публикации:

Захотел изложить свои мысли и свой взгляд на этот вопрос именно как практик от программирования «с математическим бэкграундом». Это будет повествование «на пальцах». Специалистом в генной инженерии не являюсь и сужу по поверхностным описаниям механизмов функционирования живых клеток и ДНК.
Читать дальше →
Всего голосов 34: ↑30 и ↓4+26
Комментарии16

Сортировка массива за O(N) на CUDA

Время на прочтение5 мин
Количество просмотров15K
Введение
Как-то стояла задача отсортировать уникальный массив строк с использованием GPU с минимум кода и максимально возможной скоростью…
В данном посте опишу основную идею ее решения. В качестве элементов массива сортировки в данном посте выступают числа.
Случай с уникальными элементами небольшого массива
В качестве платформы была выбрана CUDA по причинам, которые можно считать брэндовыми или индвидуальными. По факту, здесь много примеров именно на CUDA, и она на данный момент получила большее развитие в GPU-вычислениях, чем аналогичные платформы от ATI и OpenCL.
Поиск в сети по алгоритмам сортировки на CUDA дал разные результаты. Вот наиболее интересный. Там есть рисунок
image
, из которого видно, что наилучший результат дал алгоритм QSORT, который дает сложность порядка от O(NlogN) до O(N^2). И хотя распараллеливание на GPU дало лучший в статье результат, закралось сомнение, что QSORT — не лучший способ использовать ресурсы видеокарты для данной задачи (особенно испугал размер приведенного кода). Далее описывается решение задачи, по сути «в одну строчку» с сложностью временной сложностью O(N) в худшем случае.

Читать дальше →
Всего голосов 53: ↑41 и ↓12+29
Комментарии56

Watir: простой парсинг сложных сайтов

Время на прочтение4 мин
Количество просмотров51K
imageКаждый, кто пишет парсеры, знает, что можно распарсить сто сайтов, а на сто-первом застрять на несколько дней. Структура очередного отмороженного сайта может быть сколь угодно сложной, и, когда дело касается сжатых javascript-ов и ajax-запросов, расшифровать их и извлечь информацию с помощью обычного curl-а и регекспов становится дороже самой информации.

Грубо говоря, проблема в том, что в браузере работает javascript, а на сервере его нет. Нужно либо писать интерпретатор js на одном из серверных языков (jParser и jTokenizer), либо ставить на сервер браузер, посылать в него запросы и вытаскивать итоговое dom-дерево.

В древности в таких случаях мы строили свой велосипед: на отдельной машине запускали браузер, в нем js, который постоянно стучался на сервер и получал от него задания (джобы), сам сайт грузился в iframe, а скрипт извне отправлял dom-дерево ифрейма обратно на сервер.

Сейчас появились более продвинутые средства — xulrunner (crowbar) и watir. Первый — безголовый firefox. У crowbar есть даже ff-плагин для визуального выделения нужных данных, который генерит специальный парсер-js-код, однако там не поддерживаются cookies, а допиливать неохота. Watir позиционируется разработчиками как средство отладки, но мы будем его использовать по прямому назначению и в качестве примера вытащим какие-нибудь данные с сайта travelocity.com.

Читать дальше →
Всего голосов 79: ↑65 и ↓14+51
Комментарии74

Rock Music Inside

Время на прочтение6 мин
Количество просмотров4.7K
Когда-то давно начал писать для одного интернет журнала цикл статей про то, как устроена рок музыка, так сказать, «изнутри». Увидев статью Основы звукозаписи от любителя для любителей решил поделиться и своими наработками. Надеюсь, это кому-то будет интересно.

Рок-музыка – музыка жизни для очень и очень многих, это музыка, которая несет в себе сильнейшую энергетику: от мрачной и темной, до пафосно возвышенной и каждый может найти в ней что-то для себя. Утонченная красота рок-баллад и невероятный драйв «боевиков» сносит мозг огромному количеству людей вот уже около 50ти лет. Но мы не будем углубляться в историю, не будем пытаться доказать, кто же все-таки был первым рокером: битлз или блек саббат – оставим это музыковедам. Также мы не будем пытаться разграничить её на стили, говоря «это фиговая попса, а это – труъ», ведь, на мой взгляд, МУЗЫКА не может быть заключена в какие-либо рамки. Задача этой статьи несколько иная – я хочу попытаться пролить свет на то, чем является рок-музыка изнутри. На то, что для большинства глаз скрыто, и то, что волнует многих: «а как он это сделал?», «а что это такое торчит?» — то, что разграничивает слушателя и музыканта. Я хочу попытаться пролить свет на те вещи, на которых в большинстве своем базируется рок-музыка: инструменты, техники игры, технологическая сторона вопроса, однако хочется сделать это как можно проще и понятнее. Это как раз то, чего не хватало мне в свое время и, надеюсь, станет для вас интересным и занимательным. Так же я попытаюсь провести небольшой экскурс в искусство звукозаписи и то, как можно сделать РОК у себя дома:).
Заранее попрошу простить меня за некоторую заангажированность, необъективность и необразованность по некоторым вопросам – я лишь любитель, а не профессионал, кроме этого – музыка является искусством, на которое всегда найдется как минимум 2 разные точки зрения.
Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии57

Работа со звуком на практике

Время на прочтение5 мин
Количество просмотров25K
Здравствуйте!

В свое время я не без удовольствия прочитал замечательную статью «Гитаризм для линуксоида — why not?». И решил написать небольшое продолжение этой статьи и рассказать о некоторых вещах более практического плана, а именно создать небольшое руководство для тех, кто, скажем, неожиданно решил увековечить свое творчество путем записи относительно непростого гитарного произведения. :)
Итак, поехали.

Читать дальше →
Всего голосов 72: ↑67 и ↓5+62
Комментарии57

NVIDIA CUDA(сиквел) — Настройка PyCUDA

Время на прочтение4 мин
Количество просмотров18K
image
В продолжение темы Настройка Ubuntu 8.10 для кодинга под NVIDIA CUDA, я решил наладить себе рабочее место для использования одного из моих любимых языков программирования — Python. Для этого существует отличный набор библиотек PyCUDA, позволяющий реализовывать все прелести NVIDIA CUDA API с помощью удобного и красивого кода.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии67

Визуализация модели данных

Время на прочтение1 мин
Количество просмотров3.9K
Для django есть хорошая утилитка, которая анализирует описание модели данных и рисует её графическое представление в dot-формате graphviz.
Сегодня переписал эту утилитку под appengine.

image

Утилита распознаёт Expando (добавляет многоточие в список атрибутов),
наследование от PolyModel (рисует стрелки наследования),
а также ссылочные свойства (в том числе самодельные, типа ManyToManyProperty).

Как пользоваться:
  1. засунуть скрипт в каталог с sdk
  2. запустить её из корневого каталога приложения, указав аргументами список модулей для анализа (в формате имён дя import):
    python path/to/modelviz.py models.foo models.bar > models.dot
  3. сконвертить полученный dot-файл во что-нибудь более удобное, например, в png:
    dot models.dot -Tpng > models.png
  4. наслаждаться неземной красотой
Всего голосов 44: ↑40 и ↓4+36
Комментарии8

«Живые графы» — выращивание графов на клеточных автоматах с примерами на Silverlight

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


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

Да и простого любопытствующего обывателя, не отягощённого подробностями органической химии, подобные вопросы не обходят стороной.

Вот была бы игрушка-конструктор, с помощью которой можно собрать простенькие растущие организмы. Тогда построив предельно упрощённую модель, демонстрирующую многие из явлений живого, можно было бы приблизиться к ответам на вопросы устройства жизни, или хотя бы к пониманию, где эти ответы искать.

живой граф

Такой предельно упрощённой и наглядной моделью могут оказаться «Живые графы» — конечные автоматы на графе, каждый узел которого содержит некое исполняющее устройство (автомат) с конечным числом состояний и с набором примитивных правил, управляющих созданием или изменением новых связей между узлами.

Читать дальше →
Всего голосов 96: ↑86 и ↓10+76
Комментарии49

Stackless Python и Concurrence

Время на прочтение8 мин
Количество просмотров14K
Перед тем, как перейти собственно к возможностям Stackless и Concurrence, рассмотрим самый простой способ написать сетевое приложение, обрабатывающее несколько одновременных соединений:

socket()
bind()
listen()
accept()
fork() ->
    read()
    write()
    ...
    close()

Под каждое новое входящее соединение процесс создаёт свою копию через fork(). Это чрезвычайно накладный способ, у которого, к тому же, есть сложности с синхронизацией между процессами. В простом случае они решаются через создание каналов (pipes) между родительским и дочерним процессами и сериализацию данных. В более сложных потребуются примитивы межпроцессной синхронизации. Вспомним ещё про затраты на создание, разрушение и переключение процессов. Это очень ресурсоёмкие операции — как по памяти, так и по вычислительной мощности. Поэтому обработать много одновременных соединений будет весьма сложно.
Читать дальше →
Всего голосов 66: ↑62 и ↓4+58
Комментарии58

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

Время на прочтение2 мин
Количество просмотров15K
Сравнение PhoneGap vs. Titanium vs. Rhodes

В первую очередь должен заметить, что кроссплатформенная разработка не для тех, кто разрабатывает 3D-игры, интерактивные, мультимедийные и анимированные приложения.

Рассматриваемые в этой статье разработки все построены на web-технологиях и могут быть использованы web-разработчиками, которые хотят применить свой опыт в мире мобильных приложений.
Читать дальше →
Всего голосов 41: ↑28 и ↓13+15
Комментарии21

Самый короткий в мире маркетинговый план

Время на прочтение1 мин
Количество просмотров17K
В догонку к посту про макет бизнес модели, не менее полезный «самый короткий в мире маркетинговый план» (так его назвал автор, Келли Одел).

Можно для любой новой идеи, продукта или услуги заполнить эту табличку и сразу увидеть общую картину с перспективами.

Посмотреть план
Всего голосов 126: ↑115 и ↓11+104
Комментарии40

Penisland, или как написать спеллчекер

Время на прочтение7 мин
Количество просмотров12K
Есть хорошая статья Питера Норвига, в которой он рассказывает как написать спеллчекер в 20 строк кода. В этой статье он показывает как поисковые системы могут исправлять ошибки в запросах. И делает это довольно элегантно. Однако, у его подхода есть два серьезных недостатка. Во-первых, исправление более трех ошибок требует больших ресурсов. А гугл, кстати, неплохо справляется и с четырьмя ошибками. Во-вторых, нет возможности проверки связного текста.



Итак, хочется исправить эти проблемы. А именно, написать корректор коротких фраз или запросов, который:
  • умел бы выявлять три (и более) ошибки в запросе;
  • умел бы проверять «разорванные» или «слипшиеся» фразы, например expertsexchange — experts_exchange, ma na ger — manager
  • не требовал много кода для реализации
  • мог бы достраиваться до исправления ошибок на других языках и других типов" ошибок

Остальное — под катом.
Читать дальше →
Всего голосов 133: ↑131 и ↓2+129
Комментарии49

Удобный доступ к файлам на удаленных хостах

Время на прочтение3 мин
Количество просмотров57K
На Хабре достаточно много разработчиков работают с файлами на удаленных хостах. На локальной машине запускается IDE, отладчик, все необходимое, а сами файлы находятся на сервере, где они регулярно бакапятся, автобилдятся, тестируются и так далее. Очень удобный рабочий вариант. Да я сам его использую.
Единственная проблема, доставляющая неудобство — файлы все же находятся на другом компе, и доступ к ним не такой простой и прозрачный как к «своим».
Под катом — как сделать такой доступ максимально удобным. Чтобы он запускался автоматом когда надо, а самое главное — чтобы не запускался, когда не надо!
Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии64

Сумбурные заметки про python и django

Время на прочтение5 мин
Количество просмотров47K
Накопилось несколько маленьких заметок/советов про python и django, которые на отдельные топики не тянут, поэтому публикую все сразу.

Под катом:
  • как упростить код вьюх ровно в 2 раза
  • легкий способ рисования графиков
  • почему Ian Bicking воскликнул «Cool!»
  • приложения для ВКонтакте на django за 5 минут
  • хорош ли pymorphy?
  • пара фишек насчет выкладки пакетов на pypi
  • что общего между декораторами и with-контекст-менеджерами
  • принимаем оплату на django-сайтах
  • показываем Яндекс.Карту для заданного адреса

Читать дальше →
Всего голосов 159: ↑153 и ↓6+147
Комментарии37

Муравьиные алгоритмы

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

Предисловие


Совсем недавно в этом блоге была опубликована статья, посвященная алгоритму поведения роя пчел. Данная статья рассказывает о другом алгоритме роевого интеллекта, называемом муравьиным алгоритмом. Она состоит из введения, вкратце рассказывающего о заимствованном природном механизме, описания оригинального алгоритма Марко Дориго, обзора других муравьиных алгоритмов и заключения, в котором указываются области применения муравьиных алгоритмов и перспективные направления в их исследованиях.

Введение


Муравья нельзя назвать сообразительным. Отдельный муравей не в состоянии принять ни малейшего решения. Дело в том, что он устроен крайне примитивно: все его действия сводятся к элементарным реакциям на окружающую обстановку и своих собратьев. Муравей не способен анализировать, делать выводы и искать решения.

Эти факты, однако, никак не согласуются с успешностью муравьев как вида. Они существуют на планете более 100 миллионов лет, строят огромные жилища, обеспечивают их всем необходимым и даже ведут настоящие войны. В сравнении с полной беспомощностью отдельных особей, достижения муравьев кажутся немыслимыми.
Читать дальше →
Всего голосов 83: ↑80 и ↓3+77
Комментарии43

Почему Git

Время на прочтение8 мин
Количество просмотров68K
Было время, когда я ничего не знал про VCS, ни что это такое, ни тем более зачем это мне. И верхом своих достижений считал папочку с архивами версий. К моменту осознания необходимости системы контроля версий я уже набил шишек и прочувствовал необходимость такого инструмента. Но борландовский аналог CVS меня не впечатлил. У каждого файла свой номер версии. Как мне получить срез определенного релиза я так и не разобрался. А в это время SVN победоносно шла сквозь умы разработчиков. Черт, это было то, чего мне так не хватало. Прочитав доку и начав работать я просто влюбился в нее. Да, были трудности и определенные неудобства, но куда без них.
Так я и работал бы в SVN, но ничего не стоит на месте. В интернете уже потекли тонкие ручейки новостей про Git. Я не кидаюсь за каждой новой технологией, и прошло уже достаточно много времени, пока мне не прожужжали этим Git’ом все мозги. Мне стало любопытно, я вначале присматривался, примерялся, а потом плюнул и начал новый проект на Git. Мучался с ребятами 2 недели, накачал литературы, написал шпаргалку… ничего, привыкли, … а потом меня поперло.

Теперь меня регулярно просят рассказать про Git и что в нем такого. Уже надоело, поэтому этот пост для тех, кто еще сомневается.
Читать дальше →
Всего голосов 207: ↑195 и ↓12+183
Комментарии265

Пишем функциональные/интеграционные тесты для проекта на django

Время на прочтение8 мин
Количество просмотров17K
В этой захватывающей статье я расскажу про инструменты, с помощью которых можно писать функциональные тесты для django-проекта. Есть куча разных других способов это делать, но я опишу один — тот, который, на мой взгляд, самый простой. Между делом создадим красивый отчет по code coverage (субъективно — приятнее тех, что делает coverage.py). И еще, в качестве приправы, будет немного болтовни про тестирование.

Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии19

Обзор алгоритмов кластеризации данных

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

В своей дипломной работе я проводил обзор и сравнительный анализ алгоритмов кластеризации данных. Подумал, что уже собранный и проработанный материал может оказаться кому-то интересен и полезен.
О том, что такое кластеризация, рассказал sashaeve в статье «Кластеризация: алгоритмы k-means и c-means». Я частично повторю слова Александра, частично дополню. Также в конце этой статьи интересующиеся могут почитать материалы по ссылкам в списке литературы.

Так же я постарался привести сухой «дипломный» стиль изложения к более публицистическому.
Читать дальше →
Всего голосов 82: ↑78 и ↓4+74
Комментарии41

Системы eCommerce на Python — техническое сравнение

Время на прочтение3 мин
Количество просмотров26K
В краткий обзор вошли веб-приложения на Python с открытым исходным кодом и возможностью расширения: GetPaid, EasyShop, LFS, Satchmo, Perfect Sale.
Материал публикуется с целью привлечь внимание отечественных разработчиков к e-commerce open source решениям на python в продолжение темы Open Source решений для электронной коммерции на PHP: habrahabr.ru/blogs/open_source/101072
Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии25

Информация

В рейтинге
Не участвует
Откуда
Россия
Работает в
Дата рождения
Зарегистрирован
Активность