Saturday, December 31, 2011

2011

Клёвый был год! Даже не смотря на то, что именно в этом году мир потерял много уважаемых людей.

Кроме этого в 2011 году произошло много событий хороших и не очень. Хороших было больше!
Из значимых - утвердили таки новый стандарт C++.

Следующий год - год дракона, будет ещё лучше!
Всех с новым 2012 годом!

Thursday, December 8, 2011

iCTF 2011 Challenge 12 Writeup

Challenge 12 ($150)

Given the audio file "123.wav". When listening it, you will get a "silence" after the last phrase "... my price is ...".

But when you'll open a file in hex editor, you'll see a hint "Multiply the given price" at the offset 0x4E.

Open "123.wav" in any audio editor (e.g. Audacity) and get the frequency of "silence" sound after the last phrase. The frequency is equal to 21000 Hz. So using the hint, multiply file's name value by frequency value and get the answer.
Answer: 2583000

Tuesday, November 29, 2011

Pulsate

Решил продолжить тему потрясающе простой и красивой флешки Pulsate, после того как AViktorov сделал её клон на Lua.

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

Математика для расчёта столкновений двух кругов подразумевает два варианта.
Первый — когда происходит внешнее столкновение двух кругов, и второй — при котором один круг находится внутри другого, то есть происходит внутреннее столкновение.

В первом варианте определить столкновение можно узнав расстояние d между центрами кругов и проверив является ли сумма радиуса большего круга R и радиуса меньшего круга r больше или равной расстояния d. То есть при столкновении L = 0.
Для того чтобы определить находится ли один круг находится внутри другого нужно определить больший из двух кругов по радиусу и затем проверить меньше ли расстояние d между центрами кругов, чем радиус большего круга R. Если d < R, то один круг находится внутри другого.

Во втором варианте для того чтобы определить столкновение необходим предпринять следующее. Определив расстояние между центрами кругов d, и зная радиусы обеих кругов, нужно проверить является ли сумма d и r больше или равной R. В случае столкновения L = 0.
В ходе экспериментов задав интервалы радиусов и соответствующие им ноты, получаются очень атмосферные мелодии.


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


Исходный код основных методов столкновений представлен ниже:

struct Circle {

    Circle(
int x, int y) : x(x), y(y), radius(0), color(D3DCOLOR_RGBA(0,155,225,255)), is_grow(true) { }

    
int x;
    
int y;
    
float radius;
    
int color;
    
bool is_grow;
};

const int MAX_CIRCLES_NUM = 32;

std::vector
circles;
//-----------------------------------------------------------------------------
// Checks circles for intersection and update its sizes
//-----------------------------------------------------------------------------
void updateCircles() {
    
for (int i = 0; i < circles.size(); i++) {
        
for (int j = 0; j < circles.size(); j++) {
            
// prevent checking with self
            
if (i == j) continue;

            
// get the squared distances between centers of circles
            
float distance_squared = (circles[i].x - circles[j].x) * (circles[i].x - circles[j].x) + (circles[i].y - circles[j].y) * (circles[i].y - circles[j].y);   
            
// get radiuses and distance
            
float max_radius = max(circles[i].radius, circles[j].radius);
            
float min_radius = min(circles[i].radius, circles[j].radius);
            
float distance = sqrt(distance_squared);
            
float radius =
circles[i].radius + circles[j].radius;

            
// circle inside another circle
            
if (max_radius >= distance) {
                
if (max_radius - (distance + min_radius) <= 0) {
                    
// prevent overgrow
                    
if (circles[i].radius > circles[j].radius) {
                        circles[i].radius = max_radius;
                        circles[j].radius = max_radius - distance;
                    }
                    circles[i].is_grow = !circles[i].is_grow;
                    circles[j].is_grow = !circles[j].is_grow;                               
           
                    playIntersectionSound(max_radius);
                }           
            }
else {               
                
// circles outside
                
if (distance - radius <= 0) {
                    circles[i].is_grow =
false;
                    circles[j].is_grow =
false;
                    playIntersectionSound(max_radius);
                }
            }
        }

        
// update circles
        
if (circles[i].is_grow) {
            circles[i].radius += grow_speed;
        }
else {
            circles[i].radius -= grow_speed;
        }
        
if (circles[i].radius <= 0) {
            circles[i].radius = 0;
            circles[i].is_grow =
true;
        }

    }
}

//-----------------------------------------------------------------------------
// Update Game
//-----------------------------------------------------------------------------
void updateGame() {

    // add one more circle
    
if (mouse_lbutton_clicked) {
        
if (circles.size() < MAX_CIRCLES_NUM) {
            circles.push_back(Circle(mouse_lbutton_down.x,mouse_lbutton_down.y));
        }
    }

    
// crear circles
    
if (rbutton_clicked) {
        circles.clear();
    }

    
// draw circles
    
for (int i = 0; i < circles.size(); i++) {
        primitive->setPenColor(circles[i].color);
        primitive->drawCircle(circles[i].x,circles[i].y,circles[i].radius,50);
// 50 sections
    }

    
// check for intersections and update circles sizes
    updateCircles();
}

* This source code was highlighted with Source Code Highlighter.

