bash.im ithappens.me zadolba.li

Базы данных

11592

Господи, спаси от DROP TABLE

Разбирая базу данных, обнаружил поле с именем GOD_MADE. Как вы думаете, что бы это значило? Нет, не угадали. Это всего-навсего год выпуска. Тот, кто это писал, обладал явно нестандартным мышлением.

11528

Постоянным клиентам — сервер

Внедряем в бухгалтерии новый клиент-банк компании, у который мечты сбываются. Инструкция по установке на 15 листах формата детской книжки в картинках, уровень пояснений — для бухгалтеров-блондинок: «А теперь нажмите кнопку „Далее“».

Всё бы ничего, вот только, как водится, версия однопользовательская, а работать должен весь отдел сразу. Структура самого приложения — пользовательский интерфейс и БД в Аксесcе + CSP. Всё, естественно, локально. Звоню в техподдержку банка, объясняю ситуацию.

— Хотите многопользовательскую? Да не вопрос! Вы БД сложите в сетевой ресурс и ODBC до неё на пользователях настройте.

— Это понятно, но требуется именно одновременная работа пользователей, а не поочерёдная с общей базой. Это ведь сервер нужен?

— Вот смотрите: ставите приложение локально, с Аксессом, а потом поднимаете SQL-сервер, конвертируете базу туда, создаёте пользователей и настраиваете подключения клиентов.

— Э-э… Идея в целом понятна, но у вас нету готовых решений?

— А зачем? Мы всем так советуем работать!

В нашей конторе, конечно же, есть (и даже не один) развёрнутый SQL, и запихнуть туда ещё одну базу не составит труда. Но почему бы не реализовать нормальное приложение, позволяющие при установке выбирать раздельно, клиентскую часть мы хотим или же только серверную, и подключение организовывать, указывая на localhost или же адрес сервера в сети? Я такое в институте на третьем курсе писал, а компания с мировым именем реализовать подобное не может. Или им просто лень? Тогда можно вообще исходники присылать — скомпилируйте себе сами. Вот только как быть же бухгалтерше-блондинке, для которой инструкция в картинках? Ей тоже сервера вручную разворачивать?

11495

Без шанса на успех

Есть у нас в городе компьютерная академия. Всё выглядит солидно, академия — филиал широкой сети по всей Европе.

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

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

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

— Какую свободно распространяемую и кроссплатформенную базу данных вы посоветуете?

— MS SQL.

— Она бесплатная и кроссплатформенная?

— Нет, но… — преподаватель принялся перечислять её достоинства.

Сбить его с панегирика Микрософту было почти невозможно. Другие базы назвать он отказывался. Когда я упомянул MySQL, FireBird, он реагировал в стиле «не читали, но осуждаем». Уже смешно, но дальше интересней.

Обсуждаем среду программирования. Опять на вопрос о свободной и кроссплатформенной среде он начал распинаться о MS Visual Studio. После моих упоминаний о QT и ещё нескольких свободных пакетах последовал железный аргумент: «Так это же C++ нужно знать». На уверения, что я уже лет пятнадцать пишу на C/C++, как и миллионы других людей в мире, он реагировал в стиле «та не, да вы что…» Так его и не убедил. Для него человек, пишущий на C++, это какой-то мифический персонаж, в существование которого он не верит. Я так понял по некоторым его фразам, что он участвовал в каких-то древнесоветских разработках и с наступлением эры персоналок из среды программирования выпал. Учил по учебнику, по примерам — и на своём опыте и опыте своих учеников пришёл к выводу, что человек не способен выучить C++.

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

11281

Глубокая чувственная реляция

Обучаю нового коллегу азам SQL. По опечаткам в коде понимаю, что психологию его можно изучать через код с томиком Фрейда.

Вчера изобрёл новое реляционное объединение INNER JOPIN и долго не понимал, почему не работает.

Cегодня выдал уже совсем фрейдистское, что даже комментировать не хочется: SELECT CUNT(*)…

Это если не считать, что вместо IS NOT NULL товарищ через раз ставит IS HOT NULL.

11195

По заветам Мюнхгаузена

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

Базу данных принесли. На дискетах. Ну, то есть, некое изделие на FoxPro, сертифицированное для ввода анкет выпускников. Нас запрягли вбивать эти самые анкеты. Не проблема — сидим, набираем. Девочки с фамилиями Крохмаль и Клейстер в одном классе — это зачёт, подруги, наверное. В другом классе встретились Лысый и Кучерявый. Это тоже прикольно. Ну, особо не скучаем с таким контингентом, ржём.

И тут мне FoxPro говорит: бибип! Неправильная дата! Смотрю в анкету: ну, Какойто Какойтов, родился 31.11.198#… И чего тут неправильного? Попробовал так и эдак — не принимает. Посмотрел в календарик — и точно, в ноябре-то 30 дней! Дёргаю начальство:

— Тут дата в анкете неправильная. 31 ноября.

— Это ещё почему неправильная? — поражается начальство. — Нормальная дата.

Протягиваю календарик. Начальство изучает доказательство:

— Ну… Да… Слушай, это же не наше дело, если облоно ошиблось — пиши 31 ноября, и всё тут.

— Да не могу. FoxPro не даёт ввести кривую дату.

— Как — не даёт?

— Ну, проверка там стоит. Пищит и пишет: «Неправильная дата».

— Вашу ж мать, — вздыхает начальство и звонит своему начальству.

Звучит примерно такой же полудиалог:

— Дата неправильная. Да, 31 ноября записано. Нет, в ноябре 30 дней. Да, точно 30. Не можем. Там проверка — не даёт ввести. Ага.

По загадочной цепочке звонков информация уходит наверх, потом вниз и в стороны; короче, в нашем тесном кабинетике спустя несколько часов образуются дамы из облоно, директор школы, сам проштрафившийся ученик и его мама. Все громко галдят. Облоно записало по школьным документам. А школьные документы без ошибок списаны со свидетельства о рождении, в котором и записано злосчастное 31 ноября. И все рады бы забить болт и записать это 31 число, как всегда, но прогресс же — и FoxPro не пускает. Вот и спорят, что же писать. Партия 30 ноября примерно на равных с партией 1 декабря. Звучат вопли: «А как же он паспорт получит?» Пацан пытается сгинуть на месте, его мама обвиняет всех подряд.

Пока происходит этот гвалт, я подзываю виновника торжества:

— Они там спорят, скоро мебель начнут ломать уже. Давай проще: когда ты празднуешь день рождения?

Пацан ухитряется покраснеть ещё сильнее:

— Пе-первого д-декабря.

— Спасибо! — ору я на весь кабинет. — Молодец! Первого декабря! — и радостно вбиваю означенную дату в базу данных.

Гвалт превращается в немую сцену.

— Это ещё почему? — замогильным голосом вопрошает дама из облоно.

— День рождения он празднует первого декабря! — бодро отбиваю я.

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

Вот и ладненько.

11093

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

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

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

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

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

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

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

10530

Кукушка идёт на взлёт

Года три назад я на субподряде варил оптику в серьёзной госконторе, которая по роду деятельности связана с хранением больших объёмов данных ещё с советских времён. При этом админов у них нет. Есть отдел АСУ из полутора начальников пред- и постпенсионного возраста и двух программистов-эскьюэльщиков, помнящих ещё ADABAS, и система хранения данных. В рамках ТЗ подрядчики один раз настраивают её, она служит семь лет, а потом систему меняют на новую.

— Вот вы, молодой человек, нам аппаратную сделаете, мы тут поставим 40 новых «хьюлеттов»…

— А вот тут будет кросс на все новые «хьюлетты» и от него отвод в старую аппаратную к старым «хьюлеттам». Надо же ещё данные перенести.

Тут я начинаю тупить, потому как на стойках написано «IBM», в спецификациях на аппаратную — сплошняком «IBM». И даже на кроссе, в котором я ковыряюсь, написано явно не «HP». Но ничего. В разговор не ввязываюсь.

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

— А почему вы всё время про HP говорите? У вас же там айбиэмовские NAS по спецификации заложены.

— Ну да. Айбиэмовские «хьюлетты».

— Это как?

— Ну, на серьёзные «хьюлетты» на «чпуксе» у нас денег не хватает. Может, чаю?

— Не откажусь.

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

10517

Юзверинец

Говорите, вас юзвери тупые задолбали? А вы когда-нибудь задумывались, откуда они берутся, да ещё в таком массовом количестве? Что-то мне подсказывало, что где-то это дело поставлено на поток, и я не ошибся.

Попал мне в руки учебник по информатике и ИКТ (честно говоря, сам не знаю, что такое ИКТ: икота, что ли?) для 8 класса. У других авторов эту тему для 10–11 оставляют, но да ладно, речь не об этом даже. Глава о базах данных. Авторы словами, вычитанными в Википедии, описывают, что же такое реляционные БД, что бывают СУБД (не уточняют какие) и что реляционные СУБД, оказывается, управляют реляционными БД. Браво, капитаны!

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

.выбрать <условие>

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

Дальше мы уже видим сложные запросы на примере нарисованной таблицы:

.выбрать поле1 где поле2 > 0 порядок по поле3

Плевать, что даже если обратно перевести запрос на нормальный язык, получится ошибка из-за забытого параметра, а именно названия таблицы. Плевать, что авторы жгут на каждой странице, предлагая сделать практические задания в некой абстрактной СУБД. Плевать, что у них существует всего четыре типа данных в БД. Меня пугают слова на титульном листе: «Рекомендовано Министерством образования и науки Российской Федерации».

10506

Слон Шрёдингера

Уже несколько дней отлаживаю SQL-процедуры. Пытаюсь подключиться к серверу после обеда консольной утилитой и получаю ошибку: мол, невозможно соединиться. Используем мы PostgreSQL, базу супернадёжную, которая так просто не падает. Кто же завалил слонятку?

Ладно, думаю, некогда разбираться, перезагружу. А он и не перезагружается! Я, говорит, жив-здоров, работаю. Но при попытках подключиться в консоль выводится сообщение о том, что на порту 5432 ничего хорошего не наблюдается. Слон Шрёдингера какой-то: и жив, и мёртв одновременно…

Через какое-то время замечаю, что в сообщении об ошибке что-то говорится о каталоге /tmp. Там PostgreSQL хранит номер своего основного процесса… А, вот в чём дело! Перед обедом именно я развёл флейм: «Чего только не найдёшь у нас во временном каталоге! Тут тебе и SSH-ключи, и секретные фрагменты кода…» И не только повозмущался, но и добросовестно почистил /tmp, зацепив и слоняткин PID-файл. Сам, выходит, и виноват. Но разработчикам «Постгреса» неплохо бы подобрать для хранения ответственной информации более адекватный каталог.