Back to pure C – bits hacks

ООП, паттерны, MVC…  Программирование эволюционирует семимильными шагами – если пять лет назад на собеседованиях модно было спрашивать про виртуальные конструкторы да множественное наследование в C++, то теперь разговор с кандидатом частенько переходит в околофилософское русло с обсуждением преимуществ тех или иных парадигм программирования или обоснованием порочности безоглядного применения паттернов. И как то подзабывается то, с чего все начиналось – операции с битиками, безжалостная борьба за память…

А тут, внезапно, спонадобилось мне поработать с битами в инте – в условиях дефицита памяти оставлять аж четыре байта бесхозными рука не поднималась. 32 разряда (на большинстве платформ) дают возможность хранить и передавать более чем достаточное количество характеристик-флагов. Мне же спонадобилось определять содержит ли конкретный (по счету) бит единичку или нет?

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

#define IS_BIT_SET(int_to_check, position_number) ( ( int_to_check ) & ( 1 << position_number ) )

А использовать как-то так:

if ( IS_BIT_SET(some_int, position_number) ) {
//TODO: perform some action here
}

Только не стоит забывать, что position_number не должен превышать разрядность типа и нумерация битов начинается с нуля.

В C++ для подобных целей логично использовать специальный встроенный тип: std::bitset.

PS. Дада, не всегда в инте 4 байта, на некоторых платформах имеет смысл отталкиваться от порядка байтов

PPS. Поддавшись влиянию ностальгии по временам настоящих компутеров не могу удержаться от ссылки на прелюбопытную подборку снипетов для работы с битами: http://graphics.stanford.edu/~seander/bithacks.html. Приравние друг-дружке двух чисел без дополнительных переменных, изменение порядка битов в байтах, деление чисел без операции деление, вычисление модуля числа и прочие трюки, которые полезно знать любому, утверждающему что он знает Си.

gcc – как скрывать warnings

Собираете какой-то легаси код? В глазах пестрит от белебреды вроде “warning: format ‘%d’ expects type ‘int’, but argument 5 has type ‘size_t” и неудобно отыскивать сообщения о причинах порушеной сборки?

Добавьте в скрипт сборки цель check_integrity, где собираете все обычные цели добавив к флагам gcc ключик -w тогда все тревоги мнительного компилятора будут скрыты и можно будет разбираться с ошибками.

Нет, для release версии подобные финт ушами я одобрять не стану.

Дополнительные флаги, в том случае если вы хотите видеть только определенные типы warning’ов можно глянуть вот здесь – http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

Программерские конкурсы

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

http://www.ludumdare.com/compo/ – разработка мини-игр в 48 часов на заданную тему

http://projecteuler.net/ – математические головоломки для развития

http://www.spoj.pl/tutorials/ – головоломки онлайн, без ограничения на язык, с ограничениями на время
а вот здесь описание всех проблем – http://www.spoj.pl/problems/classical.pdf

Задачи с олимпиад по программированию с возможностью отправки/проверки в “песочнице” – тут

Программирование под kinect – с чего начать

Многообещающей разработке от Microsoft – Kinect, похоже, удалось то, чего не могли добиться ее предшественники (PlayStation move, Wii Remote) – создать всеобщий ажиотаж, подстегивая производителей и разработчиков бередить фантазию и измышлять новые способы применения этого необычного контроллера, позволяющего управлять приставкой или компьютером жестами и голосом.

Раздумываете, не пришла ли пора ворваться в нарождающийся рынок программ и игр, которые понимают человека с полуслова? Грезите идей новаторских механизмов управления геймплеем? Желаете поднять уровень взаимодействия пользователей с вашими наработками на новый уровень? ДАДАДА, вот только не понятно с чего начать?

Для начала расслабьтесь – все не так радужно, как спешат нас уверить маркетологи Микрософта. Давайте разберемся с чем вы будете работать. Кинект – не что иное, как набор нескольких сенсоров, теснящихся в стильном глянцевом корпусе. Веб-камера, камера глубины и несколько микрофонов. Соответственно вы, при наличии драйвера и минимального API,  можете получить RGB-картинку, матрицу глубины и аудио-данные. На ум сразу приходят термины “computer vision”, “линейная алгебра” и “нейронные сети”, и релиз мега-игры несколько откладывается, так как не совсем понятно как трактовать очередной жест игрока.

Какой SDK для Kinect вам лучше подойдет?