Sunday, November 27, 2011

School CTF 2011

School CTF — это соревнования по защите информации, проводимые SiBears, с целью популяризации движения CTF. В этом году соревнования будут проводиться во второй раз. Принять участие в соревнованиях может каждый. Соревнования проводятся на русском и английском языках. В качестве платформы для проведения соревнований используется сайт проекта BlackBox.
School CTF 2011 будут проходить 4-го декабря 2011 года с 12:00 до 19:00 (GMT+7).
Более подробно с правилами проведения соревнований можно ознакомится здесь.
Официальный сайт соревнований — School CTF.

Для того чтобы принять участие в соревнованиях необходимо зарегистрироваться на сайте BlackBox и создать свою команду. Для создания команды необходимо привязать PGP ключ к своему аккаунту. Команда может состоять лишь из одного человека.
Найти ID своего PGP ключа можно на сайте subkeys.pgp.net. Можно также использовать и PGP ключ созданный на сервере ключей pgp.mit.edu.

Для тренировки перед соревнованиями можно размяться решив задания School CTF 2011 Warmup.

Sunday, November 20, 2011

Столик в углу

По совету друга решил посмотреть сериал "Столик в углу" (англ. The Booth At The End). Сериал представляет собой мистический триллер и повествует о загадочном человеке, сидящем за столиком в углу закусочной. К этому человеку приходят разные люди с просьбами осуществить желания, а он в свою очередь говорит им, что необходимо сделать для осуществления желаний.
Скажу сразу, что сериал имеет очень необычный формат серий. Одна серия занимает 2-3 минуты. Было бы смешно, если бы они выходили раз в неделю)) Но авторы решили объединить эти микросерии группами (по 12 штук) в эпизоды, что делает просмотр более удобным (если конечно убрать интро и аутро серий).
Самое интересное, что всё действие происходит только в закусочной, но, тем не менее, целостность и вся картина происходящего в сериале, о котором узнаёшь в ходе диалогов, сохраняется.
Первый сезон закончился очень интересно. Жду продолжения.

Monday, October 31, 2011

Oil Rush

Last week I got the access key to the beta version of Oil Rush game. Oil Rush — is a real-time naval strategy game, based on group control. Last week a new update 0.82 of this game was released, so I downloaded it immediately.
After playing tutorials, I decided to play versus AI and I'm really impressed. Oil Rush is very fun and fast game with interesting and maybe unique game play — some kind of a mix of RTS and tower defence. And it's very easy to learn. Screenshot from a game versus AI, that I won, is below.
Game soundtrack by Paralyzah is totally awesome. BTW it's now available in high quality as a pre-order bonus! Game's graphics are pretty neat too.
The game is multiplatform and available for Microsoft Windows, GNU/Linux and Apple Mac OS.
Here you can see a walkthrough video of a mission from the single player campaign, from game's official website:
More video is also available on the official site.

Sunday, October 30, 2011

Peculiar Jacques

Peculiar Jacques is a fictional Canadian comedy musician, accordionist from HIMYM S07E07. Even last.fm doesn't know about him, for a while. Anyway, "Weird Al" Yankovic is really funny.

Thursday, October 27, 2011

Интернет для Бизнеса 2011

Сегодня в Томске прошла концеренция/семинар «Интернет для Бизнеса 2011» – единственное на данный момент крупное действующее отраслевое мероприятие в ИТ-сфере Томска, как написано на сайте мероприятия.


Пришёл специально пораньше, так как количество зарегистрированных на мероприятие превысило ожидаемое почти в два раза, и составило более 600 человек. Местом для проведения конференции выбрали МКЦ ТПУ. Когда прибыл в МКЦ небольшое количество людей уже ждали начала регистрации. Пока ждал немного поговорил с организатором Даниилом Ханиным. Затем пообщался немного с Александром Гришиным, который представляет сообщество томских блогеров. После этого началась регистрация и образовалась довольно внушительная очередь. Получив бейдж и пакет с раздаткой, пошёл в зал занять место. Зал постепенно заполнился и конференция началась.
Со вступительным словом выступил представитель администрации города Денис Молотков, который рассказал как познакомился с интернетом. Затем с приветственным словом выступил Илья Пономарёв, отметивший важность интернета в современном бизнесе и обществе.
После этого началась серия презентаций докладчиков. Первым выступил Руслан Фатиханов с докладом "Интернет в цифрах. Рунет. Тонет. Аудитория. Аналитика. События", осветивший состояние Рунета и Тонета в цифрах. Следующей выступила Алёна Попова с докладом на тему "Развитие женского предпринимательства и инвестиционной активности в ИТ-сфере". После этого выступил Даниил Ханин с темой презентации "Показы, клики или статика, что выбрать?". Презентация Даниила выглядела очень здорово, и, как выяснилось позже, во время секции вопросов, была сделана с использованием этого сайта. В презентации было много интересных цифр и расчётов.
Следующий докладчик Стас Елисеев рассказал о том, откуда берутся цены для разработки сайта, представив свою презентацию "Михалыч, чё так дорого?" в виде мультика. Отличный на мой взгляд доклад.
После него доложился немного опоздавший Виталий Душкин из Яндекса с презентацией "Откуда взять клиентов? Эффективные инструменты поиска клиентов в интернете". Виталий рассказал об инструментах, которые помогают компаниям улучшить работу с клиентами.
Шестым делал доклад Александр Оленев на тему "Хозяин, задание выполнено! Решает ли сайт свои задачи и как повысить его эффективность". Докладчик не был готов к презентации и рассказывал очевидные, на мой взгляд вещи, поэтому публике было не интересно слушать данный доклад.
Последним выступил Артем Бочков с презентацией "Как запустить интернет-магазин и не разочароваться?". Хорошая презентация, но как показалось немного затянута. Видимо из-за того, что это был последний доклад.
Все презентации докладчиков доступны по этой ссылке.
После небольшого перерыва, во время которого удалось перекусить, развиртуалиться с и пообщаться представителями IT компаний, начался круглый стол: Как добиться успеха в IT. В нём принимали участие Роман Чаднов (Facebook) и Денис Шергин (Unigine).
Удалось задать вопрос Роману Чаднову по конференц связи. Затем Денис сделал отличную презентацию об истории успеха компании, и показал видео проектов.
Также за вопрос про дальнейшее развитие движка Unigine, а именно, я спросил о планах портирования на Flash 11 получил ключ доступа к бета-версии игры Oil Rush.

