Песочница
Песочница →
Cистемы электронного голосования КОИБ и ГЭК
Центризбирком завершает 1 ноября приемку опытной партии новых электронных урн для голосования. Комплексы электронного голосования будут установлены на избирательных участках в восьми субъектах Российской Федерации
т.е 10 % участков по всей стране будут оборудованы электронными комплексами обработки избирательных бюллетеней — КОИБами, таких комплексов будет около 20 тысяч. Один КОИБ со сканерами и принтером обходится бюджету в 110 тыс. руб
т.е 10 % участков по всей стране будут оборудованы электронными комплексами обработки избирательных бюллетеней — КОИБами, таких комплексов будет около 20 тысяч. Один КОИБ со сканерами и принтером обходится бюджету в 110 тыс. руб
12.11.2011 10:52+0400
Песочница →
Русский рок в Android Market
Иногда в Маркете можно встретить довольно неожиданные вещи, например, сингл русской рок-группы. И, хотя появление подобных приложений в целом является хорошим знаком, реализация, о которой данный топик, весьма далека от идеала.
Рассмотрим детально данное чудо программной инженерии (сингл «Оптимист» группы «Би-2») и задумаемся, готовы ли мы покупать музыку, распространяемую подобным образом.
Рассмотрим детально данное чудо программной инженерии (сингл «Оптимист» группы «Би-2») и задумаемся, готовы ли мы покупать музыку, распространяемую подобным образом.
10.11.2011 03:37+0400
Песочница →
Самодельное автономное USB-ЗУ для гаджетов
Не так давно, около полутора лет назад, друг-радиоэлектрик подарил мне паяльник и все необходимые к нему составляющие мне на день рождения. До этого момента мне хотелось что-то сделать самому, но ни возможности, ни инструментов для этого не было.
После дарения, паяльник пролежал около полугода без дела. Но вот наступило лето 2011 и появилось время сделать что-нибудь свое. Так родилось самодельное автономное USB-ЗУ для гаджетов.
Подробности под катом (осторожно, много картинок).
После дарения, паяльник пролежал около полугода без дела. Но вот наступило лето 2011 и появилось время сделать что-нибудь свое. Так родилось самодельное автономное USB-ЗУ для гаджетов.
Подробности под катом (осторожно, много картинок).
09.11.2011 19:25+0400
Песочница →
Mail.Ru не любит Yandex и Google или интересная особенность работы Mail.ru Агента
Хочу поведать Вам про одну интересную особенность работы Mail.ruАгента.
Уже ни для кого не секрет, что, зачастую устанавливая тот или иной бесплатный (и даже платный) программный продукт, кроме именно самого исконного продукта обязательно будут навязаны другие. Так же поступает и Mail.Ru. Устанавливая Mail.ru Агент, вам заодно поставят тройку не нужных служб, а именно Спутник@Mail.ru, Guard@Mail.ru, AlterGeo Magic Scanner (в последней версии Mail.ru Агента появилась возможность отказаться от установки этих служб).
09.11.2011 19:11+0400
Песочница →
Автоматизированное резервное копирование рабочих станций 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»
Пишем в файл:
(неведома магия)
Эта часть «макаронного кода» делает shadow volume copy с C: и подключает её на O:, который мы и будем использовать для копирования, а потом тем же скриптом уберём. Теперь часть, которая отвечает за действия rsync:
(неведома магия)
Первой командой мы создаём директорию по имени компьютера %computername%
Второй командой мы копируем данные с временно подключенного диска O:\Users, с сохранением лог-файла.
Третьей командой мы копируем всю папку C:\Backup, для сохранности лога и самой программы.
Вот эта строка «backupusr@hostname::sbackupusr» — указывает на пользователя на принимающей стороне а так же хост принимающей стороны. (Будет рассмотрено во втором псто).
После этого нам необходимо отключить O: диск, так как если мы этого не сделаем, в следующий раз vshadow не сможет подключить туда копию, и копия будет делаться со старого O:\ диска всё время, не смотря на то, что файлы в папке пользователя уже давно изменились.
(неведома магия)
Это всё нужно сложить в обычный .cmd файл, как я уже указывал выше, сохранить его в папку Backup, где хранятся файлы rsync и vshadow, и запускать по мере надобности. Работает на Windows Vista, Windows 7, Windows XP, 32 и 64-bit
P.S: Конечно, будет необходимо поднять принимающую машину, в нашем случае на базе *nix, и создать разделы, которые будут защищены true-crypt в случае кражи сервера. Так же в дальнейшем эту папку можно запаковать в msi инсталлер для установки на все рабочие станции через Групповые Политики и использовать их же для создания Scheduled Tasks и закрытия доступа в Backup папку для юзера. Но это уже другая история.
Будет использоваться:
Немного 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 папку для юзера. Но это уже другая история.
08.11.2011 15:14+0400
Песочница →
Автоматическое тестирование в PHP
Работа по TDD имеет очевидные преимущества: у разработчика всегда есть чётко описанная в виде теста цель, и он сразу узнает, когда она будет достигнута.
Тем не менее, есть и некоторые издержки: необходимо постоянно запускать один и тот же тест при изменениях в нем или в соответствующем классе, чтобы не пропустить тот самый момент истины. Вроде бы не такая уж и большая проблема, но постоянное переключение в консоль для проверки сделанных изменений на работоспособность, да и вообще помнить о необходимости этих манипуляций — лишнее рассеивание внимания.
Далее о том, как все это дело автоматизировать.
Тем не менее, есть и некоторые издержки: необходимо постоянно запускать один и тот же тест при изменениях в нем или в соответствующем классе, чтобы не пропустить тот самый момент истины. Вроде бы не такая уж и большая проблема, но постоянное переключение в консоль для проверки сделанных изменений на работоспособность, да и вообще помнить о необходимости этих манипуляций — лишнее рассеивание внимания.
Далее о том, как все это дело автоматизировать.
08.11.2011 05:30+0400
Песочница →
Как я устанавливал Openmeetings
Что это
OpenMeetings — это многопользовательское браузерное программное обеспечение, которое позволяет вам мгновенно создать конференцию в Интернете.
Вы можете использовать Ваш микрофон или веб-камеру, обмениваться документами на досках объявлений.
Она доступна как сетевой сервис, но можно загрузить и установить пакет с сервера без каких-либо ограничений в использовании или количестве пользователей.
Исходные данные
У нас на предприятии в качестве системы дистанционного обучения (далее СДО) используется Moodle. Она нас полностью устраивает, за исключением отсутствия живого общения преподавателя и обучающегося.
Поэтому было принято решение к действующей СДО добавить приложение видео-конференций. Выбор свой остановил на Openmeetings, поскольку именно эта система интегрируется с Moodle и для этого даже есть специальный модуль.
Устанавливать систему решил на CentOS. Изрядно погуглив в поисках мануала по установке, и методом проб и ошибок понял, что все инструкции, что есть в сети, либо устаревшие, либо неполные.
Все грабли, на которые я наткнулся в процессе под катом
08.11.2011 04:14+0400
Песочница →
Cкоростная синхронизация миллиарда файлов
Есть несколько идентичных серверов (4 ноды) на Amazon EC2. Каждый генерирует и хранит у себя на диске кэш, который хотелось бы синхронизировать. Но простой rsync тут не подойдет — файлов несколько миллиардов, nfs — слишком медлителен, и т. д. Полный список рассмотренных вариантов с пояснениями ниже.
К тому же, время от времени нужно удалять устаревшие файлы сразу на всех серверах, что пока делается вручную и занимает несколько суток. Вопрос наиболее быстрой для такого Use Case файловой системы планирую описать позже. Оговорюсь только, что по нескольким причинам была выбрана XFS.
После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.
К тому же, время от времени нужно удалять устаревшие файлы сразу на всех серверах, что пока делается вручную и занимает несколько суток. Вопрос наиболее быстрой для такого Use Case файловой системы планирую описать позже. Оговорюсь только, что по нескольким причинам была выбрана XFS.
После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.
08.11.2011 03:18+0400
Песочница →
Сервис-инженер или ремонт компьютеров на выезде
Как и каждый студент, я столкнулся с проблемой нехватки денег, поэтому пришел к очевидному решению — искать работу. Полный рабочий день меня не устраивал из за учебы, поэтому следом пришла вторая проблема — необходимость свободного графика. Я далеко не гений написания кода, поэтому фриланс был оставлен на светлое будущее. Но страсть к IT не давала возможности сдаться и пойти работать в макдональдс.
07.11.2011 11:45+0400
Песочница →
Пишем двуязычную программу
Недавно передо мной встала нелёгкая задачка, которую мне подкинул один знакомый. Суть состоит в том, чтобы, написав один исходник, можно было его скомпилировать в gcc и исполнить, также и исполнить через интерпретатор perl. Казалось бы, не так уж и сложно, но не всем программистам придёт в голову, как правильно написать данный исходник. Приступим к рассмотрению изначальных программ на C и Perl.
06.11.2011 22:48+0400
Песочница →
Внешние прерывания у 8-bit avr, использование кнопок
Здравствуйте, на днях решил поэксперементировать с внешними прерываниями на attiny2313A. Думаю тем кто занимался программированием микроконтроллеров известно, что МК не всегда быстро может реагировать на нажатие кнопки, т.к. проверка PINа стандартно осуществляется в бесконченом цикле и если программа доостаточно большая — это может затормозить опрос ножки.
Код ниже написан для WinAVR.
Код ниже написан для WinAVR.
Стандартный опрос:
- DDRxy|=(0<<y); PORTxy|=(0<<y)
с одной стороны кнопка подключена к плюсу (VCC), а с другой стороны к ножке.
В таком случае провод который подключен к ножке выступает в роли антены и любое возмущение электрическо-магнитного поля вокруг проводка вызывает срабатываение кнопки, что неприемлимо.
- DDRxy|=(0<<y); PORTxy|=(1<<y)
С одной стороны кнопка подключена к минусу (GND), а с другой стороны к ножке.
Это наиболее примелимый вариант, наводок не возникает и кнопка срабатывает стабильно
04.11.2011 19:09+0400
Песочница →
Работа с изометрическими картами в cocos2d
Привет все читателям сайта habrahabr.ru
Недавно решил заняться разработкой игр под IOS, причиной стал прочитанный пост на сайте. Это занятие помогает не впустую тратить свое время и думаю в будущем принесет неплохую добавку к зарплате. По началу прочитал книгу по Objective-C и принялся искать хороший, но бесплатный движок для написания игры, так как чистый OpenGL не хотелось использовать. Выбор пал на cocos2d, тут и друг посоветовал и нашел много хороших отзывов на сайте про него, плюс не раз слышал, что разработчики часто отвечают на вопросы на форумах.
02.11.2011 12:55+0400
Песочница →
Как знание MVP поможет сэкономить время и силы стартаперу?
На мой взгляд, каждый стартапер должен знать и хотя бы частично использовать элементы MVP в своих проектах. В этой статье освещены основные моменты MVP, знание которых сэкономит вам время, нервы и деньги.
Что же такое MVP и чем он так хорошо? Ответ на этот вопрос ниже, а начнем с того, что многие из нас сталкиваются с такой дилеммой: «Есть отличная идея, но надо много времени и средств для реализации». Возможно, пару дней эта идея не покидает ваш разум, но потом вы понимаете своё бессилие, и на этом все заканчивается. А все могло быть по-другому…
Что же такое MVP и чем он так хорошо? Ответ на этот вопрос ниже, а начнем с того, что многие из нас сталкиваются с такой дилеммой: «Есть отличная идея, но надо много времени и средств для реализации». Возможно, пару дней эта идея не покидает ваш разум, но потом вы понимаете своё бессилие, и на этом все заканчивается. А все могло быть по-другому…
01.11.2011 02:41+0400
Песочница →
Подключение и работа с 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.
Для того что бы подключить БД, такую как мускул, и играться с ней на чистом API, нужно сначала установить или что бы было установлено такое ПО:
1. «Connector/C++»для 32-х розрядного приложения 32-х розрядный набор библиотек, а для 64-х соответственно 64-х битный набор (скачать можно здесь http://dev.mysql.com/downloads/connector/cpp/ ).
2. Дистрибутив мускула, у меня стоит MySQL Community Server 5.1.59 при установке нужно выбрать либо полную установку, либо выбрать самому весь набор, ну для разработки хватит набора DevCpp.
31.10.2011 14:38+0400
Песочница →
Мифы о CMMI, или кому и зачем она нужна
Вначале об аббревиатуре: Capability Maturity Model Integration (CMMI) — модель оценки зрелости компании, основанная на ее производстенном, техническом и управленческом потенциале. Разработана она Software Engineering Institute. Подробно о ней писалось в хабрастатьях: Модель CMMI
и Как наша компания получила 3 уровень CMMI. .
Будучи «внедренной» в CMMI вот уже 5 лет, я часто сталкиваюсь с запросами и суждениями относительного этого фрэймфорка, которые, в целом, можно свести к следующему «Это конечно хорошо, но невозможно в реальных условиях». Кто-то скептически настроен с самого начала, кто-то разочарован (прежде всего, из-за чрезмерных ожиданий). Я не являюсь ни «апологетом», ни фанатом CMMI, но моя непосредственная работа заключается в поддержании соответствия компании CMMI Level 3. Это требует, прежде всего, очень серьезных моральных усилий. Связано это, на мой взгляд, с распространенностью ряда мифов о CMMI, которые появились в силу логических доводов о пользе модели (которые приводятся во всей «рекламной» литературе), примеров повышения эффективности работы в таких «монстрах» как «Боинг», попыток внедрения в отечественных компаниях (после чего в них «ничего не изменилось»), и опыта работы с индийскими компаниями, которые позиционируют себя как соответствующие CMMI Level 5. И еще с непониманием того, как и когда стоит использовать модель, чтобы она приносила пользу.
В статье я попытаюсь «развенчать» некоторые мифы, развеять скептицизм, и, возможно, мне удастся помочь тем, кто хочет использовать CMMI, но не знает как.
и Как наша компания получила 3 уровень CMMI. .
Будучи «внедренной» в CMMI вот уже 5 лет, я часто сталкиваюсь с запросами и суждениями относительного этого фрэймфорка, которые, в целом, можно свести к следующему «Это конечно хорошо, но невозможно в реальных условиях». Кто-то скептически настроен с самого начала, кто-то разочарован (прежде всего, из-за чрезмерных ожиданий). Я не являюсь ни «апологетом», ни фанатом CMMI, но моя непосредственная работа заключается в поддержании соответствия компании CMMI Level 3. Это требует, прежде всего, очень серьезных моральных усилий. Связано это, на мой взгляд, с распространенностью ряда мифов о CMMI, которые появились в силу логических доводов о пользе модели (которые приводятся во всей «рекламной» литературе), примеров повышения эффективности работы в таких «монстрах» как «Боинг», попыток внедрения в отечественных компаниях (после чего в них «ничего не изменилось»), и опыта работы с индийскими компаниями, которые позиционируют себя как соответствующие CMMI Level 5. И еще с непониманием того, как и когда стоит использовать модель, чтобы она приносила пользу.
В статье я попытаюсь «развенчать» некоторые мифы, развеять скептицизм, и, возможно, мне удастся помочь тем, кто хочет использовать CMMI, но не знает как.
31.10.2011 12:14+0400
Песочница →
Использование 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
Но однажды я не нашел необходимой программы и решил написать ее сам. Так и началось мое увлечение программами для смартфонов.
После того как глава 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
27.10.2011 23:33+0400
Песочница →
Steam и русский support
Сегодня в Steam запустили русскоязычную ветку в форуме community, пока там есть всего два русских модератора отвечающие на любые вопросы (кроме тех что о эпизоде три). Это огромный шаг для Российского рынка. Сама форумная ветка находиться здесь http://forums.steampowered.com/forums/forumdisplay.php?f=1257 .
P.S. Не забывайте завтра начнутся хелоувинские распродажи с большими скидками.
P.S. Не забывайте завтра начнутся хелоувинские распродажи с большими скидками.
27.10.2011 16:51+0400
Песочница →
NodeJS + SMPP и очередь сообщений Memcacheq
Возникла необходимость реализовать отправку и прием сообщений по протоколу smpp, и делать это нужно было с расчетом на высокий трафик и с возможностью простого взаимодействия с другими приложениями.
В процессе выбора платформы было решено использовать NodeJS.
Почему NodeJS? Что за зверь Memcacheq?
В процессе выбора платформы было решено использовать NodeJS.
Почему NodeJS? Что за зверь Memcacheq?
27.10.2011 14:02+0400
Песочница →
Памяти Minesweeper
Вот он, интерфейс этой замечательной игры:
Все его прекрасно знают. К слову сказать, это скриншот русской версии minesweeper из Windows 2000. До недавнего времени я бы его не отличил его от других версий, но сейчас, по паре признаков, можно точно сказать, что это именно версия 5.0. Об отличительных признаках позже.
Все его прекрасно знают. К слову сказать, это скриншот русской версии minesweeper из Windows 2000. До недавнего времени я бы его не отличил его от других версий, но сейчас, по паре признаков, можно точно сказать, что это именно версия 5.0. Об отличительных признаках позже.
24.10.2011 20:13+0400
Песочница →
Установка Debian по сети через netboot и ssh
Подходит для установки Debian Squeeze и старше. Установщик стандартный для дебиана — debian-installer (сокращенно d-i).
В случае невозможности получить физический доступ к консоли этот способ наиболее удобен для установки нового дистрибутива Debian. Достаточно включить сервер, дождаться загрузки и присоединиться по ssh.
В случае невозможности получить физический доступ к консоли этот способ наиболее удобен для установки нового дистрибутива Debian. Достаточно включить сервер, дождаться загрузки и присоединиться по ssh.
23.10.2011 01:26+0400