пятница, 26 декабря 2008 г.

Пингвинизация

Месяц назад я завел себе пингвина. Настоящего и очень милого. Сперва он, конечно, не взлюбил новое место обитания. Видимо его отпугивали следы моего прошлого питомца (привычного, конечно, но далеко не такой дружелюбного). Поначалу диковатый и ершистый, пингвиненок, под неусыпным надзором и тщательным уходом расцвел и засиял яркими красками. Теперь он очень домашний и практически ручной. Понимает меня буквально с полуслова, а его исполнительностью и отзывчивостью можно восхищаться до бесконечности.

З.Ы. Кто не понял - месяц работы под Linux (Ubuntu 8.04) - полет нормальный :) Linux, на самом деле, дружественная операционная система. Только друзей она выбирает очень осторожно.

суббота, 12 апреля 2008 г.

Инструменты

Несколько программ, без которых я не представляю комфортную работу.

1. NetBeans + Java
2. Eclipse + Qt + MinGW
3. MS Visual Studio 2008
4. Total Commander
5. GMail
6. Firefox
7. Python + IDLE
8. Winamp :)

четверг, 10 апреля 2008 г.

Вредные советы

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

А так - что мы имеем:

Несколько операторов присваивания в одну сроку? Легко!

a=31;b=7;c=maxcount;

Имена переменных информативны до безобразия. Тому кто отгадает что значат в предыдущей строчке переменные a, b, c, maxcount в строчке выше - пиво за мой счет.

Скажу по секрету, что a - число дней в "длинном" месяце, 7 - число дней в неделе (константу использовать, кстати, была не судьба), с - текущее значение выплаты по кредиту, maxcount - максимально возможная сумма выплаты.

Переносить закрывающую фигурную скобку на следующую строку? Я вас умоляю...

И еще прелести по меньше - ну скажите мне, нафига писать инлайн констркутор длинной 50 строк. Оптимизаторы блин... Просто смысл inline теряется. Нет, инлайн, конечно не строгое объявление и компилятор может переделать такой конструктор в обычную функцию, но зависит то это от компилятора и то если он увидит там какую-нибудь гадость типа циклов. А так - будет этот фрагмент вставляться везде при вызове конструктора.

суббота, 5 апреля 2008 г.

Как делать заказы на Amazon.com из Украины

Информация в этой статье по прежнему сохраняет свою актуальность, но если вам интересна тема покупок на Amazon ż возможно вы захотите почитать другие мои статьи на эту тему в группе в VK: http://vk.com/amazon_rus

С некоторых пор меня начали спрашивать, как сделать заказ на амазон. Дело в том, что я нередко заказываю вещи, которые в силу моего места жительства достать не очень просто. И заказываю именно на амазоне. Решил написать маленькое howto.

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

1. Первое что нужно сделать... нет не зарегистрироваться на амазоне. Это можно сделать и потом. Первым делом необходимо иметь карточку Visa. Кстати карточка Visa Electron которую многие банки выдают в качестве зарплатной/стипендиальной карточки для покупок на амазоне не годится. Лично я заказал карточку Visa Internet в ПриватБанке. Не вдаваясь в подробности, тем более что я в банковском деле не силен, можно сказать, что это, своего рода, виртуальная карточка предназначенная исключительно для рассчетов в интернете. Сама карточка представляет собой просто кусок картона с написанным на нем сроком действия, номером и т.п. Оформление карточки занимает 3-5 дней. Карточку необходимо открыть, естественно, в той валюте, в которой вы будете расплачиваться. То есть в случае amazon.com - доллары США, amazon.de - евро, amazon.co.uk - точно не уверен, но подозреваю что для работы с ним - фунты стерлингов.
Насколько я знаю, аналогичные карточки выдает не только Приват (знакомый замуправляющего из Проминвестбанка уверял, что они предоставляют такие же карточки), но я с самого начала начал работать с ПриватБанком и, в принципе, пока устраивает.
Пополнение карточки осуществляется путем простого внесения денег на счет, через кассу банка.

