Истории с тегом: образование

Всего историй: 725

9361

Не хочешь в Офис — ждём в казарме

Заливаю последние изменения в ядре своей ОС на SVN, дооформляю патч для GCC, консультирую друга по установке Solaris в качестве сервера Active Directory. Завтра мне предстоит вступить в ряды тех, кто — не приведи Господь такому приключиться — будет защищать нашу страну. А всё почему? Из-за незачёта по Ворду и Экселю. Почти как в анекдоте: «Ухожу в армию косить от института».

Программисты стране нужны, говорите? Ну-ну…

9340

Против часовой стрелки и здравого смысла

Есть ощущение такое, что в коде студентов мне каждый год открываются таинства вселенной.

Вчера дописывали простой графический редактор. Даю задание облегчить интерфейс — ну, кто-то, естественно, начинает писать горячие клавиши. Стало интересно, на что у кого фантазии хватит. Попросил скинуть списки клавиш на локалку. Читаю — у всех один набор: Сtrl+S, Ctrl+Z, Ctrl+C, пару раз Ctrl+X. И вот оно, очередное откровение: Ctrl+(2x)C! Провтыкав полминуты, отрываюсь от стула и иду делиться вселенской мудростью с падаваном.

На ехидный вопрос, зачем ему, мол, два раза копировать, получил снисходительное объяснение, что никакое это не копирование, а поворот изображения. В связи с растущей высотой моих бровей было даровано и второе пояснение: С — clockwise, два раза С — counterclockwise!

Я настолько растерялся, что даже не понял, с какой стороны докопаться до этой логики, и пошёл пить чай.

9328

Поступь прогресса

О, прогресс-бары! Те самые полосочки из винды 3.1, которые в 95-й «мастдайке» стали жутко гламурными квадратиками.

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

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

Чуть позже додумался делать таймаут — иногда полезный процесс заканчивался значительно быстрее, чем прогресс-бар впервые отрисовывался, и чтобы не дожидаться последнего процесса, его просто запускал с некоторой задержкой. Именно тогда, можно сказать, на практике я ощутил рост вычислительной мощи железа: что раньше показывало прогресс-бар, то на более свежих машинках сразу же рапортовало: «Нажмите ОК».

Впервые этот способ я изобрел в восьмидесятых еще на ЕС-17хх, будучи школьником и только начиная программировать. Хоть и был метод затратен в плане объема кода (важный тогда параметр — оперативки на борту монстра, занимающего помещение в две моих нынешних квартиры, было 16 килобайт), зато мэтрам программирования того времени была продемонстрирована мощь поступи молодого советского поколения, красота на экране, как голливудских фильмах, и изумительная скорость.

Каково же было мое изумление, когда в руки мне попалась книжка Кормена (1979 год), где он описывает, что этот способ он подглядел у военных программистов в техдокументации за 1948-й! Воистину, все продуктивное — не просто хорошо забытое старое, а именно то, что мы забыли взять у предков. Ну, или нас почему-то забыли об этом предупредить.

9289

Впереди паровоза

Писал как-то девочке контрольную на Паскале. В чём суть задачи, уже не помню, но там были преобразования строк в числа и обратно. Для удобства из-за нескольких обращений написал в коде программы две функции, работающие через стандартные Val и Str. И чёрт меня дёрнул обозвать их, как одноимённые в Delphi: IntToStr и StrToInt.

Девочка получила за работу четвёрку, хотя прога работала. Мотивация преподавательницы: «В Паскале функций IntToStr и StrToInt нету».

9273

Не очень ноль

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

Моделировать пришлось связанные колебания маятников. Первый вариант программы я наскоро набросал на Delphi — для университетской конференции этого хватило. А затем была подготовка к такому же мероприятию, но уже между университетами. Поскольку времени хватало, я взялся переписать программу на FASM, заодно сохранив совместимость программы с Windows 95/98. Через несколько месяцев получилась вполне приличная 3D-модель с управлением параметрами системы, скоростью и направлением течения времени, возможностью подключать модели других физических процессов и прочими вкусняшками.

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

А полгода спустя ранним утром я, как обычно, шёл на первую пару. Мысли огромным роем носились в голове, сменяя одна другую. И вдруг я понял, в чём заключалась моя ошибка. Дождаться вечера, чтобы проверить догадку, было нелегко.

