Pull to refresh
93
0
Андрей Светлов @svetlov

User

Send message

Пишем изящный парсер на Питоне

Reading time11 min
Views203K
В C++17 (нет-нет, Питон скоро будет, вы правильно зашли!) появляется новый синтаксис для оператора if, позволяющий объявлять переменные прямо в заголовке блока. Это довольно удобно, поскольку конструкции вида

Foo foo = make_foo();
if(foo.is_nice()) {
    // do work with foo
}
// never use foo again
// foo gets deleted

довольно общеупотребительны. Код выше лёгким движением руки программиста (и тяжёлым движением руки комитета по стандартизации) превращается в:

if(Foo foo = make_foo(); foo.is_nice()) {
    // do work with foo
}  // foo gets deleted
// never use foo again (well, you can't anyway)

Стало чуть-чуть лучше, хотя всё ещё не выглядит идеально. В Python нет и такого, но если вы ненавидите if в Python-коде так же сильно, как я, и хотите научиться быстро писать простые парсеры, то добро пожаловать под кат. В этой статье мы попытаемся написать короткий и изящный парсер для JSON на Python 2 (без каких-либо дополнительных модулей, конечно же).
Читать дальше →
Total votes 57: ↑54 and ↓3+51
Comments39

Управление контактами в Android (импорт, экспорт, перенос, настройка)

Reading time6 min
Views712K
При покупке нового телефона всегда встаёт вопрос о переносе контактов из старого в новый. Всё проще если перенос производится с телефонами одной марки, (т.к. большинство производителей предусмотрели эту нехитрую задачу) или же если они изначально хранились на сим карте. Но ведь часто приобретаешь новый телефон от другого производителя или вовсе не пользуешься памятью сим карты, так как количество телефонов или другой нужной информации превысило возможности сим карт.

В статье будет рассмотрено:

  • Варианты хранения контактов
  • Получение копии контактов с телефонов Nokia S40, S60
  • Синхронизация контактов
  • Группировка контактов в телефонной книге
  • Настройка уведомлений о днях рождения
  • Обратная синхронизация с S40, S60
Читать дальше →
Total votes 46: ↑39 and ↓7+32
Comments42

0day уязвимость в приложениях для iOS: Gmail, Google+ и FB Messenger

Reading time3 min
Views75K
image

Интро


Нормальные люди проводят ночи смотря фильмы, читая статьи, общаясь в социальных сетях или (да, я знаю — это странно) засыпая на кровати.
Я же провожу свои ночи читая документации и тестируя самые разнообразные приложения и сервисы.
Одной ночью я просто читал документацию о ссылках tel, так как я был в восторге от старых технологий, которые использовались до сих пор, их недостатков и того, что люди никогда не читали RFC, что и приводит их к RTFM PWNAGE (как я привык это называть).

Нужно пробовать


Как только я закончил читать документацию по tel — я посмотрел на свой iPhone и сказал: Круто, нужно пробовать! Я накодил маленькую HTML страницу и загрузил ее в Safari, вот код:
image
Как только я кликнул по ссылке — тут-же появилось диалоговое окно, которое спрашивало действительно ли я хочу позвонить по телефону 0000.
Читать далее
Total votes 123: ↑111 and ↓12+99
Comments44

PyCon in Russia: let it be

Reading time2 min
Views6.8K
Не без волнения пишем этот пост — да, мы взялись за организацию первого в России PyCon. Если совсем кратко — то можно перейти на сайт PyCon.ru вся информация есть там. А под катом мы рассказываем, кто мы такие и почему собираемся всё провести именно так.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments39

Секундомер под Android на Python + sl4a + fullScreenUI

Reading time7 min
Views21K

Вступление


Такая замечательная вещь как SL4A(Scripting Level for Android) уже давно не является новостью. С каждым новым релизом SL4A возможности API для доступа/управления смартфоном растут. Еще до недавних пор создание пользовательского интерфейса ограничивалось средствами webView и стандартными диалоговыми окнами. Но в версии r5 появился новый, как заявили разработчики, пока что экспериментальный, способ создания пользовательского интерфейса — fullScreenUI.
FullScreenUI позволяет создавать интерфейс, используя стандартные виджеты Android-а (кнопки, текстовые поля, радиокнопки, и проч.), а также обрабатывать события от них. На примере создания простого секундомера я хочу продемонстрировать возможности этого API.
Читать дальше →
Total votes 12: ↑9 and ↓3+6
Comments16

Нахождение максимальной общей подпоследовательности