2. И вот - заветная карточка на руках. Что делать дальше?
Следующий шаг - регистрация на amazon.com. Заходим на амазон и, если вы еще не зарегистрированы, видим в вверху страницы ссылку Start here. Чтож. Оттуда и начнем.
Поскольку мы пользователь новый - выбираем соответствующую опцию и вводим свой работающий e-mail. Настоятельно рекомендуется не использовать почту от mail.ru и прочих отечественных бесплатных почтовиков. Это связано с тем, что при пересылке почты от буржуев к нам и обратно нередко возникают проблемы именно с адресами в зонах .ru, .ua и т.п.
Лично я пользуюсь почтой на gmail.com и на yahoo.com. Ни с одним из них проблем не было, в то же время письма от иностранных коллег, заказчиков да и просто ботов-регистраторов на форумах частенько не доходили ко мне на мой ящик на mail.ru. Лучше перебдеть, чем недобдеть.

На следующей форме от вас потребуют ввести имя, фамилию, еще раз ввести почтовый адрес, дату рождения и пароль. Что касается имени и фамилии, то важно запомнить одно - амазон кириллицу не понимает. И вряд ли будет понимать в обозримом будущем. Поэтому нужно писать эти реквизиты латиницей. Желательно так, как они написаны в загранпаспорте (если он есть). Хотя дата рождения - пункт опциональный, ввести его, по видимому следует. Просто может так случиться, что амазон предложит вам скидку на день рождения или что-нибудь в этом роде.
3. Собственно шоппинг. Подтверждение адреса электронной почты не требуется, так что можно смело приступать к покупкам. Важно знать, что в соответствии с таможенным законодательством, частные посылки не облагаются пошлиной в случае если заявленная стоимость меньше 200 евро. Я никогда не заказывал на сумму большую 200 евро, но думаю, что пошлину таки с меня бы содрали. Если вам этот момент безразличен - смело покупайте все, до чего руки дотянутся. В противном случае - старайтесь не превысить лимит. Также имеет смысл покупать сразу несколько товаров, что бы сэкономить на доставке.
Еще один важный момент - амазон продает не только свои товары, но и товары сторонних селлеров. Причем товары эти отсылаются селлерами, а не амазоном, так что может вполне случиться, что три товара, придут к вам тремя посылками. Впрочем, это сообщается на этапе формирования заказа.

4. К примеру мы позарились на книжку C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth Series) by Herb Sutter and Andrei Alexandrescu. (кстати, рекомендую). Добавляем эту книгу в корзину и нажимаем Proceed to checkout.

Вас еще раз попросят ввести пароль (в чем, в чем, а в бдительности амазону не откажешь) и вы попадете на форму ввода адреса. Все вводим исключительно латинскими буквами. Ни в коем случае не вздумайте переводить названия улиц. Пишите транслитом. Просто вероятность того, что на укрпочте посылки будет разбирать человек сведущий в английском не сильно велика. То есть не The Street of Victory, а Pobedy street или даже Ulitsa Pobedy. Я всегда пишу Kozlopupinskaya street и еще ни одна посылка не потерялась.


5. Далее вам предстоит выбрать способ доставки. Их всего три:
  • Standard International Shipping
  • Expedited International Shipping
  • Priority International Shipping
Различаются они соответственно стоимостью, надежность и скоросью доставки. По принципу чем дороже, тем быстрее и надежнее. Standard - самая дешовая и соответственно скорость доставки - самая низкая. Priority - самая дорогая и быстрая. Решать вам. Я всегда пользуюсь Standard International Shipping. Все товары, пока что, пришли в срок заявленный амазоном - 3-4 недели. Единственная задержка (на три дня) была на рождественнские праздники, но амазон често о возможных задержках предупреждал.
Также возможно на этом этапе выбрать подарочную упаковку. Стоит это не дорого, правда я никогда не выбирал.

6. На следующем этапе вводим сведения о карточке: тип, номер счета, имя владельца и дата истечения срока действия карточки. Тип карты выбираем Visa. Все остальные реквизиты берем с карточки. Имя владельца очень важно набрать именно так, как оно написано на карте.

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

7. После ввода способа оплаты вам предложат либо отправить товары по уже введенному адресу, либо ввести новый. Нажимаем Use this adress (если, конечно, нет необходимости ввести новый адрес).

