12417

Правильное — враг хорошего

Уж сколько раз твердили миру: если вы не понимаете, почему программа написана именно так — возможно, проблема не в разработчике, а в том, что именно вы не понимаете, почему программа написана так.

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

А вы точно разобрались, что именно должна хранить эта БД и как с ней работает софт?

Если вам преимущественно нужно делать выборку по одному отделу, потом по другому отделу, потом по третьему — логично, что тут удобнее список отделов и связка этого списка с таблицей, скажем, магазинов: это сокращает объём выборок. Наверняка именно так вас учили.

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

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

А вот если бы вам надо было хранить и получать организационную структуру магазинов — это могла бы быть вообще иерархия вложенных объектов в NoSQL-базе, от банальной LDAP до модной нынче MongoDB.

Всё зависит от того, какая задача стояла перед создателями базы.

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

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

В доказательство тётка тоже может предъявить сертификат о прохождении курсов: у тебя, глупый админ, такого нет! И попробуй оспорь…

12416

Рабочий стол навеки с нами

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

— Я думал, он будет выжигать изображения на широкоформатных носителях, а он просто показывает, как старый фильмоскоп!

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

Покупатель не стал сдавать проектор и ушёл. А на следующее утро — звонок:

— Приеду — съем всех! У меня по вашей книге на ткани негатив получается, а нужен позитив!

Рассказали, как инвертировать изображение. Следующий звонок был уже восторженным:

— Получилось! Мы сделали декорацию! Спектакль уже идёт! На следующий всех вас приглашу!

В эти выходные идём на спектакль.

12415

OLED своими руками

Мама внезапно осознала, что не сможет больше жить без карманного фонарика с жёлтенькой лампочкой, как в детстве. А в продаже найти такой теперь непросто.

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

Сочетание современных технологий с классическим природным материалом получилось гармоничное. КПД, правда, тоже как у лампочки, но мама довольна, как слон. Хорошо, когда так мало надо для счастья!

12414

Кино по мотивам Экселя

Сегодня столкнулся со случаем эпичнейшего идиотизма.

Менял на днях человеку ось с «вислы» на «семёрку». Проходят сутки, человек в панике звонит мне на мобильный телефон и кричит в трубку, что ничего не работает. Приглашаю его к себе, запускаю ноутбук — и вижу, что все *.exe проассоциированы с Windows Media Center. Сделал откат и в очередной раз убедился в том, что самый ужасный вирус — это пользователь.

12413

Умей и будь

— Алё, какое расстояние между Москвой и Екатеринбургом? И сколько времени займёт на машине доехать?

— Тебя в Гугле забанили? Или школьные формулы на скорость-время-расстояние забыл?

— Да всё я умею, только некогда: договор с екатеринбуржцами составлять надо.

Уже была тут басня «не айтишник — будь добр, не разбирайся в айти». Теперь её новый варинат: «умею, но не буду». Доченька админская, вы ж в силу профессии калькулятором владеете отлично. Вот и посчитайте, сколько минут займёт вызвать и дождаться айтишника, и сколько секунд — самостоятельно включить принтер в розетку. И сколько в первом и втором случаях высвободится времени на «остальное».

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

А желаете айтишника под венец — прямо скажите, а не мучайте вызовами каждые полчаса. Может, он как раз то же самое хочет вам сказать.

12412

Сто первая ненормальная

На IT happens было: «Преподавательница реляционных баз данных, при мне объяснявшая студенту, что таблица, распечатанная им непосредственно из Access, ну никоим образом не находится в первой нормальной форме».

Не буду спорить, насколько плоха преподавательница. Но разве таблица из СУБД может быть не в 1NF? Оказывается, может. И я это видел в живом проекте.

Большая американская сеть магазинов одежды. В магазинах есть отделы (три наименования). Любитель нормализации сделал бы список отделов и таблицу-связку. Пофигист обошёлся бы тремя полями: has_kids, has_plus, has_shoes. Эти сделали набор отделов строчкой: «Kids, Plus, Shoes».

12411

--with-love

«Пересобрать ядро по книжке может любой дурак».

Сыграть по нотам, казалось бы, может тоже любой дурак. Тупо следуй нотному тексту, и само получится. MIDI-проигрыватель тоже это может. Да что там проигрыватель — механическое пианино справится!

Только взыскательный слушатель сразу отличит, автомат играет или живой человек. Не потому ли хороших музыкантов считают талантливыми людьми?

Вот и ядро, с любовью собранное, совсем не так ядрячит, как собранное без любви.

12410

Сделай дело и пей пиво смело

Привет, друзья-айтишники!

Я — та самая девочка-дурочка, которая будет вызывать вас через два этажа с требованием починить неработающий принтер и мило хлопать глазками, когда вы включите его в розетку, нажмёте на нем кнопочку «вкл» или поставите другой картридж, лежащий в соседнем ящике. Я позову вас вылечить вирус, а сама буду рядом мило трындеть по телефону с другим сотрудником. Я буду плакать, если бэкап Очень Важной Базы Данных вчера вы решили не делать, ибо «каждый день — это слишком часто», и жаловаться вашему начальнику (лично), гендиректору (письменно) и своей маме (по телефону).

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

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

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

12408

Ломай меня полностью

Мне недавно принесли флешку. Говорят, что якобы сломалась и ещё пару компов с собой в компьютерный ад прихватила, а на флешке куча важной информации, восстановить нужно всё срочно.

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

Пока не монтирую, вместо этого поднимаю виртуальную машину. Проверим, сохранилась ли информация… Подключаем флешку, смотрим: все папочки на месте, всё в порядке. Но в мозг закрадывается профессиональное сомнение, всё ли в порядке, ещё до того, как я осознаю, что все папки выглядят как-то странно. На виртуальной машине (голая и навечно «только что установленная» XP) не было совсем ничего настроено, однако иконку папки проводник отображал очень даже Вистовскую. Ах вот как! «Панель управления» → «Свойства папки» → галочки «Отображать скрытые файлы и папки» и «Отображать расширения» — готово! Хитроумный вирус скрыл все папки, скопировал себя на флешку и назвал каждую копию так же, как папки, лежавшие в корне.

Отдав чистую флешку хозяину, я скопировал экземпляр вируса на рабочий стол XP и запустил. Вирус сработал безотказно, снеся всё, что было возможно, но через минуту XP снова чувствовала себя только что установленной. Хорошая всё же штука эти виртуальные машины!

12407

Отдел уценённых терабайтов

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

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

Отлично работающий плеер, только с трещиной во весь корпус. Жёсткий диск с бэдами для хранения неответственных данных. Роутер, у которого потеряли одну из двух антенн. «Реджекты» — товары, возвращённые пользователями в течение десяти дней по причине «не понравилось». Эти и вовсе только вскрытой и заклеенной упаковкой отличаются. Всё это и многое другое можно приобрести в нормальном магазине в таком отделе по очень выгодным ценам. Естественно, без гарантии, но покупатель, которого устраивает уцененный товар, добровольно от неё отказывается, зато покупает новый товар почти по цене б/у. В одном проигрывает, в другом выигрывает — правило рычага (или трансформатора) универсально. А нужен жёсткий диск без бэдов для ответственной информации — добро пожаловать в профильный отдел, он совсем рядом.

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

А если отдела уценённых товаров нет, лучше насторожиться и отправиться в другой магазин. А вы что ж, все без такого отдела, что ли? Тогда мы не идём к вам.