bash.im ithappens.me zadolba.li
9253

По самую грушу

24 мая 2012, 10:00

У маркетинга сегодня были проблемы с отправкой рассылки. Почтовая программа грубо ругалась и выдавала сообщения типа: «Чего вы пихаетесь, если оно не влезает?» Но к админу обратиться побоялись, как обычно.

Переслал ему письмо. Он ответил. Цитирую:

«Важен выбор размера наконечника клизмы. Если размер наконечника сопоставим с размером головы пациента или больше, неизбежны затруднения при проведении процедуры. Более того, возможно последующее ухудшение общего самочувствия пациента, его угнетённое, депрессивное состояние». (Из «Карманного справочника начинающего санитара».)

А вообще — размер письма для рассылок не больше 1 МБ.

9252

Это чоппер

24 мая 2012, 10:00

Занимаюсь проверкой кода для игры. Не выспался, ибо много работал.

Еду на работу в авто. Пробка. Мимо проезжает какой-то огромный дядька на огромном мотоцикле. Первая мысль: «Какой-то придурок масштаб неверно выставил».

9251

Окна и велосипеды

24 мая 2012, 10:00

Большинство людей, когда им нечего делать, находят себе какие-нибудь развлечения: кино посмотреть, музыку послушать или в игры там поиграть. У меня же, как у программиста, свои «игры» и «развлечения»: эмулятор DOS на КПК и мечта детства написать гибридную программу, которая бы одинаково работала и под DOS, и под Windows. Писал я её на ассемблере, долго и по чуть-чуть. Но вот настал момент, когда программа была почти готова, и осталось только написать простенький мини-драйвер под Windows, который будет перенаправлять вывод программы в окно.

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

Загружаю старый добрый TD32. И тут происходит это… Знаете, как выглядит самый страшный ночной кошмар любого программиста? Самый страшный кошмар программиста — это когда прога падает при простом запуске, но при попытке отладить её ошибка мистическим образом испаряется! При запуске под отладчиком программа преспокойно работает. Я начинаю судорожно анализировать ситуацию: что такого я мог накосячить, что прога отказывается работать под «голой» виндой?

На анализ ситуации уходит пара часов, в течение которых программа дописывается до фактически окончательного состояния, но решить проблему так и не удаётся — прога так и падает где-то в User32, хоть ты тресни. И тогда я решаю пойти от обратного. Вот в соседней папке лежит каркасное приложение под винду, которое прекрасно работает. Чем же от него отличается моя программа?

Оказывается, перед тем как приступить к написанию модуля, я на всякий пожарный решил перечитать статьи по некоторым функциям API, причём не где-то на левых сайтах, а непосредственно в MSDN. Там я обнаружил весьма интересную информацию: оказывается, функция регистрации класса окна возвращает идентификатор этого самого класса, так называемый атом, который можно использовать вместо имени класса при создании окна. Конечно, как ярый фанат оптимизации (не зря же на асме пишу), я именно так и сделал. Зачем заставлять ОС делать лишние телодвижения? Ведь она же всё равно этот самый идентификатор будет искать по имени. Я это сделал и преспокойно забыл.

Вернул идентификацию класса окна по имени — всё заработало. Тут всё встало на свои места. Оказывается, никакой магии в том, что ошибка мистически пропадала в отладчике, нет. Эти самые атомы работают только под Win95/98.

А весь фокус с исчезновением в том, что древний TD32 работал в режиме совместимости с Win95. Но ни в одной справке про это нет ни единой строчки! Даже в официальном MSDN. Там прям так и написано: можете использовать либо имя, либо идентификатор.

Вот мне и вам урок на будущее: меньше доверяйте документации Микрософта и не изобретайте велосипеды. Пишите так, как пишут все, и будет вам счастье.

9250

Дуб под мышкой

24 мая 2012, 08:00

Достали меня очень с подмышниками — то грызун плохо бегает, то рисунок не нравится, то расцветка. Купил рулон самоклеющихся обоев и оперативно осчастливил всех страдальцев под лозунгом: «Быстро, качественно починяем-латаем коврики. Ваша мышка будет блаженствовать!»

Спалился совсем случайно: не посмотрев, отдал в бухгалтерию товарник. Там было написано: «Самоклеющиеся обои под дерево (пробковый дуб)».