Tuesday, October 25, 2011

Music similarity

Вступление песни Найк Борзов - Художник напомнило тему из сериала How I Met Your Mother, которая называется Hey Beautiful в исполнении The Solids.

Saturday, October 22, 2011

Занятие по InfoSec в Томске #6 - Автоматический поиск и эксплуатирования уязвимостей

Шестая лекция по информационной безопасности была посвящена автоматическому поиску и эксплуатирования уязвимостей. В этот раз пришло на удивление мало человек.
На занятии были рассмотрены самые мощные и известные системы по поиску и проверке уязвимостей на сайтах, такие как Nmap, Nikto, Metasploit, XSpider и другие. Данные системы очень помогают предотвращать разработчикам ошибки, недочёты и уязвимости.
Отличная статья лектора по обзору доступна по этой ссылке.
Также на примере сайта с примерами был продемонстрирован поиск уязвимостей с использованием Nmap и XSpider.

Friday, October 21, 2011

Funny similarity

Коллега заметил, что этот козловой кран, очень напоминает боевую машину AT-AT из Star Wars. И ведь действительно есть сходство :))
Теперь каждый раз когда я вижу его сразу вспоминаю об этом весёлом сходстве.

Thursday, October 20, 2011

TV Series Idea

Не так давно возникла одна интересная идея для сериалов.
Заключается идея в переплетении сюжетных линий (скорее всего разово, хотя не исключено периодически). Таким образом можно получить аудиторию, которая следит за сериалами, для другого сериала. Особенно, если провести обзор сериалов, и найти те, аудитория которых пересекается. Примеры могут быть совершенно безумными - Хаус лечит Теда Мосби из HIMYM, ну или Пенни из Теории влюбляется в Барни Стинсона.
Подобный, но очень отдалённый метод завлекания аудитории сейчас уже используется, путем приглашения special guests.
P.S. Как выяснилось уже есть такой опыт в российских сериалах.

Tuesday, October 18, 2011

HackDay 18 в Томске переносится

На сайте мероприятия HackDay написали, что планируемый HackDay #18 в Томске переносится на весну.
Ориентировочно на 14-15 апреля.


Saturday, October 15, 2011

Занятие по InfoSec в Томске #5 - Fuzzing & Reverse engineering

Сегодня прошла пятая лекция по информационной безопасности - очень необычная и интересная (тем более в день рождения лектора), в основном была посвящана теории. В этот раз было не много человек. Около двадцати. Но занятие было довольно интересное, так как были рассмотрены fuzzing и reverse engineering, а также вопрос морали в поиске уязвимостей и смысла проведения занятий по информационной безопасности.
Также были выложены материалы третьего и четвертого занятия и видео записи со всех предыдущих занятий.

Saturday, October 8, 2011

Занятие по InfoSec в Томске #4 - SQL Injection

Сегодня прошло очередное занятие по информационной безопасности. В этот раз темой занятия были SQL инъекции. Несмотря на то, что было мало человек (что по-видимому связано с дождливой погодой), лекция была очень интересной и поучительной. Были рассмотрены отличия инъекций в разных БД.
По традиции после презентации и теории была демонстрация. Под Prodigy были продемонстрированы уязвимости и дефейснут незащищенный тестовый сайт (как в фильмах).
Материалы занятия скоро будут доступны на сайте.

Wednesday, October 5, 2011

C++ 0xB

Заценил вчера фичи из нового стандарта C++ 0x теперь уже скорее всего 0xB.
Под рукой был GGC 4.4 и студия 2010. Так что не удалось протестить все фишки.
Понравилась работа с лямбдами. Такой код под VS2010 компилится без проблем.
auto f = [](){};
Понравилась работа с инициализаторами, типами, nullptr. Здорово сделали перечисления со строгой типизацией и угловые скобки:
std::vector<std::vector<int>> vv;
Заценил теперь не надо ставить пробел между последними угловыми скобками > и > )))
Ещё появились шаблоны с переменным числом аргументов... тут нужно быть аккуратным!!!

