Курс лекцій по Qt

Серпень 17th, 2010


На сайті Qt викладено курс лекцій, присвячений цьому чудовому фреймворку. Всього заплановано десять лекцій, наразі готові лише чотири:

  • Основні поняття Qt, демонстрація роботи з бібліотекою
  • Об’єктна модель Qt, поняття сигналів та слотів
  • Віджети та лейаути
  • Типи даних та файлів

До кожної теми підготовано набір слайдів, приблизний текст лекції та приклади. І ще є щось типу завдання на лабораторну роботу.

Все англійською мовою, звісно.

Категорії: C/C++, програмування | Теґи:, | Кометарів немає

Symbian: S60, S^n та інші страшні слова

Лютий 13th, 2010


Виникло якось у мене таке дурне бажання купити собі новий телефон. І не простий, а такий, щоб для нього програми писати можна було. Єдине, що я знаю – це C++, тому вирішив дивитися в сторону Symbian. А там виявилося, що розібратися у характеристиках смартфонів не так вже й просто. Десь написано Symbian 5th edition, десь S60, десь ще якось. Втім, кінець кінцем таки вдалося все більш-менш впорядкувати. (ще…)

Категорії: програмування | Теґи:, | Кометарів немає

… where’s Houston?

Листопад 10th, 2009

- Диспетчер, це борт 253!.. У нас аварія, двигуни не
працюють, висоту втрачаємо!..
- Ну, добре, чого кричиш… Борт 253 – викреслюю.

Знайшов такий комент у фактично бойовому коді:

  1.      
  2.   // load the configuration data
  3.   const bool loadSuccess = configMgr.LoadConfiguration( configFile );
  4.   if( loadSuccess )
  5.   {
  6.      SetupSubscriptions();
  7.   }
  8.   else
  9.   {
  10.       // where’s Houston? We have a problem…
  11.   }

Правда, до релізу ще кілька тижнів. Може, Х’юстон відгукнеться :)

Категорії: C/C++, гумор | Теґи:, | Кометарів немає

Нестача ресурсів

Жовтень 15th, 2009

Насправді, нічого особливого. Очевидно, на банкоматі стоїть вінда (скоріш за все 98), і, не менш очевидно, їй не вистачає віртуальної пам’яті. Шо поробиш, криза, усім зараз чогось не вистачає. Мені, наприклад, не вистачає часу й натхнення, щоб написати який-небудь пристойний пост ;)

Цікаво лише те, що цю картину я спостерігаю мало не кожного дня вже протягом двох місяців. Не знаю, як таке може бути. Чи то в Укрсиббанку всю техпідтримку звільнили, чи просто банкомат нікому не потрібен.

Категорії: програмування | Теґи:, | Кометарів немає

All Programming is Web Programming

Серпень 20th, 2009

Переклад статті з Coding Horror. Взагалі-то стаття непогано себе почуває на розробці, але, про всяк випадок, нехай ще й тут лежить.

(ще…)

Категорії: програмування | Теґи:, , | Кометарів немає

Тест на знання C++

Квітень 28th, 2009

Життя підкинуло цікаву ідею для перевірки практичних навичок C++ програміста. Таке собі тестове завдання.

Нижче наведено клас — зв’язаний список, призначений для зберігання всяких різних об’єктів. Клас поганий, нормальний С++ програміст такого собі дозволяти не повинен. Як ви гадаєте, що саме недобре у цьому класі?

  1. class Linked_Lists
  2. {
  3.     public:
  4.         Linked_Lists();
  5.         ~Linked_Lists();
  6.         bool add(void *data);
  7.         bool remove_head();
  8.         bool first();
  9.         bool last();
  10.         bool next();
  11.         bool prev();
  12.         void* get_data();
  13.         bool is_empty();
  14.         int get_count();
  15.  
  16.     protected:
  17.         struct Node
  18.         {
  19.             void *data;
  20.             Node *prev_node;
  21.             Node *next_node;
  22.         };
  23.         Node *head;
  24.         Node *tail;
  25.         Node *current;
  26.         int count;
  27. };

Слід сказати, тут дещо специфічний дизайн, так уже сталося. Елементи додаються та видаляються зі списку за принципом FIFO. Водночас, доступний вказівник, який можна туди-сюди пересувати по списку, щоб отримати доступ до будь-яких даних. Втім, це не суттєво. Припустимо, так було потрібно для чогось.

Справжній недолік цього класу в іншому. У якості підказки варто глянемо на реалізацію деструктора:

  1. Linked_Lists::~Linked_Lists()
  2. {
  3.     Node *node;
  4.  
  5.     if (head == 0) return;
  6.  
  7.     first();
  8.     do
  9.     {
  10.         node = current;
  11.         next();
  12.         delete node->data;
  13.         delete node;
  14.     } while (current != 0);
  15. }

