Как стать автором
Обновить
15
0
Сашк @azxc

пользователь kdb+

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

Препарируем OpenVPN. Часть 1. Статические ключи

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

Однажды столкнулся с непонятной ошибкой в установлении OpenVPN соединения и ощутил нехватку понимания того, как он устроен внутри. Под катом рассказ о том, как устроена криптографическая часть протокола, как это всё выглядит в реальности (т.е. в Wireshark) и как заглянуть внутрь VPN, т.е. расшифровать трафик руками (при наличии ключей, конечно ;-) ). В этой части рассмотрим только режим со статическими ключами.


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

Mini-Desktop своими руками. 3.0

Время на прочтение4 мин
Количество просмотров52K
image

Прошло чуть больше года с момента публикации моей второй статьи о дизайне корпуса персонального компьютера в форм-факторе UCFF PC. За это время мне удалось запустить первую партию в производство и начать онлайн продажи не только корпусов, но и конфигураций на его основе. Особенно радостно, что проект по большей части состоялся благодаря поддержке и интересу со стороны читателей Хабрахабр сообщества.
Читать дальше →
Всего голосов 52: ↑51 и ↓1+50
Комментарии145

PyTest

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

Предисловие


По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

Юнит-тестирование Python


Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.

Вводная по необходимым знаниям


На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

Преимущества и недостатки PyTest


1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

Код
import unittest

class TestUtilDate(unittest.TestCase):
    def setUp(self):
        #init_something()
        pass
        
    def tearDown(self):
        #teardown_something()
        pass
        
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        
    def test_failed_upper(self):
        self.assertEqual('foo'.upper(), 'FOo')
        
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
    unittest.TextTestRunner(verbosity=2).run(suite)


То же самое в PyTest:

Код
import pytest

def setup_module(module):
    #init_something()
    pass

def teardown_module(module):
    #teardown_something()
    pass

def test_upper():
    assert 'foo'.upper() == 'FOO'
    
def test_isupper():
    assert 'FOO'.isupper()
    
def test_failed_upper():
    assert 'foo'.upper() == 'FOo'


2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

image

3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

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

8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

Про недостатки, пусть их и не много, могу сказать следующее:

1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+20
Комментарии11

Быль о типографе

Время на прочтение2 мин
Количество просмотров15K
Было время, когда каждый веб-разработчик писал свой типограф или думал о нём. Я не стал исключением и написал типограф на PHP. Но как сделать типограф без нормальной поддержки UTF-8, в то время я не представлял, в итоге забросил идею.

Прошло время, но идея создания типографа не оставляла, и я решил написать его уже на JavaScript.
Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии12

Как определить поддельную Micro SD флеш карту

Время на прочтение8 мин
Количество просмотров176K
Micro SD подделки

Предисловие


В последнее время Micro SD карты становятся всё более популярны. По этому поводу появляется всё больше продавцов, готовые на этой почве поживиться обманом и разными уловками на эту тему.
Понадобилась мне как-то Micro SD карта ёмкостью 64ГБ для небольшого проекта на Raspberry Pi. Но когда я стал искать что-то подходящее на eBay, то с удивление обнаружил, что подавляющее число продавцов выставляют откровенные подделки. Даже на Амазоне ситуация была не очень привлекательна в этом плане. На картинке выше все карты являются подделками.

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

Обещаю слайды.
Много слайдов. Трафик. Без SMS.
Всего голосов 50: ↑49 и ↓1+48
Комментарии130

Загрузочный сервер — как загрузочная флешка, только сервер и по сети

Время на прочтение12 мин
Количество просмотров446K
Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!

Представьте, вы выбрали в BIOS загрузку по сети и можете установить ОС/вылечить компьютер от вирусов/реанимировать диски/протестировать ОЗУ/etc с PXE Boot сервера, ведь это куда удобнее, нежели бегать с флешкой от машины к машине.
А в случае большого компьютерного парка, такой инструмент и вовсе незаменим.

Вот такое меню встречает нашу команду инженеров при загрузке с PXE



