Тест на знання 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

Blobby Valley

Квітень 17th, 2009

Про що ж ще писати у п’ятницю перед довгими вихідними, як не про ігри? Але це — не просто гра, це легендарна гра, впізнавана з першого погляду:

І, як виявилось, ця гра доступна всіх можливих платформах, в тому числі й на Linux. Качати на http://sourceforge.net/projects/blobby

Поки що у проекту статус Alpha, але програма цілком стабільна. І на Windows, і на Linux без проблем вдалося зіграти з компом пару партій.

Порівняно з канонічною версією, у проекті з’явилося кілька нових фіч. Наприклад, можливість зберігати запис гри. Крім того, можна писати свої скрипти (на lua) для управління гравцем. А потім, при бажанні — влаштовувати чемпіонати, чий штучний інтелект виграє більше матчів;)

Категорії: linux, Посилання на цікаве | Теґи:, , , | Кометарів немає

iColud — операційна система у хмарах

Квітень 11th, 2009

Днями компанія Xcerion AG оголосила про створення чогось надзвичайного: операційної системи, яка повністю базується в інтернеті. Не так, як раніше, коли брали якийсь linux-дистрибутив і набивали туди програм для роботи з онлайн-сервісами. Ні, тепер все чесно, система дійсно живе десь на сервері і завантажується у браузері.

Реєстрація безкоштовна, тож я швиденько побіг на http://icloud.com, щоб на власні очі побачити, що воно таке. Результат — багато картинок. (ще…)

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

Майбутнє Linux-десктопів

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

Днями CEO компанії Red Hat Jim Whitehurst висловив сумнів про перспективи розвитку лінуксу на десктопах. Як завжди, заголовки новин (чи текст посилань) виявилися занадто сильними. Насправді сказані були досить правильні речі:

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

Ми [Red Hat] маємо версію ОС для настільних комп’ютерів, але її поставляють лише у рамках корпоративних замовлень тим клієнтам, які хочуть мати ще й робочі місця на Linux.

Крім того, проблеми з сумісністю все ще актуальні:

Microsoft не хоче сертифікувати Evolution [клієнт електронної пошти] для роботи Exchange [дрібном’який сервер пошти]

Цей факт, за словами Jim Whitehurst, показує, що Microsoft має занадто сильні позиції на ринку десктопів, щоб там могли вижити інші компанії. Тим паче, що другий сильний гравець — Apple, також гав не ловить.

Надії червоним капелюхам додає лише той факт, що саме пособі майбутнє настільних систем є досить сумнівним. Технології віртуалізації та хмаркові обчислення (про які я вже колись згадував ) можуть все докорінно змінити. Про перспективи і пропозиції Red Hat у цьому напрямі у п’ятницю заявив інший представник цієї компанії, CTO Brian Stevens. Картина передбачається просто фантастична: сервер, який з легкістю моделює будь-яку ОС, з якою захоче працювати оператор на тонкому клієнті.

Що ж, поживемо — побачимо. Чекати лишилось не так вже й довго, нова версія Red Hat Enterprise Linux має вийти вже цього літа.

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

Хабраредактори

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

Я вже колись писав про зручні онлайн-редактори. З того часу знайшлася ще пара нових:

Це хабраредактори, спеціально розроблені для написання статей на Хабрі. Але для звичайних блогів теж прекрасно підходять. Дуже зручні, особливо перший.

Категорії: Посилання на цікаве | Теґи:, , | Кометарів немає

Вірус у мережі банкоматів

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

Навздогін вчорашньому посту. Компанія DrWeb повідомляє про виявлення трояну у мережі банкоматів:

Троянский конь собирает информацию о кредитных картах и PIN-кодах к ним. Единственное, что требуется злоумышленникам, использующим данный вирус, - подойти к банкомату, ввести код и получить на чеке распечатку с данными потенциальных жертв мошенничества.

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

Для холівору можна відмітити, що на банкоматах стоїть Windows, як правило (інакше, що б там робив Dr.Web). Різних версій: і 98, і NT 4.0, і навіть страшні історії про 3.11 доводилося чути.