Tuesday, October 4, 2011

Android Device Chooser target unknown

Возникла проблема - в окне выбора устройства для установки и отладки (Android Device Chooser) в колонке Target появлялась надпись unknown и State устройства отображался как Offline.


 Причём при переподключении устройства к кабелю проблема устранялась, но не на долго и соответственно не происходил attach дебаггера.
Решением проблемы стало подключение кабеля к другому USB порту.

Saturday, October 1, 2011

Занятие по InfoSec в Томске #3 - RFI/LFI & NULL-byte

Сегодня лекция была дольше чем обычно - и заняла больше часа. Было больше демонстраций, да и тема была достаточно интересной. Рассмотрели уязвимости RFI/LFI (Remote/Local File Inclusion), а также NULL-byte уязвимость. Количество пришедших осталось на том же уровне - в районе 30-ти человек. Причём было несколько человек пришедших впервые. Как всегда материал лекции будет доступен на сайте OISD.
Лекции идут на пользу всем слушателям. Так, например, на основе лекции посвященной уязвимостям XSS участником была опубликована статья на Хабре и получен инвайт. Также был снят небольшой видео материал о проходящих лекциях.


Этот видео материал, а также видео запись с прошедшего занятия можно посмотреть на сайте мероприятия.

Sunday, September 25, 2011

Занятие по InfoSec в Томске #2 - CSRF

Сегодня состоялось второе занятие по защите информации - InfoSec. На этот раз людей было не так много как в первый раз. Пришли в основном люди реально заинтересованные. Было человек 35. Само занятие получилось совсем коротеньким и заняло около 40 минут. Рассмотрели Cross-site request forgery (CSRF) уязвимость и способы как защититься от неё. Как выяснилось многие (почти все) разработчики забывают защититься от этой уязвимости. На примере предыдущего урока был расмотрен пример второго урока, содержащий фрэйм с сорсом формы.

Saturday, September 17, 2011

Занятия по InfoSec в Томске

Сегодня в Томске прошло много всяких интересных событий - парад зомби, футбол и даже концерт Стаса Михайлова. ))) Но речь то не о них, а о вводном занятии по информационной безопасности, которое прошло сегодня в бизнес-инкубаторе "Дружба". Новость об этом событии была размещена на Хабре.

Несмотря на то, что на странице мероприятия вконтакте отметилось чуть больше 50-ти участников, реальное количество пришедших было больше ста! Некоторым даже не хватило мест. Публика в зале была совершенно разной, соответственно и уровень подготовки у всех был разный. Не все сразу понимали о чём идёт речь и что происходит, так как занятие рассчитывалось на тех, у кого есть уже хоть какие-то фундаментальные знания.
Занятия ведёт Сергей Белов (BitWorks). Первое занятие прошло довольно быстро. Сначала была теоретическая и вводная части, затем на практике были продемонстрированы уязвимости XSS.
После этого все желающие смогли задать вопросы и просто пообщаться друг с другом.
В общем отличное получилось мероприятие, жду следующего занятия.

Первый урок уже доступен всем по этой ссылке.
Всю информацию о данном мероприятии можно найти на сайте Open InfoSec Days.
Скоро на сайт обещают выложить видео прошедшего занятия.

Также создана официальная группа Open InfoSec Days вконтакте, где будет публиковаться информация о предстоящих занятиях.

Wednesday, September 14, 2011

HackDay in Tomsk

По последним данным переносится на весну!!! 
29-30 октября в Томске пройдёт HackDay #18.

Tuesday, September 13, 2011

Programmers day

Поздравляю всех программистов с профессиональным праздником!!! С днём программиста!!! Happy programmers' day!!!

Sunday, September 11, 2011

One More GameDev Team

Товарищи, с которыми я работал в DreamGate Company, запустили сайт DΛBL POINT и уже разработали несколько игр под iPhone.

Sunday, September 4, 2011

Lighthouse puzzle

1000 Piece Jigsaw Puzzle complete!


It's Fanad Head Lighthouse Ireland: http://en.wikipedia.org/wiki/Fanad

Wednesday, August 24, 2011

Happy Birthday Aximedia Soft

Today is the birthday of Aximedia Soft LLC. Happy birthday Aximedia Soft! С днём рождения Аксимедиа Софт! Bonne anniversaire Aximedia Soft! 生日快乐 Aximedia Soft!

Tuesday, August 23, 2011

An error has occurred. Please try again later

I'm suddenly discovered that when tried to open Android Market on Android a message appeared:
"An error has occurred. Please try again later"

To get rid of it you just need to enable Background data checkbox:

This item is located here:
Settings -> Accounts & sync -> Background data

Friday, August 19, 2011

Android upload progress

Some time ago I got a task to create a file uploader for Android. Writing file uploader code it not difficult and I’ve done it quickly. To indicate the uploading progress I’ve shown standard rotating progress control while uploading.
But it’s not quite clear for users. Much better is to show the usual progress bar with bytes uploaded and total size. So I decided to implement this user friendliness.
Source code of BackgroundUploader class is here:

class BackgroundUploader extends AsyncTask<Void, Integer, Void> implements DialogInterface.OnCancelListener {

  private ProgressDialog progressDialog;
  private String url;
  private File file;

   public BackgroundUploader(String url, File file) {
    this.url = url;
    this.file = file;
  }

   @Override
  protected void onPreExecute() {
    progressDialog = new ProgressDialog(context);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setMessage("Uploading...");
    progressDialog.setCancelable(false);
    progressDialog.setMax((int) file.length());
    progressDialog.show();
  }

   @Override
  protected Void doInBackground(Void... v) {
    HttpURLConnection.setFollowRedirects(false);
    HttpURLConnection connection = null;
    String fileName = file.getName();
    try {
      connection = (HttpURLConnection) new URL(url).openConnection();
      connection.setRequestMethod("POST");
      String boundary = "---------------------------boundary";
      String tail = "\r\n--" + boundary + "--\r\n";
      connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
      connection.setDoOutput(true);

      String metadataPart = "--" + boundary + "\r\n"
          + "Content-Disposition: form-data; name=\"metadata\"\r\n\r\n"
          + "" + "\r\n";

      String fileHeader1 = "--" + boundary + "\r\n"
          + "Content-Disposition: form-data; name=\"uploadfile\"; filename=\""
          + fileName + "\"\r\n"
          + "Content-Type: application/octet-stream\r\n"
          + "Content-Transfer-Encoding: binary\r\n";

       long fileLength = file.length() + tail.length();
      String fileHeader2 = "Content-length: " + fileLength + "\r\n";
      String fileHeader = fileHeader1 + fileHeader2 + "\r\n";
      String stringData = metadataPart + fileHeader;

      long requestLength = stringData.length() + fileLength;
      connection.setRequestProperty("Content-length", "" + requestLength);
      connection.setFixedLengthStreamingMode((int) requestLength);
      connection.connect();

      DataOutputStream out = new DataOutputStream(connection.getOutputStream());
      out.writeBytes(stringData);
      out.flush();

      int progress = 0;
      int bytesRead = 0;
      byte buf[] = new byte[1024];
      BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(file));
      while ((bytesRead = bufInput.read(buf)) != -1) {
        // write output
        out.write(buf, 0, bytesRead);
        out.flush();
        progress += bytesRead;
        // update progress bar
        publishProgress(progress);
      }

       // Write closing boundary and close stream
      out.writeBytes(tail);
      out.flush();
      out.close();

       // Get server response
      BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      String line = "";
      StringBuilder builder = new StringBuilder();
      while((line = reader.readLine()) != null) {
        builder.append(line);
      }

    } catch (Exception e) {
      // Exception
    } finally {
      if (connection != null) connection.disconnect();
    }

    return null;
  }

   @Override
  protected void onProgressUpdate(Integer... progress) {
    progressDialog.setProgress((int) (progress[0]));
  }

   @Override
  protected void onPostExecute(Void v) {
    progressDialog.dismiss();
  }

   @Override
  public void onCancel(DialogInterface dialog) {
    cancel(true);
    dialog.dismiss();
  }
}

* This source code was highlighted with Source Code Highlighter.


To execute file uploader the next code should be used:

new BackgroundUploader(url, file).execute();

I wrote the code based on the DNDApplet.java.

Friday, August 5, 2011

Wifi интернет для HTC с ноутбука

Для отладки проектов на HTC устройстве под управлением Android, потребовалось наличие на устройстве интернета.

Настроить интернет на устройстве, имея ноутбук с wifi, можно с помощью программы Virtual Router.

Данная программа позволяет создать wifi точку доступа на компьютере с ОС Windows 7 или Windows 2008 R2.

Скачать программу можно с сайта проекта http://virtualrouter.codeplex.com/

Saturday, July 2, 2011

IT songs

Недавно в твиттере увидел ссылку на список фильмов на IT тематику и сразу начал вспоминать какие песни я слышал про айтишников.
Сразу же, конечно, вспомнил песню про DOS (звонкой пеленой экран заполнил чистый DOS) и про Админа (Будь как дома юзер). Как и эти две песни, многие зарубежные используют музыку из известных песен с заменённым на IT тематику текстом.

Вот список песен про айтишников, программистов и админов.
Jonathan Coulton - Code Monkey
Richard Stallman - The Free Software Song
Morning Sidekick - My Cubicle
Weird Al Yankovic - It's All About The Pentiums (Вообще у него много веселых песенок на IT тематику.)
Loose Bruce Kerr - Java Song
The Beatles - Write in C
Julia Ecklar - The Eternal Flame (God Wrote in LISP)
GigFlapping
Weird Al Yankovic - White And Nerdy
Monzy - So much drama in the PhD

Ещё вот эти песни не могу не привести.
Chumbawamba - Add Me
Weird Al Yankovic - Ebay

Огромный список песен с наименованием оригинала и текстом на английском языке можно посмотреть здесь.

Tuesday, June 21, 2011

Gloomy view

Мне эта фотография напоминает Сталкер.

Monday, June 20, 2011

Android apk is installed but does not run on device

I faced a problem when I'm trying to debug my android apk from Eclipse on device/emulator, it successfully installed, but not automatically started.

