вопрос к программистам
Oct. 4th, 2004 04:30 pmУ меня есть вопрос к программистам (и, шире, компьютерщикам). Расскажите о чём-нибудь особенно красивом/интересном/занимательном в вашей работе в последнее время. Например, какое-нибудь неожиданное архитектурное решение, или красивый в своей сложности баг, который удалось поймать, или красивая и эффективная оптимизация. А может, вы изучали какой-нибудь редкий и интересный язык, или нашли особую редкую красоту в известной всем системе. Короче говоря, было ли что-то неординарное в вашей работе в последнее время, о чём приятно вспомнить? Лучше всего в вашей лично, но если было что-то очень красивое, что просто встретилось/прочиталось, тоже можно рассказать.
Мной движет исключительно любопытство. Интересно узнать, чем таким хорошим люди занимаются.
Мной движет исключительно любопытство. Интересно узнать, чем таким хорошим люди занимаются.
no subject
Date: 2004-10-04 07:33 am (UTC)no subject
Date: 2004-10-04 07:34 am (UTC)no subject
Date: 2004-10-04 07:34 am (UTC)no subject
Date: 2004-10-04 07:36 am (UTC)http://www.livejournal.com/users/uniqs/10520.html?mode=reply
no subject
Date: 2004-10-04 07:49 am (UTC)Прикрутили девелоперы наши могучие недавно поддержку Adobe InDesign'овских документов по просьба злопастных кастомеров. Выглядело это следующим образом: поднимается индизайн процессом на бэкграунде, открывает искомый документ и экспортит в PDF - привычный формат для нашего аппликэйшна. Вот такое мелкое читерство. Ну, QA в нашем лице горестно повздыхал на предмет неистребимой лени у программистов и махнул рукой.
А нет.
Спустя пару недель приходит письмо от клиента в том смысле, что, мол, не работает ничего. Рылись-рылись, дебажили, логи читали - ни черта не ясно.
В конце концов, решили, что файл какой-то битый попался. Скачали себе, протестили - снова ничего. Ну делать нечего - последний вариант оставался. Зашли remote access'ом к клиенту, решили попробовать у него на системе ручками сэкспортить подлый файл. Запускаем InDesign... а он, зараза, просто-напросто предлагает себя проапгрейдить и, посему, пока "Ок" или "Cancel" не тыцнешь - процесс будет стоять.
Занавес.
Матерились долго.
no subject
Date: 2004-10-04 07:59 am (UTC)С глаз долой - и т.п.
Хотя вот, да. Помнятся чужие достижения.
Один мой знакомый писал что-то такое на PHP:
$foo = (откуда-то он брал этот массив, неважно);
$balberg = $foo['balberg'];
$bromberg = $foo['bromberg'];
... // много
mysql_query("update dogwill ser balberg='$balberg', bromberg='$bromberg', ... where id=$id", $mysql);
no subject
Date: 2004-10-04 08:02 am (UTC)no subject
Date: 2004-10-04 08:05 am (UTC)Например, стандартная (в Windows) декларация "" объявляет как указатель на неконстантные символы. Тем не менее, в коде иногда приходится встречать (http://www.google.com/search?ie=UTF-8&oe=UTF-8&hl=ru&q=%22const+BSTR%22) функции вида "", где намерением программиста явно было предотвратить модификацию передаваемой строки (как если бы действовало определение ""), в то время как на самом деле такое выражение объявляет константным не указуемые данные, а лишь сам передаваемый указатель, что в данном случае имеет очень мало смысла.
Иногда в связи с этим могут возникать трудноуловимые баги.
no subject
Date: 2004-10-04 08:17 am (UTC)Оказалось вот что: между инсталляциями юзеру присылался патч, который копировал новые файлы к нему на диск. Простой .bat с командой copy. Новые файлики .js копировались поверх старых. Ничего особенного, правда? Только вот NTFS (да-да, сам драйвер файловой системы) при перезаписывании файла сохраняет дату создания и доступа от прежнего файла, а вот дату модификации берёт от нового. Если старый файл сначала стереть, а потом записать новый - ничего не поможет, даты файла, который там был, восстанут из пепла! Только через сколько-то секунд эта информация "забывается". И это не баг, а фича, называемая tunneling, регулируется она через реестр и сделана для совместимости с MS-DOS. Так и поныне, вон на XP только что проверил.
no subject
Date: 2004-10-04 08:20 am (UTC)Поставил UNIX V7 и радовался около часа. Только работает медленно.
no subject
Date: 2004-10-04 08:20 am (UTC)typedef OLECHAR* BSTR;
do_magic (BSTR const text);
do_magic (OLECHAR* const text);
do_magic (OLECHAR const* const text);
text is of type (с права на лево) 'const pointer-to const OLECHAR'
no subject
Date: 2004-10-04 08:24 am (UTC)no subject
Date: 2004-10-04 08:26 am (UTC)no subject
Date: 2004-10-04 08:28 am (UTC)c++ meta-programming
Date: 2004-10-04 08:29 am (UTC)#include <iostream> using std::cerr; using std::endl; struct two_char { char a[2]; }; template <typename t, t* (t::*f) () const = &t::clone> struct helper_clone; template <typename t> char test_clone (helper_clone<t>*); template <typename> two_char test_clone (...); struct a { a* clone () const; }; struct b { private: b (b const&); }; int main () { cerr << sizeof (test_clone<a> (0)) << endl; cerr << sizeof (test_clone<b> (0)) << endl; }no subject
Date: 2004-10-04 08:40 am (UTC)Еще тут недавно попросили на некий баг посмотреть в SQL query. Гляжу - а там что-то типа вот этого:
...WHERE (Field_A = X and Field_B = Y or Field_B = Z)
Жалуются, мол, много лишних строчек выдает.
no subject
Date: 2004-10-04 08:42 am (UTC)no subject
Date: 2004-10-04 08:46 am (UTC)Оказалось, файл explorer.exe в корне системного раздела. Так как указание загрузки shell идёт просто как explorer.exe а не %windir%\explorer.exe, то поиск идёт по path, и мусорный файл всплывает первым.
Повбывав бы.
no subject
Date: 2004-10-04 08:54 am (UTC)Продукт использует SysV семафоры. Собсвтенно даже не семафоры, а мьютексы, но они сделаны на семафорах. Всё это обёрнуто в нашу библиотеку. Библиотека устроена так, что если просят запереть мьютекс, которого ещё нет, он молча создается и запирается. В продукте есть несколько постоянно запущенных демонов, но иногда запускаются ещё всякие вспомогательные процессы. Обычно всё работало, но иногда мьютекс оказывался заперт, всё на нём останавливались и никто не отпускал. Оказалось, что мьютекс этот создавался в запертов состоянии с флагом SEM_UNDO, поэтому если карты ложились так, что создавался этот мьютекс вспомогательным процессом, то по завершении этого процесса он восстанавливался в исходное состояние, т.е. запертое.
no subject
Date: 2004-10-04 08:56 am (UTC)Известно название формы, название выводимого поля и будет ли это поле обязательным для заполнения. И завязка обработчиков onsubmit, когда каждое новое выводимое поле добавляет js на проверку заполненности, потом вызывает более ранний onsubmit.
Или вот связка одного объекта с многими другими, расположенными в иерархической структуре. Отдельное окошко с деревом объектов и галочками, вывод дерева по заданному количеству уровней, с нужным рутом, с удалением ненужных веток, ходим, ходим, галочки ставим. Потом кнопку жмем - и все связи добавляются одномоментно.
Засада была, в основном, в снятии галочек. Т.е. отследить момент "тут была галочка", поэтому связь надо удалить, "а тут галочка была и тут и осталась", так что тут ничего делать не надо.
Еще - установка windowsupdate сервера под Unix'ом. Правда, скрипты не мои, но в итоге красиво работает.
Глюк сети - аська работает, осел работает, а из сайтов - только яндекс и гугль. Оказалось, кривая карточка с впнами, не держит мту 1500.
no subject
Date: 2004-10-04 08:59 am (UTC)Так ведь это совсем не то. Требуется защитить от изменения содержимое *text, а не сам text. Именно что приходится отказываться от typedef BSTR.
no subject
Date: 2004-10-04 09:01 am (UTC)no subject
Date: 2004-10-04 09:03 am (UTC)С глаз долой - и т.п.
А очень советую записывать где-нибудь в сторонке интересные случаи.
Если придётся менять работу, то для интервью очень пригодится.
no subject
Date: 2004-10-04 09:13 am (UTC)no subject