Под катом вас ждет описание всех настроек, а так же небольшой сюрприз.
Поехали!
Всего голосов 141: ↑138 и ↓3+135
Комментарии82

Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день

Время на прочтение9 мин
Количество просмотров95K
Когда вы приобретаете сервер VPS с 256MB или 512MB оперативной памяти на борту и лишь часть мощности процессора, то использовать для таких сервисов как MySQL/PHP/Apache настройки по умолчанию является очень плохой идеей. В настоящее время у меня запущено 3 сайта на самом дешевом тарифном плане с 512MB RAM/1 CPU. Не уверен полностью, но посещаемость составляет порядка 5-10 тысяч посетителей в день. Далее я хочу поделиться инструкцией как оптимизировать LAMP используя всего лишь 512 MB и при этом не уходя в swap. Обычно при такой настройки используется 256 – 378Mb памяти и все работает довольно быстро.

Определяем доступную память и активность swap.

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

$ free -m

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

$ ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less


Настраиваем LAMP сервер для потребления малого количества оперативной памяти. Останавливаем, отключаем ненужные сервисы

Первый и очевидный вопрос, который необходимо задать — это «какие сервисы мне не нужны в использовании?». Недавно, я обнаружил очень удобную утилиту для управления сервисами. Она называется "sysv-rc-conf" и управляет сервисами при помощи псевдографики и флажками. Выгдялит вот так:



Здесь представлен список сервисов, которые я изменил.

  • Postfix. Этот сервис позволяет отправлять и получать почтовые email сообщения для домена. Я использую для этих целей Google Apps для отправки почты и mailchimp для новостных подписчиков. Таким образом я остановил и отключил этот сервис.
  • Bind9. Он нужен для управления DNS записями Вашего домена. Его можно отключить, так как все DNS записи хранятся у хостера.
  • SSHD. Имеются и другие реализации, которые используют гораздо меньше памяти, но они не поддерживают sftp, поэтому данный сервис я оставил без изменений.


Не запускайте X-сервер, выключите все ненужные сервисы и настройте Apache, MySQL, PHP только с базовой необходимой функциональностью.
Читать дальше →
Всего голосов 131: ↑81 и ↓50+31
Комментарии85

Контроль исправности сервера под управлением гипервизора VMware vSphere ESXi v5

Время на прочтение2 мин
Количество просмотров62K
Встала необходимость организовать мониторинг исправной работы контроллеров семейства LSI MegaRAID на серверах, работающих под управлением гипервизора VMware vSphere ESXi v5.5. И соответственно автоматически получать уведомления при наличии какого-либо сбоя, например отказе одного из HDD. В процессе проработки оказалось, что найденное решение не ограничивается только хранилищами данных гипервизора.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии15

Секрет высокой конверсии для интернет-магазинов

Время на прочтение4 мин
Количество просмотров14K
Цель каждого интернет-магазина – заработать больше денег. Это в целом и понятно, для этого и создается любой коммерческий проект. А для того, чтобы зарабатывать больше денег, необходимо повышать продажи. Соответственно, в рассматриваемой сфере интернет-магазинов повышение продаж сводится либо к увеличению посещаемости сайта (как правило, путем увеличения бюджетов на рекламу), либо к повышению эффективности уже проводимой рекламы, то есть в рамках существующего бюджета. Результатом повышения эффективности рекламы станет увеличение коэффициента конверсии сайта при существующем уровне посещаемости. Тут тоже все понятно, можно сказать, что с основами уже разобрались! :)
Читать дальше →
Всего голосов 26: ↑11 и ↓15-4
Комментарии38

Выключение внутреннего экрана ноутбука в Lion

Время на прочтение1 мин
Количество просмотров7.4K
В Mac OS X Lion компания Apple изменила поведение макбуков при закрытии крышки с подключенным внешним монитором, это было специальное изменение, о чём можно судить из документации: support.apple.com/kb/ht3131

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

