С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
User
Библиотека для работы с QIWI через SOAP
4 min
18KТак уж получилось, что мы решили у себя подключить прием платежей через QIWI. Сказано — сделано! Вот только в процессе разработки пришлось столкнуться с убогостью примеров кода от разработчиков киви:
Я конечно понимаю, пример исчерпывающий, но можно ведь было что-нибудь «поготовее» выложить? Поскольку система популярна, как и язык PHP — я решил сразу вынести библиотеку в публичный репозитарий, дабы упростить жизнь тем, кому только предстоит подключать эту систему. Так как в недавнем моем вопросе никто против поста не возражал — выкладываю ее тут.
Код сервера, принимающего запрос от киви
<?php
/**
* На этот скрипт приходят уведомления от QIWI Кошелька.
* SoapServer парсит входящий SOAP-запрос, извлекает значения тегов login, password, txn, status,
* помещает их в объект класса Param и вызывает функцию updateBill объекта класса TestServer.
*
* Логика обработки магазином уведомления должна быть в updateBill.
*/
$s = new SoapServer('IShopClientWS.wsdl', array('classmap' => array('tns:updateBill' => 'Param', 'tns:updateBillResponse' => 'Response')));
// $s = new SoapServer('IShopClientWS.wsdl');
$s->setClass('TestServer');
$s->handle();
class Response {
public $updateBillResult;
}
class Param {
public $login;
public $password;
public $txn;
public $status;
}
class TestServer {
function updateBill($param) {
// Выводим все принятые параметры в качестве примера и для отладки
$f = fopen('c:\\phpdump.txt', 'w');
fwrite($f, $param->login);
fwrite($f, ', ');
fwrite($f, $param->password);
fwrite($f, ', ');
fwrite($f, $param->txn);
fwrite($f, ', ');
fwrite($f, $param->status);
fclose($f);
// проверить password, login
// В зависимости от статуса счета $param->status меняем статус заказа в магазине
if ($param->status == 60) {
// заказ оплачен
// найти заказ по номеру счета ($param->txn), пометить как оплаченный
} else if ($param->status > 100) {
// заказ не оплачен (отменен пользователем, недостаточно средств на балансе и т.п.)
// найти заказ по номеру счета ($param->txn), пометить как неоплаченный
} else if ($param->status >= 50 && $param->status < 60) {
// счет в процессе проведения
} else {
// неизвестный статус заказа
}
// формируем ответ на уведомление
// если все операции по обновлению статуса заказа в магазине прошли успешно, отвечаем кодом 0
// $temp->updateBillResult = 0
// если произошли временные ошибки (например, недоступность БД), отвечаем ненулевым кодом
// в этом случае QIWI Кошелёк будет периодически посылать повторные уведомления пока не получит код 0
// или не пройдет 24 часа
$temp = new Response();
$temp->updateBillResult = 0;
return $temp;
}
}
?>
Я конечно понимаю, пример исчерпывающий, но можно ведь было что-нибудь «поготовее» выложить? Поскольку система популярна, как и язык PHP — я решил сразу вынести библиотеку в публичный репозитарий, дабы упростить жизнь тем, кому только предстоит подключать эту систему. Так как в недавнем моем вопросе никто против поста не возражал — выкладываю ее тут.
+14
+6
Индивидуально предпринимаешь? В кассу!
1 min
171KС 2013 года индивидуальные предприниматели должны любить Родину больше. В 2 раза.
Да еще МРОТ недавно увеличили с 4611 до 5205, на 13%.
Так что, за будущую пенсию теперь придется заплатить 32479,2 рублей.
Ссылка на текст закона.
2012
В 2012 году платеж в ПФР рассчитывается исходя из базовой ставки в один МРОТ, и равен 14386,32 рублей.2013
Со следующего года платеж будет считаться исходя уже из 2-х МРОТ.Да еще МРОТ недавно увеличили с 4611 до 5205, на 13%.
Так что, за будущую пенсию теперь придется заплатить 32479,2 рублей.
Ссылка на текст закона.
+123
Только 10% программистов способны написать двоичный поиск
2 min
84KДональд Кнут (известный тем, что его книги никто не читает) пишет, что хотя первый двоичный поиск был опубликован в 1946 году, первый двоичный поиск без багов был опубликован только в 1962.
Алгоритм двоичного поиска похож на то, как мы ищем слово в словаре. Открываем словарь посередине, смотрим в какой из половин будет нужное нам слово. Допустим, в первой. Открываем первую часть посередине, продолжаем половинить, пока не найдем нужное слово.
С массивами так: есть упорядоченный массив, берем число из середины массива, сравниваем с искомым. Если оно оказалось больше, значит искомое число в первой половине массива, если меньше — во второй. Продолжаем делить оставшуюся половину, когда находим нужное число возвращаем его индекс, если не находим возвращаем null.
Алгоритм двоичного поиска похож на то, как мы ищем слово в словаре. Открываем словарь посередине, смотрим в какой из половин будет нужное нам слово. Допустим, в первой. Открываем первую часть посередине, продолжаем половинить, пока не найдем нужное слово.
С массивами так: есть упорядоченный массив, берем число из середины массива, сравниваем с искомым. Если оно оказалось больше, значит искомое число в первой половине массива, если меньше — во второй. Продолжаем делить оставшуюся половину, когда находим нужное число возвращаем его индекс, если не находим возвращаем null.
+115
Hyper-V 3.0 против… Или суицидальный холивор
11 min
67KВсем доброго времени суток!
Сегодня тема для разговора будет уж (как я лично считаю) очень актуальной, если даже не сказать болезненной…
Да-да, я-таки решил провести функционально-экономическое сравнение 2-х ведущих платформ гипервизоров — Hyper-V 3.0 и VMware ESXi 5.0/5.1 между собой… Но потом я решил для полноты картины к сравнению добавить еще XenServer 6 от Citrix…
Я уже в предчувствии камнепада в свой огород, но все же будем держать оборону до конца — просьба занять соответствующую позицию, сторону, лагерь — кому как удобно — и под кат для начала боя…

