Листопад 21st, 2008
Маємо привід випити
Вчора, 20 листопада, виповнилося 25 років з моменту випуску TurboPascal 1.0 — програми, яка назавжди змінила світ.

Між іншим, воно ще й досі доступне для завантаження
Категорії: Життя |
Кометарів немає
Листопад 10th, 2008
Ще одне цікаве завдання, з тих, що пропонує Яндекс:
Есть класс CodeGenerator, который умеет генерить код на разных языках.
-
-
class CodeGenerator
-
{
-
public:
-
enum Lang {JAVA, C_PLUS_PLUS, PHP};
-
CodeGenerator(Lang language) { _language=language; }
-
std::string generateCode()
-
{
-
switch(_language) {
-
case JAVA: //return generated java code
-
case C_PLUS_PLUS: //return generated C++ code
-
case PHP: //return generated PHP code
-
}
-
throw new std::logic_error("Bad language");
-
}
-
std::string someCodeRelatedThing() // used in generateCode()
-
{
-
switch(_language) {
-
case JAVA: //return generated java-related stuff
-
case C_PLUS_PLUS: //return generated C++-related stuff
-
case PHP: //return generated PHP-related stuff
-
}
-
throw new std::logic_error("Bad language");
-
}
-
-
private:
-
Lang _language;
-
}
-
Исходя из предположения, что количество языков будет добавляться, предложите refactoring кода. Аргументируйте преимущество вашего кода над существующим.
(ще…)
Категорії: C/C++, Паттерни проектування |
Теґи:c/c++, factory, refactoring, yandex, паттерни програмування, програмування, рефакторінг | Кометарів немає
Листопад 7th, 2008
Виявляється, Яндекс постійно набирає нових людей, зокрема, розробників C++. Перша частина співбесіди — онлайн. Завдання, що там пропонуються, без сумніву, варті уваги. Ось , наприклад, таке
-
-
class Top {
-
public:
-
virtual ~Top (){}
-
};
-
-
class Right : virtual public Top {
-
public:
-
void f () {}
-
};
-
-
class Left : virtual public Top {
-
public:
-
void f () {}
-
};
-
-
class Bottom : public Right, public Left {
-
public:
-
/*
-
* что надо написать чтобы выполнялось требование описанное в main
-
*/
-
};
-
-
int main (int, char**) {
-
Bottom b;
-
b.f(); // Требование: вызов Left::f()
-
}
-
Звісно, перше, що спадає на думку, зробити шось типу
void f () { Left::f();}
Але так негарно. Виклик однієї функції через іншу… Не дуже добре, особливо якщо в реальному житті трапиться метод з багатьма параметрами.
Насправді, розумні люди підказали , треба робити так:
using Left::f;
Цей запис виглядав би так само, навіть якби у батьківських класах метод f приймав би якісь параметри.
В тому коді є ще пара цікавих моменти, про які особисто я не знав, не знав, та й забув.
По-перше, спосіб наслідування virtual publiс. Виявляється, слово virtual в даному випадку означає, що у класі Bottom буде присутня одна і тільки одна реалізація об’єкту класу Top. Якби virtual не було, тоді виникала б неоднозначність при використанні членів класу Top, успадкованих як в Left, так і в Right. Втім, в прикладі цього не видно, бо в Top занадто спрощений.
По-друге, клас Top має віртуальний деструктор. Питання: який взагалі сенс деструктору бути віртуальним, коли його все одно не можна перекрити в класі-нащадку? Погугливши, знайшов відповідь . Справа в тому, що якби не слово virtual, то ось в такому випадку
int main {
Top* tp = new Right;
}
було б викликано деструктор явно заданого класу (Top), в той час, коли насправді треба викликати ~Right.
Категорії: C/C++ |
Теґи:c/c++, virtual, yandex, Яндекс | Кометарів немає
Листопад 2nd, 2008
Випадковий розподіл адресного простору — технологія, покликана підвищити безпеку операційних систем. Англійською Address space layout randomization (ASLR). Основна ідея полягає у тому, що під час запуску програми динамічні бібліотеки опиняються у випадковому сегменті пам’яті (з випадковим зміщенням). В ідеалі, так само, у випадкове місце, слід переміщати стек та купу(heap) програми, що запускається.
Передбачається, що таким чином система стає стійкішою до атак типу return-to-libc. Справа в тому, що, зловмисник, отримавши доступ до стеку, може записати туди якісь свої параметри та перевести виконання на відому йому адресу якоїсь функції з стандартної бібліотеки. Фактично це буде рівнозначно звичайному виклику такої функції, але з параметрами, заданими зловмисником. Функція може бути будь-яка. Може, exec(), може socket() — як треба буде. Аналіз багатьох експлойтів свого часу показав , що більшість мають “жорстко” записані адреси переходу. Тут якраз випадковість розміщення і проявляє себе: ймовірність правильного виконнання експлойту знижується майже до нуля.
Вперше ASR було реалізовано у PaX — наборі патчів безпеки для лінукс-ядра. Відповідно, на практиці це можна було помацати у певних дистрибутивах (але не у всіх). Крім того, своя реалізація з’явилась у OpenBSD. У світі Windows технологія ASLR прийшла лише з виходом Vista.
Втім, не все так добре. Ймовірність правильного виконання експлойту хоча й наближається до нуля, але не зникає. Запустивши вразливий код багато разів, врешті решт зловмисник отримає бажаний результат. “Против лома нет приема”, brute forse, що тут зробиш. Спеціальні наукові дослідження , та й просто практика , показали, що ASLR безсиле проти дещо модифікованих атак. Так, вони ускладнюються та уповільнюються, але все одно так чи інакше мають усі шанси закінчитися успіхом. Тому технологія ASLR не стала “срібною кулею”. Хоча, її все одно залишили. Про всяк випадок. Тим більше, що вона хоч трохи, але діє.
Категорії: Життя |
Теґи:Address space layout randomization, ASLR, безпека | Кометарів немає
Листопад 2nd, 2008
Cхоже, відтепер я буду використовувати цей онлайн-редактор:
http://writetomyblog.com/
Він WYSIWYG, але з можливістю редагування html. Зручно. Раніше я писав у іншому редакторі, але тепер він не відкривається. Криза подіяла, чи що….
І ще трохи схожих ресурсів:
- http://writer.bighugelabs.com/ “Друкарська машинка інтернету”. Представник класу так званих room-editor. Аскетичний, чорний. Сподобається тим, що не хоче відволікатися, пишучи пост. Я особисто не дуже розумію такого підходу. Пости пишу, як правило, на основі якоїсь інформації, як не крути, а пара вкладок в браузері мають бути відкритими
- http://htmledit.squarefree.com/ онлайн html-редактор. Пишете у верхній половині вікна і одразу бачите, як воно буде насправді виглядати. Не підтимує юзерських css, а тому не дуже потрібне. Тільки для перевірки, що всі теги закриті.
- http://gpl.internetconnection.net/vi/ онлайн редактор vi. Для фанатів
Насправді, це саме vi, а не vim, тому багато фіч (в тому числі підсвітка синтаксису) відсутні. Прикольна штука, але неюзабельна.
- http://www.myquicknotepad.com/index.php?NewNotepad=TRUE ще однин редактор, на цей раз з wiki-синтаксисом. Може конвертувати wiki в html. Я wiki-розмітку ненавиджу, тому і не користуюся.
Категорії: Посилання на цікаве |
Теґи:online editor, vi, vim, блог | Кометарів немає
Листопад 1st, 2008
Я нарешті дістався до адмінки
- як можна бачити, змінилася тема оформлення. Тепер вона краще виглядає у лінуксах, навіть при тамтешніх censored шрифтах
- додався плагін підсвітки коду. Це ж се таки програмерський блог, не аби шо. Потребує дозволених скриптів.
- краще пізно, ніж ніколи, навів порядок з RSS-посиланнями
- додав OpenID плагін. Може, комусь знадобиться
- ще додав кілька категорій, тепер структура стала більш логічною
Ще мабуть скоро приберу рекламний банер, і все, перехід на новий рівень досконалості можна буде вважати завершеним.
Категорії: життя блогу |
Теґи:Життя | Кометарів немає