На днях на форумах Apple наконец-то появилось решение, возвращающее поведение как в Snow Leopard.
Читать дальше →
Всего голосов 41: ↑35 и ↓6+29
Комментарии28

Так ли приватен HTTPS?

Время на прочтение3 мин
Количество просмотров67K
Недавно в одном из прочитанных блогов увидел интересное утверждение (в моем вольном переводе):
Думаете, когда вы работаете с онлайн-банкингом из офиса, у вас сквозное безопасное соединение? Подумайте еще разок.

Достаточно, чтобы заинтересовать и немного покопать. «И шо ви таки думаете? (с)» В «насквозь безопасное» HTTPS соединение можно врезать как минимум двух посредников (Man In The Middle). Правда, оба должны быть Trusted (TMITM), так что не надо сильно паниковать. Пока что.
Подробности
Всего голосов 86: ↑73 и ↓13+60
Комментарии123

Ускоряем Nginx за 5 минут

Время на прочтение5 мин
Количество просмотров281K
image
Попытайтесь повторить это сами

Как правило, настроенный должным образом сервер Nginx на Linux, может обрабатывать 500,000 — 600,000 запросов в секунду. Но этот показатель можно весьма ощутимо увеличить. Хотел бы обратить внимание на тот факт, что настройки описанные ниже, применялись в тестовой среде и, возможно, для ваших боевых серверов они не подойдут.

Минутка банальности.

yum -y install nginx

На всякий пожарный, создадим бэкап исходного конфига.

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
vim /etc/nginx/nginx.conf

А теперь можно и похимичить!
Бдыжь-бдыжь
Всего голосов 203: ↑138 и ↓65+73
Комментарии127

Строим свой Gmail с куртизанками и преферансом

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

Вместо предисловия


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

Итак, в этой статье я расскажу о том, как я поднимал и настраивал на своем сервере почту, календарь, контакты, RSS-аггрегатор и, в качестве бонуса, хранилище файлов.

Читать дальше →
Всего голосов 155: ↑135 и ↓20+115
Комментарии139

VIM + screen. Организация удаленной среды web-разработки

Время на прочтение6 мин
Количество просмотров21K
Миллион статей написано об организации рабочего процесса, редакторах кода, удобстве и стабильности работы. Я, не претендуя на «самый расчудесный способ», хочу рассказать, как организована среда web-разработки у нескольких человек из нашей команды. Сразу оговорюсь, если вы используете только локальные GUI-шные редакторы кода, Notepad++, Eclipse и т.п., то эта статья не для вас. Мы очень много работаем в консоли, и поэтому, в результате многолетнего естественного отбора, многие пришли к VIM, а консоль является практически отдельным табом в среде разработки, т.к. в процессе работы надо смотреть логи, писать запросы к базе, перезапускать сервисы и т.п. Поэтому, я хочу поделиться конкретным практическим рецептом организации среды web-разработки для программиста или админа, который много времени работает в стандартной удаленной консоли.
Читать дальше →
Всего голосов 33: ↑30 и ↓3+27
Комментарии31

Ruby: cheatsheet для изучения

Время на прочтение14 мин
Количество просмотров59K
Это — статья-roadmap-cheatsheet для изучающих Ruby. Вместо того, чтобы рассказывать очередной how-to я постараюсь расписать все те вещи, которые, на мой взгляд, можно изложить кратко и емко, с упором на то, что программисту пришедшему с других языков и платформ может показаться не очевидным, антипоисковым и просто затратным по времени на изучение без подсказок — на остальное просто дам ссылки. Не смотря на то, что в природе существует множество туториалов/кастов/книг/чего угодно по чему угодно — именно такого формата мне самому всегда не хватает. И по сути, это те вещи, которые чаще всего рассказываю при вопросах «а как оно вообще?», «с чего начать?», «а как делается такая вот штука?», «а какой gem лучше?». Кстати, пока работал над этой статьей на Хабре появилась похожая про Python — видимо, идея витает в воздухе.
Читать дальше →
Всего голосов 49: ↑49 и ↓0+49
Комментарии20

Я построю свой почтовый сервер с Postfix и Dovecot

