bash.im ithappens.me zadolba.li
5335

Гладко было на бумаге

31 января 2011, 16:45

Все говорят, что писать надо быстро, качественно и так, чтобы работало. С этим все согласны, но когда начинаешь выяснять, что такое «чтобы работало», обнаруживаются такие нюансы, что только диву даёшься.

Я не программист, я математик. И 25-летнего стажа у меня нет — мне всего 27. Тем не менее, на моём счету нахождение ошибки в вычислительной программе по телефону (неправильное соотношение шагов в сеточном методе для уравнения теплопроводности — в итоге деталь охлаждалась до −3000 градусов) и ещё пара подвигов в этом духе, но рассказ не об этом.

Недавно меня попросили реализовать один алгоритм (если кому интересно, Savitzky-Golay smoothing). Ерунда вопрос. Два дня, чтобы прочитать, что же это за зверь, два дня, чтобы вспомнить синтаксис C, два дня, чтобы не торопясь написать и протестировать консольную программу (напоминаю, я не программист). И вот в процессе тестирования вылезает глюк: в результате сглаживания у положительной функции появляются отрицательные участки. Понятно, что на такой функции и с такими параметрами метод не работает, но как понять, где его можно применять, а где нет? И вот я погружаюсь в глубины интернета в поисках оценок погрешности метода, но их нигде нет. Самому оценки вывести не получается — метод сформулирован в таких терминах, что непонятно, с какой стороны к нему подходить. Алгоритм опубликован в 1964 году, но за сорок лет никто не удосужился его протестировать и обосновать?! Невероятно, но факт. В принципе, после этого можно было бы сдать работу и сказать, что оно сорок лет у всех работало и у нас поработает, но совесть не позволила. На реализацию ушла неделя, на поиск альтернативных решений или обоснований — два месяца. Вот такое вот «чтобы работало». Решайте сами, как бы вы поступили в такой ситуации.

Кстати, у этой истории счастливый конец. Когда я перерыл все книжки, решил плюнуть на всё и придумать свой алгоритм с шахматами и поэтессами. Сказано — сделано: придумал и сильно удивился тому, что вычислительная часть посимвольно совпала с тем алгоритмом, с которого я начинал, но у меня были оценки погрешности. Оставался, правда, ещё вопрос, как заставить их работать, но это совсем другая история.

5334

Много-много миллионов новых наноэлектронов

31 января 2011, 12:45

Конец 2010 года. Интернет-провайдер в подмосковном Долгопрудном гордо заявляет: новые тарифы «работают только по новой технологии IPoE (IP over Ethernet)». Вот это инновация! А раньше мы IP через Ethernet передавать и не догадывались!

5333

Тонкий беспроводной троллинг

31 января 2011, 12:45

Потребовался мне наконец вайфай дома. Домашняя сетка грамотно разведена по кабелю, так что раньше необходимости не было. Воткнул в коммутатор точку доступа, быстренько настроил WPA2.

А теперь нюанс, которым хочу поделиться. В качестве пароля, особо не заморачиваясь, я выбрал словосочетание на русском языке в английской раскладке. Запоминается легко — но попробуйте ввести его на экранной клавиатуре КПК, планшетника или смартфона! Не получается? А гости, основные пользователи моего домашнего беспроводного интернета, приходят именно с такими устройствами. Пароль пришлось менять.

5332

Уберите руки от моего аптайма

31 января 2011, 12:45

Есть у меня на работе одна женщина, несколько неадекватная. У неё бзик на почве того, что её все стараются уволить. Как-то подняла шум из-за того, что один из «программистов» что-то ей испортил. Когда она выключает компьютер, тот её спрашивает: «Завершить работу?»

— Мне завершить? Совсем — и с вещами на выход? Я ещё вас тут всех пересижу, вы меня не уволите!

5331

О сложности простоты

Отважусь провести краткий ликбез на тему «ху из ху», чтобы нормальные программисты не считали самих себя быдлокодерами.

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

Индус в первую очередь просто не владеет средствами языка в достаточной мере и пользуется теми, про которые успел прочитать, комбинируя их в жутких сочетаниях. Например, не знает про циклы с постусловием.

Оверинжиниринг — вот мировое зло, вот дьявол всеохватный. Надо же обязательно показать всему миру длину своей пиписьки, свою «современность» и владение всякими супер-пупер-технологиями. Как? Ты до сих пор ищешь четыре максимальных элемента в массиве при помощи цикла? Так ведь в последней версии надстройки для последнего Visual C++, которая продаётся всего за $1600, давно реализован готовый класс для этого! Или можно взять готовую функцию qsort, которая всего-то отсортирует зря остальные 4 миллиона элементов, зато ты потом просто сможешь взять e[0], e[1], e[2], e[3] — и всё!

