воскресенье, 6 декабря 2009 г.

IT Jam 2009


Сходил на IT Jam. Жаль, что не получилось остаться до конца (там говорят after party должно было быть:) ). Встретил бывшего коллегу, ожидал увидеть больше знакомых лиц, но увы. Возможно, не разглядел в толпе. Думаю, что заявленное число в 600 зрителей несколько завышено, но человек 400 было (забитый большой конференц зал + стоящие у входа).

Впечатление о докладах, которые посчастливилось послушать.

1. "Keynote. Things to unlearn in software development". Alexey Krivitsky, Natalia Trenina.
Самый первый общий доклад в большом зале.
Начали издалека... Если честно, то история о том, как неудачно строили корабль, и он утонул в первый же день плавания, была самой интересной частью... Остальное всем давно знакомо и очевидно. Другой вопрос, что в жизни good practicies, как выразились докладчики, не всегда соблюдаются. Отчасти, их соблюдение от рядового программиста зависит не так уж и сильно.

Дальше мои интересы переместились в ветку Other

2. Yuriy Roschenko. Are you ready to put your application in the cloud?
Хороший расказчик. Учитывая тот факт, что с темой облачных вычислений я знаком только на уровне, что знаю что "оно" где то есть. Посмотреть на реальные продукты от таких гигантов как Amazon, Google или Microsoft было очень интересно. Возможность парой кликов мышки добавить себе на сервер пару терабайт - круто! Возможность развернуть путем "монтирования" образа уже существующего сервера новый сервак не покидая любимое кресло - круто!
3. Technologies, methods and tools for data mining and analysis. Oleksandr Krakovetskiy.
В начале возникло впечатление, что опять вернулся на студенческую скамью...
Но тема, для меня очень интересная, хотя хотелось бы услышать побольше о реальном применений OLAP кубов. Ну а так нормально. Нужно будет выкачать доклад, и посмотреть SDK, о котором говорил автор.
4. Windows Azure Platform Overview. Konstantin Kosinky&Denys Kholod.
Вновь летаем в облаках:) Но на этот раз с упором в разработку и платформу от Microsoft.
Забавная ситуация, когда докладчик компилируя пример и со словами вроде: "Смотрите, как оно замечательно работает" поймал исключение (зал хихикает). Ну ладно, забыли в Винде разблокировать порт. Запускает второй раз: "Сейчас, точно, заработает". Ловит уже другое исключение. Зал откровенно ржет и начинает аплодировать.

Все. На большее времени не хватило. По дороге домой, вспомнил, что забыл проголосовать за Best speaker'a.

P.S. А все же интересно, какое пиво наливали? :)

среда, 9 сентября 2009 г.

light-Bot

Забавная игрушка.
http://www.kongregate.com/games/Coolio_Niato/light-bot

Жаль, что в процедурном, а не ООП стиле:)

четверг, 20 августа 2009 г.

Лучше не попадать в глубокий дебаг...

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

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

SELECT 
  SUM(S.SomeValue)
FROM  SomeTable S
WHERE S.Date > GETDATE()

Все, вроде бы, понятно. Запускаю запрос в отладчике, получаю значение суммы. Затем запускаю клиентское приложение – получаю другое значение суммы! Первая мысль, что в отладчике указал неправильные значения переменных. Проверяю – вроде, все нормально. Затем, проверяю, правильные ли параметры передаются в запрос – тоже все правильно. После этого, меня начинает колбасить, и я начинаю задалбывать коллег со словами: “А не мог бы ты посмотреть запрос?” (Вове, спасибо).