8. После этого амазон предлагает еще раз проверить все реквизиты. Если все в порядке - смело тыкаем в Place your order. После этого товар размещается на амазоне. Как только амазон получит оплату от вашего банка - он начнет отправку, о чем вам будет сообщено по электронной почте.

9. Ждем извещения с почты (обычной) и забираем товар.

P.S. Надеюсь, кому-ниудь эта информация окажется полезной.

P.S. Дополнительную информацию о заказах на амазоне можно посмотреть здесь

четверг, 3 апреля 2008 г.

Несвоевременные мысли

Имея некоторое отношение к преподаванию программирования в ВУЗах, я из года в год наблюдаю все более и более удручающую картину. Большая часть студентов, причем студентов специальностей напрямую связанных с программированием, программировать не любит, не умеет и, что печально, не хочет.

Имел недавно беседу со второкурсниками специальности "Информационные управляющие системы". Оказалось, что ребята не могут составить даже элементарных алгоритмов. Максимум на что они способны - повторить вызубренные на лекциях примеры, типа нахождения большего в массиве, сортировки пузырьком и т.п. Как только требуется самостоятельное мышление - они сникают. При том, что они уже прослушали ТРИ! курса напрямую связанных с программированием: "Основы программирования", "Объектно-ориентированное программирование", "Алгоритмы и структуры данных" и слушают два курса сейчас: "Системное программирование", "Вычислительные методы".
Нет, я вовсе не хочу сказать, что я был мегапрограммером на втором курсе. Я, строго говоря, не являюсь им и сейчас. Но не до такой же степени пренебрежительно относится к основным дисциплинам.

Причем в ходе беседы выяснилось, что им просто НЕ ИНТЕРЕСНО. Спрашиваю: "Так что же вы пошли на такую специальность, где вам не интересно?". Ответы поразили: кого-то "Родители заставили", кто-то "чисто что бы высшее образование получить", но большая часть ответила "потому что программисты много получают". Честно говоря чуть не упал со стула. Вообще-то программисты не получают деньги, они их зарабатывают. Я, по крайней мере. Просто интересно, как эти ребята собираются много получать/зарабатывать если они к концу второго курса не умеют ровным счетом ничего? И я очень сомневаюсь, что они чему-нибудь научатся.
Время от времени слышу жалобы от людей рекрутингом программистов, на предмет того, что слишком много ламерья и чайников лопоухих с завышенной самооценкой и требованиями. Вот, собственно, откуда такие мнэ... "программисты" берутся.

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

Грустно, товарищи.

пятница, 28 марта 2008 г.

Boost + CBuilder

Все утро пытаюсь подружить boost и борландовский C++Builder 6.0
Билдер матерно ругается и ни в какую не хочет собирать код содержащий включения boost.

Чуть позже добавлено...
Как оказалось Builder не поддерживает вложенные шаблоны и посему использовать его в связке с boost - дохлый номер. Еще один довод в пользу того, чтобы забыть эту среду разработки как страшный сон. Жаль, на работе приходится с ней возиться :(

При попытке объявить что нибудь типа

template class A
{
template class B {};
template<> class B {};
};
...
A a;
...

Invalid template declarator list,
F1004 Internal Compiler Error at 0xc808c1 with base 0xc10000

среда, 26 марта 2008 г.

Кое-какие трюки

1. Запись блока операторов в одну строку через запятую:
Оказывается запись:
{
a=3;
b=4;
c=1;
}
Равносильна записи:
a=3, b=4, c=1;

2. Можно еще и так:
float a = (flag ? sin : cos)(x);
В данном случае результатом выполнения (flag?sin:cos) будет по видимому адрес вызваемой функции, которой передатся параметр (х).

3. Меняем индекс и массив местами
Имеем:
int a[10], i;

Обращения a[i] и i[a] - эквивалентны. Ведь на самом деле - a[i] == *(a + i) == *(i + a) == i[a]. От перемены мест слагаемых сумма не изменяется!

4. Может ли функция находится слева от оператора присваивания?

К примеру?
f() = 5;

Да запросто. Нужно только, что бы функция возвращала ссылку на переменную соответствующего типа.

int x;

int &f()
{
return x;//Возврат ссылки на х.
}

main()
{
f() = 5;
cout << x;
return 0;
}