It was necessary just to check AndroidManifest.xml

It should contain the line:
<category android:name="android.intent.category.LAUNCHER" />

And also must not contain errors!
When I removed the unused line (before mentioned above) the problem goes away.

Monday, June 6, 2011

Задача про шкафчики

Наткнулся сейчас на интересную задачу:
В  одной  из школ  есть  такой  ритуал,  проводящийся  в  последний  день  занятий:  ученики выходят  в  холл  и  стоят  около  своих  шкафчиков,  в  которых  хранится  одежда.
По  первому свистку  каждый  ученик  открывает  свой  шкафчик,  по  второму  свистку  ученики  закрывают четные шкафчики (то есть шкафчики номер 2, 4, 6 и т. д.). По третьему свистку ученики меняют положение дверцы каждого третьего шкафчика, то есть если она была открыта, ее закрывают, а если закрыта — открывают. Это происходит со шкафчиками номер 3, 6, 9 и т.д. По четвертому свистку меняется состояние дверцы каждого четвертого шкафчика, по пятому свистку каждого пятого и т. д. Предположим для простоты, что это небольшая школа и шкафчиков всего 100. По сотому свистку ученик, который стоит рядом со шкафчиком под сотым номером (и только этот ученик),  меняет  положение  дверцы  этого  шкафчика. Сколько  шкафчиков  после  этого оказываются открытыми?

Подумав немного и решив задачку на бумаге, написал программу на Python для её решения.
Внимание! Внизу публикую закономерность.

#--------------------------------------
# Open school lockers counter
#--------------------------------------
""" Get Open Lockers Count """
def open_lockers_counter(n):
    open_count = 0
    for i in range(1, n + 1):
        div_num = 0 # i divisors number   
        for j in range(1, i + 1):
            if i % j == 0:
                div_num += 1
        # if divisors number is odd
        if div_num % 2 != 0:
            open_count += 1
    return open_count;


Закономерность такова: открытыми останутся только те шкафчики, у которых количество делителей нечетное, то есть квадраты чисел (1, 4, 9, 16...). Таким образом ответом является количество квадратов чисел.

Sunday, June 5, 2011

Кто сказал Guf

Вот такая вот надпись.

Sunday, May 8, 2011

Пишем приложение для Android

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

Eclipse-SDK – 180 Мб
ADT плагин к Eclipse – 5 Мб
Java JDK – 80 Мб

ADT плагина к Eclipse можно установить как онлайн, так и скачать и установить вручную.
Для установки онлайн нужно выбрать пункт меню Help -> Install New Software... и в поле Work with вписать адрес загрузки плагина: dl-ssl.google.com/android/eclipse/
Если хотите установить плагин вручную, то нужно скачать его по ссылке http://developer.android.com/sdk/eclipse-adt.html.
Для отладки и отправки приложения на устройство (в моем случае это HTC) необходимо скачать также:
HTC Sync – 73 Мб

Важно, что программа виртуального устройства не понимает русские буквы в пути.
C:\Users\Имя\.android\...
Если у вас в имени пользователя имеются русские буквы, то нужно сделать следующее.
Открыть и отредактировать файл: имя_виртуального_устройства.ini в папке C:\Users\Имя\.android\avd\
target=android-7
path=path_to_file\имя_виртуального_устройства.avd
Также нужно скопировать файлы виртуального устройства в указанный путь.

Также если происходят ошибки и эмулятор не запускается, то можно попробовать удалить папку C:\Users\Имя\.android. И затем создать новое виртуальное устройство.


Устройство

В качестве устройства используется коммуникатор HTC Wildfire A3333.

В коробке.

Весь комплект.


Технические характеристики.

Вид сзади.


Включение устройства.

 
Подключение.

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

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

Работа приложения в эмуляторе.

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

Работа приложения на устройстве.

Для того чтобы просмотреть, скачать, загрузить файлы на эмулятор Android необходимо открыть DDMS.

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

Для этого в эмуляторе Android необходимо прописать DNS в поле Additional Emulator Command Line Options в следующем виде:
-dns-server xxx.xxx.xxx.xxx
Возможно, также потребуется добавить исполняемые файлы эмулятора в доверенные – в настройках firewall.

Wednesday, May 4, 2011

Invoking a function before empty main function

It's is interesting that you can call functions or print "hello world" messages in C/C++ with empty main() function.
All global variables are initialized before calling the main() function. Therefore, it could be empty.

#include <iostream>

std::ostream &out = std::cout << "print text before main" << std::endl;

void foo() { std::cout << "foo() called before main" << std::endl; }

class A
{
public:
  A() { foo(); }
};

A obj;

// empty main function
void main()
{
}

 
* This source code was highlighted with Source Code Highlighter.

This code will print:

print text before main
foo() called before main

May the Force be with you

May the 4th be with you!
Happy Star Wars day.

Thursday, April 28, 2011

IT Tomsk

Компании, занимающиеся разработкой ПО в Томске. Не так уж их и много. Всего 51 (Это не все! Не добавлял студии, занимающиеся только разработкой сайтов. Планирую составить их список позже).
Некоторые компании в Томске очень сложно найти, так как у них отсутствует даже сайт.
Правда, есть и филиалы зарубежных компаний, без собственного сайта.
По мере поступления информации о компаниях обновляю список. Последнее обновление 22.03.2013.

