Search
Write a publication
Pull to refresh
1
0
jj_killer @jj_killer

User

Send message

Структуры данных в memcached/MemcacheDB. Часть 1

Reading time8 min
Views5.1K
Достаточно часто нам приходится хранить данные в memcached или MemcacheDB. Это могут быть относительно простые данные, например, закэшированные выборки из базы данных, а иногда необходимо хранить и обрабатывать более сложные структуры данных, которые обновляются одновременно из нескольких процессов, обеспечивать быстрое чтение данных и т.п. Реализация таких структур данных уже не укладывается в комбинацию команд memcached get/set. В данной статье будут описаны способы хранения некоторых структур данных в memcached с примерами кода и описанием основных идей.

Memcached и MemcacheDB в данной статье рассматриваются вместе, потому что имеют общий интерфейс доступа и логика работы большей части структур данных будет одинаковой, далее будем называть их просто «memcached». Зачем нам нужно хранить структуры данных в memcached? Чаще всего для распределенного доступа к данным из разных процессов, с разных серверов и т.п. А иногда для решения задачи хранения данных достаточно интерфейса, предоставляемого MemcacheDB, и необходимость в использовании СУБД отпадает.

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

Атаки на беспроводные сети. Часть 1

Reading time5 min
Views71K
В прошлой статье о беспроводных сетях мы рассмотрели первый этап — сбор информации, или wardriving. Сейчас же, продемонстрируем несколько способов получения несанкционированного доступа к беспроводным сетям, а также рекомендации по защите от них.

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

Тривиальные задачи по вёрстке

Reading time4 min
Views60K
image

Начинаю вести серию статей Это статья про вёрстку html css js, начинаю с самого простого, потом планирую описать более сложные вещи и всякие тонкости и этим видимо так и закончил

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

Проверка орфографии с помощью Google

Reading time2 min
Views15K
Иногда в проекте требуется проверить данные на предмет орфографических ошибок, не полагаясь на познания пользователя по части языков. Тут нам сможет помочь компания Google, с таким их сервисом, как проверка орфографии, используемым в Google Toolbar. Но, к сожалению, Google не предоставляет открытого API для работы с ним.

Итак, краткое описание:
Для того, чтобы проверить текст нам нужно отослать его в POST на https://google.com/tbproxy/spell?lang=ru, где для смены языка следует заменить значение параметра lang на соответствующий по ISO 3166-1 alpha-2. Текст оформляется в XML вида:
<?xml version="1.0" encoding="UTF-8" ?><br/>
<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"><br/>
 <text>Текст для проверки</text><br/>
</spellrequest>
ignoredups — подсветка повторов
ignoredigits — считать цифры ошибками
ignoreallcaps — не проверять слова написанные капсом (подсказал pointum)

Если всё успешно, мы получаем ответ вида
<?xml version="1.0" encoding="UTF-8"?><br><spellresult error="0" clipped="0" charschecked="272"><br> <c o="27" l="13" s="0"></c><br> <c o="73" l="11" s="1">орфографии и орфографии</c><br> <c o="190" l="11" s="1">пользоваться</c><br> <c o="226" l="13" s="0">пред оставляет пред-оставляет</c><br></spellresult>
Атрибуты тега spellresult:
error — произошла ли ошибка
charschecked — количество проверенных символов

В нем идет перечисление допущенных ошибок (теги c), их параметры:
o — начало исходного слова в тексте
l — длина этого слова
s — точность результата

В самом теге c содержатся предполагаемые варианты написания слов, разделенные символом \t.

P.S. Когда этот текст уже был написан, случайно наткнулся на статью в блоге Paul Welter, которая, в принципе, описывает тоже самое…


UPD: Пользователь wayly написал на PHP класс для проверки текста с помощью этого сервиса, скачать можно по ссылке proxysoft.ru/files/spellchecker.zip (зеркало).

UPD2: mezhevikin подсказал ajax-решение с использованием этого сервиса — orangoo.com/labs/?page_id=3

UPD3: Список поддерживаемых языков

_________
Текст подготовлен в ХабраРедакторе
Код подсвечен в Source Code Highlighter

Xen server своими руками. Часть первая

Reading time2 min
Views63K
В комментариях к топику Системное администрирование. Начало. прочитал, что сообществу были бы интересны статьи о виртуализации. Довольно давно у меня на жёстком диске лежит описание процесса установки Xen hypervisor и гостевой ОС на сервер под управлением Ubuntu/Debian.

Итак, приступим...

Познаём Java. Третья чашка: примитивные типы, и объекты. Базовые конструкции

Reading time7 min
Views236K

Типа реальные типы


Думаю, после краткого экскурса в возможности Java и прочитывания пары десятков строк кода примеров, вам захотелось узнать, чем должен уметь оперировать каждый Java-программист. Что ж, давайте поговорим о примитивных типах, классах (в том числе нескольких основных), сравнении, передаче параметров и простых структурах в Java.
Поехали!