9249

Былинные отказы

24 мая 2012, 08:00

Всем айтишникам когда-либо отказывали. Вот моя пятёрка лучших отказов.

В приёме на работу: «У вас нет высшего образования, а у меня их два и третье на подходе, а вы умнее меня».

В оплате сделанного: «Мы заплатили 10 тысяч и ждали месяц, но %hardwareName% не заработало. Мы заплатили ещё 12 и ждали два месяца, но оно всё равно не заработало. Тут приходите вы — у вас оно заработало за пять минут. И вы просите за пять минут пять тысяч?»

В приёме сделанной программы. После трёх месяцев скрупулёзного эргономического анализа размещения почти тридцати критичных полей ввода на экране XT 80×25 в текстовом режиме и шлифовки алгоритмов поиска по справочникам для хотя бы частичного автозаполнения скорость работы оператора возросла почти в четыре раза за счёт рационального использования клавиатуры. И тут вопрос: «А почему мышка не работает?»

В продолжении совместной работы. Ну зачем ты, начальник IT-отдела, сказал на совете директоров, что генеральный читает твою докладную полугодовой давности о развитии инфраструктуры?

И на первом месте — ещё один отказ: «Вы слишком мало просите денег. Наверное, вы х#$вый специалист».

9248

Мозговедение: основы

24 мая 2012, 08:00

Мозг работает как компьютер. В нём тоже идут процессы (у некоторых демоны, у некоторых тараканы). Причём многозадачность вроде как поддерживается, но не особо успешно. Что-то вроде вытесняющей многозадачности. Несколько процессов могут работать с равным приоритетом, а один процесс может вытеснять остальные.

В мозгу могут образовываться блоки аппаратной обработки. Если долго делать однообразную работу, её можно выполнять без нагрузки на основной вычислительный блок. Научится водить машину сложно, для некоторых невозможно, но при опыте в несколько лет происходит аппаратная обработка внешних событий (анализ ситуации, расчёт скорости). Управление внешними устройствами происходит практически без нагрузки на процессор.

Кроме процессов-обработчиков, есть центральный процесс, который пытается управлять остальными.

Один процесс понимает, что нужно работать (писать программу, настраивать сервер, проектировать плату), а другой хочет читать Баш и флудить на форумах.

Второй процесс успешно подавляется внешним устройством «начальник». По этой причине фрилансерами работать могут не все. Если недостаточно сил для самоорганизации, то нужно, чтобы кто-то давал пинка вовремя.

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

Подобным образом работает и алкоголь. Если выпить столько, чтобы сил на многозадачность не оставалось, но при этом работа в однозадачном режиме не сильно тормозилась, то можно достигнуть и «пика Балмера».

Кофе стимулирует. Производительность растёт. Но в одном случае это повысит скорость решения задачи, а в другом даст время для отвлекающих процессов.

Общего рецепта нет. Компилируйте реальность под свой ЦП.

9247

Инь и ян в одном флаконе

Минск. Старый, некогда оборонный завод ныне клепает всё, что продаётся. На двери одного из кабинетов административного здания — две таблички: «Бухгалтерия» и «Программист».

Апокалипсис начнётся именно здесь.

9246

Админско-юзерский словарь

23 мая 2012, 10:00

Чем мы, айтишники, лучше юзеров? Мы же не можем им зачастую дать того, что от них требуем — понятных ответов на вопросы. Они нам не могут внятно объяснить проблему ровно так же, как мы не можем объяснить решение на языке, понятном им.

Когда вы не понимаете проблему юзера, вспоминайте про эту запись. Мы говорим на разных языках, но нам надо быть терпимее. Только так мы достигнем наиболее эффективной работы.

9245

Времени много, гигагерц полно

Сегодня ребята сдавали технологии программирования. Задают им задачу по SQL: вывести из таблицы поля «имя» и «дата рождения» только тех сотрудников, которые работают в Западном регионе. Вроде бы ничего сложного, да? Пишем:

SELECT name, birth_date FROM staff WHERE region="West"

Верно? А вот ни фига! Это задание нужно сделать двумя запросами: одним вывести имя и дату, а вторым отобрать сотрудников из заданного региона.

У меня только один вопрос: нас сознательно с универа учат писать индийский быдлокод?