Интересный факт: в логотипах компаний преобладает синий цвет.
Software development companies in Tomsk. Tomsk IT companies logos. Компании Томска занимающиеся разработкой программного обеспечения. 

Описание представленных компаний

AdvanSib – разработка программного обеспечения для просмотра видео в локальной сети.
http://www.advansib.com

Alpary Soft – разработка инновационных технологий и программных продуктов в области обработки видео.
http://www.alparysoft.ru

Aurigma – разработка программного обеспечения для загрузки и обработки контента.
http://www.aurigma.ru

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

Azoft – разработка и проектирование программного обеспечения, мобильных приложений, системная интеграция, миграция данных, внедрение и развитие 1С.
http://www.azoft.ru

Bitworks – разработка программного обеспечения, web-сайтов.
http://www.bitworks-software.com

Chyrius – разработка программного обеспечения, web-сайтов, автоматизация предприятий, системная интеграция, услуги в сфере информационной безопасности.
http://chyrius.com

Contek Soft – консалтинг, разработка программного обеспечения, web-сайтов, автоматизация систем управленческого, бухгалтерского, финансового учета, аутсорсинг.
http://contek.ru

DonRiver – международная компания, специализирующаяся на разработке программного обеспечения на заказ.
http://www.donriver.com

EDISON – проектирование, разработка, тестирование программного обеспечения.
http://www.edsd.ru

Elecard – разработка программного обеспечения для кодирования, декодирования, обработки, передачи и приема видео и аудио.
http://www.elecard.com

F5 Networks – международная компания, является мировым лидером в области сетевого предоставления приложений. Единственный офис в России в городе Томске.
http://www.f5.com

FlexSoft (DotWeb Software) – разработка программного обеспечения, автоматизация производственных и бизнес-процессов.
http://dwsoft.ru
http://dotwebsoftware.ru

GlavSoft (TightVNC) – разработка программного обеспечения. В частности TightVNC.
http://glavsoft.ru
http://www.tightvnc.com

Interfaced – разработка приложений для ТВ платформ.
http://interfaced.ru

Intermedia Studio – аутсорсинг.
http://intermedia.tomsk.ru

Interweb Lab – разработка интернет проектов, мобильных и десктоп приложений.
http://iwlab.ru

Intrice – аутсорсинг.
http://www.intrice.com

Karmic Apps – разработка игр и приложений на мобильные платформы.
www.karmicapps.com

MainConcept – является мировым поставщиком SDK, предоставляя пользователю возможность добавлять аудио и видео кодирование, декодирование, транскодирование, а также потоковое вещание в свои приложения.
http://www.mainconcept.ru

MCC – подразделение немецкой компании MCC GmbH & Co. KG. Компания занимается разработкой программного обеспечения для работы с сомнологическим оборудованием.
http://mcc.tomsk.ru

Mind Decider – разработка программного продукта, который лишит человека проблем, связанных с принятием решений.
http://www.minddecider.com

Mirball Studio – компания занимается разработкой игр, созданием компьютерной графики, анимации и спецэффектов.
http://mirball.com

NTR Lab – разработка заказных информационных систем и программных продуктов.
http://www.ntrlab.ru

Palex – услуги по переводу и локализации программного обеспечения.
http://www.palex.ru

Rubius – разработка инженерного программного обеспечения и реализации инновационных проектов, изготовлением виртуальных 3D-панорам.
http://rubius.com

SibEDGE – разработка программного обеспечения, внедрение IT-технологий, создание web-ориентированных систем, распределенных систем и настольных приложений.
http://www.sibedge.com

SiberLogic – разработка программного обеспечения, а именно системы для разработки технической документации.
http://www.siberlogic.ru

Silent Star Group – разработка мобильных и web-приложений.
http://silentstargroup.com

SIS – разработка программного обеспечения.
http://ooosis.com/

Solveig Multimedia – разработка программного обеспечения в области цифрового аудио, видео и мультимедийных решений.
http://www.solveigmm.com

Startext – филиал немецкой компании Startext GmbH. Разработка программного обеспечения.
http://www.tpu.su
http://startext.tomsk.ru

TomskLabs – разработка программного обеспечения для анализа видеоматериала и распознавания объектов на видео.
http://tomsklabs.com

Triaxes Vision – разработка решений для создания стерео-варио изображений.
http://triaxes.com

Unigine Corp. – разработка игр, высокотехнологичного движка Unigine для современных игр и систем виртуальной реальности.
http://unigine.com

UMSSoft – разработка медицинских информационных систем и систем управления предприятиями.
http://www.umssoft.com

Vita-Mobile – разработка игр и мобильных приложений.
http://vita-mobile.com

VitaSW – разработка программного обеспечения для IPTV и iPhone/iPad, аутсорсинг.
http://vitasw.com

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

Verysoft – разработка программного обеспечения получения и обработки видеоизображений и звука, делового ПО для мобильных устройств и системного ПО.
http://www.very-soft.com/

