Занимаюсь фрилансом — разрабатываю всевозможные мелкие программы для автоматизации процессов.
Недавно писал скрипт, массово приглашающий в группу пользователей крупной социальной сети. Сроки были жесткие — три дня, и времени на тестирование не оставалось. После сдачи проекта в течении недели я исправлял найденные баги, каждый раз архивируя проект и отсылая заказчику.
На днях клиент написал о свеженайденной ошибке. В течении двух часов, пока я чинил программу, меня не покидало ощущение, что такую ошибку я уже видел. Озарило меня вовремя — в разговоре с клиентом я обронил фразу «у меня всё чаще появляется мысль, что вы запускаете старую версию программы».
Отсылаемые архивы я не пронумеровывал, и клиент по невнимательности запускал старый скрипт — назывались-то файлы так же.
Даже если программа никогда не уйдет в публичный доступ и пишется исключительно под одного человека, всегда нумеруйте версии!
Работаю консультантом по внедрению ERP-систем производства одной крупной компании. Пользователям часто не нравится что-то в веб-интерфейсе, но переделывать его очень сложно: нет доступа к оригинальным средствам разработки.
Программисты, как могут, выполняют капризы на JavaScript — делается это долго, нудно и нетривиально. Людей и знаний, как водится, не хватает, но работать-то надо, потому что главная стратегия руководства — полностью решать проблемы пользователей.
И вот снится мне как-то сон после тяжёлого рабочего дня. Иду я куда-то по дорожке, навстречу мне сказочный джинн. Замечательно как, думаю, сейчас загадаю желание — и оно исполнится!
— Джинн! Как здорово, что я тебя встретила! Ты случайно в JavaScript не разбираешься?
Вот оно какое, оказывается, простое женское счастье.
Знакомый попросил починить формочку "задай вопрос" на каком-то сайте. Сходил, проверил, получил ошибку 405.
Проверил contact_us.php, на всякий случай переписал 30 строк кода почистую. Не помогло. Проверил конфиги — вроде всё на месте. Полез в панель управления хостингом (хороший, кстати, хостинг). И что я вижу?
Правильно. Сайт простенький, поэтому хостится по самому дешевому тарифу. Без поддержки скриптовых языков.
Переписываю я тут один интернет-магазин. Писали его до меня несколько специалистов весьма широкого профиля, настолько широкого, что даже встроенные в PHP функции реализовывали собственными силами.
Изучая код, отвечающий за кабинет пользователя, а именно за восстановление пароля, я наткнулся, помимо прочих перлов, на такой. Идет запрос в базу на обновление пароля. Просто обновление сразу по отправке письма, безо всяких там активаций и т.д. "Непрофессионально," - подумал я.
Это еще ничего, если бы не просто гениальная фраза парой строк ниже. Этот текст отправлялся пользователю на почту: "Был сделан запрос на смену пароля, если Вы его не делали - просто удалите данное письмо."
Пока народ будет так писать код - у меня будет работа. Каких бы масштабов кризисы не происходили в мире...
Делаем сайт с информацией об авиарейсах и всем, что с этим связано. Города вылета и прибытия вводятся вручную.
В самом начале проекта мы дико ржали над идеей, вкрутить туда Гугл.Мэпс, чтобы там прям на карте можно было выбрать, куда полететь. И вот, на недавнем совещании заказчик предложил: "А может быть нам использовать Гугл.Мэпс, визуализировать и упростить процесс выбора городов?"
Некая фирма, занимающаяся созданием WEB-сайтов, решила, что ей нужен приходящий сисадмин. Заказали оного в другой фирме, которая как раз эти услуги и предоставляет.
Но сразу возникли проблемы. Фирма-заказчик занимается исключительно порносайтами, поэтому админ нужен взрослый, незакомплексованный и морально устойчивый. Долго думали, кого туда послать. В конце концов решили, что работой в этой фирме будут награждать лучшего системщика прошлой недели. На манер переходящего красного знамени...
Разрабатываем одну большую корпоративную систему - огромная база данных, большие нагрузки на сервера ну и веб-интерфейс, куда ж без него. Интерфейс этот пишется с использованием одной библиотечки, которая в свою очередь вовсю использует AJAX. Библиотека open-source, но как-то раз преподнесла совершенно неожиданный сюрприз.
Решил я ее обновить, скачал новую версию, пересобрал, залил - все вроде в порядке. Но при заходе на одну из страничек сервер стал тут же падать! Не поняв с первого раза, как стабильно работающее приложение может вдруг выкинуть такой фокус, стал внимательно изучать логи. И обнаружил там, о ужас, StackOverflowException! При этом, точно зная что рекурсию нигде не использую, порылся в своем коде пару минут, да и решил заглянуть в код библиотеки. А там увидел вот такую прелесть на месте того метода, который вызывал ошибку:
/** * @return * @see #getPage() * @deprecated */ public int getPageIndex() { return getPageIndex(); }
Вот оказывается как надо объявлять метод устаревшим, чтобы его впредь больше никогда не использовали!
Работал в компании, занимающейся разработкой web-сайтов системным администратором, поддерживал серверную ферму. Был у нас среди прочих сервер, который по историческим причинам отдавал часть http-контента с нестандартного порта.
И вот, приходит однажды мне абьюз на этот сервер с комментарием "вы нас взламываете" и вложенным в аттаче немаленьким архивом. Распаковываю архив и внутри нахожу вордовый файл, открываю файл и вижу вложенный в файл скриншот экрана в большом разрешении и посреди этого скриншота открыто окно winroute в котором как раз наличествуют подключения с этого нестандартного порта.
Несколько лет тому назад одним из способов побочного заработка у меня было "оффшорное программирование" — в Москве собирал заказы на сайты, а сам передавал их на разработку в страны ближнего зарубежья, где ставки работы программеров были существенно ниже "рассейских".
До тех пор, пока делались сайты-визитки и прочая мура с ежедневным числом до ста человек, все было хорошо. Но тут нарисовался заказ на переделку движка одного тематического новостного сайта, на котором было от 15 до 30 тысяч посетителей в сутки и размер дампа базы новостей был около 300 мегабайт. Движок переделали под требования заказчика, на стадии тестирования все прошло отлично — отправили в релиз. Через 10 минут после запуска — звонок с истошным воплем заказчика: "На вашем сайте вирус и он сломал нам сервер!!!". И действительно, минут через 10 после включения сервер с хостящимся сайтом переставал отзываться на внешние раздражители, разве что пинговался. top и ps, запущенный на серваке, показывали сумасшествие mysqld, который с потрясающей скоростью отбирал под себя проценты CPU и мегабайты памяти. my.cnf был перелопачен вдоль и поперек — без толку.
От безысходности залез в код движка — и вот тут волосы встали дыбом, стул подо мной сломался. Обращение к БД было реализовано весьма оригинальным способом — SELECT * FROM список_таблиц, а уже потом из такой вот 300-метровой глобальной переменной вычленялись необходимые компоненты.