Pull to refresh
156
0
Павел Дмитриев @cleg

User

Send message

Используем MongoDB вместо memcached: быть или не быть?

Reading time5 min
Views15K
На тему «использование MongoDB вместо memcached» гуглится немало историй успеха. Такое ощущение, что есть широкий класс задач, для которых идея работает неплохо: прежде всего это проекты, где интенсивно используется тэгирование кэша. Но если вы попробуете, то заметите, что в MongoDB не хватает функции удаления из кэша записей, которые читаются реже всего (LRU — Least Recently Used). Как поддерживать размер кэша в разумных рамках? LRU — это, кстати, «конек» memcached; вы можете писать в memcached, не задумываясь о том, что ваш кэш переполнится; но как же быть с MongoDB?

Раздумывая над этим, я написал на Python небольшую утилиту CacheLRUd (выложена на GitHub). Это демон для поддержки LRU-удаления записей в различных СУБД (в первую очередь, конечно, в MongoDB). Ферма таких демонов (по одному на каждой MongoDB-реплике) следит за размером коллекции, периодически удаляя записи, к которым доступ на чтение производится реже всего. Отслеживание фактов чтения той или иной записи кэша происходит децентрализовано (без единой точки отказа) по протоколу, основанному на UDP (почему так? потому что «наивный» вариант — писать из приложения в мастер-базу MongoDB при каждой операции чтения — плохая идея, особенно если мастер-база окажется в другом датацентре). Читайте подробности чуть ниже.

Но зачем?
Читать дальше →

История PCI — на пути к светлому будущему накопителей

Reading time4 min
Views46K


Современная революция систем хранения данных невозможна без развития интерфейсов, с помощью которых диски подключаются к системе. Одним из главных «героев» этого фронта сейчас является шина PCI Express. Скоростные накопители в наше время работают с интерфейсом PCIe Gen2 x4, обеспечивая скорость до 20 Гб/с, но так было далеко не всегда.
Читать дальше →

Как «волшебство» кода коррекции ошибок, которому уже больше 50 лет, может ускорить флэш-память

Reading time4 min
Views28K
Код исправления ошибок (Error Correction Code или ECC) добавляется к передаваемому сигналу и позволяет не только выявить ошибки при передаче, но и при необходимости исправить их (что в общем-то очевидно из названия), без повторного запроса данных у передатчика. Такой алгоритм работы позволяет передавать данные с постоянной скоростью, что может быть важно во многих случаях. Например, когда вы смотрите цифровое телевидение — смотреть на застывшую картинку, ожидая, пока осуществляются многократные повторные запросы данных, было бы весьма неинтересно.


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

Прогноз погоды

Reading time3 min
Views7.5K
Рассматривая разные технологии хранения данных и решения, предлагаемые компанией LSI, мы немного подзабыли о практически-прикладном смысле этого всего. Зачем нужны все возрастающие скорости и емкости дисков? Одно из первых, приходящих в голову применений — это, конечно, Big Data или Большие данные. Чем же эти Большие данные отличаются от просто больших, чтоб заслужить написание с большой буквы? Обычно это называют «правило трех V».


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

Много бесплатных книг по программированию

Reading time7 min
Views346K
Читать дальше →

Краткий экскурс в историю флэш-памяти

Reading time7 min
Views44K
Многие современные технологии мы уже привыкли воспринимать как должное, не особо задумываясь, как они работают, что за ними стоит, какова история их развития. Касается это в том числе и компьютеров. Я уже писал об истории развития технологий хранения данных, наглядно показывающую эволюцию в этой отрасли. На этот раз я решил рассказать подробней про одну из технологий, активно используемых компанией LSI, про твердотельную, или SSD (Solid State Drive) память.

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

Yaxy — proxy-сервер для веб-разработчика

Reading time4 min
Views35K
Yaxy — proxy-сервер, подменяющий различные части HTTP-запросов и ответов на указанные в config-файле значения. Я не буду здесь описывать, как поставить, настроить и запустить сервер, это всё описано в readme репозитория. Здесь я опишу различные случаи, в которых Yaxy очень помогает, а то и вовсе незаменим.

Под катом 9 примеров использования Yaxy

Усилитель для наушников на основе композитной схемы LME49710 + LT1210CT7

Reading time5 min
Views100K

Немного лирики



По роду своей деятельности постоянно общаюсь с профессиональной аудио аппаратурой, поэтому целью этой разработки было получить устройство, обладающее высокой верностью воспроизведения. Поэтому схемотехнические решения без ООС сразу были отброшены и за основу была взята композитная схема, обладающая большим потенциалом. Приходилось встречать несколько устройств с такой топологией, однако в большинстве конструкций были использованы приборы LT1795 или AD815. Однако как упоминал в одной из своих статей Дмитрий Андронников (aka Lynx):
даже весьма мощные ОУ с ТОС при подключении к их выходу наушников сопротивлением ниже 50...60 Ом работают в достаточно напряженном режиме как по выходному току (что приводит к росту искажений), так и по тепловыделению.

Было решено привлечь «тяжелую артиллерию», но об этом ниже.
Читать дальше →

Мега-ЦОДы — пионеры инноваций. Часть 2

Reading time4 min
Views25K

Мы продолжаем знакомство с современными сверхбольшими дата-центрами, начатое прошлой статьей, и сегодня поговорим о том, как решается одна из наиболее важных проблем — хранение данных. Кроме того, мы немного поговорим о ближайшем будущем таких мега-ЦОД.
Читать дальше →