Головоломщик пишет красиво, компактно, оптимально. Задача легко охватывается одним взглядом, блоки отделены один от другого логично и изящно, пусть и с нестандартным форматированием. Отличается от хорошего программиста тем, что не комментирует свой код и даёт всему сущему идиотские названия. Иногда доходит то такой изощрённой пытки, как некомментированная ассемблерная оптимизация, идеальная с точки зрения кода, но с читаемостью на уровне клинописи:

for (b=a=0, a<c, a++) if (b<d[a]) b=d[e=a];

Возможно, после пары тумаков он станет нормальным программистом и начнёт писать так:

for (MaxVal=i=0, i<ARRAY_SIZE, i++)
if (MaxVal<DataArray[i]) MaxVal=DataArray[MaxIndex=i];
// Ищем максимальный элемент и его номер. Массив полностью нулевым не бывает (проверено выше), поэтому MaxIndex всегда определён.

Только не переборщите с тумаками, а то он начнёт писать всё это в десять строк со скобками, что затрудит чтение громоздкостью — это вечный бич опенсорса.

5330

Золотая раздача платинового альбома

31 января 2011, 11:00

«Left its seeds while I was sleeping», — пели Саймон и Гарфанкел в далёком 1965 году, задолго то того, как на нашем национальном трекере ввели систему подсчёта рейтинга.

5329

Между трёх огней

31 января 2011, 09:00

Ковыряю один не очень известный драйвер для восьми трёхцветных светодиодов, где яркость каждого цвета можно менять как тремя внешними резисторами, так и программно. Сам не так давно отказался от DIP-корпусов, почти всё использую SMD (в первую очередь резисторы).

Началось с того, что при пайке плату я повернул на 180 градусов (так было удобнее), а микру нет — но это полбеды. Всё припаял заново, даже смог управлять. Быстренько зашил в контроллер таблицу синусов, настроил таймеры, и по светодиодам весело побежала радуга. Радость была недолгой: красная составляющая резко стала явно преобладать над остальными. Не беда: поправил константу, и всё встало на свои места. Вскоре возникла та же проблема, но уже с синим цветом. Начал подозревать перегрев драйвера, однако палец почти не чувствовал тепла. Стал ковырять программу, пробовал вызывать функцию инициализации драйвера по несколько раз, уменьшил скорость передачи до 10 байт в секунду, пропаял все разъёмы — ничего. «Баланс белого» гулял, как ему вздумается.

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

Разработчики и радиолюбители! Если уж используете активный флюс, так смывайте тщательно. Удачи в творении — и поменьше нервничайте.

5328

В сценическом образе

Нужно было мне от одного знакомого, не особо сильного в компах, получить файлик — ISO-образ в 600 метров весом. Пока я думал, поднять у себя FTP или объяснить, как пользоваться файл-хостингами, человек написал, чтобы я готовился принимать по электронке.

К вечеру я получил от него 30 писем, в каждом из которых лежал 20-метровый RAR-архив. Сразу же вспомнились старые добрые времена, когда на двух пачках дискет носили игры друг другу. Но сюрприз ожидал меня в конце. Распаковав этот многотомный архив, я получил… запароленный RAR-архив с нужным мне диском. Пароль мне знакомый потом сообщил по телефону, а причины решения объяснил так: «Ты же рассказывал мне, что надо осторожнее быть с информацией в сети, что важную информацию не стоит пересылать по небезопасным соединениям. Я не знаю, безопасна ли почта или нет, поэтому решил подстраховаться».

Люблю таких пользователей. Хоть и не всегда знают, как сделать, но стараются.

5327

Пять по алгебре, а ко мне на пересдачу

31 января 2011, 09:00

Третий курс IT-факультета с математической направленностью. Зачётная неделя перед зимней сессией, на кафедре сдаю накопившиеся за семестр лабораторные и непроверенные контрольные по программированию. Рядом сидят однокурсники и в потугах пытаются получить зачёт. Вопросы отлетают, как от стены. В итоге препод пытается вытянуть ребят хотя бы на минимальную оценку.

— Что такое класс?

Ответа закономерно нет.

— Ладно, что такое полиморфизм?

Бедный студент начинает рыться в памяти на предмет знакомых ему понятий:

— Ну, я знаю, что такое гомоморфизм, изоморфизм, эндоморфизм, автоморфизм и даже диффиоморфизм, а о полиморфизме слышу впервые.