[bash.org.ru] [IT Happens] [zadolba.li]

IT Happens

Клиент и саппорт. Разработчик и заказчик. Программист и программа. Вести с фронтов.
747372• • •109876• • •321

#557: Что-то ищем где-то не там

2 февраля 2009, 09:00

рейтинг: 738

Очередной проект по доделке и переделке авторских недоделок в программе заказчика.
Угу.

Заявлена кроссплатформенность - используется Qt, есть клиенты для Windows и никсов. Клиентов беспокоит, как Гондурас странная особенность: под никсами программа уверенно работает отовсюду, кроме каталогов, расположенных в /home (например - на рабочем столе, что должно быть интуитивно понятно и привычно для пользователей Windows). Угу.

Авторы грешили на особенности сборки Qt, на примечания к документации QFileSystemWatcher "о зависимых от системы лимитах на количество одновременно наблюдаемых путей". Но почему-то программистов заказчика не обеспокоила такая особенность систем, под которые портировалась изначально виндозная программа, как чувствительность к регистру путей файловой системы. Аффтары нечувствительно приводили путь к lowercase, а потом проверяли существование каталогов типа Desktop или "Рабочий стол" для пользователей типа Vasya_Pupken.

А метод проверки QDir::exists(), спроектированный с учетом особенностей *nix, имел их всех в виду.

 

#554: Инициализируй это

1 февраля 2009, 16:45

рейтинг: 1218

Был у нас в универе один вредный препод. Не любили его, так как предмет свой он преподавал просто отвратно. И вот однажды надо было сдать ему на зачет какую-то программу. Мой друг написал ее. Сдал. Со второго раза получил допуск к экзамену. Мне стало интересно. Запускаю - работает. Обрадованный беру код, смотрю. Спустя пару секунд падаю под стол от такой строчки:

for (int i=0; i<N; i++) M[i]=M[i]+0;

- Что это? - спрашиваю.
- Инициализация - отвечает мне друг.
Да, конечно, инициализация. Прогрев памяти перед работой...
Загадка - как препод пропустил все это? Наверное, код не открывал даже. Работает, и ладно.

 

#542: Как ты это сделал, демон?!

29 января 2009, 11:00

рейтинг: 1775

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

Через две минуты это чудо вылетает из кабинета с бешеными глазами и вопрошает: "А как вы сделали, что у вас Edit по форме можно перетаскивать?!" Я, естественно, офигеваю и прохожу вслед за преподом в кабинет, пытаясь вспомнить, что это я там мог наваять, drag&drop что ли какой, да вроде не писал его...
В полной задумчивости подхожу к компу и вижу, что "гуру программирования" не запустил компиляцию в делфи и перетаскивает всяческие элементы по форме с крайне умным видом

 

#503: А тем, кто не поймет, он откусит ногу

18 января 2009, 09:00

рейтинг: 1273

Разрабатываем одну большую корпоративную систему - огромная база данных, большие нагрузки на сервера ну и веб-интерфейс, куда ж без него. Интерфейс этот пишется с использованием одной библиотечки, которая в свою очередь вовсю использует AJAX. Библиотека open-source, но как-то раз преподнесла совершенно неожиданный сюрприз.

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

/**
* @return
* @see #getPage()
* @deprecated
*/
public int getPageIndex() {
return getPageIndex();
}

Вот оказывается как надо объявлять метод устаревшим, чтобы его впредь больше никогда не использовали!

 

#500: Глобально, на века!

17 января 2009, 09:00

рейтинг: 1936

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

Есть на одной из форм поле "Дата рождения". Во время тестирования было выяснено, что значения туда могут быть введены уж очень фантастические (люди столько не живут), крайней датой, которую можно сохранить, было 1 января 1573 года, после крайней даты система вываливала страшный ексепшен.

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

В следующей версии приходит фикс. Иду проверять, ввожу какую-то, совсем уж мохнатую дату, на что получаю "user friendly" сообщение:
"The date should be between January 1, 1753 and December 31, 9999"

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

 

#495: Чтоб под руками не мешалось

16 января 2009, 09:00

рейтинг: 795

Пришёл к нам парнишка на испытательный срок. Теория от зубов просто отлетает... А вот как садится что-то делать, вечно что-то отмочит: то в sql where код группы товаров с кодом площадки приравняет, то ещё чего.

Один раз такой случай был. Дали парню написать одну задачу. Сделал, значит, и несёт руководителю отдела на проверку (я рядом сижу). Написал что-то типа:

declare date_1 DATE; date_2 DATE;
...
select ... into date_1 from ......;
select ... into date_2 from ......;
select ... where some_date between date_1 and date_2;

Ему говорят: "Не мучай сервер несколькими запросами, заверни всё в один запрос, а переменные убери" (там это можно было сделать очень логичным образом). Парень подумал-подумал и уточнил: "Ну, одним запросом я сделаю... А куда мне переменные девать?"

Мы с нач.отдела не выдержали и почти хором ответили: "Ну удали, что ли?"

 

#491: Клиент-серверная модель по-государственному

15 января 2009, 09:00

рейтинг: 1491

#482 навеяло...

Некоторая конторка подвизалась для одного из округов большого города сваять систему расчета коммунальных услуг населению. Умолчим про то, что она была написана на MS Visual Basic for Applications., а потому требовала на машинах Клиентов в обязательном порядке MS Office. Сама база лежала на MS SQL, клиенты цеплялись к базе напрямую. И как-то в том округе сложилось, что сервер был несколько слабее рабочих станций, и потому были написаны гениальные перлы. Загружаем, например, все на рабочую машину в память (SELECT * FROM) - потом считаем. Распечатать квитанции за месяц - да пожалуйста, тем же SELECT * FROM надергали из массива в шаблон отчета - печатайте!

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

А сервер с четырьмя гигами оперативами и двумя Xeona`ми по 3ГГц стоял в сторонке и спокойно отдыхал...
Русский деревенский код.

 

#488: А это аппендикс, он не пролезет

14 января 2009, 11:00

рейтинг: 1648

Истории о гигабайтах мусора навеяли.

Вторая половина 90-х. Выпускали мы обучающие курсы на CD. Шеф приходит и просит сделать по быстренькому какую-нибудь защиту от копирования CD. Человек он был далекий от программинга, но весьма адекватный и к нашим доводам "за деревянным забором, который мы сможем вам построить много не спрячешь" отнесся с пониманием. Тем не менее попросил что-нибудь все-таки придумать.

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

 

#482: На том свете разберутся

13 января 2009, 11:00

рейтинг: 1431

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

До тех пор, пока делались сайты-визитки и прочая мура с ежедневным числом до ста человек, все было хорошо. Но тут нарисовался заказ на переделку движка одного тематического новостного сайта, на котором было от 15 до 30 тысяч посетителей в сутки и размер дампа базы новостей был около 300 мегабайт.
Движок переделали под требования заказчика, на стадии тестирования все прошло отлично — отправили в релиз. Через 10 минут после запуска — звонок с истошным воплем заказчика: "На вашем сайте вирус и он сломал нам сервер!!!". И действительно, минут через 10 после включения сервер с хостящимся сайтом переставал отзываться на внешние раздражители, разве что пинговался. top и ps, запущенный на серваке, показывали сумасшествие mysqld, который с потрясающей скоростью отбирал под себя проценты CPU и мегабайты памяти. my.cnf был перелопачен вдоль и поперек — без толку.

От безысходности залез в код движка — и вот тут волосы встали дыбом, стул подо мной сломался. Обращение к БД было реализовано весьма оригинальным способом — SELECT * FROM список_таблиц, а уже потом из такой вот 300-метровой глобальной переменной вычленялись необходимые компоненты.

 
747372• • •109876• • •321
 
текст или номер истории
реклама
обратная связь
Хотите разместить рекламу?
Информация для рекламодателей.

Вопросы, предложения, что-то не так на сайте? Пишите в саппорт!
на сайте
Утверждено: 8399
Сегодня: 5
В рассмотрении: 2011
тэги
лучшие последних семи дней
статистика
Рейтинг@Mail.ru