bash.im ithappens.me zadolba.li

Индийский код

11573

О национальном кое-какерстве

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

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

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

И оправдания такие же, характерные: ну и что, что теги не закрыты, Эксплорер же понимает! Ну и что, что формат нарушен, Ридер же читает! Ну да, а свалку на берегу озера видно только с двух метров, она же в ямке. Зато в других браузерах страница расползается, PDF-файлы не обрабатываются, документы не читаются, а почтовая программа работает нормально только с определённым сервером, а с остальными глючит. Это всё потому, что кто-то, писавший программу или страницу, забил на спецификации и сделал кое-как, тяп-ляп, и так сойдёт.

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

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

11472

but1, but2, butwhy

4 октября 2013, 07:15

Наткнулся сегодня на JS одного сайта. Полторы тысячи с лишним закомментированных строк кода. Сам код вырезал, оставил только комментарии.

// Закомментировал, пока не разобрался, что и зачем. Работает и без этого.

// Это просто и легко, всё понятно

// Тут для массива картинок, состоящего из более чем одной картинки

// Разблокируем возможность листать дальше. ОК

// Размер картинки должен быть не меньше 1×1! Ну, ладно

// Смещение картинки ВЛЕВО, сцуко. На хрена?

// Это кнопки.
// Кнопка вперёд

// Кнопка назад

// Кнопка вниз? Вверх? Пауза? Плей? Какой урод это писал?
// Почему, ссука, but1, but2, but3?

// Кнопка хренпоймизачем2

// Кнопка хренпоймизачем3

// Кнопка хренпоймизачем4

// Ещё одна хренпойминахуа. Валидола мне.

// Это явно для костыля ниже

// Это хрень закомментирована не мной, и не написано зачем
// и что это значит. Подозреваю, что это костыль.

// Но мы зачем-то блокируем возможность листать в этом костыле

// Тут количество фоток уменьшаем на три. Почему на три?
// Почему не на четыре?

// А тут разблокируем возможность листать. Хм…

// Умри, ссука.

11255

Сложно — но можно?

5 августа 2013, 07:45

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

Написать функцию size() для списка? Нормальные люди для этого заводят переменную, обнуляют при создании массива, инкрементируют при вставке элемента и декрементируют при удалении. Но это не по фэн-шую: мы просто пересчитаем все элементы.

Надо вычислить сумму элементов списка, но писать итератор лень. Да и зачем, если в методичке есть замечательная функция seek(i), возвращая i-й элемент? Но в списке, в отличие от массива, невозможен прямой доступ к элементу, нужно просматривать все с начала списка, поэтому сложность будет квадратичной. А можно ещё написать цикл так: for(int i = 0; i < size(); i++) S += seek[i]. Это вообще замечательно: на каждую итерацию сначала выполним size(), которая просматривает весь список, а потом ещё просмотрим с помощью seek только i первых элементов.

Но один студент переплюнул всех. У него было задание написать функцию, сравнивающую два списка как множества: истина возвращалась, если элементы в списках одинаковые, независимо от порядка следования. Он сделал цикл от 0 до size() одного списка, а туда воткнул такой же цикл для второго. Сложность алгоритма получилась О(N^4)!

11213

Файрвол от проблем

24 июля 2013, 07:45

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

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

Банк. Операторы всё делают в веб-форме, причём заполнение многих полей требует обращения к удалённому серверу, отчего комп задумывается на пару минут. Потом сервер вообще может не отвечать, и работа останавливается минут на сорок. Главное, пострадавших, кроме меня, и нет: операторов такой перерыв в работе только радует, клиентам — толпе надутых бабок — всё равно, где и сколько сидеть. Один я нервничаю. Я делаю обычно не только клиент-сервер, но и локальную часть, а кое-где и репликационную базу данных с синхронизацией применяю, так что отсутствие связи на пять-десять минут клиент может и не заметить. У меня клиенты начинает кричать «зависло!» даже при минутной задержке в формировании отчёта в несколько сотен страниц. А тут даже нет попыток позвонить и выяснить, почему не работаем. И клиента им тоже ставить не нужно. Всё для удобства программистов.

Веб-интерфейс того же банка. Регулярно нахожу у них ошибки. В одном месте у них пять символов под сумму, и «125,75» написать невозможно. Нельзя внести платёж за коммуналку, если нет долга. У меня там мизерная сумма в 23 рубля, я хочу доплатить, а оно не даёт. Да какого программа вообще контролирует, сколько я и кому плачу? Служба поддержки мне предложила несколько остроумных способов обхода этих проблем (сделать два платежа и оплатить два раза услуги банка), но не попыталась оформить какую-то заявку программистам на исправление даже после моей прямой фразы: «Девушка, может, нужно написать отчёт об ошибке?» То есть они не просто файрвол от проблем — они сами не имеют связи с разработчиками софта.

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

11170

Альтернативный орган мышления

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

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

Эта история пробудила воспоминания о другой софтине образца 1992 года, где элементы списка помечались пробелом, а удалялись нажатием клавиши Esc. Представили? Работает скринсейвер, подходит юзер и долбит по пробелу, чтоб вернуть комп из спячки. Комп просыпается, и юзер видит, что успел отметить пару позиций в списке. На автомате жмёт Esc — и вуаля! Из списка акционеров холдинга, которым положены дивиденды, пропали несколько человек. И так несколько раз в день. Список длинный, хватились не сразу. Как без стрельбы обошлось — сам удивляюсь. Девяностые годы всё-таки.

В общем, айтишники, как софтину написали, так потом и живём. Жаловаться не на кого. Разве что на ДНК.

11093

Не жилец, но есть нюансы

Источниками быдлокода являются не только неопытные программеры, но и люди, прямого отношения к программированию давно не имеющие.

Отучился я на специальности «Программное обеспечение ВТ и АС», но потом подался в ремонтники железа. Полученные знания потихоньку утрачивались, а новые касались совершенно других проблем. В один прекрасный момент хорошие знакомые попросили в сжатые сроки написать диплом по специальности, на которой я учился. Тема: «Сетевая реляционная БД». Отмазаться не получилось. Так как на работу отводили неделю, об изучении чего-то нового речи быть не могло: на одну пояснительную записку и плакаты ушло бы три-четыре дня. Писать предлагалось на Delphi 6. Надо отметить, что во время моего обучения на предмете «Базы данных» мы проходили досовский FoxPro 2.6, соответственно, про SQL я только слышал, а о сетевых БД знал только то, что они есть.

Поставленная задача была выполнена. Результатом стал клиент-серверный программный комплекс. Программа-сервер открывала файл MDB через ADO и ждала запросов от клиентских приложений. Клиентские приложения общались с сервером через DirectPlay (компонент DirectX, предназначенный для простой реализации сетевых игр), используя самопальный язык запросов. Получив от клиента запрос, сервер мог искать в БД данные методами FindFirst/FindNext либо создавать новые записи из полученных данных. Все запросы попадали в некое подобие FIFO-буфера, в котором происходила «сборка» фрагментированных запросов, а также отбрасывание огрызков. Контроль доступа к базе осуществлялся методами всё того же DirectPlay. Защита от одновременного редактирования записи была реализована путём добавления специального поля в корневой таблице: если значение в нём равно единице, то запись уже кто-то редактирует.

Как ни странно, весь этот кошмар работал. Тест проводили четыре добровольца. За десять минут активной манипуляции данными сбоев не было, а для диплома больше и не надо. Диплом был сдан на отлично, так как в текст программы никто не заглядывал, а на экране всё выглядело вполне пристойно.

Самый смак был после диплома: человек, сдававший эту работу, додумался действительно внедрить её на предприятии, где проходил практику. По его словам, всё работало; единственное — иногда приходилось пользоваться интерфейсом прямого редактирования данных в серверной части программы, чтобы снимать признак редактирования записи при повисании клиента (механизм транзакций я реализовать не успел).

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

11073

Сосчитай до десяти и выдохни

13 июня 2013, 14:27

Нужно быть терпимее к молодым, неопытным программистам. Вот все говорят: быдлокод, быдлокод… А мой опытный сотрудник, глядя на причину найденной баги, толерантно воскликнул:

— Блин! Почему ж код такой… небезопасный?!

11058

Производственная слабость

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

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

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

Я минут пятнадцать объяснял преподавателю, почему РГР послана не через сайт, а на бумажке.

11028

Сто баллов индусу

Благодарственные слова от госконтор неизвестным индусам? Позвольте сказать ещё одно.

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

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