Осваиваем Python. Унция ноль. Введение.

Reading time4 min
Views127K

Предыстория



Присоединяюсь к MaxElc, DarwinTenk и Devgru :) Начинаю цикл статей посвященных Python. Сам я имею некоторый опыт обращения с PHP и Java. Но каждый раз, при относительном освоении какого-то инструмента — оставалось определённое неудовлетворение им, связанное с чем-то конкретным, и поиски продолжались. На сегодняшний день наиболее близко к идеалу в моих глазах стоит Python. Идеал недостижим — это понятно, посему и у Python есть недостатки. Прежде всего — это скорость выполнения, однако, эта проблема решаема несколькими путями и об этом мы обязательно поговорим чуть позднее.
Сам я начал осваивать Python буквально недавно. Начиная этот цикл статей — я преследую несколько целей. Во-первых, это дополнительная само мотивация + интерактивность, во-вторых, опыт. В-третьих, блуждая по просторам рунета — вижу, что Python куда менее популярен, чем в мире. Ситуацию надо исправлять :)
В соответствии с идеологией Python, а именно с тем, что одни из главных его козырей — это быстрота в освоении и скорость разработки, мы достаточно быстро, практически тезисно пронесёмся по основам синтаксиса и построения программ и перейдём к основной цели данного цикла — освоение django.
Итак, мы начинаем.
Читать дальше →

Познаём Java. Первая чашка

Reading time3 min
Views22K

Что да как


Я решил поддержать начинание MaxElc и DarwinTenk, и начать потихоньку рассказывать про Java. Текст буду подавать «чашками» потому, что один из символов Java — чашка кофе. Большую часть я буду писать сам, изредка поглядывая в википедию и на официальный сайт языка — java.sun.com (раздел /docs).
Далее в тексте стоит разделять понятия «Java как язык» и «Java как платформа».
Читать дальше →

Prolog, введение