Сегодня тема для разговора будет уж (как я лично считаю) очень актуальной, если даже не сказать болезненной…
Да-да, я-таки решил провести функционально-экономическое сравнение 2-х ведущих платформ гипервизоров — Hyper-V 3.0 и VMware ESXi 5.0/5.1 между собой… Но потом я решил для полноты картины к сравнению добавить еще XenServer 6 от Citrix…
Я уже в предчувствии камнепада в свой огород, но все же будем держать оборону до конца — просьба занять соответствующую позицию, сторону, лагерь — кому как удобно — и под кат для начала боя…

+1
Asterisk: обратный вызов с использованием AMI
3 min
58KAsterisk Manager Interface (AMI) – это программный интерфейс который позволяет внешним программам как управлять, так и контролировать систему Asterisk. AMI слушает соединения на TCP порту, по-умолчанию это 5038. Клиентская программа может соединяться с AMI, передавать команды в Asterisk, получать ответ о статусе выполнения команд.
В данном посте мы рассмотрим использование AMI на примере решения определенной задачи: настроить Asterisk на генерацию звонков по заданному url, в котором должны устанавливаться параметры звонка.
Первое что необходимо сделать, это включить AMI и завести пользователя с помощью которого клиентская программа будет аутентифицироваться:
/etc/asterisk/manager.conf
/etc/asterisk/manager.conf
Для применения изменений выполним reload:
Теперь нам потребуется создать внутренний номер который, собственно, и будем соединять с вызываемым абонентом:
/etc/asterisk/sip.conf
После создания внутреннего номера, потребуется перечитать конфигурацию Asterisk:
На этом настройка Asterisk завершена.
В данном посте мы рассмотрим использование AMI на примере решения определенной задачи: настроить Asterisk на генерацию звонков по заданному url, в котором должны устанавливаться параметры звонка.
Настройка Asterisk AMI
Первое что необходимо сделать, это включить AMI и завести пользователя с помощью которого клиентская программа будет аутентифицироваться:
/etc/asterisk/manager.conf
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
/etc/asterisk/manager.conf
[c2call]
secret=FrUyHn6FSaX
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/255.255.0.0
read=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
Для применения изменений выполним reload:
asterisk -rx "module reload manager"
Теперь нам потребуется создать внутренний номер который, собственно, и будем соединять с вызываемым абонентом:
/etc/asterisk/sip.conf
[3200]
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/255.255.0.0
secret=3200
dtmfmode=rfc2833
canreinvite=no
context=OUT_IN1
host=dynamic
type=friend
nat=yes
port=5060
qualify=yes
callcounter=yes
faxdetect=no
После создания внутреннего номера, потребуется перечитать конфигурацию Asterisk:
asterisk -rx "sip reload"
На этом настройка Asterisk завершена.
+5
Патч, позволяющий каждому коннекту иметь много user lock объектов
1 min
4.1KПривет,
Пока был в отпуске, написал патч для MySQL, позволяющий каждому коннекту владеть несколькими user lock объектами.
Патч доступен здесь:
https://code.launchpad.net/~kostja/percona-server/userlock
Это последний percona-server (5.5) + новые пользовательские локи.
Подробнее про патч написал в своём блоге.
Надеюсь, кому-то окажется полезен. Буду рад комментариям по этой фиче.
Пока был в отпуске, написал патч для MySQL, позволяющий каждому коннекту владеть несколькими user lock объектами.
Патч доступен здесь:
https://code.launchpad.net/~kostja/percona-server/userlock
Это последний percona-server (5.5) + новые пользовательские локи.
Подробнее про патч написал в своём блоге.
Надеюсь, кому-то окажется полезен. Буду рад комментариям по этой фиче.
+24
Модели TCP
2 min
34KСовсем недавно несколько раз за короткий промежуток времени в разговорах с коллегами натыкался на принципиальное непонимание того простого факта, что тюнинг параметров TCP — это не все, что можно сделать для оптимальной утилизации каналов. Что-что? Какие-такие другие модели TCP? Нафига? Все и так можно подогнать, поигравшись Maximum Window Size, таймингами и прочим. Это конечно все здорово и бывает крайне необходимо, но не все поддается тюнингу через proc или реестр. А именно и например? Сравнить это можно с ситуацией, как если бы мы имели некую формулу и добивались результатов «кручением» в ней неких переменных и коэффициентов. Но можно ли поменять саму формулу?
+31
Куда уходит рынок электронных платежных систем в России? Часть 1. Статистика рынка
11 min
43K
Поэтому я решил проверить на зуб ту сферу, с которой работаю бок о бок каждый день – электронную коммерцию, а также связанные с ней области: платежи и их процессинг.
+38
Странное поведение Task Manager в Windows Server 2012
4 min
44KКраткое содержание: история в картинках, как я «улучшал» Task Manager в Windows Server 2012
Началось всё с того, что я в тестовых целях (выяснить, есть ли принципиальное различие), поставил Windows Server 2012. Для тех, кто не знает, это такая Windows 8, только дороже. Ну, а ещё, от него можно оторвать GUI и поставить всякие разные роли.
Ну так вот, одна из наиболее приятных вещей в Windows 8 для меня — новый Таск Менеджер, и красивый и удобный. Какое же было моё удивление, когда я открыл его в WinServer 2012 и не увидел некоторых данных.
Вот пара картинок для понятности.
Преамбула
Началось всё с того, что я в тестовых целях (выяснить, есть ли принципиальное различие), поставил Windows Server 2012. Для тех, кто не знает, это такая Windows 8, только дороже. Ну, а ещё, от него можно оторвать GUI и поставить всякие разные роли.
Ну так вот, одна из наиболее приятных вещей в Windows 8 для меня — новый Таск Менеджер, и красивый и удобный. Какое же было моё удивление, когда я открыл его в WinServer 2012 и не увидел некоторых данных.
Вот пара картинок для понятности.
+61
Государственная итоговая аттестация в школах – не все как у ЕГЭ
8 min
26K
Напомним, что ГИА —
общее название для всех государственных (итоговых) аттестаций и проводится они в 4, 9 и 11 классах. После долгих изысканий ГИА-11 стал проводиться централизовано по всем регионам РФ, за что и получил свое гордое и отдельное название «единого экзамена». Сие «единообразие» еще не успело толком коснуться ГИА-4, а вот девятиклассники уже несколько лет участвуют в эксперименте по внедрению автоматизированных технологий проведения массовых экзаменов (взамен традиционной письменной формы проведения экзамена).
Итак, что мы имели в далеком 2008 году? Налаженную и в целом надежно функционирующую машину обработки результатов ЕГЭ, которая работает на базе программного комплекса ввода бланков ABBYY TestReader Network.
Чего мы хотели? Применить наши технологии повторно на ГИА-9
Казалось бы, чего проще? Но, уже ступив на этот путь, мы обнаружили несколько отличий между экзаменами, и это коренным образом определило дальнейшее развитие событий.
+33
Законы Мерфи в IT
6 min
48KTranslation
Не так давно мне довелось беседовать с разработчиком, не понимавшим, почему полностью резервированная связь между ЦОДами не может гарантировать 100% доступность сервиса.
+76
Настраиваем свой первый VDS сервер в роли веб-сервера
14 min
53KTutorial
Добрый день.
Так уж сложилось, что последнее время пришлось достаточно часто менять VDS провайдеров, и каждый раз приходится заново настраивать систему, поэтому решил написать краткий конспект по настройке. Все нижеописанное корректно работает на ОС Linux Ubuntu server 12.04 LTS. В этой статье я опишу как установить и произвести первичную настройку nginx+apache2, eaccelerator, memcached, fure-ftpd, php, mysql, phpmyadmin а также панели управления игровыми серверами — open game panel.
Так уж сложилось, что последнее время пришлось достаточно часто менять VDS провайдеров, и каждый раз приходится заново настраивать систему, поэтому решил написать краткий конспект по настройке. Все нижеописанное корректно работает на ОС Linux Ubuntu server 12.04 LTS. В этой статье я опишу как установить и произвести первичную настройку nginx+apache2, eaccelerator, memcached, fure-ftpd, php, mysql, phpmyadmin а также панели управления игровыми серверами — open game panel.
+35
Реализация резервирования сервера Asterisk
9 min
33KОдним из главных критериев при выборе новой АТС это надежность, отказоустойчивость и возможность резервирования системы. Маленьким и средним компаниям обычно хватает простого бэкапа с возможностью восстановиться в течение 24 часов, в то время как для больших компании это очень критично и не может быть и речи о простое телефонной связи. На это обычно компания тратят много ресурсов и денег. С появлением R800 и R850 от компании DIGIUM, asterisk становится действительно надежной системой с полноценным резервированием PSTN линий Е1/T1/BRI и FXO. Под катом подробности установки и настройки двух серверов Asterisk и R850.
+11
Борьба с DDoS глазами Highload Lab
15 min
73KO трендах и тенденциях в DDoS-атаках рассказывает создатель Highload Lab и сети фильтрации трафика QRATOR Александр Лямин. Интервью мы брали еще в начале года, но изменилось пока немногое