Що ж саме у ньому не так? (ще…)

Категорії: C/C++ | Теґи:, | Кометарів немає

Чи не переоцінено значення відкритого ПЗ?

Квітень 24th, 2009

У блозі Coding Horror був цікавий пост “Is Open Source Experience Overrated?” переклад якого я і пропоную вашій увазі.

===============================================================

На мою думку, що програмуванню слід навчатися на полі бою. А найбільше, наймасштабніше поле битви — це область програмного забезпечення з відкритим вихідним кодом.

Зробіть вклад у якийсь відкритий проект. Їх тисячі, тож можна буде вибрати, який вам більше до вподоби. Але виберіть лише один, і глибоко вивчіть його, станьне активним розробником. Нема нічого більш практичного, більш реального, ніж сумісна робота з багатьма програмістами різних рівнів досвіду з усіх куточків земної кулі.

Якщо вам хочеться покращити свої навички програмування, що може бути краще, ніж робота у справжньому проекті з відкритим кодом? Їх тисячі, а можливо, і сотні тисяч. І деякі навіть змогли значно змінити світ.

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

Зараз я шукаю роботу. Я програміст з чотирнадцятилітнім стажем роботи як у академічному середовищі, так і у сфері комерційного ПЗ. У своїх резюме та супроводжувальних листах я зазначав, що був архітектором низки відкритих Java-проектів, з кодом і дизайном яких можна ознайомитись через інтернет.

У одній компанії мною зацікавились. У них була політика: пропонувати кожному кандидату виконати пробне завдання. Я виконав це завдання, застосувавши перше ж рішення, яке спало мені на думку. Згодом під час телефонної розмови, їх хлопець витратив п’ять хвилин свого часу, розказавши, наскільки неефективним був мій розв’язок. Моя робота справила не дуже гарне враження. Тоді я запитав, чи дивився він на ті проекти, які я згадував. Він сказав, що не дивився. Схоже, негативне враження щодо мене вже сформувалося після проваленого тесту. Важко сказати, які критерії використовувались для оцінки результатів тесту, але, схоже, результат завалив усе інтерв’ю.

Іншого разу я розмовляв з рекрутером, якому потрібен був хтось на посаду розробника на Java. Я повідомив їй, що останнім часом працюю у проектах з відкритим кодом, і вона може ознайомитись з ними, щоб перевірити мій рівень компетентності. Через п’ять хвилин вона передзвонила, щоб сказати, що, схоже, в мене не вистачає досвіду комерційної розробки. Я б міг продемонструвати вільні програми, де використовувались потрібні їм технології, але це не мало значення.

Ще одному рекрутеру я сказав, що якийсь час працював у сфері комерційного ПЗ, поки знову не повернувся до школи. Пропрієтарний характер розробки не дозволяє мені багато про неї розказувати. Але факт, що робота була комерційною, аж ніяк не впливає на рівень моїх знань чи на мій вклад у створений проект. Чому я навчився у ті часи, так це заповнювати плани та оцінювати тривалість роботи. Втім, тепер ці навички знаються рекрутерам застарілими.

Жахливе протиріччя з усіма ідеями щодо відкритого ПЗ, які я так захищав. Він продовжує:

Я спробував зрозуміти хід їхніх думок. Сила-силенна проектів з відкритим кодом написані дуже погано. Їх створювали, щоб реалізувати якусь ідею, а не для того, щоб задовольнити потреби користувачів. У академічному середовищі опублікування роботи є важливішим, ніж збільшення кількості користувачів. У людей, що займаються комерційною розробкою, складається враження (інколи вірне, а інколи ні), що розробники відкритого академічного ПЗ не володіють певними практичними навичками. Я не кажу, що мій відкритий код найкращий, але він працює, він добре документований, і доступний для аналілу. Одна з причин, чому я багато часу витратив на роботу у вільних проектах — бажання зробити пошук роботи легшим. Я думав, великі зразки публічно доступного робочого коду скажуть роботодавцям більше про мене, ніж результати одного нещасного тесту чи рядок у резюме “проведено років”. Тепер я знаю більше про всю шумиху навколо відкритого коду. Я багато чув, багато робив, багато чого опробував на собі. Час від часу слід повертатися до реальності і задавати питання — а чи не переоцінено значення відкритого коду?

Погано, що знаходяться службовці, які не беруть до уваги досвід, отриманий у open source проектах. Це така сама частина вашого портфоліо, як і будь-яка інша, а тому будь-яка компанія, яку це не цікавить, є підозрілою. Це мінус роботодавцям. Я не впевнений, що хотів би працювати там, де більшу частину програмістського доробку вважатимуть не вартою уваги.