Reading time6 min
Views44K
В настоящей статье я хотел бы сделать обзор популярных алгоритмов для решения задачи нахождения максимальной общей подпоследовательности или LCS (longest common sequense). Так как акцент сделан на обучении, а не на реальном использовании, в качестве языка для реализации выбран Python, что позволит сократить количество кода и сконцентрироваться на основных идеях.
Читать дальше →
Total votes 68: ↑64 and ↓4+60
Comments20

Использование Grab:Spider для парсинга сайтов

Reading time4 min
Views19K
Всем привет!

Я активный пользователь open-source фрэймворка Grab (itforge уже писал о нем здесь и здесь) и 1/2 проекта GrabLab (который занимается собственно коммерческой эксплуатацией фрэймворка). Т.к. парсим сайты мы часто, помногу и задания как правило совершенно не похожи друг на друга, хотелось бы поделится своим опытом в вопросе построения типичного парсинг проекта.

Немного про инструментарий который помогает мне в работе

В качестве рабочего браузера я использую FireFox с плагинами HttpFox (анализировать входящий/исходящий http трафик), XPather (позволяет проверять xpath выражения), SQLite Manager (просмотр sqlite таблиц), код набираю в emacs, где активно использую сниппеты (YASnippets) для часто встречающихся конструкций.

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

Читать дальше →
Total votes 37: ↑34 and ↓3+31
Comments17

Постигаем Git

Reading time6 min
Views55K
От переводчика: в этой статье нет описания команд git, она подразумевает, что вы уже знакомы с ним. Здесь описывается вполне здравый, на мой взгляд, подход к содержанию публичной истории в чистоте и порядке.

Если вы не понимаете, что побудило сделать git именно таким, то вас ждут страдания. Используя множество флагов (--flag), вы сможете заставить git работать так, как по вашему мнению он должен работать, вместо того, чтобы работать так, как git того хочет. Это как забивать гвозди отверткой. Работа делается, но хуже, медленнее, да и отвертка портится.
Читать дальше →
Total votes 126: ↑120 and ↓6+114
Comments91

Fabric — пара прикладных рецептов

Reading time4 min
Views24K
Сегодня неожиданно понял, что скрипты — это сила (спустя несколько месяцев использования fabric). На самом деле 30 минут потраченные на написание адекватного сценария избавляют от многих совокупных часов повторения ненужных действий. Для упрощения жизни адептов python'а существует такой прекрасный модуль как fabric. И я хочу поделиться парой кусков своего fab-файла как пример упрощения жизни девелопера.

Это будут функции: «умный» комментатор локальных файлов и git-коммитер.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments7

Ubuntu в техническом вузе

Reading time5 min
Views39K
Хотел бы рассказать об опыте использования Linux'a в целом и Ubuntu в частности в учебном процессе технического вуза — Ивановская государственная текстильная академия для студентов направления подготовки — «Моделирование и исследование в организационно-технических системах».
Читать дальше →
Total votes 295: ↑272 and ↓23+249
Comments64

Сборочная среда для проекта Midnight Commander

Reading time3 min
Views3.9K
Продолжение

Мало кто из знакомых со словами linux, *bsd не знает о Midnight Commander. Я не слишком ошибусь, если скажу, что все поначалу пользовались им. Отличный инструмент для задач, которые он решает, к тому же доступный на многих платформах. Последнее время проект, ранее развиваемый под крылом gnome.org, получил вторую жизнь. Новый сайт проекта радует темпами развития. Вот только поддержка актуальных версий пакетов в дистрибутивах хромает.

Последнее, что доступно в Debian — 4.7.0.9, и это при том, что совсем недавно вышел 4.7.5.4 в котором есть ряд вкусностей. Проект предоставлял бинарные сборки для RedHat-based систем и не поддерживал таковые для Debian/Ubuntu. Я решил восполнить этот пробел, запустив автоматическую сборочную среду.
Читать дальше →
Total votes 45: ↑40 and ↓5+35
Comments27

Красивый автологин на активное сетевое оборудование

Reading time3 min
Views18K
Добрый день, уважаемые Хабралюди!
Хочу поделиться с вами моим способом упрощения жизни сетевого админа. Предлагаю способ автоматического ввода логина и пароля на все оборудование сразу. Не претендую на новизну и свежесть идеи, но собственное решение гораздо проще, прозрачнее и как-то ближе к сабжу. Добро пожаловать под кат.
Читать дальше →
Total votes 39: ↑33 and ↓6+27
Comments41