В, общем, время, которое можно было бы провести попивая кофе в беседке ушло на борьбу с ветряными мельницами:(

А логика примерно следующая:
1. Поле S.Date – не datetime, а varchar. Таблицу SomeTable создавал не я, но пора бы привыкнуть к подобным особенностям базы.
2. В отладчик и клиентское приложение мы ходим под разными пользователями. Я когда себе недавно создавал пользователя не доглядел, что в региональных настройках поставил для него British English, а не просто English. А это разные вещи.
3. В зависимости от региональных настроек текущего пользователя сервер автоматом по разному кастил строку к формату даты, или дату к формату строки(?). И каждый раз в выходной набор попадали различные значения.

Было потеряно уйму времени, только ради того, чтобы прийти к выводу, что в данном случае поле S.Date нужно конвертировать явно.

В общем, приятной всем отладки:)

понедельник, 6 июля 2009 г.

http://koders.com

Поисковый движок для программистов. Поиск осуществляется по исходным кодам различных OpenSource проектов. Есть возможность фильтровать по языку программирования и по типу лицензии.
Проект запущен в 2005 году. Странно, как я раньше о нем не слышал

четверг, 21 мая 2009 г.

UEFA CUP Final

УРА!!! Наконец-то украинская команда выиграла европейский трофей.


Матч по накалу и эмоциям действительно получился финальным.

Была борьба


Была и радость победителей

Было и горе побежденных

Будем верить, что в следующих сезонах еврокубков испытаем нечто подобное. До выигрыша лиги чемпионов еще не доросли, но Лигу Европы смогут взять и Динамо и Шахтер, и Металлист (а там глядишь еще кто-то из наших клубов проявит. Вдруг индус - владелец Арселор Миталла решит сделать из Кривбасса суперклуб :) )

пятница, 1 мая 2009 г.

Freelance и поиск работы

Сегодня сдал один проект, который выполнял в качестве freelancer'a (халтуру говоря по народному). Впечатления от подобного рода работ весьма двоякие. С одной стороны приятно, что тебе - абсолютно незнакомому человеку, доверили часть работы, с которой штатные специалисты не знали что делать (у них просто времени ушло бы больше, чем у меня + они вебовцы все). Приятно, что деньги заработанные этим действительно твои, и ты это осознаешь, и никто не закинет: "Вот Вася кормит всех вас бездельников".

С другой стороны, есть страх, что тебя в конце либо попытаются кинуть, либо не примут работу и не заплатят абсолютно ничего. Непонятно как реагировать, если со временем заказчик найдет баги (буду надеяться, что их нету:) ), и захочет их исправить. Становится в позу, мол почему же вы раньше не тестировали, и исправлять за деньги, либо молча и бесплатно исправлять? (совесть подсказывает, что исправлять нужно, но она, увы, не самый лучший советчик) Что новые фичи недаром - это понятно.

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

Поиск работы потянет на отдельный рассказ. Если вкратце, то сейчас все не так плохо, как было к примеру в декабре, но и того разрыва телефонной трубки как было пару лет назад тоже не наблюдается (вакансий делфистов практически нету, что возможно и к лучшему, все равно давно хотелось перейти на что-нибудь более мейнстримовое, надеюсь, что получится). За две недели поиска я побывал аж (!) на трех собеседованиях. На первом предложили работу, и очень маленькую зарплату (я и не думал, что в Киеве такая сумма возможна). На втором сказали, что слабая математика, в компании 3shape, как я понял, к математике особые требования, а я уже успел подзабыть всякие там интегралы, производные и триангуляции. Третье собеседование прошло так себе. Ответил на пару вопросов по ООП, потом пришлось рисовать графы и вспоминать курс дискретной математики, сказали, что посмотрят других кандидатов и перезвонят (ага знаем, конечно)
Теперь вот думаю, неужто нужно доставать конспекты 4-5 годичной давности по вышке, или мне просто два раза попадались заядлые выпускники матфака КПИ:)

воскресенье, 29 марта 2009 г.

CodeCamp 2009


Сходил на конференцию CodeCamp. Так как конференция длилась 2 дня (субота и воскресенье), то после того, как предварительно ознакомился с темами докладов - решил пойти только на второй день (жаль, что большинство докладов были расчитаны на web-разработчиков).
После регистрации получил набор сувениров, добрая половина которых была рекламной пропагандой некоего Global Logic'a. Внимание привлек только вот этот вот календарик (да фотограф из меня неважный):