Reading time13 min
Views103K
Довольно оживленное обсуждение предыдущей стати (http://habrahabr.ru/blogs/programming/47416/) показало, что тема пролога оказалась интересна сообществу.
Чтобы заинтересовать еще более читателя и вместе с тем облегчить ему начало работы с этим языком, я решил написать немного начальных данных о прологе.

Кратко основные особенности.
Читать дальше →

Объекты и методы

Reading time3 min
Views5.7K
Ruby— Объектно- ориентированный язык.


Как и в других Объектно— ориентированных языках, всё, с чем работает программа является объектом.
Каждый объект является экземпляром некоторого класса и функциональность объекта определяется именно классом.
Все объекты, которые являются экземплярами одного класса, могут выполнять одни и теже действия называемые методами.
Для того, чтобы применить метод к объекту, достаточно, после указания объекта поставить «.» (точку), а затем указать метод

Продолжим!
Читать дальше →

Массивы в Ruby

Reading time1 min
Views11K
Работа с массивами — одна из сильных сторон Руби. Они автоматически изменяют размер, могут содержать любые элементы и язык предоставляет мощные средства для их обработки.



Массив в Ruby— это экземпляр класса Array

Чтобы создать пустой массив в Ruby можно воспользоваться одной из двух следующих конструкций:
a = [ ]
b = Array.new


Если требуется создать пустой массив определенного размера, то следует указать его размер в качестве аргумента метода new.
myArray = Array.new(10)


Можно также указать, объекты каких классов будут храниться в данном массиве:
habraArray = Array.new(3, Habr)
p habraArray #[Habr, Habr, Habr]


Дальше интереснее!
Читать дальше →

Пишем свой первый скрипт для Greasemonkey

Reading time3 min
Views42K
Greasemonkey — это расширение для Mozilla Firefox, и некоторых других браузеров на основе движка Gecko, которое позволяет пользователю добавлять JavaScript на любую страницу. Сам файл с JS должен быть оформлен соответствующим образом.

Для чего же пользователю, к примеру мне, или вам, нужно добавлять JS на страницы любых сайтов? Это чудесная возможность управлять внешним видом страницы и её функционалом. Естественно есть ограничения, которые накладывает сам язык JS. Однако и возможностей у него очень и очень много.

Как правило, большинство скриптов для Greasemonkey тесно «дружат» с CSS. Так что получается, этот пост несколько пересекается с темой User-CSS — однако я в название топика не стал выносить этот аспект.

Давайте же напишем пару очень простых скриптов для Greasemonkey, ну а жертвой для наших опытов возьмём, само собой, habrahabr.
Читать дальше →

Укрощаем GreaseMonkey

Reading time5 min
Views22K
За последние пару недель мне пришлось плотно поработать с системой управления пользовательскими скриптами для продуктов Mozilla — GreaseMonkey. И раз уж я сам себя назначил администратором одноименного блога, значит написать введение в вопрос — моя святая обязанность.

Dance for pappa, c`mon little monkey!

Наблюдаем за пользователем

Reading time1 min
Views1.2K
image Сервис userfly даёт возможность визуально посмотреть, что и как делал пользователь на вашей странице.
Пока все это в разработке и видимо еще много чего нужно сделать, но основу уже можно попробывать

После регистрации userfly генерирует небольшой Яваскрипт, который нужно вставить в header страниц. После этого все передвижения пользователей будут записыватся, а вы вскоре сможете посмотреть, как небольшой видеоролик, что-же делают посетители на вашей странице, что ищут, какие функции используют чаще и т.д.
Читать дальше →

UPD. Демон конвертации видео в FLV.

Reading time1 min
Views2.3K
Это продолжение, а точнее развитие, статьи написанной ранее.

В результате небольшого рефакторинга, получилось повысить производительность, и упростить код. Результатом стало изменение перечня используемого софта.
Читать дальше →

Руки прочь от автозапуска!

Reading time2 min
Views3.4K
Не правда ли, удалять с любимой флешки кучу вредоносных элементов, после каждого ее подключения к чужому компьютеру, несколько обременительно? А сколько нервных клеток уничтожают эти элементы? Моих — немеряно!

Все известные мне способы борьбы с подобного рода инцидентами (как то: пересесть на Линукс, отключить автозапуск, не тыкать флешкой куда попало и т.д.) не приемлимы для меня. Потому и пришлось выдумывать свой.

Наверняка кому-то этот метод покажется неэффективным, кому-то — неудобным. А кто-то вздохнет с облегчением или даже поможет менее опытным друзьям.

Должен отметить, что, на защищенной таким образом флешке, будут затруднены операции над элементами корневой папки. Именно на этом основан метод.

Суть: запретить кому бы то ни было запись/изменение корневого каталога.
Результат: вся нечисть, попавшая на флешку, ничем не сможет Вам помешать.

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

Руководство пользователя на русском в формате chm

Reading time1 min
Views5.8K
Для тех у кого интернет не всегда под рукой, да и просто для любителей локальных мануалов, я скомпилировал руководство пользователя по CodeIgniter (code-igniter.ru) в отдельный файл chm.

Скачать его можно отсюда: www.iforyou.ru

UPD 1: Добавлена страничка с классом Image Manipulation.
UPD 2: Добавлена страничка с классом Typography.
UPD 3: Удалено выпадающее содержание (то что на JavaScript), панель справа теперь в юникоде.
UPD 4: Страница с содержанием теперь в две колонки.
UPD 5: Исправлена ошибка с кодом в одну линию. Теперь код как в оригинале.

Работа с буфером обмена в Linux: теория и практика

Reading time5 min
Views124K

Совсем немного теории


Copy and PasteИсторически сложилось так, что в X Window System (X11, — оконная система для Linux, UNIX) существует два буфера обмена.

Один из них (clipboard) похож на буфер обмена в Windows — при нажатии на Ctrl+Insert или Ctrl+C выделенный фрагмент (текст, картинка, файл) копируется в буфер обмена, а при нажатии на Shift+Insert (или Ctrl+V) — вставляется из него. Следует заметить, что во многих программах эти сочетания зарезервированы для иных целей и приходится пользоваться другими — например, в терминале сочетание Ctrl+C используется для завершения процесса, а для работы с буфером обмена используются сочетания Ctrl+Shift+C для копирования и Ctrl+Shift+V для вставки.

Второй буфер (primary) является специфичным для оконной системы X11. Выделенный текст незамедлительно попадает в буфер primary, и для того, чтобы вставить скопированный текст, достаточно лишь нажать среднюю кнопку мышки (колёсико). У кого в наличии не имеется трёхкнопочной мышки, а так же владельцам ноутбуков с тачпадами следует одновременно нажать левую и правую кнопки мышки для вставки текста.

Перейти к практике...

Большие бесплатные фотографии теперь можно использовать в корыстных целях

Reading time1 min
Views1.7K
Бесплатный фотосток, с картинками большого разрешения, которые безнаказанно и абсолютно легально можно использовать в коммерческих целях, это очень круто, согласитесь.

Мы с моей командой, наконец, запустили такую штуку — photl.com
Все в стадии бэта, ну вы в курсе (;

Спасибо фотографам за гигабайты фотографий, технологу за верстку и скрипты, толпе переводчиков, заказчикам за мотивацию пряником, контент-менеджеру за иероглифы, системному администратору, флэшеру, суперпрограммисту ewgenij и немножко мне за координацию проекта и дизайн.

UPD: Хабраэффект. На некоторое время закрываемся, сорри. Кому не терпится, можно посмотреть скриншоты тут

UPD1: Идет доработка правовой информации. Будут учтены некоторые комменты. Скоро откроемся.

UPD2: На photl.com сделали форму для почты для тех, кто хочет узнать, как только откроемся.

UPD3: Снова открыт для всех!

Information

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