Официальный Kinect SDK от Microsoft. Драйвера только под Windows. Поддерживаются C++, C#, VB. Кроме низко-уровневых функций для получения “сырых” данных от сенсоров, в комплект входят классы и алгоритмы для skeleton-tracking (распознавания в кадре человека и частей его тела), а также для обработки аудио-сигналов (главным образом для связки с Microsoft Speech). В интернетах бродят немало эффектных, на первый взгляд, примеров с использованием игровых движков (например XNA). К сожалению, если вам не достаточно знать где у пользователя находится кисть руки, и важно  должным образом распознавать жесты вам придется включить в свой проект дополнительные библиотеки. Встроенных средств для реализации такой функциональности в sdk от микрософт нету. Если покопаться в заголовочных файлах SDK (MSR_NuiImageCamera.h), можно отыскать характеристики камер, которые могут понадобиться для анализа изображения вручную. Описание алгоритма, используемого Микрософтом для распознавания частей тела описано тут – http://research.microsoft.com/pubs/145347/BodyPartRecognition.pdf.

С чего начать программирование под Kinect с SDK от Microsoft:

http://channel9.msdn.com/Series/KinectQuickstart – серия видео-уроков по базовым возможностям SDK.

Пошаговое руководство на русском (для SDK Beta 2) с некоторыми пояснениями по используемым структурам – http://habrahabr.ru/blogs/cpp/123588/

Проект http://kinectdtw.codeplex.com может использоваться для записи положений тела (на основе skeleton tracking), для включения в свои C# проекты обработчиков для них.

Проект OpenKinect – кроссплатформенная библиотека (libfreenect) для работы с kinect под Mac Os, Linux, WIndows. Поддерживаются C++, C Sharp, Java, Lisp, Python. Ведутся работы для интеграции существующих наработок с  OpenCV, MATLAB, LabView. В рамках данного проекта разработаны утилиты для записи всех данных получаемых с кинекта в файлы – Record, а также для эмуляции кинекта – Fakenect. В вики этого проекта содержится подборка информации по всей подноготной кинекта – описание регистров устройства, протокола передачи данных на уровне USB-протокола и т.п. – если готовы ковыряться с самого нижнего уровня – начать лучше всего оттуда. Надо понимать, что если вы используете драйвер от OpenKinect то всю работу по анализу изображений и звуков – вы берете на себя.

Как видите – особо не густо. Данные как-то надо обрабатывать. А тут выбор тоже не очень большой.

Какие библиотеки могут быть использованы для определения команд через Kinect:

OpenCV – мощный набор алгоритмов из области компьютерного зрения. Кроссплатформенная (в том числе под Android). Поддерживает C/C++, Python. Подготовка изображения для анализа, всевозможные фильтры, распознавание лиц и жестов, отслеживание объектов на изображении. Умеет таскать картинку прямо с камеры. Аналоги мне не известны. Для обработки изображения с камер, пожалуй, единственный выбор.

OpenNi – универсальный набор функций для получения данных с различных устройств (включая ASUS WAVI/Xtion). Набор API для обработки данных, получаемых от драйверов сенсоров для реализации “естественного” интерфейса – обработки команд пользователей распознаваемых из 3d сцен. При начале работы приложение, используя возможности данного фреймворка, определяет какие сенсоры доступны и на основе данных получаемых от них формирует граф состоящий из узлов особого типа. Узлы представляют собой абстракцию для каждого типа – устройства, пользователя или карты глубины. Как и SDK от Microsoft, openni умеет определять “скелетон” человека и его позу. Если хотите чего-то большего – анализировать изображения все равно придется самостоятельно, однако универсальный программный интерфейс для работы с устройствами от различных производителей – в некоторых случаях суровый довод “За”. Доступно для C/C++.

Интересный пример использования OpenNi для экспорта движений для Blender или MotionBuilder – Brekel Kinect.

Дальнейшая информация для изучения:

Стерео-зрение, по русски, для ничего не понимающих – http://habrahabr.ru/blogs/image_processing/130300/

Недавние исследования от Стенфорда, на тему распознавания жестов рук – http://www.stanford.edu/class/ee368/Project_11/Reports/Tang_Hand_Gesture_Recognition.pdf

Работа об определении людей на изображении с помощью Kinect – http://cvrc.ece.utexas.edu/Publications/HAU3D11_Xia.pdf

Эксперименты с матрицей глубины, получаемой от Кинекта – http://mathnathan.com/2011/02/03/depthvsdistance/

