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

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

12052

Взгляд из соседнего окна

Программисты пишут на разных языках. С уважением, ваш К. О. Следствием этого факта является то, что некоторым программистам легче и проще работать с джаваскриптами, DOM, объектами и прочим в том же духе: совсем не вопрос написать скрипт, который получит от сервера данные в JSON, разберёт их, создаст необходимые DOM-структуры и встроит их в документ.

А вот другим программистам легче и проще написать 100500 шаблонов страниц, которые будут генерировать HTML на стороне сервера, а затем одним AJAX-запросом готовый код вместе с используемыми в нем скриптами будет просто вставлен в нужное место на странице.

Какой подход правильнее?

Спец по JS считает, что первый: по сути, он пишет программу, которая выполняется на компьютере пользователя, обращаясь к удалённой БД на сервере. Сервер в этом случае просто транслирует AJAX в запросы к базе данных.

Другой специалист думает, что первый вариант вовсе не так хорош и имеет недостатки:

— программа получается достаточно сложной и объёмной, написать корректно работающий большой скрипт сложнее, чем сто маленьких простых;

— её работа зависит от корректности обработки браузером;

— её можно модифицировать на стороне пользователя, поэтому сложнее обеспечить безопасность и целостность данных;

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

Это чем-то напоминает сравнение Windows и UNIX: в одной из них принято писать многофункциональные приложения со множеством возможностей, очень большие и сложные, и потом выпускать новые версии с новыми возможностями;

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

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

12048

Все игроманы, а я программист

Конкретно задолбали юные программисты, косящие под крутых.

Неужели вам ни разу не встречались личности, хвалившиеся знаниями в своём юном возрасте? А мне встречались, причём не раз в два года, а намного чаще, поскольку я сижу на многих форумах, посвящённых разработке игр (чаще всего программисты начинают с мечты создать игру). Я сейчас распространяюсь не о тех, кто в силу своей наивности думает, что сделать GTA или «Крусис» легче, чем оно на самом деле, хотя и такие есть. Больше меня заботят (и умиляют) те, кто кидают понты, хвалятся, что аж семь лет сидят за компом и «изучают» десять языков программирования (и это в 14 лет!), в другой теме копипастя урок про WinForms, а также те, кто красочно расписывают свою школьную жизнь, быдлизм одноклассников и небыдлизм и программисткость самого себя.

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

Объясняю таким личностям раз. Частично это ответ на вопрос, почему такой офигенный народ мне так часто встречается. Секрет в том, что скачать Game Maker или Unity3D, достать бесплатные модели, посмотреть два урока от Васяна527 на Ютубе — в этом нет ничего сложного. Ничего! Тому, кто не пропускал уроки информатики и что-то рубает в теме, не составляет ну никакой сложности пройти курс начинающего девелопера. Возможно, не стоит спорить в срачах, кто главнее и дольше учится программировать?

Объясняю два. Когда вы сравниваете себя с одноклассниками и прочим «быдлом» (в свою пользу, ага), вы берёте за кальку те области, в которых разбираетесь только вы. Более чем вероятно, что лет через шесть-восемь, выйдя из вуза, вы с удивлением обнаружите, что ваш сокурсник Петька, никогда ничем не выделявшийся, поднял себе финансовое положение на быдляцком способе «купи-продай» и приобрёл себе крутой джип, пока вы работаете стажёром в каком-нибудь «Нивале», записывая гениальные скрипты взаимодействия монстриков и корпея над книгами о маркетинге.

Всем спасибо, можете расходиться.

12044

Приятных вам граблей

Индусский код, рядом лежащие папки? Терминология выдаёт программиста, который, кроме своего Виндоус-десктопа, где всё рядом, похоже, мало что повидал. Вот вам другая история.

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

Проходит год, программу дописывают. Теперь она сама забирает данные с FTP-сервера, на который их заливает скрипт из офиса, потому что залить прямо на хостинг нельзя. Данные берутся из каталогов на файловом сервере в офисе, что стоит на столе у главбуха.

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

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

Да, теперь на первый взгляд получается как-то глупо: лишние операции, которые можно было бы заменить копированием! Оптимизаторы негодуют, кроют матом тупых индусов и убедительно доказывают свою точку зрения очевидными фактами: да, действительно, можно ведь просто скопировать!

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

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

Эта история, конечно, несколько притянута за уши, но суть именно такая: иногда правильнее изобразить «индуса», добавив лишний транспортный протокол, или вынеся в настройки то-что-никогда-не-поменяется, или добавив лишнюю функцию, или даже написав формулу типа А = А*1, чем потом получить непереносимое, немасштабируемое решение, на которое придётся молиться с бубном и сдувать с него пылинки.

Было время, и я стремился к оптимизации: зачем нам вот эта функция, если внутри она просто вызывает другую? Зачем нам лишняя проверка, если исключение никогда-никогда не возникнет? А потом менялись внутренние функции библиотек, менялись алгоритмы, программы вешались, заставляя ночами ковырять древние исходники в поисках очередного «оптимального хода».

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

12020

Теряя доллары и жизни

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

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

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

Василий стал белее муки. Казалось, его волосы седеют на глазах. Он опустился на колени и заорал во всю глотку…

* * *

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

* * *

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

12000

Поезд уходит в небо

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

Делаем свой модем с частотным разделением на каждый канал, почти четыре месяца пишем систему шифрования и коррекции ошибок, чтоб добиться хотя бы стабильных 20 байт/с через заслон шума и помех, где речь-то не всегда можно разобрать. Потом тесты…

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

Ждём пару месяцев — движений нет. Ну, что делать? Через сеть отдаём команду программе. Бац! На табло загорается: «Опасное сближение». Но сближения нет. Следующая минута — и товарняк пошёл в обратную сторону с динамикой покруче НЛО на космических съёмках. И далее программный троллинг на протяжении почти двух суток, пока систему не вырубили в пользу старой, с картой и лампочками.

Тут критик воскликнет: «Это же железная дорога! Это же опасно!» Да, опасно. А почему об этом не подумало руководство компании до того, как наняло двух фрилансеров для такой опасной работы, а потом их кинуло?

Граждане управленцы! Конечно, бывают случаи откровенного вымогательства со стороны разработчиков, но чаще всё-таки наоборот. Не надо пугать инженеров ФСБ. Снимут в первую очередь вас, ибо вы отвечаете за объект, а не Вася с ноутбуком, которого вы допустили к объекту, наверняка даже не заключив контракт. Конечно, если разработчик не настолько туп, чтоб отключать блокировку на месте и дать себя поймать за руку. Прислали бы на следующий день техника, который перепрошил бы блок чистой прошивкой, и никто и никогда не доказал бы, что там закладка, даже сотрудники в штатском, стоящие над ним. Обычный апдейт после падения системы в рамках нового контракта, какие вопросы? Равно как никто и никогда не докажет, что эта SMS активирует закладку, а не является диагностическим запросом, который случайно вешает систему. Даже если отправлена она была с личного телефона.

Для доказательства закладки нужен дизассемблинг прошивки, её анализ специалистом по этому компьютеру, поиск места закладки в тоннах кода. Никто не будет заниматься этим ради одного предприятия, не говоря уже про 99% остальных случаев кидалова, когда речь не идёт об опасном производстве.

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

На допросы нас не вызывали, даже не вспомнили про нас. Мы же сдали исправную систему и нам за неё заплатили (по бумагам). Виноват тот, кто такую плохую систему принял.

11995

Костыль давно минувших дней и боты старины глубокой

Мистика — это, как правило, непонятая закономерность. Если потрудиться, её можно найти. Хуже, когда неполадка уходит в прошлое.

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

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

11977

Костыль — орудие программиста

Сделали отопление в гараже. Надо колоть дрова, а топора нет. Что делать? Правильно, используем костыль… Нет, не тот, а настоящий, стальной, железнодорожный. При помощи молотка он легко вгоняется в пенёк и делит его на две-четыре части.

Вот она, пригодилась профессия!

11961

1 год М. Э.

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

Вздохнул, оставил как есть, только расширил массив под месяцы до ста. А вдруг…

11948

Сбить в полёте

В студенческие годы сдавал лабораторные работы на C++. Компилирую исходник работы. Вирус (как сейчас помню — Virut.A) тут же заражает экзешник, антивирус его удаляет, а Dev-C++ охреневает от отсутствия оного и вываливается с невнятными ошибками. Компилирую снова. Весь процесс повторяется: экзешник создаётся, вирусуется, удаляется, а среда разработки вылетает с ошибкой.

NOD32, как я тебя люблю!

11910

Селектыч-спотыкач

Дело было в нашем автотестерском кругу. Был у нас метод selectRadioButton, был маппинг кейвордов на Java-методы, крутилось себе всё это спокойненько на Дженкинсе, тестировало продукт. И прилетело тут обновление компоненты фреймворка, где RadioButton стал именоваться Check: с чекбоксами объединили.

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

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

Вот так и появился у нас Java-вирус Селектыч. И сидит Селектыч в головах, а не в коде. Обновляйте SVN, и да не пребудет Селектыч с вами!