вторник, 6 ноября 2012 г.

Про футбол


  Я тут вспомню, как мы играли всеми программистскими отделами в футбол. Эх.. веселое было время...

понедельник, 5 ноября 2012 г.

Вот так я себя чувствую

   Вот так я себя чувствую, когда делюсь своими комиксами с некоторыми программистами:




P.S. Кстати, да, я СТР-Р-РАШНАЯ!! :)) Это ж видно по моим фотографиям!
И даже глубокий фотошоп не может этого скрыть. Уж простите, придется Вам с этим смириться :-P.

суббота, 3 ноября 2012 г.

Программисты астеники и гиперстеники

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

понедельник, 1 октября 2012 г.

Как HR рассматривают резюме программиста

Вот так HR заходят и заходят... И некоторые почему-то два раза подряд...





Наверняка это происходит так же, как свинья-копилка ищет монетку:


суббота, 22 сентября 2012 г.

О трудностях, подстерегающих программистов

   Иногда так бывает работаешь, работаешь, закопаешься в рутине, а потом вдруг прочитаешь на форуме: "Да, вот работаю программистом во Франции/Норвегии/США/пр.". Думаешь, опа, а как же я? Я ведь не хуже,"Малыш, я же лучше... собаки!"(с). И лет ему меньше, да и фирма заграничная/больше/известнее. Где же я был, почему я не там, а здесь и з.п. у меня меньше/не в долларах? Начинаешь злиться/завидовать/плакать/громить/отыгрываться на подчиненных(редко).
  Конечно, зависть редко посещает программистские умы, но бывает, у меня бывает, да и ко мне бывает. А что же за таким успехом скрывается?


вторник, 27 марта 2012 г.

четверг, 1 марта 2012 г.

Примеры использования shared_ptr

   Продолжаем тему умных указателей. Рассмотрим подробнее shared_ptr. Основное, что можно сказать о shared_ptr, это то, что объект, на который указывают shared_ptr-ы, будет удален, когда самый последний shared_ptr будет уничтожен или сброшен с помощью reset().
void f(){
  boost::shared_ptr<A> ptr1(new A);
  boost::shared_ptr<A> ptr2 = ptr1;
  boost::shared_ptr<A> ptr3 = ptr1;
}
Иллюстрация к коду:












вторник, 21 февраля 2012 г.

Неглупые указатели (smart_pointers)

Студент увидел как-то на рынке, что какой-то мужик 
продает мозги разных специалистов. Заинтересовался, 
подходит, спрашивает что почем. Ему объясняют: 
«Это мозги математика, они по сто рублей за килограмм, 
это – мозги физика, они – по двести за кило, а вот эти
 – мозги философа, они самые дорогие, по две тысячи». 
Студент проникся уважением, спрашивает: 
«Что, философские мозги и правда такие хорошие?» 
«Да нет, дело не в этом, просто представь, это же 
сколько философов отловить надо, чтобы набрать 
целый килограмм мозгов!»


  Прочитав Скотта Майерса, я стала противником auto_ptr. Auto_ptr - это зло-зло! Я об этом сказала своему начальнику. Он же сделал круглые глаза и выразил удивление, чем меня сильно озадачил. Я опять повторила: "Зло-Зло!". А он: "Почему?". Когда я объяснила, почему зло, он сделал простейший вывод: "Просто не надо их использовать в контейнерах." Действительно, подумала я... :) 

  И так небольшой обзор умных указателей: 

 STL: 
  • auto_ptr - только не для использования в контейнерах!! (См. Скотт Майерс, "Effective STL", совет №8)
  • weak_ptr - (доступен только в ISO/IEC 14882:2011, или при указании опции компиляции -std=c++0x) 
  • shared_ptr - (доступен только в ISO/IEC 14882:2011, или при указании опции компиляции -std=c++0x) 

   И вообще, в файлы с новым стандартом лучше не заглядывать - незаметно сносит крышу. То есть вроде бы всё на месте, а холодком веет. Необычные конструкции вроде таких, пугают:  shared_ptr(shared_ptr&& __r), но об этом можно почитать здесь.

 Boost: 
  • scoped_ptr - самый простой умный указатель. Как написано в комментариях - simple solution for simple needs. Умеет возвращать память при выходе из области видимости (в деструкторе). Умеет делать get(), reset(), swap();
  • intrusive_ptr - умный указатель со встроенным счетчиком ссылок. Может быть создан из произвольного raw-указателя (сырого указателя) типа T*. Блок памяти для intrusive_ptr такой же, как и для соответствующего raw-указателя. Умеет делать get(), reset(), swap(). Но для него придется определить функции подсчета ссылок и освобождения памяти. В конструкторе intrusive_ptr( T * p, bool add_ref = true ) вторым параметром (как это ясно из названия) можно повлиять на увеличение счетчика в первый раз. Его удобно использовать при разработке, где требуется самому определять не только, как освободить память, но и как работает счетчик ссылок. Главное правильно, если не ясно какой из двух использовать: его или shared_ptr, попробуйте использовать сначала shared_ptr;
  • weak_ptr - слабенький указатель :). Используется совместно с  shared_ptr. Хранит ссылку на объект, которым уже владеет shared_ptr. Для доступа к хранимому объекту нужно перейти к shared_ptr, используя соответствующий  конструктор: template<class Y> explicit shared_ptr(weak_ptr<Y> const & r). Есть внутренние переменные: указатель на данные, счетчик ссылок (boost::detail::weak_count). Умеет делать lock() - защита от удаления объекта и сказать, что объект уже никем не используется с помощью функции expired();
  • shared_ptr - умный указатель посложнее. Есть внутренние переменные - указатель на данные, счетчик ссылок (boost::detail::shared_count). Его использование гарантирует, что объект будет удален, когда последний shared_ptr, указывающий на него, уничтожится или сбросится (reset()).