суббота, 23 июня 2012 г.

Muse записали новую пластинку

Если они её ещё не доделали, то всё равно в очень скором времени она будет готова. Промо-ролик уже в сети, а группа отправляется в новое турне с 16 октября. До конца года будут колесить по Европе, но в русскоязычные страны не заедут. Ближе всего они будут 23 ноября - в Польше.
Так что ждём к осени новый альбом и откладываем деньги на концерт божественной группы, который будем с нетерпением ждать в ближайшие год-два в Украине.

"Когда я говорил..."

"Когда я* говорил, что нужно вкладывать в сообщество и User Groups, вы вкладывали в теннисные столы. Теперь у нас много средненьких теннисистов и нет коммюнити.
Когда я говорил, что нельзя заманивать айтишников на конференции печеньками и плюшками, вы покупали пиццу, дарили футболки и айпэды. Теперь у нас любое мероприятие начинается с поисков халявы. Этим же мероприятия и заканчиваются.
Когда я говорил вкладывать деньги в обучение специалистов, вы продолжали раздавать деньги за рекомендации. Теперь у нас никто не работает, а все рекомендуют.
Когда я говорил, что нельзя платить тысячи долларов тем, кто не знает, чем абстрактный класс отличается от интерфейса, вы продолжали им платить. Теперь у нас все зарабатывают тысячи долларов, но х*й его знает, чем абстрактный класс отличается от интерфейса.
Когда я говорил, что нужно писать технические статьи, вы продолжали читать хабр и обсуждать компании. Теперь у нас хабр в шоколаде, а технические статьи никто не пишет.
Когда я говорил, что нельзя всех подряд называть «синьорами», вы продолжали их создавать. Теперь у нас куча 23-летних синьоров и все равно х*й его знает, чем абстрактный класс отличается от интерфейса.
Когда я говорил, что люди важнее процессов, вы продолжали устраивать agile тусовки и устанавливать скрам-доски. Теперь у нас тотальный скрам, а проекты, согласитесь, делаются все так же ху*во.
Когда я говорил, что не нужно задавать головоломки на собеседованиях, вы продолжали спрашивать почему люки круглые. Теперь у нас все знают почему люки круглые, но чем абстрактный класс... ну вы поняли...
Когда вы говорите, что программисты зажрались, то вы правы – ведь вы сделали все правильно!
* «Я» - это собирательный образ, любые совпадения случайны."

Пятница, 15 июня 2012, Александр Краковецкий
Оригинал: http://msug.vn.ua/Posts/Details/4752

понедельник, 18 июня 2012 г.

Стал обладателем thl v9

Давно хотел приобрести себе телефон с GPS и двумя сим-картами. Говорю я много, на местности не ориентируюсь. И вот недавно решился-таки сделать себе подарок, прочитав статью на Хабре.
Я убеждён, что телефон - не предмет фетиша и поклонения, потому решил заказать себе китайский аналог знаменитого бренда HTC.

Внезапная морковка

Увидев её сегодня утром, не смог не улыбнуться! И как такую выращивают?!


Хотите знать английский? Делайте себе английское окружение!

Идея поднять тему посетила меня совершенно внезапно. А пока набирал заглавие, вдруг вспомнил, как лет 6 назад я написал статью примерно со следующим заглавием: "Как изучать английский язык?". Ту статью объёмом в пару тысяч символов я выложил на продажу в каком-то копирайтерском агенстве и через три дня её купили за 3,5 доллара. Интересный был опыт, хотя я почему-то сразу с этим завязал.
Бытует мнение, что если человека, совершенно не знающего английский язык, отправить на годик в США, то истечении этого срока он будет хорошо говорить на английском лишь за счёт повседневного общения с иностранцами. Это - заблуждение. Устная речь не отличается большой грамотностью и многословием, поэтому язык необходимо сознательно учить. Именно тратить время и серьёзно учить, а не болтать с американскими ребятами о девочках, думая, что это лучшее учение.
Как следствие вышеприведенного заблуждения рождается ещё одно: без естественного англоговорящего окружения невозможно качественно выучить язык. Тезис тоже не совсем верен. Англоязычная среда нужна, но она не обязательно должна состоять из носителей языка. Именно об англоязычной среде я и хочу сегодня поговорить.
Для начала расскажу, каким образом я "англофицировал" своё окружение.

вторник, 12 июня 2012 г.

Действительные числа в компьютерном мире

Если вы изучали основы работы компьютера или же имели дело с программированием для этой чудо-машины, вы, возможно, помните, что вам запрещали сравнивать действительные числа. По крайней мере говорили делать это с крайней осторожностью.
Лично я совершенно позабыл причины осторожной работы с действительными числами. Недавно, выполняя небольшое задание, столкнулся с требованием: «… мы надеемся не увидеть применения оператора == к операндам типа double…». Решил освежить в памяти вопрос. Начну, пожалуй с маленького примера (1):
Пример 1:
double x = 1.0;
while (x != 0.0)
{
x = x / 2;
       Console.WriteLine(x);
}

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



Объясняется это несложно. Мы знаем, что для хранения действительных чисел компьютер отводит конечное число байт. Длинные числа округляются таким образом, чтоб влезали в это количество байт. В цикле мы постоянно делим x на 2. Таким образом x стремится к очень маленькому и очень длинному числу. Выражаясь языком математики, x бесконечно стремится к нулю, но никогда не принимает нулевое значение. Так происходит в жизни реальной. В жизни компьютерной, когда x выходит за пределы объёма отведённой ему памяти, он округляется до нуля.

Пример 2:


static void Main(string[] args)
        {
            for (int i = 10; i > -10; i--)
            {
                try
                {
                    Console.WriteLine(5 / i);
                }
                catch (Exception exep)
                {
                    Console.WriteLine(exep.Message);
                }
            }
            Console.ReadKey();
        }

Вывод для данного фрагмента следующий:


Видно, что при попытке выполнить операцию 5/0 генерируется исключительная ситуация. Этого и следовало ожидать. Теперь же смените в заголовке цикла фрагмент

int i = 10;

на

double i = 10;

Рассмотрим результат выполнения фрагмента:



Теперь же при попытке выполнить операцию 5/0 исключительная ситуация не генерируется, а результатом операции становится бесконечность. Данный факт наводит на мысль о том, что действительные числа в компьютере хранятся неточно.
Ребята со stackoverflow прокомментировали мой вопрос, созвучный с заголовком данной статейки. Для желающих копать глубже, читайте следующее:


Выводы:

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

    double a, b;
    ...
    if(a == b)
    {
        ...
    }

используйте нечто в стиле

static const double SMALL_NUMBER = 0.000000000001;
inline bool FloatNumbersAreEqual(double a, double b)
{
 return (fabs((a) - (b)) < SMALL_NUMBER);
}

Комментируйте пожалуйста.