Поскольку в основном программа работала с вещественными числами, регистров общего назначения хватало с запасом. Чтобы подсократить размер экзешника, в самом начале программы я обнулял регистр EBX и использовал его везде, где это возможно, вместо константы 0. Всё тот же STDCALL этого не запрещает: вызываемые функции значение этого регистра сохраняют, так что оказалось действительно удобно. Есть только одна проблема: внутри себя функции WinAPI этот регистр активно используют, а соглашение вызова не обязывает их восстанавливать его значение перед вызовом callback-функций.

Моя ошибка оказалась в том, что в оконной процедуре (а с точки зрения User32.dll она как раз и есть callback) я забыл прописать явное обнуление EBX. На тех компьютерах, где программа работала корректно, мне просто везло: значение регистра оставалось нулевым. На остальных же системах там оказывалось ненулевое значение, которое успешно использовалось вместо всех нулей во многих процедурах программы. Одна строчка кода, два байта в экзешнике — полгода спустя они обрели своё место в коде, но было уже поздно.

Обнуляйте переменные и регистры — и будет вам счастье!

9245

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

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

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

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

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

9210

Ошибки бурной молодости

Давным-давно, в далёком восьмом классе, желая писать игры, я пошёл на курсы программирования.

Прошло пять лет, подходит к концу второй курс университета. Сдаю лабы по машинной графике, ассемблеру. Перечитывая IT happens, вспомнил одну из ранних историй о бабушке-лаборантке, помогшей студенту решить проблему с компиляцией программы, перенеся объявление переменной.

И я вдруг понял, что прошли мои лучшие годы. Счастливое, беззаботное детство, когда все ошибки были времени компиляции.

9158

У монитора нуб зелёный

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

Захожу после обеда — стоит нетбук. Стандартный набор жалоб: глючит, тормозит и так далее. Сразу оговорюсь, компьютеров на работе у нас нет (не состоящий на балансе антиквариат, собранный для собственных нужд, не считается), соответственно, уровень компьютерной грамотности у всех разный.

Товарищ, как выяснилось, не понимал в компах вообще ничего, однако некоторое время назад вдруг решил научиться. Пошёл в магазин, посмотрел ассортимент, долго снимал с ушей лапшу и в итоге взял компактную машинку сугубо для сидения в интернете и USB-модем впридачу. Все его знания вычислительной техники на тот момент ограничивались волшебной фразой «yandex.ru» — и это при неумении переключать раскладку. Начал осваивать, появились вопросы, но все родственники и знакомые, причастные к миру IT, смеялись над «тупым юзверем» и ничего внятного сказать не могли. Выручал исключительно Яндекс.

Нетбук-то оказался в хорошем состоянии, только автозагрузку почистить.

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

А коллега этот сел за руль, как только стал доставать до педалей, а то и раньше. И когда я в школьные годы играл с Бейсиком на «Корветах», он уже ездил самостоятельно, пока ГАИ не видит. В итоге многими своими знаниями по автомобильной тематике я обязан именно ему. И машину всё-таки купил.

Все мы в чём-то зелёные нубы, просто у каждого своя область. Может, хватит играть в незаменимость?

9128

Неприступное открытое окно

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

…или можно сделать это из командной строки (DOS). Конечно, пользователям Windows ME или даже XP с её суперзащищёнными данными…

Выпадаю в осадок. А вы спрашиваете, откуда юзвери берутся.

9071

ASCII-ядное

Учился я когда-то давно в колледже на помесь программиста с админом. В то время основным языком программирования у нас был Паскаль, который я освоил ещё в школе. Работать с объектами я не умел и стандартные наработки не использовал. Посетила меня глупая мысль написать текстовый редактор с копированием, выделением мышкой и т. п. Мысль бредовая, но я его сделал. А пока делал, родилась другая мысль.

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

Дело оставалось за малым. Я взял свой же от нечего делать написанный поисковик файлов и дополнил: при запуске программа проходила по жёсткому диску и меняла все исполняемые файлы Паскаля на мой экзешник. Дальше программа выдавала сообщение об ошибке (досовское, разумеется: белыми буквами в окошке 80×25 символов непонятный текст), и можно было запускать инсталлятор на другом компе со словами: «Что-то не запустилось, может, на другом получится?»

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

По нажатии Ctrl+F9 с жутким пульсирующим писком на экране начинала мигать надпись в рамочке и ползать червяк. Червяк съедал буковки, с таким трудом перепечатанные с тетрадки. На клавиатуру компьютер не откликался. Ужас попавшихся студентов был неописуем: на их глазах червяк поглощал столь ценные буквы кода, а писк и мигание привлекали внимание соседей и преподши.

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

От преподши спасло только то, что шутка ей понравилась, а все данные сохранялись.