Итак, в кратце о докладах, которые мне посчастливилось прослушать:
1.Опыт разработки web-приложений: Crazymenu.com. Команда Stanfy
Я бы смело убрал префикс web, так как основные концепции изложенные докладчиком (необходимость автоматической сборки, использование системы контроля версий и.т.д) масштабируемы на любой тип приложений. Ничего инновационо нового для себя не узнал, но парень рассказывал живенько и довольно таки интересно.
2. Agile Scrum. Бурдун Александр. Довольно таки доходчиво и интересно описал разные подходы к управлению проектами. Преимущества и недостатки Scrum'a над другими подходами. Единственное, что не упомянул о неких гибридах, к примеру команда часто применяет методики XP, и при этом проводит совещания в стиле Scrum. Или я один имею подобный уникальный опыт? :)
3. API Яндекс карт. Федор Голубев. Яндекс. Гость из Москвы поведал о Yandex Maps API. Тема интересная, но к докладу, как по мне он мог подготовиться и лучше. Учитывая то, что это API предоставляется на платной основе, хотя бы на уровне 'Hello world' пощупать его не выйдет, хотя для себя в обозримом будущем такой нужды и не вижу. А так интересно, можно вставить к себе на сайт яндексовскую карту, и переопределить практически все, что угодно. К примеру, переопределить вид всплывающих подсказок, или добавить на карту свои объекты.
4. Semantic Web, або як Інтернет розумнішає.Несколько академический доклад о объединении данных с различных вебсервисов. В идеале, как я понял создание некоего всемогущего сервиса, который будет все знать и уметь вместо человека. К примеру: я еду куда-то отдыхать, говорю что-то вроде: "Хочу, что бы было тепло, на неделю и имею XXX$". И вместо того, чтобы искать по различным сайтам где дешевле купить билеты, заказать гостиницу и.т.д., сразу же получаю адекватный ответ.
5. Знайомство зі світом Ruby on Rails. Исторія розвитку з прикладним використанням. Роман Бабенко (я периодически читаю блог этого человека). Целью являлось ознакомить и заинтересовать аудиторию в Ruby on Rails. Докладчик, похоже мог часами на эту тему говорить. Единственное, зачем докладывать на украинском, если тяжело на этом языке говорить?

Итого. Что понравилось:
1. Практически все доклады.
2.Главный корпус КПИ. Мне не посчастливилось в нем учиться, и главного корпуса я до этого никогда не видел.
3. Календарик.
4. Бесплатное печенье:)
Что не понравилось:
1. То, что в связи с тем, что некоторые из участников не перевели часы и опоздали, организаторы вынуждены были сместить график
2. Поведение некоторых слушателей (точнее одного), которые пытались на вопросы зала отвечать быстрее докладчика (я не против, если докладчик затрудняется ответить, но перебивать его и не давать рта раскрыть...). Живая дискуссия это круто, но все же нужно соблюдать какие-то нормы поведения.

The End

четверг, 19 февраля 2009 г.

Действительные типы данных в Delphi

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

Но все же иногда об этом не то чтобы забывают, но неприятные сюрпризы ловят.
К примеру, как думаете, что вернет данный код:

var
  V: Extended;
begin
  V := 9.55;
  V := Trunc(V * 100)/100;
  ShowMessage(FloatToStr(V));
end

Правильно! 9.55

Ну а если так?
var
  V: Extended;
begin
  V := 9.15;
  V := Trunc(V * 100)/100;
  ShowMessage(FloatToStr(V));
end

9.15 ?! Ага, конечно... 9.14 выйдет.

Немного поэкспирементируем

var
  V: Double;
begin
  V := 9.15;
  V := Trunc(V * 100)/100;
end