Интересные идеи применения кинект-подобных устройств – http://developkinect.com/

Как выучить английский?

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

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

В изучении иностранного языка выделяет несколько направлений:
1) восприятие языка на слух (общение с native-спикерами, просмотр адаптированного и не очень видео, прослушивание аудио-книжек)
2) способность так или иначе формулировать свои мысли (изучение распространенных языковых конструкций, наработка словарной базы, чтение книг статей и журналов)
3) грамматика (банально обратиться к учебникам и правилам, есть интерактивные курсы, где правила могут подаваться в игровой форме, что облегчает усваивание)
4) произношение (общение с native-спикерами, упражнения на фонетику, изучение специальных словарей где есть возможность прослушать каждое слово)

Чтобы в изучении языка не пропал интерес – важно, чтобы фильмы, книги и разговоры были посвящены теме, которая вам действительно интересны.

Восприятие языка на слух:

Фильмы на английском языке – все равно откуда тащить (пиратская бухта, рутрекер, http://tracker.hdclub.com.ua, етс). Субтитры для почти любых фильмов берутся отсюда – www.subscene.com (или http://notabenoid.com/). При выборе субтитров, не лишним будет принять во внимание, кто этот фирм запустил в интернет – группа релизеров. Например, вы скачали фильм “J Edgar 2011 DVDRip XviD-PADDO”, ищем на subscene фильм J Edgar, и, среди списка возможных субтитров, выбираем вариант English версии PADDO: English J.Edgar.2011.DVDRip.XviD-PADDO.

Субтитры для сериалов – www.addic7ed.com. Здесь абсолютно тот же принцип подбора субтитров – находим сериал, сезон и подбираем интересующий нас язык и группу подготовившую серию.

Если нету синхронизации для dvd/avi версиями или скорость не совпадают:
VLC player – обладает функцией изменения скорости субтитров (Инструменты->Синхронизация дорожки)
MPC player – может сдвинуть субтитры вперед\назад относительно видео.

Ну или можно воспользоваться какой-нибудь специализированной утилитой навроде Aegisub или аналогами.

Новости, теле-программы и ролики на английском языке – нескончаемыми источником подобных материалов является ютуб и http://eztv.it/. Интересные ролики дающие большой простор для риторики предоставляет ресурс TED.com в разделе Ideas worth spreading (он вообще не очень про изучение английского). http://english-club.tv/ – образовательный канал с программой передач.

Аудио-книги – еще раз упомяну трекеры вообще и пиратскую бухту в частности. Большая коллекция аудио-книжек на иностранных языках (и английском в частности) есть на www.ska4ka.com.

Англоязычное радио – http://sradio.ru/, http://www.shoutcast.com/radio/Talk

Чтение:

На рутрекере встречал пару торрентов под завязку набитую книжками под киндл и прочих электронных читалок.
http://www.greylib.su – там немало художественной литературы на английском языке.
А также статьи и рассылки с сайтов посвященным вашим хобби/профессии.

Поиск собеседников:

При достаточном уровне коммуникабельности – www.facebook.com.
Или порыться на ресурсах типа www.langchats.com или www.language-exchanges.org

Для грамматики:

В качестве фундаментальной базы подойдет серия учебников Headway – http://elt.oup.com/student/headway.
http://www.native-english.ru/grammar – общий обзор английской грамматики.

Как запоминать слова:

http://wordsteps.com/ – удобный он-лайн сервис
Если в век компьютеров кажется, что учить по словарю после каждого раздела учебника немыслимо (что в общем-то баловство и заблуждение) – есть, например, вот такая программа – Anki или BX Language acquisition и, уверен, при желании, можно нарыть тьму аналогов.

http://www.thefreedictionary.com/ – прекрасная база по устойчивым словосочетаниям английского языка.

Ресурсы претендующие на всеохватность:

http://lingualeo.ru/ – аудио-видео материалы на английском, диалоги и тематические словари с оригинальным игровым подходом к самому процессу обучения.

www.englishcentral.com — тематическая подборка разных видео-роликов. Есть специальный раздел посвященный правильному произношению. В разделе словарь демонстрируется примеры использования слов в различном контексте.

www.englishtips.org – художественная и не художественная литература, СМИ, аудиокниги, а также материалы для подготовки и и сдачи экзаменов (в том числе TOEFL и IELTS).

Эти ничем лично меня не зацепили, но отзывы о них положительные:
http://www.bellenglish.com/
http://www.perfectyourenglish.com
http://www.englishpractice.com/
http://linguapark.ru/

В качестве ЗЫ, некоторые любопытные методики изучения английского

Методика Замяткина – основывается на прослушивании аудио диалогов и чтении литературы. Можно отыскать на трекерах.
Метод чтения Ильи Франкла – способствующий улучшенному освоению языка.

Небезынтересные рассуждения касательно эффективных методов изучения английского изложены в статьях на сайте http://antimoon.com/ – расчет минимального числа часов в неделю, с которыми возможен эффективный прогресс. Перед закачиванием гигабайтов материалов рекомендую ознакомится, чтобы разработать себе продуктивный план изучения.

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

И, на посошок, ресурсы для изучения не только английского:

http://duolingo.com/
www.livemocha.com
www.busuu.com
www.uz-translations.su

UPDATE 29.11.2012
Книги на английском (бесплатные онлайн библиотеки):
http://classicshorts.com/ – короткие рассказы разных жанров
http://www.readprint.com/ – классическая литература
http://www.publicbookshelf.com/ – романы на английском
http://www.free-ebooks.net/ – большая коллекция книг на английском
http://chestofbooks.com/ – online-библиотека книг на английском

Английский для детей (уровень Beginner и Elementary):
http://www.magickeys.com/books/ – яркие красочные истории на английском

UPDATE 12.03.2013

Аудио:
http://www.podcastsinenglish.com – подкасты разбитые по сложности на несколько уровней
http://www.elllo.org/ – а здесь после прослушивания материала вам придется проверить свои знания отвечая на вопросы
http://www.esl-lab.com/ – примеры диалогов в разных ситуациях и тесты по ним
http://www.justvocabulary.com/ – аудио-уроки на развитие словарного запаса

грамматика:
http://www.alleng.ru/english/engl.htm – грамматика и учебники
http://www.englisch-hilfen.de/en/index.htm – здесь можно проверить свою грамматику английского с помощью тестовых заданий
http://www.learnamericanenglishonline.com/ – видео-уроки и упражнения разбитые на уровни
http://a4esl.org/ – кроссворды на английском и тесты на грамматику

все скопом:
http://www.englishclub.com/ – приятный сайт содержащий все что нужно для чтения/написания/восприятия на слух/и наконец практике разговорного английского
http://www.manythings.org/ – наряду с обычным учебным материалом также содержит сленг, пословицы, анаграммы
http://www.rong-chang.com/ – старомодный и слегка страховидный сайт содержащий тем не менее изрядную порцию по всем аспектам изучения языка
http://abc-english-grammar.com/ – огромная и слабо структурированная свалка ресурсов по изучения английского
http://www.study.ru – кроме обычного набора материалов для онлайн обучения есть расписание встреч разговорного клуба, семинаров и тп

готовимся к TOEFL:
http://www.rapidfile.ru/1229-10-osnovnykh-posobijj-po-sdache-jekzamena-toefl.html – 10 основных пособий по сдаче экзамена TOEFL
(не, не кликабельно – копируйте в адресную строку браузера)
http://www.engvid.com/ – большой набор видео-лекций
http://elf-english.ru/2009/09/toefl-onlajn-resursy/ – обзор ресурсов для подготовки к TOEFL
http://lengish.com/tests/toefl – 4 примера экзамена TOEFL
http://i-courses.org/ – примеры вариантов TOEFL iBT
http://www.eslgold.com/toefl/links.html – сcылки на материалы для подготовки к TOEFL
http://www.wiziq.com/tests/toefl-ibt – примеры TOEFL тестов
http://luyenthitienganh.net/toefl-tests.html – вопросы TOEFL экзамена
http://www.goodlucktoefl.com/3-3-online_TOEFL_training.html – online-тренинг для сдачи TOEFL
http://toefl-tutorial.blogspot.ru/2010/05/toelf-skill-development-audio-for-free.html – аудио материалы для подготовки к TOEFL

Словари:
http://visual.merriam-webster.com/ – словарь который не просто объясняет то или иное слово, но и старается наглядно его продемонстрировать
http://dictionary.cambridge.org/ – кэмбриджский словарь

разное:
http://www.learnenglishfeelgood.com – английский для путешественников, различия английского английского от американского и тп
http://www.grammarly.com/ – проверяет текст на ошибки. Причем проверяет не только грамматику и но и заодно на плагиат. При необходимости старается скорректировать стиль.
http://www.americanidioms.net/ – американские идиомы
http://imtranslator.net/translate-and-speak/ – если вам интересно как будет звучать на английском языке та или иная фраза не обязательно обращаться к translate.google.com.
данный сервис проговаривает фразы почти как носитель языка.
http://www.voanews.com – новостной/аналитический сайт голос Америки
http://habrahabr.ru/post/169351/ – интересная идея для использования субтитров совместно со словарями при просмотре видео

Не только английский:
http://www.languages-study.com – ресурс посвященный изучению разных языков в интернете
http://langled.com/ – социальная сеть для изученающих языки

Кросс-платформенная мобильная разработка – краткий тулзуарий

IOs, Android, Bada, WindowsPhone, Blackberry … число здравствующих (и упрямо подающих признаки жизни) мобильных платформ переваливает за все рамки разумного, а разработчики с трудом подавляют стенания, заслышав бодрые воззвания менеджмента о поддержке очередной платформы…

Я думаю, у каждого человека связанного с разработкой, во время очередного умственного затмения, вызванного прогрессирующим дедлайном, возникала такая банальная мысль – ну почему, черт возьми, нельзя делать 1 (один) проект, который неким магическим образом берет и деплойится на все платформы, в нативном, предсказуемом виде, на основе единой базы кода – одного единственного проекта. Есть несколько фреймворков, которые декларируют такие возможности.

По факту в них используются три подхода – генерация интерфейсов на основе javascript/html5, на си-подобных языках а то и смешивая и то и другое. Устройство-зависимые вещи, в некоторых случаях, запихиваются всем скопом в единый пакет (AppCelerator в этом плане сильно расстраивает, хотя разработчики и клянутся, что прилагают не мыслимые усилия по оптимизации результирующих приложений) или же на моменте компиляции происходит мучительный выбор конкретной платформы и устройства, под которое должен быть собран пакет (MoSync поразил нескончаемым списком чекбоксов, сортированным по брендам и моделям телефонов). Приверженность к универсальности – накладывает ограничения на доступный функционал и производительность – просто потому, что на разных платформах разный набор стандартных контролов, и разный взгляд на оптимальный UX. Словом, не все так радужно как бы хотелось, однако проекты эти развиваются, горделивые разделы Partners на их сайтах пестрят звучными именами, а потому не будем окончательно отбрасывать эту утопическую идею – в конечном счете все зависит от целей и рамок проекта.

Ниже результаты экспериментов лета 2011 года, когда для реализации проекта выбиралось средство. Критерии были нехитрыми – единая база кода, кроссплатформенность (было достаточно iOs, Android), возможность создания собственных элементов GUI, связь с web-сервисами. Средства, которым можно решать задачи, не отвлекаясь на укрощение самого инструмента, я на тот момент не нашел (рассматривались phonegap, mosync, marmalade и appcelerator).

http://www.appcelerator.com – изначально позиционировалась как среда разработки на javascript на основе собственного фреймворка в специально-подготовленной для мобильной разработки сборки eclipse. В настоящее время добавлена поддержка HTML5, CSS3, критичные участки кода можно писать на “родных” для целевой платформы языках – Java или Objective-C. Приятное Ide. Для того чтобы писать под iOs нужна Mac ось. Базовая версия – бесплатна, однако по заверениям распространителей вся мощь данной платформы для разработки заключается в использовании дополнительных платных расширений (50 долларов в месяц). Летом 2011 была очень сырой.

http://phonegap.com/ – одни из первых решили плюнуть на нативный “look and feel” и обратиться к универсальному везде и всюду средству – web-интерфейсам. В связи с этим основной язык разработки – html, можно использовать javascript, jquery, css. Основные платформы потенциально поддерживаются все (iOs, Android, WebOs, Bada, Windows Phone, Symbian), на практике – для безболезненной разработки под iOs опять же необходима рабочая станция с Mac, для каждой платформы надлежит выкачивать sdk. Поддерживают ряд дополнительных библиотек для создания приложений, особо хочу выделить Sensha Touch. Процесс сборки финальных пакетов достаточно интересный – вы подготавливаете код проекта, загружаете его на специальный сервис – https://build.phonegap.com/ и получаете взамен пакет готовый для установки на целевую платформу. Список поддерживаемых возможностей – http://phonegap.com/about/features. Цена для open source проектов – бесплатна, в силу того что статус билд-сервисов по прежнему бета – с других разработчиков деньги не берут, но с релизом ситуация может измениться. Поддержка возможностей устройств расстроила.

http://www.mosync.com/ – основной язык – C++, можно использовать JavaScript и html5. Среда разработки – специально подготовленная сборка Eclipse, на сайте описываются варианты интеграции в Visual Studio. Blackberry и Windows Phone 7 не поддерживается, под все остальное можно смело писать  Android iOs, Windows Mobile, Symbian, JavaME. Под iOs на Windows писать нельзя – требуется непременно Mac Os. Есть подробное описание статуса поддержки платформо-зависимых элементов – http://www.mosync.com/documentation/manualpages/featureplatform-matrix. Если пишете что-то под GPL – mosync sdk можно использовать бесплатно, иначе лицензия стоит от 200 евро.

http://www.madewithmarmalade.com/ – основной язык – c++ (Код пишется в Visual Studio или Xcode). Видел упоминания о возможности использовать вставки на нативных для целевой платформы  языках. Для написания по под iOs можно обойтись ПК с Windows. Симулятор устройств свой. Слышал жалобы на завидную прожорливость в плане ресурсов и объем получающихся бинарников. Лицензия – 500 долларов.

http://xamarin.com/monotouch и http://xamarin.com/monoforandroid. Любопытнейший проект ведут создатели свободной версии Sharp – Mono, предлагая всем желающим коммерческие версии библиотек для разработки на C Sharp под Windows Phone, Android и iOs. При необходимости можно прибегать к c++, objective-c и работать с готовыми библиотеками специфичными для обоих платформа. Модуль для каждой платформы стоит 400 долларов. Разработка ведется в MonoDevelop IDE.

Embarcadero RAD Studio (современная реинкарнация дельфи и с++ билдера). Хоть специализируется и не на мобильной разработке, но, в том числе, предоставляет достаточно многообещающие средства для создания приложений по iOs-based устройства на основе Fire Monkey. Декларируется грядущая поддержка Android и Blackberry устройств. Цена для одинокого разработчика пока дороговата (более 3500 долларов), редакции только для мобильной разработки нет, и пока поддержки дополнительных мобильных операционных систем нет – рассматривать ее не стоит. Но поглядывать в какую сторону развивается – имеет смысл.

Зы если еще есть какие-то тулзы для подобных целей, было бы интересно почитать про ваш опыт. Как успешный так и нет.

Экспорт данных из базы oracle в excel

Классическая задача – есть база с данными. Данные эти заказчик желает лицезреть в виде красиво оформленных экселек заданного вида. Мало того, что форматирование шаблонов не подлежит обсуждению – в них, для полного счастья, натыканы не только эксельные формулы но и vba-макросы. А сервер может быть как на виндах, так и на никсах, на которых эксели и вовсе не предусмотрены. Как бы это все половчее организовать?

Совсем универсальные – не зависят от типа базы данных, операционной системы и наличия самого экселя на серваке

1 вариант: кросс-платформенно, какая база – не принципиально, на сервер ничего офисо-подобного ставить не надо.

Данные дергаем чем удобней – расписывать это не буду, зависит от ситуации. Для формирования отчетности в excel можно воспользоваться библиотеками:

на Java:

JExcelApi,  пример использования – http://www.vogella.de/articles/JavaExcel/article.html
Apache POI  примеры использования подробно расписаны на сайте. Хотя вот тоже неплохой пример на русском.

на Perl:

Используя пакет Excel-Writer-XLSX (бывшие Spreadsheet::WriteExcel и Spreadsheet::ParseExcel) подробнейшие примеры использования поставляются вместе с пакетом.

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

2 вариант: воткнуть куда-нибудь Open Office и при необходимости использовать OOO SDK, например, через жаву. Официальные сниппеты валяются тут. Т.е. схема взаимодействия следующая – сервер получает запрос на формирование отчета, он подготавливает данные и перенаправляет их на сторонний сервис на том же сервере или другом. Там используя OpenOffice создается excel файл и возвращается основному серверу, который уже возвращает их клиенту. Из минусов – опен офис таки тяжеловат, на перекачивание данных туда-сюда будет уходить некоторое время. Из плюсов – проблем совместимости содержимого эксель-шаблонов не встречал – макросы, формулы, форматирование – работает все.  Ну и опять же кроссплатформенно получается – благо опен офис вполне себе фурычит на никсах, виндах, да маках.

3  вариант: Аналогично варианту 2, однако, при необходимости создать документ эксель, оракловый сервер обращается к вашему самописному сервису на винде, где установлен эксель, предоставляя данные. Для формирования задействован “родной” sharp. Из минусов – таки нужен ексель и винда. Из плюсов – проблемы совместимости исключены.

Оракло-специфичные:

4 вариант: если оракл версии 11 – самый оптимальный – использовать Oracle Bi Publisher – о том как преобразовать пользовательские шаблоны к вашим данным он позаботиться сам. Ваша задача адаптировать их с помощью встроенных средств внести соответствующие изменения в механизм формирования отчетов для клиентов.

5 вариант: если версия оракла не позволяет воспользоваться возможностями Bi Publisher, а скупость – использовать готовые пакеты для этих целей  – придется ваять таки ручками на pl/sql. Снипеты водятся в интернетах. (http://akdora.wordpress.com/2009/02/06/how-to-write-excel-via-plsql-and-save-the-file-to-a-directory/, http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:728625409049, PL/SQL ExcelDocumentType)

Искусственный интеллект – типовые задачи – видео-уроки

В стародавние времена, меня до глубины души оскорбило когда я – зеленющий студент-первак, заявившись учится на программиста в библиотеке получил целую стопку увесистых книжищ, общее содержание коих можно было описать как “всякая разная математика”. И не одной про компьютеры и программирование. Я всей душой заподозрил подлый подвох – ну на хрена будущему хакеру матан, дискра или диффуры, не будь они к ночи помянуты?! Я был наивен и сурово не прав. (флеймить по чему это так мне лень, но в качестве иллюстрации зачем это все я оставлю тут пару ссылок – Google AI Challenge и Список конкурсов по искусственному интеллекту)

В данном посте складируются видео-лекции стенфордского курса “введение в искусственный интеллект” проходившего в качестве эксперимента по удаленному обучению осенью 2011 года. Лекции разбиты по темам и могут быть найдены на ютубе. Я же, по мере необходимости, отмечал видео, где демонстрируется решение типовых задач (математических!), с которыми мне не удавалось выехать на чистой логике, а приходилось думать.

Определение зависимых/независимых триплетов в сетях Байеса – тут , а вот здесь – разбор задачи по этой теме – d-separation.

На основе правила выше – примеры решения задач.

Задачи на правило Байеса: вычисление вероятностей вида P(“today”|SPAM) и P(“today”|HAM) – тут и тут.

Еще один пример применения правила Байеса на практике (P(C,+), P(C|+) на основе P(+|C), P(-|C)) – рассмотрение вероятностей корректного диагнозирования болезни раком на основе тестов. Определение вероятности болезни раком на основе результатов двух тестов. Случаи для P(C|++), P(C|+-) – Рассматриваются условия когда один тест положительный а второй отрицательный, а также когда оба теста положительны. Случай P(+2|+1) – Разбор вопроса определения вероятности положительного результата второго теста при условии того что первый тест выдал положительный результат.

Определение числа параметров для описания сети Байеса. В общем словаре 12 слов. В анализируемом тексте 3 слова. Вероятность того что P(“Secret”|SPAM)=1/3. (Подробные условия здесь) Сколько всего параметров необходимо для описания такой сети – ответ.

Вывод формулы для получения коэффициентов функции потерь (или регрессии), используемой для корректировки стоимости выбора решений и значения вероятностей – тут. (для уравнений вида f(x) = U1*x+U0).

Наглядный пример использованная метода k-ближайших соседей для классификации частиц – тут

Практическое применение Марковского процесса принятия решений перемещение в лабиринте с ячейками бонусов и штрафов (цель не угодить в -100) – тут.

Пример вычисления вероятностей в цепи Маркова – какова вероятность дождя и солнца на надцатый день – тут.

Использование минимаксного критерия на примере дерева вариантов со фактором случайных исходов – подбрасывания монетки  – тут.

Есть игра с двумя игроками: Мин и Макс. Для каждого есть две стратегии игры и распределение вероятности, что будет сыграна та или иная стратегия. Общая задача – определить вероятности выигрыша и того какая стратегия будет сыграна тем или иным игроком, при условии что нет доминантной стратегии – тут (Общее введение – тут и тут)

Пример вычисления весов для частиц частичных фильтров при условии что наши датчики предоставили нам некоторые результаты измерений – тут.

В закладках также нашел:

Все лекции с задачками, ответами и решениями – тут

Искусственный интеллект в изложении профессоров из Кембриджа – http://artint.info/index.html

Стенфордские же лекции по родственному курсу Машинное обучение – http://sandeep-aparajit.blogspot.com/2010/07/machine-learning-tutorial-lectures.html

Андроид – рисование всякой гуйни [маленькие хитрости, куча ссылок]

Как это ни прискорбно, но для создания диалогов в андроиде вменяемого инструмента до сих пор нет. DroidDraw и AppInventor, к сожалению, всеръез для этой цели не годятся. Здесь собраны ссылки на некоторые типовые задачи, с которыми, по началу, сталкивается каждый разработчик под дроид, желающий обеспечить своего пользователя удобными и ладными интерфейсами.

Маленькие и не очень хитрости для создания не “вырви-глаз” интерфейсов.

“Резиновый” или растягивающийся дизайн интерфейса – пример использования android:layout_weight http://stackoverflow.com/questions/4961355/percentage-width-in-a-relativelayout

Как рисовать в качестве фона (в том числе и для контролов) всякие фигуры с градиентом и без. Кроме сниппетов наличествуют наглядные рисунки-примеры того-что-будет-если-сделать-именно-так  – http://megadarja.blogspot.com/2011/03/android-xml-drawables.html

В догонку к предыдущему – детальное, без сантиментов, описание xml разметки для элемента drawable – http://idunnolol.com/android/drawables.html. На http://developer.android.com/ в свое время до аналогичной инфы не докопался.

Как научить прогресс-бар не давать пользователю скучать – несколько примеров создания кастомных progress-bar диалогов –  http://stackoverflow.com/questions/5647037/progressbar-colour

Что делать, если стандартных компонентов мало и хочется что-нибудь этакого? Хорошие примеры с исходниками для поиграться есть тут – http://habrahabr.ru/blogs/android_development/124879/.

Небольшой обзор бесплатных UI-компонентов и библиотек – http://www.androiduipatterns.com/2011/10/free-android-ui-library-component.html

Библиотека для красивого перелистывания экранов – http://viewpagerindicator.com/

А вообще, перед созданием гуи следует обратить, внимание на официальную информацию – http://developer.android.com/design/index.html

В качестве зы – набор умелого фотошопера для прототипирования интерфейсов – http://photoshopfreebies.com/view-download/245/google-android-gui-application-mockup-psd.html

Полезные либы да фреймворвки [code reuse]

Самое главное качество в программисте – не написать лишнего. Наборы классов и всемогущих компонентов растут как на дрожжах. Но вот ведь не задача – в момент нужды, часто, так сразу и не сообразишь, чем конкретно удобнее воспользоваться во славу “code reuse” и разумной лени.

В данном посте буду собирать библиотеки нацеленные на решение узкоспециализированных задач. Boost или QT это все же банально и претендует на всеохватываемость,

http://alglib.sources.ru/ – добротная математическая библиотека. Диффуры, линейная алгебра, нейронные сети. Есть байндинги к C++, C Sharp, VB, Pascal. Кроссплатформенна (Windows, Linux, Solaris).

http://htk.eng.cam.ac.uk/ – библиотека для построения и управления скрытыми моделями Маркова. Используется в основном в исследованиях распознавания речи но ничто не мешает задействовать ее в других сферах. Кроссплатформенна. Писана на C.

http://www.mico.org/ – маленькая и шустрая библиотека для интеграции ваших C++-приложений со сторонними, используя CORBA. В состав входит утилита для генерация классов-скелетонов на основе IDL-описаний. Кросс-платформенная.

http://otl.sourceforge.net/ – удобная кроссплатформенная библиотека для работы с базами данных Oracle. С++. Основана на концепции потоков.

http://pointclouds.org/ – данная C++ библиотека предназначена для работы с облаком точек – фильтрация, сегментация, восстановление контура и т.п. Полезно при анализе 2д сцен и восстновлении по 2д изображениям 3д-объектов и проекций.

http://www.graphviz.org/ – набор компонент для визуалиции UML-схем, графов и т.п. Описываете схему на языке dot. Есть байндинги для c++/java.

http://www.openscenegraph.org – мощная, до нельзя кросс-платформенная библиотека для визуализации (игры, симуляторы – это все о ней). Кроме всего прочего включает в себя openthreads объектно-ориентированную библиотеку потоков. С++.