Время на прочтение20 мин
Количество просмотров307K
image

В рамках программы по унификации установленных серверных систем встала задача по переделке почтового сервера. Вдумчивое изучение мануалов и руководств показало довольно любопытный факт – нигде не было найдено однозначно достоверного руководства или подобия Best Practice по развёртыванию почтовика.

Мануал пошаговый, основывается на внутренней документации компании и затрагивает совершенно очевидные вопросы. Гуру могут не тратить время, ноу-хау здесь нет – руководство является сборной солянкой и публикуется только потому, что все найденные руководства по развёртыванию почтовика напоминали картинку о том, как рисовать сову.
Очень много текста
Всего голосов 78: ↑74 и ↓4+70
Комментарии65

Установка и настройка TeamSpeak 3 сервера на VDS

Время на прочтение3 мин
Количество просмотров167K
В данной статье речь пойдет об установке сервера TeamSpeak 3, эта программа предназначена для использования голосовой связи различными сообществами. В моем примере будет использоваться Linux Debian 6.0 x64, для ТС3 сервера также оптимален VDS с предустановленной Ubuntu, разрядность значения не имеет, принцип действия одинаковый.
Читать дальше →
Всего голосов 19: ↑10 и ↓9+1
Комментарии17

Подробная анатомия простого плагина для XBMC

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

Предисловие


Похожая статья на Хабре уже публиковалась, но в ней основное внимание было уделено парсингу сайта с видео — так сказать, бизнес-логике плагина, а вопросы взаимодействия с XBMC затронуты вскользь. Я же хочу рассказать о том, что превращает скрипт на языке Python (далее — Питон) в плагин XBMC.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии10

Установка FreeBSD 9.1 с шифрованием корневого раздела

Время на прочтение5 мин
Количество просмотров16K
«Если у вас паранойя, это ещё не значит, что за вами не следят» © Народная мудрость

Прочитав пост Как я внедрял первое правило ведения бизнеса в России, у меня возник вот такой вопрос:

Что делать если компания разрабатывает программный продукт (SaaS), и в процессе разработки необходимо использовать локальные develop и stage сервера? Что будет если “злоумышленник” получит физический доступ к дискам и как не отдать ему все исходные коды проектов? А если мы раскатываем код на боевую через скрипты, Chef или Puppet, то отдаём ещё и все доступы к боевым площадкам.

Ответ очевиден: шифрование всего ценного. Но как мы все знаем, вариантов шифрования масса. Начиная от шифрования отдельных файлов и создания криптоконтейнеров (например TrueCrypt) и заканчивая полным шифрованием дисков.

Вы можете сказать «так ты же сам нарушаешь правило и держишь свои локальные сервера в офисе?». И я соглашусь, но с оговоркой. Для комфортной разработки, чем ближе исходники, тем лучше, а учитывая скорость интернета для юридических лиц в регионах, которую можно получить за разумные деньги, держать develop и stage сервера где-то далеко приведёт к мучительной боли. Здесь я говорю про схему, при которой на машинах разработчиков нет исходных кодов. Весь код лежит на сетевой шаре develop сервера. Да и в целом пинг наружу и пинг в локальном гигабите немножечко разные вещи.

Итак, приступим к шифрованию.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии15

Бесшовный роуминг Wi-Fi

Время на прочтение12 мин
Количество просмотров191K
Начальник позвал в переговорку, сказал захватить с собой ноутбук. Вроде бы ничего — и там, и на рабочем месте у нас офисная беспроводная сеть. Приходим — а загрузка поставленного на скачивание большого файла оборвалась, SSH-сессии закрылись, заботливо набранная веб-форма при отправке почему-то сбросилась. Знакомо?
Сегодня мы поговорим о бесшовном роуминге устройств в беспроводных сетях Wi-Fi.

Как это работает
Всего голосов 41: ↑40 и ↓1+39
Комментарии47

Информация

В рейтинге
Не участвует
Откуда
New York, New York, США
Зарегистрирован
Активность