Grab — python библиотека для парсинга сайтов

Reading time13 min
Views149K
Лет пять-шесть назад, когда я ещё программировал преимущественно на PHP, я начал использовать библиотеку curl для парсинга сайтов. Мне нужен был инструмент, который позволял эмулировать сессию пользователя на сайте, отсылать заголовки обычного браузера, давать удобный способ отсылки POST-запросов. Сначала я пытался использовать напрямую curl-расширение, но его интерфейс оказался очень неудобным и я написал обёртку с более простым интерфейсом. Время шло, я пересел на python и столкнулся с таким же дубовым API curl-расширения. Пришлось переписать обёртку на python.
Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments53

Кластеризация. Алгоритм а-квазиэквивалентности

Reading time3 min
Views7.4K
Странно, но статей о извлечение знаний (data mining) и кластеризации (как одном из основных инструментом, которие используются для извлечения знаний) на Хабре совсем немного. А если говорить говорить о конкретных алгоритмах, то рассматривались только hard/soft k-means.

В статье ниже описывается теория и реализация (Python + matplotlib) не очень известного, но крайне интересного иерархического метода который можно назвать алгоритмом а-квазиэквивалентности.

Читать дальше →
Total votes 35: ↑31 and ↓4+27
Comments18

Как применять Linux epoll в Python

Reading time23 min
Views24K
В статье описывается:
  • Примеры использования блокирующих сокетов
  • Преимущества асинхронных сокетов и Linux epoll
  • Примеры асинхронного использования сокетов через epoll
  • Вопросы производительности
  • Исходный код
Читать дальше →
Total votes 54: ↑49 and ↓5+44
Comments30

Алгоритм: Как оформить баг на ядро Linux

Reading time4 min
Views2.3K
Мой опыт в разработке и отладке Parallels Virtuozzo Containers позволил обобщить и сформулировать список пожеланий к описанию проблемы пользователя, который позволяет существенно уменьшить время диагностирования и решения проблемы в ядре операционной системы Linux. Прошу отметить, что при всей очевидности некоторых рекомендаций многие участники open-source сообщества по-прежнему пренебрегают ими. Алгоритм представлен подкатом.
Читать дальше →
Total votes 95: ↑92 and ↓3+89
Comments14

Алгоритм морфологического сглаживания MLAA для CPU

Reading time2 min
Views10K
Компания Intel опубликовала описание алгоритма морфологического сглаживания (MLAA), который предназначен для работы в реальном времени на CPU (демо, исходные коды).

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



Если вкратце, то фильтр MLAA ищет L-, Z- и U-образные границы пиксельных групп, после чего размывает окружающие пикселы для получения плавных очертаний.
Читать дальше →
Total votes 50: ↑47 and ↓3+44
Comments15

Руководство: пишем интерпретатор с JIT на PyPy

Reading time12 min
Views12K
Все исходные коды и примеры из этой статьи доступны здесь.

Когда я первый раз смотрел проект PyPy, мне потребовалось некоторое время, чтобы выяснить, что он из себя представляет. Он состоит из двух вещей:

— набор инструментов для написания интерпретаторов языков программирования;
— реализация Питона с применением этого набора инструментов.

Вероятно, большинство людей думает, что PyPy это только вторая часть, но это руководство не об интерпретаторе Питона. Оно о том, как написать интерпретатор своего языка.

Я взялся за это руководство для того, чтобы лучше понять как работает PyPy и что он из себя представляет. Предполагается, что вы очень мало знаете о PyPy, поэтому я начну с самого начала.

Читать дальше →
Total votes 78: ↑74 and ↓4+70
Comments6

Оптимизации в компиляторах. Часть 1

Reading time7 min
Views31K
Копаясь в дебрях LLVM, я неожиданно обнаружил для себя: насколько всё же интересная штука — оптимизация кода. Поэтому решил поделиться с вами своими наблюдениями в виде серии обзорных статей про оптимизации в компиляторах. В этих статьях я попытаюсь «разжевать» принципы работы оптимизаций и обязательно рассмотреть примеры.
Я попытаюсь выстроить оптимизации в порядке возрастания «сложности понимания», но это исключительно субъективно.
И ещё: некоторые названия и термины не являются устоявшимися и их используют «кто-как», поэтому я буду приводить несколько вариантов, но настоятельно рекомендую использовать именно англоязычные термины.
Начнём...
Total votes 114: ↑110 and ↓4+106
Comments36

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity