Яндекс.Метрика

    Песочница

    Песочница

    Cистемы электронного голосования КОИБ и ГЭК

    Центризбирком завершает 1 ноября приемку опытной партии новых электронных урн для голосования. Комплексы электронного голосования будут установлены на избирательных участках в восьми субъектах Российской Федерации

    т.е 10 % участков по всей стране будут оборудованы электронными комплексами обработки избирательных бюллетеней — КОИБами, таких комплексов будет около 20 тысяч. Один КОИБ со сканерами и принтером обходится бюджету в 110 тыс. руб

    Песочница

    Русский рок в Android Market

    Иногда в Маркете можно встретить довольно неожиданные вещи, например, сингл русской рок-группы. И, хотя появление подобных приложений в целом является хорошим знаком, реализация, о которой данный топик, весьма далека от идеала.

    Рассмотрим детально данное чудо программной инженерии (сингл «Оптимист» группы «Би-2») и задумаемся, готовы ли мы покупать музыку, распространяемую подобным образом.

    Песочница

    Самодельное автономное USB-ЗУ для гаджетов

    Не так давно, около полутора лет назад, друг-радиоэлектрик подарил мне паяльник и все необходимые к нему составляющие мне на день рождения. До этого момента мне хотелось что-то сделать самому, но ни возможности, ни инструментов для этого не было.
    После дарения, паяльник пролежал около полугода без дела. Но вот наступило лето 2011 и появилось время сделать что-нибудь свое. Так родилось самодельное автономное USB-ЗУ для гаджетов.

    Подробности под катом (осторожно, много картинок).

    Песочница

    Mail.Ru не любит Yandex и Google или интересная особенность работы Mail.ru Агента

    Хочу поведать Вам про одну интересную особенность работы Mail.ruАгента.


    Уже ни для кого не секрет, что, зачастую устанавливая тот или иной бесплатный (и даже платный) программный продукт, кроме именно самого исконного продукта обязательно будут навязаны другие. Так же поступает и Mail.Ru. Устанавливая Mail.ru Агент, вам заодно поставят тройку не нужных служб, а именно Спутник@Mail.ru, Guard@Mail.ru, AlterGeo Magic Scanner (в последней версии Mail.ru Агента появилась возможность отказаться от установки этих служб).

    Песочница

    Автоматизированное резервное копирование рабочих станций Windows при помощи rsync и vshadow — Часть 1

    Если у вас возникло желание поддерживать рабочие станиции в максимально «защищённом» состоянии, а так же насколько возможно «автоматизировать» этот процесс, то этот пост для вас.

    Будет использоваться:

    Немного batch файла
    Немного Linux сервера
    Немного Windows Server 2008 R2 и Групповых политик

    Идея в следующем — незаметно от самого юзера, чтобы не нарушать его работу, делать еженедельное копирование его профиля, дабы исключить потерю данных, и сохранять его на сервере в максимально защищённом виде.

    Для этого начнём с клиентской части. Мы используем shadow volume create — expand, дабы исключить проблему нечитания открытых пользователем файлов, таких как Outlook pst, или документов. Нам понадобится набор от Microsoft, который содержит vshadow — это Volume Shadow Copy Service SDK 7.2, который можно бесплатно скачать с серверов Microsoft, http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23490.Нам понадобятся vshadow.exe и vshadow.pdb файлы из этого SDK. Внимание — они разные для 64-битных, и 32-битных систем.

    После инсталляции их можно будет найти тут:

    64-bit — %PROGRAMFILES%\Microsoft\VSSSDK72\TestApps\vshadow\bin\obj-chk\amd64
    32-bit — %PROGRAMFILES%\Microsoft\VSSSDK72\TestApps\vshadow\bin\release-xp

    Так же нам понадобится набор файлов из cwrsync под Windows — http://sourceforge.net/projects/sereds/files/cwRsync/4.2.0/cwRsync_4.2.0_Installer.zip/download

    После инсталляции их можно будет найти тут:

    %PROGRAMFILES%\cwRsync\bin

    Складываем все файлы в одну папку, назовём её для удобства «Backup», и начинаем создавать файл, который будет запускать эту «машину смерти» — по факту, это простой batch файл, который будет отрабатывать все действия. Назовём его для удобства «backup.cmd»

    Пишем в файл:

    (неведома магия)

    setlocal
    if NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACK
    set SOURCE_VOLUME=C:
    set DESTINATION_VOLUME=O:
    set CALLBACK_SCRIPT=%~dpnx0
    set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd
    %~dp0\vshadow.exe -nw -p -script=%TEMP_GENERATED_SCRIPT% -exec=%CALLBACK_SCRIPT% %SOURCE_VOLUME%
    del /f %TEMP_GENERATED_SCRIPT%
    goto :EOF
    :IS_CALLBACK
    setlocal
    call %TEMP_GENERATED_SCRIPT%
    %~dp0\vshadow.exe -el=%SHADOW_ID_1%,%DESTINATION_VOLUME%


    Эта часть «макаронного кода» делает shadow volume copy с C: и подключает её на O:, который мы и будем использовать для копирования, а потом тем же скриптом уберём. Теперь часть, которая отвечает за действия rsync:

    (неведома магия)

    setlocal
    SET CWRSYNCHOME=C:\Backup\ (где папка с файлами rsync и vshadow)
    SET CWOLDPATH=%PATH%
    SET CYGWIN=nontsec
    SET PATH=%CWRSYNCHOME%;%PATH%
    SET HOME=С:\Backup\LOG\ (сюда будем сохранять логи)
    SET RSYNC_PASSWORD=(тут пароль, который установлен на принимающем сервере rsync)
    SET MY_NAME=%computername%

    (теперь указываем, что копировать)

    SET FS_SRC_HOME="/cygdrive/O/Users/" (используем именно в таком формате, указываем папку до "Users")
    SET FS_SRC_BCK="/cygdrive/C/Backup/" (где файлы rsync, чтобы положить их вместе с логами на бекап сервер)

    del /q С:\backup\log\*.log (стираем старые логи перед запуском)

    (запускаем)

    rsync -av --chmod=ug=rwx %FS_SRC_B2% backupusr@hostname::sbackupusr/%MY_NAME%
    rsync -avhP --inplace --stats --del --modify-window=1 --log-file=%FS_SRC_BCK%DATA/backupwork.log --exclude-from=%FS_SRC_BCK%DATA/exclude %FS_SRC_HOME% backupusr@hostname::sbackupusr/%MY_NAME%/snapshot/
    rsync -av %FS_SRC_BCK% backupusr@hostname::sbackupusr/%MY_NAME%/snapshot/Backup/


    Первой командой мы создаём директорию по имени компьютера %computername%
    Второй командой мы копируем данные с временно подключенного диска O:\Users, с сохранением лог-файла.
    Третьей командой мы копируем всю папку C:\Backup, для сохранности лога и самой программы.

    Вот эта строка «backupusr@hostname::sbackupusr» — указывает на пользователя на принимающей стороне а так же хост принимающей стороны. (Будет рассмотрено во втором псто).

    После этого нам необходимо отключить O: диск, так как если мы этого не сделаем, в следующий раз vshadow не сможет подключить туда копию, и копия будет делаться со старого O:\ диска всё время, не смотря на то, что файлы в папке пользователя уже давно изменились.

    (неведома магия)

    SET HOME=%HOMEDRIVE%%HOMEPATH%

    VSHADOW.EXE -ds=%SHADOW_ID_1%


    Это всё нужно сложить в обычный .cmd файл, как я уже указывал выше, сохранить его в папку Backup, где хранятся файлы rsync и vshadow, и запускать по мере надобности. Работает на Windows Vista, Windows 7, Windows XP, 32 и 64-bit

    P.S: Конечно, будет необходимо поднять принимающую машину, в нашем случае на базе *nix, и создать разделы, которые будут защищены true-crypt в случае кражи сервера. Так же в дальнейшем эту папку можно запаковать в msi инсталлер для установки на все рабочие станции через Групповые Политики и использовать их же для создания Scheduled Tasks и закрытия доступа в Backup папку для юзера. Но это уже другая история.

    Песочница

    Автоматическое тестирование в PHP

    Работа по TDD имеет очевидные преимущества: у разработчика всегда есть чётко описанная в виде теста цель, и он сразу узнает, когда она будет достигнута.
    Тем не менее, есть и некоторые издержки: необходимо постоянно запускать один и тот же тест при изменениях в нем или в соответствующем классе, чтобы не пропустить тот самый момент истины. Вроде бы не такая уж и большая проблема, но постоянное переключение в консоль для проверки сделанных изменений на работоспособность, да и вообще помнить о необходимости этих манипуляций — лишнее рассеивание внимания.

    Далее о том, как все это дело автоматизировать.

    Песочница

    Как я устанавливал Openmeetings

    Что это


    OpenMeetings — это многопользовательское браузерное программное обеспечение, которое позволяет вам мгновенно создать конференцию в Интернете.
    Вы можете использовать Ваш микрофон или веб-камеру, обмениваться документами на досках объявлений.
    Она доступна как сетевой сервис, но можно загрузить и установить пакет с сервера без каких-либо ограничений в использовании или количестве пользователей.

    Исходные данные


    У нас на предприятии в качестве системы дистанционного обучения (далее СДО) используется Moodle. Она нас полностью устраивает, за исключением отсутствия живого общения преподавателя и обучающегося.
    Поэтому было принято решение к действующей СДО добавить приложение видео-конференций. Выбор свой остановил на Openmeetings, поскольку именно эта система интегрируется с Moodle и для этого даже есть специальный модуль.

    Устанавливать систему решил на CentOS. Изрядно погуглив в поисках мануала по установке, и методом проб и ошибок понял, что все инструкции, что есть в сети, либо устаревшие, либо неполные.

    Все грабли, на которые я наткнулся в процессе под катом

    Песочница

    Cкоростная синхронизация миллиарда файлов

    Есть несколько идентичных серверов (4 ноды) на Amazon EC2. Каждый генерирует и хранит у себя на диске кэш, который хотелось бы синхронизировать. Но простой rsync тут не подойдет — файлов несколько миллиардов, nfs — слишком медлителен, и т. д. Полный список рассмотренных вариантов с пояснениями ниже.

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

    После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.

    Песочница

    Сервис-инженер или ремонт компьютеров на выезде

    Как и каждый студент, я столкнулся с проблемой нехватки денег, поэтому пришел к очевидному решению — искать работу. Полный рабочий день меня не устраивал из за учебы, поэтому следом пришла вторая проблема — необходимость свободного графика. Я далеко не гений написания кода, поэтому фриланс был оставлен на светлое будущее. Но страсть к IT не давала возможности сдаться и пойти работать в макдональдс.

    Песочница

    Пишем двуязычную программу

    Недавно передо мной встала нелёгкая задачка, которую мне подкинул один знакомый. Суть состоит в том, чтобы, написав один исходник, можно было его скомпилировать в gcc и исполнить, также и исполнить через интерпретатор perl. Казалось бы, не так уж и сложно, но не всем программистам придёт в голову, как правильно написать данный исходник. Приступим к рассмотрению изначальных программ на C и Perl.

    Песочница

    Внешние прерывания у 8-bit avr, использование кнопок

    Здравствуйте, на днях решил поэксперементировать с внешними прерываниями на attiny2313A. Думаю тем кто занимался программированием микроконтроллеров известно, что МК не всегда быстро может реагировать на нажатие кнопки, т.к. проверка PINа стандартно осуществляется в бесконченом цикле и если программа доостаточно большая — это может затормозить опрос ножки.
    Код ниже написан для WinAVR.

    image

    Стандартный опрос:


    • DDRxy|=(0<<y); PORTxy|=(0<<y)
      с одной стороны кнопка подключена к плюсу (VCC), а с другой стороны к ножке.
      В таком случае провод который подключен к ножке выступает в роли антены и любое возмущение электрическо-магнитного поля вокруг проводка вызывает срабатываение кнопки, что неприемлимо.

    • DDRxy|=(0<<y); PORTxy|=(1<<y)
      С одной стороны кнопка подключена к минусу (GND), а с другой стороны к ножке.
      Это наиболее примелимый вариант, наводок не возникает и кнопка срабатывает стабильно

    Песочница

    Работа с изометрическими картами в cocos2d

    Привет все читателям сайта habrahabr.ru


    Недавно решил заняться разработкой игр под IOS, причиной стал прочитанный пост на сайте. Это занятие помогает не впустую тратить свое время и думаю в будущем принесет неплохую добавку к зарплате. По началу прочитал книгу по Objective-C и принялся искать хороший, но бесплатный движок для написания игры, так как чистый OpenGL не хотелось использовать. Выбор пал на cocos2d, тут и друг посоветовал и нашел много хороших отзывов на сайте про него, плюс не раз слышал, что разработчики часто отвечают на вопросы на форумах.

    Песочница

    Как знание MVP поможет сэкономить время и силы стартаперу?

    На мой взгляд, каждый стартапер должен знать и хотя бы частично использовать элементы MVP в своих проектах. В этой статье освещены основные моменты MVP, знание которых сэкономит вам время, нервы и деньги.

    Что же такое MVP и чем он так хорошо? Ответ на этот вопрос ниже, а начнем с того, что многие из нас сталкиваются с такой дилеммой: «Есть отличная идея, но надо много времени и средств для реализации». Возможно, пару дней эта идея не покидает ваш разум, но потом вы понимаете своё бессилие, и на этом все заканчивается. А все могло быть по-другому…

    Песочница

    Подключение и работа с MySQL в среде Visual C++

    Совсем недавно мне необходимо было написать программу для удаленной работы с мускулом. В интернете, как не обидно, нашел лишь «скачайте бла-бла, подключите через include, и вот пример!». На практике не сработало, пришлось искать специалистов чтоб объяснили. Для исправления этого досадного отсутствия информации, выложу полное описание от «А» до «Я» по настройке и работе в среде Visual C++. Итак, приступим!

    Для того что бы подключить БД, такую как мускул, и играться с ней на чистом API, нужно сначала установить или что бы было установлено такое ПО:
    1. «Connector/C++»для 32-х розрядного приложения 32-х розрядный набор библиотек, а для 64-х соответственно 64-х битный набор (скачать можно здесь http://dev.mysql.com/downloads/connector/cpp/ ).
    2. Дистрибутив мускула, у меня стоит MySQL Community Server 5.1.59 при установке нужно выбрать либо полную установку, либо выбрать самому весь набор, ну для разработки хватит набора DevCpp.

    Песочница

    Мифы о CMMI, или кому и зачем она нужна

    Вначале об аббревиатуре: Capability Maturity Model Integration (CMMI) — модель оценки зрелости компании, основанная на ее производстенном, техническом и управленческом потенциале. Разработана она Software Engineering Institute. Подробно о ней писалось в хабрастатьях: Модель CMMI
    и Как наша компания получила 3 уровень CMMI. .

    Будучи «внедренной» в CMMI вот уже 5 лет, я часто сталкиваюсь с запросами и суждениями относительного этого фрэймфорка, которые, в целом, можно свести к следующему «Это конечно хорошо, но невозможно в реальных условиях». Кто-то скептически настроен с самого начала, кто-то разочарован (прежде всего, из-за чрезмерных ожиданий). Я не являюсь ни «апологетом», ни фанатом CMMI, но моя непосредственная работа заключается в поддержании соответствия компании CMMI Level 3. Это требует, прежде всего, очень серьезных моральных усилий. Связано это, на мой взгляд, с распространенностью ряда мифов о CMMI, которые появились в силу логических доводов о пользе модели (которые приводятся во всей «рекламной» литературе), примеров повышения эффективности работы в таких «монстрах» как «Боинг», попыток внедрения в отечественных компаниях (после чего в них «ничего не изменилось»), и опыта работы с индийскими компаниями, которые позиционируют себя как соответствующие CMMI Level 5. И еще с непониманием того, как и когда стоит использовать модель, чтобы она приносила пользу.

    В статье я попытаюсь «развенчать» некоторые мифы, развеять скептицизм, и, возможно, мне удастся помочь тем, кто хочет использовать CMMI, но не знает как.

    Песочница

    Использование TDD и MVP при создании приложений для Android. Часть 1 — Введение

    Писать программки для смартфонов — мое хобби. Все началось с того, что я купил свой первый смартфон Nokia E51 на Symbian и мне очень нравилось что его функционал можно было расширить через установку дополнительных программ.
    Но однажды я не нашел необходимой программы и решил написать ее сам. Так и началось мое увлечение программами для смартфонов.

    После того как глава Nokia заявил, что дни Symbian сочтены, я решил изучить платформу Android.

    Для лучшего усвоения материала я решил написать полезную, хотя бы для себя, программку. Но написать ее не по детски, когда куски примитивного кода копируются из документации, а по взрослому с разработкой архитектуры, и использованием современных технологий программирования TDD, MPV и IoС.


    Постановка задачи


    Мое первое приложение для Android — T-Alarm. Найти его можно на Android Market по названию. На данный момент в программе нет дизайна и она выглядит немного некузяво, но вскоре дизайн появится.

    Это просто программа будильник, но с одной функцией, которой нет в других программах.

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

    Более того, будильник является отличной задачей, чтобы по глубже изучить платформу Andorid. Здесь затрагиваются такие части как:
    — Пользовательский интерфейс. Надо сделать несколько окон для задания настроек.
    — воспроизведение музыкальных файлов. Можно изучить возможности встроенного медиа-проигрывателя
    — Сохранение расписания в БД. Теперь я знаю как пользоваться базой данных SQLIte на Android
    — Реализация сервисов для отработки будильника. При наступлении часа Х надо запрограммировать следующий момент срабатывания, с учетом нескольких дреманий (snooze), и сыграть побудку. Прекрасный повод разобраться в том какие сервисы есть в Android и какой надо использовать.
    — Получение различных сигналов от ОС. Сервис будильника должен срабатывать по системному будильнику и при загрузке смартфона.

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

    Общая архитектуры проектов и приложения


    С самого начала я хотел разобраться как можно использовать современные подходы и шаблоны проектирования при разработке приложений для Android и поэтому много времени у меня ушло на изучения различных Framework-ов. Вроде бы в Android SDK уже встроен JUnit для организации тестов и есть много статей в интернете как им пользоваться, но как дело доходит реального проекта сразу появляются подводные камни. О том как их преодолеть я и расскажу в этом цикле статей.

    Итак, я решил использовать TDD для того, чтобы быть уверенным, что все основные алгоритмы моего приложения протестированы. Так я остановился на шаблоне MVP при проектировании пользовательского интерфейса.

    Организация проектов


    Мои исходники разделены на два проекта — основной проект с исходниками и тестовй проект с тестами.

    Проект с исходниками состоит из нескольких пакетов. Как правило один пакет это одно архитектурное звено, то есть одна форма или сервис.

    Каждое звено состоит из презентера (Presenter), представления (View) и, порой, из вспомогательных классов как правило для организации нескольких потоков. Хочу отметить, что представление это не всегда пользовательский интерфейс порой это классы для работы с системными сервисам, но для того, чтобы иметь возможность имитировать эти системные сервисы я выносил их во View, у которого есть интерфейс, а этот интерфейс легко имитировать в тестах.

    Проект с тестами тоже разбит на пакеты. Каждый пакет содержит несколько тестов для соответствующего звена приложения.

    Архитектура приложения


    Поскольку мое приложение маленькое, то в нем нет слоев, а есть только несколько звеньев:

    1. Главное окно
    2. Окно редактирования будильника
    3. Окно выбора мелодии
    4. Окно при звонке
    5. Модель данных, в моем случае это список будильников, и репозиторий для сохранения модели в БД.
    6. Сервис для обработки системных сообщений: наступление часа Х и загрузка смартфона.

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

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

    В данной архитектуре непротестированными остаются только представления. Но код в них как правило предельно прост. Это просто маппинг параметров метода в контролы формы. Как правило этот код тестируется методом «пристального взгляда». А ошибки легко обнаруживаются когда вы видите что на форме не заполнен какой-то контрол.

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

    Читайте в следующих статьях


    — Реализация пользовательского интерфейса, многопоточность, MVP
    — Реализация серверной части, RoboGuice, тестирование
    — Сохранение данных в БД, модель данных и репозиторий
    — Небольшие задачи, настройки, логирование, ProGuard

    Песочница

    Steam и русский support

    Сегодня в Steam запустили русскоязычную ветку в форуме community, пока там есть всего два русских модератора отвечающие на любые вопросы (кроме тех что о эпизоде три). Это огромный шаг для Российского рынка. Сама форумная ветка находиться здесь http://forums.steampowered.com/forums/forumdisplay.php?f=1257 .

    P.S. Не забывайте завтра начнутся хелоувинские распродажи с большими скидками.

    Песочница

    NodeJS + SMPP и очередь сообщений Memcacheq

    Возникла необходимость реализовать отправку и прием сообщений по протоколу smpp, и делать это нужно было с расчетом на высокий трафик и с возможностью простого взаимодействия с другими приложениями.
    В процессе выбора платформы было решено использовать NodeJS.
    Почему NodeJS? Что за зверь Memcacheq?

    Песочница

    Памяти Minesweeper

    Вот он, интерфейс этой замечательной игры:

    image

    Все его прекрасно знают. К слову сказать, это скриншот русской версии minesweeper из Windows 2000. До недавнего времени я бы его не отличил его от других версий, но сейчас, по паре признаков, можно точно сказать, что это именно версия 5.0. Об отличительных признаках позже.

    Песочница

    Установка Debian по сети через netboot и ssh

    Подходит для установки Debian Squeeze и старше. Установщик стандартный для дебиана — debian-installer (сокращенно d-i).

    В случае невозможности получить физический доступ к консоли этот способ наиболее удобен для установки нового дистрибутива Debian. Достаточно включить сервер, дождаться загрузки и присоединиться по ssh.