19 команд ffmpeg для любых нужд

Reading time3 min
Views581K
От переводчика:
Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его man объёмен и местами малопонятен, лишь немногие постигли дао профессиональной работы с ним. И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне. О некоторых полезных консольных командах ffmpeg и пойдёт речь в статье. В некоторых местах я взял на себя смелость вставить ссылки на поясняющие статьи.


ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. Я собрал 19 полезных и удивительных команд, покрывающих почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.

1. Получение информации о видеофайле

ffmpeg -i video.avi

2. Превратить набор картинок в видео

ffmpeg -f image2 -i image%d.jpg video.mpg

Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg

(примечание переводчика: мне больше нравится такой формат:
ffmpeg -r 12 -y -i "image_%010d.png" output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)
Читать дальше →

impress.js — презентации на CSS3, рвущие шаблон

Reading time4 min
Views19K
Даже хорошие презентации, не содержащие списков из двадцати пунктов восьмым кеглем и вызывающих рвотный рефлекс картинок из бесплатных сборников клипарта “встречи и партнёрство” или “офисная жизнь”, следуют давным-давно заданному стандарту, без изменений перенесённому в офисные пакеты из мира старинных диапроекторов. Презентация всегда представляет собой набор прямоугольных картинок одинакового формата и размера. Иногда между ними добавляют переходы и анимацию, раздражающую не меньше разноцветных надписей и бессмысленно улыбающихся абстрактных офисных работников. Стандартом де-факто для хорошей презентации давно стала последовательность статичных слайдов без всякого мельтешения, с очень коротким текстом крупным шрифтом и несколькими тщательно подобранными фотографиями или скриншотами.

Основанный на трансформациях и переходах CSS3, javascript-фреймворк для создания презентаций impress.js выходит за рамки понятия “слайд” и позволяет строить презентации в открытом, неограниченном трёхмерном пространстве. Источником вдохновения для него послужил сервис prezi.com. Репозиторий impress.js на Гитхабе появился меньше месяца назад, но уже стал одним из самых популярных. Нетерпеливые могут посмотреть небольшую демку здесь, а остальные — создать пример необычной презентации прямо сейчас.
Читать дальше →

Реализация объектов-словарей, как в Javascript

Reading time3 min
Views8.8K
Недавно, после длительного взаимодействия моего мозга с Javascript я вернулся к привычному для меня Python, и понял, что чего-то мне не хватает, а именно объектов как в Javascript, тех что хеш-таблицы, ага. Фууууу, может быть скажете вы и, возможно зря.
Читать дальше →

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

Reading time13 min
Views150K
Лет пять-шесть назад, когда я ещё программировал преимущественно на PHP, я начал использовать библиотеку curl для парсинга сайтов. Мне нужен был инструмент, который позволял эмулировать сессию пользователя на сайте, отсылать заголовки обычного браузера, давать удобный способ отсылки POST-запросов. Сначала я пытался использовать напрямую curl-расширение, но его интерфейс оказался очень неудобным и я написал обёртку с более простым интерфейсом. Время шло, я пересел на python и столкнулся с таким же дубовым API curl-расширения. Пришлось переписать обёртку на python.
Читать дальше →

Библиотека для упрощения HTTP-запросов

Reading time1 min
Views150K
Requests — библиотека Python, которая элегантно и просто выполняет HTTP-запросы. Теперь не нужно осваивать urllib2 с излишне сложными программными интерфейсами.

Вот как выглядит HTTP-запрос с авторизацией с помощью requests:

>>> r = requests.get('https://api.github.com', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json'
Читать дальше →

Kango — фреймворк для создания кроссбраузерных расширений

Reading time4 min
Views7.9K

Вступление

Kango позволяет создавать расширения для популярных браузеров используя только JavaScript, причем код един для всех браузеров. На данный момент поддерживается Chrome, Firefox, Internet Explorer (в публичном доступе только версия с поддержкой Chrome и Firefox) и ведется работа над поддержкой Opera и Safari. Ниже будет рассмотрено как можно быстро создать простой кроссбраузерный Gmail Checker

Что должно получиться в итоге:



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

Пайпы, the pythonic way

Reading time3 min
Views19K
Одни питонисты любят код читаемый, другие предпочитают лаконичный. К сожалению, баланс между первым и вторым — решения по-настоящему изящные — редко случается встретить на практике. Чаще стречаются строки вроде
my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)])))
Или четверостишья а ля
xs = [x for x in range(100)]
xs_filtered = filter(lambda x: x % 3 == 1, xs)
xs_sum = sum(xs_filtered)
result = my_function(xs_sum)
Идеалистам же хотелось бы писать как-то так
result = [x for x in range(100)] \
    | where(lambda x: x % 3 == 1)) \
    | sum \
    | my_function

Не в Питоне?
Зря так думаете...

Регулярные выражения, пособие для новичков. Часть 1

Reading time14 min
Views919K
Регулярные выражения (РВ) это, по существу, крошечный язык программирования, встроенный в Python и доступный при помощи модуля re. Используя его, вы указывается правила для множества возможных строк, которые вы хотите проверить; это множество может содержать английские фразы, или адреса электронной почты, или TeX команды, или все что угодно. С помощью РВ вы можете задавать вопросы, такие как «Соответствует ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с этой строкой?». Вы можете также использовать регулярные выражения, чтобы изменить строку или разбить ее на части различными способами.
Читать дальше →

Регулярные выражения, пособие для новичков. Часть 2

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

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

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

scrapy

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





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

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity