Истории с тегом: программизмы

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

10087

Девять кругов SCADA

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

В базе SCADA-системы нет переменной, которую вы так ждали, чтобы привязать? Программисты ПЛК злобно скалят зубы? Запись к начальнику отдела на неделю вперёд? Эта супермегаэффективная методика для вас абсолютно бесплатно! Ну, почти бесплатно — шоколадка, пирожок, пицца…

Смотрим таблицу переменных на установку. Если переменная там есть, то программист ПЛК — редиска, и можно идти и злобствовать.

Нет в таблице переменных? Задумываемся и смотрим принципиальную схему. Программисты ПЛК, конечно, халтурщики, но поскольку им потом ещё налаживать установку, то принципиалку они просматривают. Бывают случаи, что КД меняется, меняется обозначение сигнала. В этом случае коллективно идём к проектировщикам и ругаемся: когда, зачем и почему мы об этом не знаем? Если отобрать 23-дюймовые мониторы, то они такие же простые смертные, как и мы.

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

Не сходится со схемой автоматизации? Крайний случай, почти п@$&#ц. Открываем исходные данные, ищем что-нибудь, что не перечёркнуто крестиком. Не отчаивайтесь — возможно, не найдёте. Тогда придётся поискать другой файл, а то и к начальнику отдела записаться.

Помощь начальника отдела. Ходят легенды, что когда-то это было просто, но потом произошла великая катастрофа. Теперь это практически нереально, но судьба благоволит упорным. Да пребудет с вами Сила!

10079

Посмотреть глазами и поправить руками

Впервые столкнувшись с UNIX, я был несколько удивлён: почему для обмена данными активно используется текстовый формат? В файлах, в протоколах, в конфигах. Ведь памяти много не бывает — можно упаковать все в биты и байты, в бинарные структуры, сэкономив кучу места и в памяти, и на дисках. Я и упаковывал, чуть ли не побитно расписывая внутренние форматы.

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

Прошло время. Сейчас мало кого можно удивить терабайтным диском или парой гигов оперативной памяти. Модная тенденция — использовать XML. Для того чтобы передать значение пары переменных, создадим XML-файл и DTD к нему, поставим с десяток тегов и задействуем парочку библиотек для корректного формирования и корректного разбора. А что — теперь же все понимают, что такое переносимость и как избавиться от проблем бинарных форматов!

А в UNIX (теперь и в Linux) по-прежнему для обмена данными используют текстовый формат. Который можно посмотреть глазами, исправить любым текстовым редактором, сохранить в архив и поднять из архива десятилетней давности.

10054

Python Peach

— Ты купила себе новую пудру?

Он продолжал что-то печатать как ни в чём ни бывало. Жена закрыла пудреницу. Сначала посмотрела на мужа. Потом посмотрела в монитор. Там всё так же мелькали загадочные строчки типа f = Proc.new { return "return from foo from inside proc" }.

— Ты чего? Ты ж никогда раньше не обращал внимания, что я покупаю.

Это верно. Max Factor, Maybelline и другие баночки, тюбики и флакончики не привлекали его внимания, но только не Ruby Rose…

10049

Для юнит-тестов — рожки да ножки

Лид разработчиков

Коллеги, добрый день.

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

Админ

Коллеги,

Будут в понедельник к 12. ОК?

Менеджер

Я не понял, кто или что будет в понедельник к 12.

Лид разработчиков

Как что?

Жертвенные агнцы — 2 шт.

Бубны — 1 шт.

Алтарь (каменный) — 1 шт.

Нож жертвенный (костяной) — 2 шт.

Или как, ты думал, начинается нормальное тестирование?

10016

Эпидемия вируса отупения

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

Малыши за очередную серию «Маззи» горы свернуть готовы, зубрят стишки, слова и правила, увидев на улице — радостно вопят мне: «Hello! Nice to meet you!», а став постарше, спрашивают: «%name%, а почему вы у нас больше уроки не ведёте?» То есть не самый нужный в ребячьей повседневности предмет в запасники памяти вкладываю — и неплохо вроде бы. Потом, надеюсь, не раз добрым словом вспомнят.

С компьютерами тоже знаком не понаслышке: первой записи в трудовой «техник ЭВМ» — уже почти два десятка лет, еще первый десяток календарных не разменял, а уже с «Правцами» и ЕСками возился. На выпускных в школе предметом по выбору взял, естественно, информатику. Кстати, жутко поразил преподавателя программой на встроенном в Эксель Бейсике, строившей на листе календарь на любой заданный год. Повезло, дорвался школьник до стоявшего ради мебели у директора в приёмной 386SX-20 c Windows 3.11 и Вордом-Экселем на борту, вот и выпендривался.

Совмещал учёбу на дневном очном с работой в семи местах и стоянием на радиорынке по выходным. Одним из мест работы, кстати, был саппорт у провайдера, так что дети до сих пор удивляются: «А почему вы на нас никогда не кричите?» Стал инженером межрайонного узла связи и, соответственно, скорой технической помощью на три района через год после института (ни разу не технического, кстати). Разбирался с чем угодно, включая промышленные холодильники и лесопилки («Ну, оно же с компьютером? Значит, тебе и разбираться»). И плевать, что тот «компьютер» — коробочка с десятком кнопок, семисегментным индикатором и инструкцией на португальском, а мобильного интернета и гуглопереводчика тогда ещё и в проекте не было. Эм, ладно, что-то я отвлёкся. Таких историй у каждого наберётся не один десяток.

Так вот, я стою, можно сказать, у истоков всех этих тётенек и дяденек, ищущих файлы в кабелях и почту в мониторах, — и что же вижу? Доступ к компьютеру за пределами школы есть у всех учеников. Даже у самых неимущих есть друзья или родственники, допускающие «к телу». А действительно интересующихся можно пересчитать по пальцам. По одному на параллель, не больше. Они, кстати, и идут потом по IT-стезе, но речь не о них. Остальные знают про «вконтактик» и Мейл-агент, могут включить и выключить комп, запустить игрушку, набрать текст. Всё! Особо продвинутые знают про Гугл-хром (его ж по зомбоящику рекламируют!) или Оперу, методом перректальной гландэктомии могут составить коллажик в фотошопе. Трое-четверо освоили высший пилотаж: для лечения «локера» могут накатить винду с диска F#ck you Bill! vol. N, причём обязательно с предварительным форматированием и переразбиением диска на два десятка логических спираченным Акронисом, но без сохранения инфы. Зачем? Потому что так надо. Такими они впервые приходят на урок. С чуть большим количеством знаний уходят. Но применить их на практике, за пределами школы? Ага, щас. Это фантастика, сынок.

И вот всем им я рассказываю про алгоритмы и системы счисления, растровую и векторную графику, блок-схемы и архиваторы, вирусы и антивирусы, сети и файрволы, Scratch и Паскаль, королей и капусту… Под запись, с примерами, схемами и дополнительными объяснениями, если кому-то плохо понятно. Кому-то дополнительное задание, чтоб не скучал, а материал закреплял. Кому-то помогаю на ногтях рисовать степени двойки, чтоб легче было решать задачки на перевод чисел. Кому-то про переменные объясняю, записывая и стирая цифры маркером на кусочках плёнки для слайдов. Накопилось таких мелких хитростей много — что-то своё, что-то у коллег подсмотрено. Год за годом, а результат стабилен: один человек в год, который действительно пользуется мозгами, а не заученными магическими формулами. А остальные так и бегают с «заколдованными» флешками, на которых фотоаппарат всё видит, а комп — ничего. Так и приносят их родители ноутбуки со всякой мелкой фигнёй типа выключенного вайфая. Так и говорят друг другу: «Да наш %name% — хакер, точно тебе говорю, просто не признаётся».

Это мелочи, к такому я уже привык, как и к тихой войне с завучем за соблюдение образовательных стандартов. Но временами я чувствую, что всё тщетно. Взять, к примеру, учебник Угриновича, написанный для клинических дебилов, настоятельно рекомендуемый Минобрнауки, который, хочешь не хочешь, надо ученикам дать, чтоб не нервировать проверяющих. Так вот, в этом учебнике есть практическая работа «Кодировки». Через пару минут после того, как десятый класс этого года приступил к работе, я почувствовал себя сервером под DDoS-атакой. Все наперебой: «%name%, а я не понимаю! %name%, программа запустилась, а что теперь делать? %name%, а что значит… %name%, а мне помогите, пожалуйста! А где тут команда „Окно“?» Урок был сорван. Всё бы ничего, но перед этим они же самостоятельно поставили SeaMonkey из специально расшаренной папки по устному указанию и безо всяких разъяснений. Алгоритм составить и выполнить — целую четверть материал жевали и так, и сяк, и эдак. Программку написать, чтоб посчитать чего или нарисовать на экране ёлочку/снеговика/домик, тоже нет проблемы. Пусть даже на уровне дрессированной индусской мартышки, но пишут. А вот пройтись по напечатанной пошаговой инструкции со скриншотами — изба индейская. Классы прошлых годов эту работу выполняли по тому же учебнику.

Теряюсь в мыслях — что ж это было-то? На флешмоб не похоже. Хоть кто-нибудь не выдержал бы и рассмеялся — а тут реально ступор полнейший у всего класса на полчаса с хвостиком. Эпидемия вируса отупения? Дух Фурсенко? Что ж это было-то, Бэрримор?

10014

Суп из спагетти

Мне по работе доводится программировать на множестве языков, и некоторые вещи меня, так сказать, удивляют.

Гляжу в код PHP с постоянными переключениями PHP-HTML вроде:

>

Читается плохо. И вдруг меня осеняет: это же как слушать речь, пересыпанную матюками! «Картинка, б****, из е**** файла, высота 150 ****, и растянуть, на ***, на всю е***** страницу, ***!»

Тоже самое с SQL. Вездусущие конкатенации и экранирование кавычек, да и ещё без пробелов:

UPDATE '.$data['table'].' SET '.$data['field'].'=\''.$data['value'].'\' WHERE $where

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

В своих проектах я давно от этого избавился, сделав подсистему функций и классов наподобие sql_update($table, $data, $where). Потратил полдня, сэкономил недели. Но глядя в чужой код, не перестаю удивляться: охота вам, кодерам, ходить по граблям, поедая кактусы? Ведь случайная кавычка или точка выливается в часы отладки, чтобы найти в вашем супе из спагетти муху. Или не хватает ума мыслить выше плоского стандартного кода? Вот этим и отличаются программисты от кодеров.

9991

На все руки велосипед

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

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

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

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

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

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

9980

Не боги кирпичи обжигают

Как бы звучали некоторые ежедневные реплики моих клиентов, если заменить программный продукт на, скажем, кирпичи?

— Понимаете, поддержка ваших кирпичей в должном состоянии слишком дорога для нас. Что, если вынуть вот этот и во-он тот кирпич?

— Ваше строение наверняка рухнет.

— А вот ваши конкуренты каждую неделю предлагают нам свои кирпичи! Они несколько другие, но значительно дешевле ваших.

— Кирпичи? За такую цену это просто детский кулич из песка.

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

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

— Ну и что?

— …

— И вообще, наш директор хочет кирпичи из мифрила по той же цене.

— Понимаете, у нас сложная ситуация, да еще вот конкуренты приходили ваши… Сделаете нам скидку?

— Я должен обсудить это со своим руководителем. На какую сумму вы рассчитываете?

— На N процентов меньше.

— Это невозможно. («Разве что у вас будут кирпичи из говна», — думаю я про себя.)

9960

Видали мы тех багов

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

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

В начале четвёртого дня пишу бывшему коллеге — не программисту, просто системному администратору, правда, опытному, начинавшего свою карьеру ещё в 96-м. Плачу о неуловимом баге. Пишу не для того, чтобы получить совет, а просто жалуюсь на нелёгкую судьбу. А в ответ он мне описывает решение бага. Человек, в глаза не видевший ни Питон, ни Джанго, ни тем более злосчастный проект. Следуя его подсказке, замечаю причину ошибки, которую искал три дня.

Поразительно: человек, никогда не работавший программистом, безошибочно нашёл причину ошибки, имея только расплывчатое описание. Опыт — он всё-таки бесценен.

9915

Тулкит этой недели

Вот интересно, как меняется наша жизнь. Лет пятнадцать назад для платформы Windows было два десятка сред программирования: хочешь — MS Visual Basic, хочешь — Visual C, хочешь — продукты Borland, а там и Delphi и всё тот же C++. Не хочешь их — возьми поменьше. Плюс ещё живы были среды разработки под DOS. И каждая среда таскала свои библиотеки, не всегда совместимые друг с другом; DLL hell выглядывал из-за каждого обновления и мерзко хихикал над программистом. А тулкиты? Оставшиеся в наследство от старых версий Win.G, новые Win32s, ещё более новые дополнительные контролы, свои собственные в тех же Delphi или Visual Basic. Работать невозможно.

Совсем другая ситуация была на платформе Linux: единственный компилятор, парочка сред разработки, два-три основных тулкита. Да и всё — пиши не хочу.

Сейчас же под Android написана и портирована куча библиотек, не всегда правильно друг с другом работающих, плюс сама платформа развивается настолько быстро, что тут старые системные средства отрисовки интерфейса соседствуют с новыми. Сред разработки я уже знаю минимум три, наверняка есть что-то ещё. И совсем другая история — Windows Phone, под которую, по сути, один тулкит, один компилятор и одна IDE.

Чем распространённее платформа, чем больше возможностей она предоставляет, тем больше под неё средств разработки и тем сложнее под неё писать. Можно, конечно, свалить с Android на Windows Phone. Можно. Только пользоваться твоей программой будут те три с половиной гика, которые купили смарт Nokia по старой памяти. Хочется писать для маленькой и стройной платформы — попиши лучше для MenuetOS, там вообще всё красиво, а главное — приложения не тормозят, всё на ассемблере. И пользователей — три человека во всём мире.