И получим правильный ответ. Но для чистоты эксперимента прогоним небольшой тест
var
  V, T: Double;
  Errors: Integer;
begin
  V      := 0;
  Errors := 0;

  while V <= 100 do
  begin
    T := Trunc(V * 100) / 100;
    if Abs(T - V) > 1/MaxDouble then
      Inc(Errors);
    V := V + 0.01;
  end;

  ShowMessage(IntToStr(Errors));
end

Получим кол-во ошибок равное 9984, для типа переменных V и T Extended 9882...

Шеф, усе пропало!


Однако, для частичного решения этой проблемы в Delphi определены два формата с фиксированной запятой. Тип Comp (computational - вычислительный) содержит только целые числа в диапазоне от -263+1 до 263-1, что примерно соответствует диапазону от -9,2х1018 до 9,2х1018. При программировании операций с американской валютой разработчикам обычно приходится искать естественный способ записи денежных сумм, в котором целая часть числа определяет количество долларов, дробная - центов. Если такие значения записывать в переменные типа Comp, придется представлять их в виде целого числа центов. В этом случае следует умножать значение на 100 для обращения центов в доллары, а затем делить на 100, чтобы снова получить центы.

Этих забот можно избежать, если воспользоваться типом Currency. В этом случае задачу выбора масштаба возьмет на себя компилятор. Физически значения Currency записываются в память того же объема, что и Comp, как целые числа, однако компилятор не забывает вовремя разделить значение на 10 000 (не на 100!) для его приведения в соответствие с денежным знаком и умножить на 10 000 перед записью в память. Это обеспечивает абсолютную точность в четыре десятичных знака после запятой.


Вот так вот.

Ссылка на статью, используемую в этой публикации

вторник, 27 января 2009 г.

Мой первый сертификат:)

Вчера выполнил все необходимые требования для получения первого в своей жизни сертификата по программированию. Осталось только получить, и можно будет носить гордое звание "SQL Data Manipulation Language Specialist".
Справедливости ради стоит отметить, что это только сертификат первого уровня (Basic knowledge), а для получения "All requirements" нужно еще много работать( для начала проанализировать свои старые решения и попытаться оптимизировать).
Хотя не одна бумага не заменит реального опыта и знаний, но думаю, что иметь пару таких вот документов лишним не будет.

пятница, 9 января 2009 г.

TestExceptions

Эх если бы объединить все вкусности всех языков программирования и всех платформ...
К примеру меня зацепило наличие у .NET'овского эксепшена наличие свойства StackTrace.
Маленький пример на C#
Эх если бы объединить все вкусности всех языков программирования и всех платформ...
К примеру меня зацепило наличие у .NET'овского эксепшена наличие свойства StackTrace.
Маленький пример на C#
using System;
using System.Collections.Generic;
using System.Text;

namespace TestExceptions
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new Exception();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception Addr: " + e.StackTrace);
            }
            Console.ReadKey();
        }
    }
}
И в качестве адресса я получу сборку, класс, метод и строку, в котором было исключение. Круто?

Win32 увы врядли так сможет:(

Мальнький примерчик на языке Delphi (я позаимствовал из книги Марку Канту и немного переделал):

program TestExceptions;

{$APPTYPE CONSOLE}

uses SysUtils;

type
  ECustomException = class (Exception)
protected
  procedure RaisingException(P: PExceptionRecord); override;
end;

procedure ECustomException.RaisingException(P: PExceptionRecord);
begin
  Writeln('Exception Addr: ' + IntToHex (
  Integer(P.ExceptionAddress), 8));
  // standard processing
  inherited;
end;

begin
  raise ECustomException.Create('A message');
  Readln;
end.
И в качестве результата получим адресс 0040B186h, что мягко говоря не удобно, так как прийдется запускать дебагер и медитировать на ассемблер.

P.S. Было бы неплохо приделать к блогу подсветку и нормальное форматирование синтаксиса, а то как-то не красиво выходит