Втім, в даному випадку, це не важливо. Мережа закрита (хоча, якщо DrWeb туди якость потрапив, значить, не така вже вона була й закрита), тому троян туди теоретично просто не зможе попасти. До того ж, дане звірятко явно було спеціально створено: не так то й просто працювати з периферійними пристроями банкомату. Однозначно, автором вірусу була людина, близька до IT-відділу банку. Можливо, когось звільнили під приводом кризи, абощо…

Між іншим, окрема тема — rss стрічка новин компанії Dr.Web. Вона в них надійно захована на окремій сторінці, шоб дістатися до неї могли лише справжні та дуже наполегливі веб-майстри.

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

Лінухкапець: Вірус вразив 100000 Linux-машин

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

Виявлено перший в світі ботнет, який складається з роутерів на базі Linux/MIPS. Розбито відразу два міфи: “під лінуксом нема вірусів” та “стійкі незламні вебсервери стоять на лінуху”. Суперновина, прихильники MS танцюють самбу на уламках dlink’ів, asus’ів та іншої фігні.

Власне, головне джерело інформації: http://www.dronebl.org/blog/8 . Там сказано, що на даний момент psyb0t (так його назвали) самоліквідувався. Управління інфікованими машинами відбувалося через звичний багатьом IRC(Internet Relay Chat). Це дозволило невідомому хакеру залишити послання людству:

* Now talking on #mipsel
* Topic for #mipsel is: .silent on .killall .exit ._exit_ .Research is over:
for those interested i reached 80K. That was fun :), time to get back to the real life… (To the DroneBL guys:
I never DDOSed/Phished anybody or peeked on anybody’s private data for that matter)
* Topic for #mipsel set by DRS at Sun Mar 22 17:02:15 2009

Чисто just for fun, без ніякої шкоди. Втім, спеціалісти не впевнені, наскільки можна вірити цим словам.

Механізм ураження був простим, як дрова. Настільки простим, що цю штуку теоретично навіть не можна класифікувати як черв чи вірус. Воно просто тупо, brute force, підбирало пароль, щоб отримати доступ в консоль роутера. А отримавши, починало веселитись: блокувало ssh, telnet та web-інтерфейс (щоб хазяїн машинки не зміг нічого вдіяти), скачувало своє основне тіло і починало чекати подальших команд через IRC. Роутер при цьому продовжував функціонувати, всі пакети направлялися куди треба. Правда, цілком можливо, що проводився пошук у пакетах інших паролів (це я не зовсім зрозумів, але промайнула фраза “harvests usernames and passwords through deep packet inspection”).

Відповідно, так само простим як дрова є і спосіб захисту: треба лише не лінуватися і використовувати довгий, якісний пароль. До речі, тут якраз Microsoft представив засіб для перевірки стійкості пароля.

А ще хтось згадав, що такий тип атаки було описано ще у далекому 2006 році. Якщо цікаво, можна глянути, там небагато.

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

Складнощі перекладу

Березень 21st, 2009

Зазвичай, коли мені потрібен словник, я використовую яндексовий або гугловий сервіси. Але кожного разу відкривати нову сторінку браузера — незручно. Втім, всякі сторонні програми (типу такої) та оперівські віджети ще більш незручні.

Вихід — бот-перекладач у джаббері. Все одно jabber-клієнт у мене майже весь час запущений, так від нього ще й додаткова користь буде. Тож сьогодні зранку я почав шукати прояви штучного інтелекту. Виявилося, у гугла є ціле гніздо ботів, але чомусь  зв’язатися з ними не вдалося. Чи то з pidgin’ом знову шось не так, чи з яндексовим акаунтом, чи просто субота — вихідний. Так само невдачею завершились спроби поговорити з іншим бот-сімейством, від jrudevels.org. Бот ніби існує, але нічого не відповідає :(

Врешті решт, довелося задовольнитися простим словником: ru-en@darkmachine.org та en-ru@darkmachine.org. Принаймі, працює, і працює досить непогано.

Ще знайшовся англо-японський перекладач nihongobot@redundancy.redundancy.org. Не знаю, навіщо він може бути потрібен, але японські ієрогліфи у чаті прикольно виглядають:)

Категорії: Посилання на цікаве | Теґи:, , , | Кометарів немає