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));

Правильно! 9.55

Ну а если так?

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


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

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


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


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

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
begin
Inc(Errors);
end;
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. Было бы неплохо приделать к блогу подсветку и нормальное форматирование синтаксиса, а то как-то не красиво выходит