ZOOM Group – разработка программного обеспечения, создание высоконагруженных систем, пользовательских интерфейсов.
http://zoom-group.ru

Индорсофт – разработка программного обеспечения для проектирования, строительства и эксплуатации.
http://www.indorsoft.ru

ИНКОМ Группа компаний – разработка геоинформационных систем.
http://www.incom.tomsk.ru

НовИнТех – создание, сопровождение и развитие корпоративных информационно-прикладных программных средств на базе СУБД Oracle.
http://www.novinteh.com

Сибинтек – автоматизация и сопровождение финансово-хозяйственной деятельности предприятий.
http://www.tomsk.sibintek.ru

СибирьСофтПроект – внедрение информационных систем, разработка бизнес-приложений, телекоммуникации, консалтинг, аутсорсинг.
http://sib-soft.ru

Система – разработка программного обеспечения и веб-сайтов, системная интеграция, аудит и построение систем информационной безопасности и др.
http://www.nomerdoma.com
http://компаниясистема.рф

Стек Софт – консалтинг в области автоматизации бизнес-процессов предприятия, проектирование и внедрение систем автоматизации.
http://stacksoft.stack.ru

Томсксофт – разработка программного обеспечения, баз данных, обслуживание и сопровождение программных систем.
http://www.tomsksoft.ru

3DBin – разработка программного обеспечения для обработки изображений.
http://3dbin.com

9 бит – разработка программного обеспечения для карманных компьютеров (КПК) и коммуникаторов.
http://9bit.ru

Sunday, April 10, 2011

Music similarity

Вступление песни 4th Dimension - The Sun In My Life очень сильно напомнило песню Арда - В Пустоте.

Friday, April 8, 2011

Sir Martin

I have not found the lyrics on the Internet. So I decided to post them here. 
If you find mistakes please submit your corrections.

Timeless Miracle - Sir Martin

Sir Martin was as brave as any man could hope to be.
He was a dragon slayer, he fought for chivalry.
He fought for you and me.

Sir Martin was as brave as any man could hope to be, Hooray!
He was a dragon slayer, he fought for chivalry.
He was a righteous man of god and chastity it soul,
But tempted by a mistress call treacherously perform.


When brave Sir Martin realize what he had done
...

Wednesday, April 6, 2011

SICP theme song

When I watched SICP video lectures by Harold Abelson and Gerald Jay Sussman, I wondered, what music is playing on the synth keyboard in intro and outro.



This music also played in the ending of The IT Crowd - Episode 1х01.
Later to my great surprise I suddenly found this song.
It's Johann Sebastian Bach - Jesu, Joy of Man's Desiring.

Tuesday, April 5, 2011

Mario

Our admin painted. Red felt-tip pen is over ((

Monday, March 28, 2011

Anniversary of the blog

Happy birthday, my little blog. ;)

Monday, March 7, 2011

Чтение EventLog

Для определения событий входа в систему и выхода из неё потребовалась считывать соответствующие события из системного EventLog’а. Данные события находятся в журнале Безопасность.
Чтобы программно получить доступ, к данному журналу необходимо указать следующее имя:
Для систем до Windows Vista “Security
Начиная с Vista “Microsoft-Windows-security-auditing

Номера событий (EventID) до висты были следующие:
для входа 528, а для выхода из системы 538.
Начиная с висты стали:
4624 для входа и 4634 для выхода.

Для разделения строк в записи использую QString-овский сплит.
Исходный код для чтения события произошедшего последним представлен ниже:

void ReadLastEntryByInstanceId(QString sourceName, int instanceId)
{
 HANDLE eventLogHandle;  
 BYTE entryBuffer[16384]; 
 DWORD dwRead, dwNeeded; 
 DWORD eventsNumber;
 EVENTLOGRECORD *entry;  
 bool isFound = false;
 
 eventLogHandle = OpenEventLog(NULL, sourceName.toAscii().data()); 
 if (eventLogHandle == NULL) return false;
 
 entry = (EVENTLOGRECORD*)&entryBuffer;   
 GetNumberOfEventLogRecords(eventLogHandle, &eventsNumber);
 
 while (ReadEventLog(eventLogHandle, EVENTLOG_BACKWARDS_READ | EVENTLOG_SEQUENTIAL_READ, 
 eventsNumber, entry, 16384, &dwRead, &dwNeeded) && (isFound == false))
 {
  while (dwRead > 0) 
  { 
   if (entry->EventID == instanceId && isFound == false)
   {
    isFound = true;     
 
    QString strings;
    QByteArray stringsBytes;
    stringsBytes.append((char*)entry + entry->StringOffset, entry->DataOffset - entry->StringOffset);
    strings = QString::fromWCharArray((wchar_t*)stringsBytes.data(), stringsBytes.size() / 2 - 1); 
 
    // Split strings
    QStringList stringsList = strings.split(QString(1, '\0'));
 
    // Use stringsList      
   }
 
   dwRead -= entry->Length; 
   entry = (EVENTLOGRECORD*)((LPBYTE)entry + entry->Length);     
  }
 
  entry = (EVENTLOGRECORD*)&entryBuffer;  
 }
 
 CloseEventLog(eventLogHandle); 
}