З іншого боку, вибір проекту має таке ж велике значення, як і власне програмування. Скільки існує проектів, що дарма витрачають зусилля, вирішуючи нікому не потрібні проблеми, або завдання, наскільки вузькоспеціалізовані, що ніхто, крім авторів, у них не розбирається? Як комерційна програма не може існувати без клієнтів, так і проект з відкритим кодом не можна уявити без певної критичної маси користувачів. Пам’ятайте, не достатньо просто випустити програму. Відкрили ви свій код чи ні, якщо ви пишете програми, які навряд чи хтось буде використовувати, якщо вам не вдалося зацікавити роботою у проекті ще хоча б кількох програмістів –

Тоді, що ви в біса робите?

Категорії: програмування | Теґи:, , , | Коментарів: 1

Ui : дрібниці

Квітень 22nd, 2009

Зліва — приклад правильного інтерфейсу, справа — інтерфейс, у проектуванні якого було допущено помилку:


Справа в тому, що чекбокс «Запам’ятати мене» повинен бути неактивним. Якщо мені захочеться, щоб сайт мене впізнавав, то я сам відмічу його під час заповнення інших полів, один раз у житті. А от якщо я бережу свою приватність, мені доведеться знімати галочку при кожному логіні, це буде незручно.

Ще один приклад цієї ж самої помилки:

За замовчуванням варто було б пропонувати годинну сесію (менше двигунець форуму не дозволяє), натомість вони пропонують логін назавжди.

З іншого боку, що мені не подобається у проектуванні графічних інтерфейсів — так це те, що кожне рішення можна виправдати. Наприклад, можна сказати, що ресурс work.com.ua орієнтується на людей, які не мають великого досвіду роботи з комп’ютером. Таким людям легше заходити на сайт без паролю, тому інтерфейс і пропонує цей варіант за помовчанням. А ukr.net — це веб-інтерфейс, призначений скоріше для гіків (бо «звичайні люди», як правило, використовують програми-клієнти типу Outlook). Гіки більш схильні не довіряти свої дані браузеру, тому для них опцію впізнавання краще відключати. Непогана така теорія, розбиває її лише факт, що http://job.ukr.net/ теж має невідзначений чекбокс «Запам’ятати», хоча з work.com.ua вони ділять одну й ту саму аудиторію.

Категорії: програмування | Теґи:, , | Коментарів: 2s

Сапка

Березень 14th, 2009

Найбільше розчарування місяця. Починалося все дуже класно: ентузіасти, фанати ICFP Programming Contest, влаштовують свій контест, щоб було де пограти, подумати і задоволення отримати… Приносять fun у буденність, і т.д. Оголошення розповсюдили по уанету, власний Live CD випустили (з егрангом, хаскелом та іншою програмерською фігнею). Коротше, хотіли якнайкраще, вийшло епічно хуйово як завжди.

Отже, у п’ятницю, 13 числа (може, це дата так містично подіяла?) було прогололено завдання. Автори проекту виклали якийсь бінарник. Типу сервер якоїсь гри. Власне задача: за допомогою тонких натяків на товсті обставини з’ясувати, яку фігню і на який порт протрібно надсилати цьому серверу, щоб виграти гру. Про правила гри нічого не сказано.  Повна відсутність чіткої документації, все тіпа як у справжніх китайців в “рєальной жизнє”.

Насправді, вийшло ще гірше. Сервер — jar-файл, таким чином всі, хто не юзає Java, були фактично послані організаторами нахуй. У IRC-канал, розмови розумних людей підслуховувати….

Така от фігня, ще й з граблями:

У гугл-групі вже почали з’являтися виправдовування:

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

Типу, подумаєш, фігня сталася.. Життя — взагалі фігове, властивість у нього така…

Категорії: Новини, програмування | Теґи:, | Коментарів: 3s

Перенаправлення stderr в консолі windows

Березень 5th, 2009

Як відомо, в Linux (і в Cygwin також) для того, щоб зберегти вивід команди у файл, треба зробити якось так:

command &> log_file.txt

У стандартній Windows консолі ця штука не проходить. А оскільки нормальне виділення та копіювання тексту там теж відсутнє, то іноді трапляються страшні речі. Мені от, вчора, наприклад, в якості логу один індус прислав два скріншоти екрану. Ще й у форматі BMP, по два метри вагою кожен. Чесне слово, так і було….

Так от, насправді все не так погано. Лише трохи відрізняється:

command > log_file.txt 2>&1

Тобто, направляємо stdout у файл, а stderr переводимо у stdout, таким чином він теж опиняється у файлі. Між іншим, у ніксах такий фокус теж має відбуватися без проблем. Більше інформації про перенаправлення у windows-консолі можна знайти тут

Категорії: програмування | Теґи: | Коментарів: 1