Читаем Bash.org.ru IT Happens Истории ## 9501 – 9600 полностью

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

Третья функция FKK_GET_LAST_DAY_OF_MONTH находится в группе FKB3A. Вычисляет последний день месяца с использованием встроенной операции над датами — прибавления и вычитания дней. Сначала она формирует дату на 28 число того же месяца и года, потом прибавляет к ней 4, получает дату заведомо в следующем месяце, устанавливает там день в «01» и вычитает единицу из всей даты. Простенько и со вкусом. Для дат в декабре 9999 года будет ошибка из-за переполнения года по ходу вычислений. Ну да кого это сейчас волнует?

Четвёртая функция FKK_LAST_DAY_OF_MONTH находится в третьей группе FKKPERIOD. Алгоритм компромиссный. Номер следующего месяца и года вычисляется «честно», потом формируется дата на первое число этого месяца и уже от неё отнимается единица. Функция корректно обрабатывает даты в декабре 9999 года, специально анализируя этот случай и возвращая константу «31.12.9999». Но при этом все даты до 1800 года считает некорректными и генерит на них исключения, как и на даты с неправильным месяцем. Если передана дата с неправильным днём, не замечает этого.

Функция HR_RU_DAQ_GET_DAYS_IN_MONTH.

Имеет 8 входных параметров, 2 выходных и 2 одновременно входных и выходных. При этом состоит всего из 58 строк кода (из них 26 выполняемых). Алгоритм вполне аскетичный, как у FKK_GET_LAST_DAY_OF_MONTH, только прибавляет не 4 к двадцать восьмому числу, а 31 к первому. Некоторые входные параметры помечены как необязательные и никак не участвуют в алгоритме. В некоторых функциях, не вошедших в этот краткий обзор, использовались вариации — например, к первому числу прибалялось 35 или 32. Видимо, 31 побоялись прибавлять — а вдруг не хватит? 32 и 35 — надёжнее. Или, может, они так округляли? Разницы-то действительно нет, сколько конкретно прибавлять, лишь бы попало куда-нибудь в следующий месяц.

Две замечательные функции END_OF_MONTH_DETERMINE и END_OF_MONTH_DETERMINE_2.

Находятся в группах FV03 и FV02 соответственно. При этом алгоритм практически повторяется. Видно, что вторая тупо списана с первой. Но автор второй, вероятно, решил не полагаться на автора первой, а иметь такую важную функцию под собственным контролем. Обе честно вычисляют високосность года, но только по юлианскому календарю. А чего заморачиваться — на ближайшие 90 лет-то хватит, а там пусть потомки решают «проблему 2100»…

Самая аккуратная реализация оказалась у разработчика конечного пользователя. Лаконичная, эффективная и снабжённая исчерпывающими комментариями. Это и понятно — он ведь заведомо не индус.

<p>#9561: Драная, дырявая</p>

12:15 14.07.2012, IT happens

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

— Где наклейка?

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

<p>#9562: Коробочка с интернетом</p>

12:15 14.07.2012, IT happens

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

По приходе домой достал замученный бывшим владельцем известный 320-й роутер с горелыми портами. Восстановил бутлоадер через JTAG, прошил в DD-WRT, нашёл полудохлые банки ноутбучных аккумуляторов и притащил утром на работу. Питание роутера завёл от аккумов, с коммуникатора попытался поднять беспроводной линк. Жутко неудобно и хреново выходит.

На следующий день взял с собой нетбук. Дело продвинулось, но роутер подчинялся плохо. Бегать делать хард-ресеты надоело. Появился вопрос создания беспроводного механизма, чтобы замыкал кнопку сброса на 15 секунд. Схемы в интернете не удовлетворяли моим требованиям.

Перейти на страницу:

Все книги серии Bash.org.ru IT Happens

Похожие книги