DDoS-атаки появились на заре интернета. Знакомство с ними для меня лично началось во время проекта IT Territory в 2003 году, когда игра только стартовала. Она имела достаточно агрессивную рекламную кампанию, в ответ на которую тут же прилетел DDoS от конкурентов. Скажу честно, я растерялся. Больше всего из-за того, что компания, которая оказывала хостинг-услуги, не просто не смогла, а не пожелала бороться с атакой. Ее представители сказали, что это не их проблема.

DDoS-атаки появились на заре интернета. Знакомство с ними для меня лично началось во время проекта IT Territory в 2003 году, когда игра только стартовала. Она имела достаточно агрессивную рекламную кампанию, в ответ на которую тут же прилетел DDoS от конкурентов. Скажу честно, я растерялся. Больше всего из-за того, что компания, которая оказывала хостинг-услуги, не просто не смогла, а не пожелала бороться с атакой. Ее представители сказали, что это не их проблема.
+145
Тариф с доступом только к MSK-IX, DataIX, W-IX или как разгрузить свои европейские сервера
7 min
14KУже давно многие наши клиенты или потенциальные клиенты спрашивали «а можно подключить сервер только с трафиком в MSK-IX?» или «а сколько будет стоить, если я буду трафик лить только на MSK-IX? Это будет дешевле?», но тогда такого тарифа у нас не было. Да и технической возможности не было. И вот, пару недель назад, мы наконец-то запустили тариф с доступом только к сетям MSK-IX, W-IX и DataIX. О технических деталях и преимуществах нового тарифа мы бы хотели рассказать в этой статье.
Кому интересны только факты, может почитать про преимущества, а потом решить для себя читать или нет остальную статью.
Кому интересны только факты, может почитать про преимущества, а потом решить для себя читать или нет остальную статью.
+5
Hello world на ESB Toolkit
6 min
4.4KЧто такое ESB Toolkit и чем он интересен
ESB Toolkit — это набор инструментов для BizTalk сервера, который позволяет упростить разработку интеграционных приложений.
Несмотря на то, что это мощный инструмент, позволяющий создавать серьезные продукты, первое, чем он подкупает – низкий «порог вхождения» в тему разработки для BizTalk. Многие задачи, сложно решаемые оркестровками, легко решаются с помощью ESB Toolkit.
Майкрософт создала прекрасную документацию, где приведены примеры решения множества типичных задач. Но на своем примере я понял, что эта документация становится полезной, когда появилось общее представление о работе с этим инструментом. Видимо, срабатывает условный рефлекс ленивого программиста – не читать документацию, пока не получилось хоть что-то работающее, или не была потрачена впустую куча времени.
Собственно основная цель данного поста – создать простое приложение, чтобы можно было «пощупать» ESB Toolkit.
+8
BizTalk Server 2009
8 min
5.2K
Здравствуйте уважаемые хабропользователи. В данном посте я хочу рассказать вам о продукте для автоматизации и управления бизнес процессами BizTalk Server 2009.
+25
Сбор и анализ статистики во free-to-play играх
9 min
50KЕсли вы разрабатываете free-to-play игры, то вам наверняка интересны вопросы, связанные со сбором и анализом статистики. Почему? Потому что статистика – это важная составляющая успеха free-to-play игр.
Цель моего цикла статей – структурировать разношерстную информацию по данному вопросу, пропустить ее через призму нашего опыта и выдать рекомендации по тому,
Цель моего цикла статей – структурировать разношерстную информацию по данному вопросу, пропустить ее через призму нашего опыта и выдать рекомендации по тому,
- какие показатели стоит отслеживать в играх;
- какие инструменты анализа могут помочь в работе со статистикой;
- какие сервисы сбора и анализа статистики существуют с их достоинствами и недостатками.
+10
Information
- Rating
- Does not participate
- Registered
- Activity