Кодерский блог Кирилла Герасименко
О себе: php (по совместительству - javascript) кодер с 24-х летним жизненным опытом. В прошлом - писал на Delphi. Кой-чего еще помню.
На этом блоге найдут своё пристанище мои заметки, ранее ютившиеся в разбросанных по всему диску readme файлах + несколько моих работ которые, возможно, станут полезны кому-то еще.
Ах да, спешу разочаровать относительно навигации. Она пока никуда не ведёт. Блог на ранней альфа-стадии. Как только я приведу всё в порядок, этот абзац чудесным образом исчезнет, обещаю.
Синхронизация структуры баз данных
У меня есть проблема. Люблю порядок. Даже не то чтобы люблю... он мне критически необходим. Причем именно в работе, дома-то у меня бардак тот-еще. Так вот о порядке. Работа нескольких программистов над одним и тем же проектом (кодом, данными), или пускай даже одного программиста (что вряд ли) на нескольких копиях проекта (тестовый сервер и живой) уже ведет к образованию неслабого беспорядка, для устранения которого необходимы определенные усилия. Ну скажем когда имеем дело с кодом, на помощь приходят системы контроля версий - CVS, SVN. Тут всё понятно - отредактировал код, протестировал, закоммитил. А теперь допустим вносимые изменения затрагивают... о ужас!... структуру базы. Ну и каков шанс того, что внеся изменения к примеру в 20 файлов проекта вы не забудете о том, что "ах да, я добавил поле 'email' в таблицу пользователей и увеличил длину поля 'login' до 255 символов"? А если изменения структуры базы данных затронули 10 таблиц? 20 полей? Что же теперь, записывать на листочке все запросы, которые вы выполняли к БД для изменения структуры? Или открыть обе базы в phpMyAdmin, сверять всё визуально и вручную добавлять/изменять каждое поле?
А теперь по поводу контроля беспорядков. Я придерживаюсь мнения, что наводиться порядок должен нанавязчиво, безболезненно для креативного процесса творческой личности (ну вот к примеру - творит художник в своей мастерской двое суток к ряду без сна и отдыха, жрет сушеные хотдоги перед холстом и прочим образом мусорит.. а вокруг него - чистота и беспорядок исключительно творческий. И не чудо это вовсе, а баба Дуся, уборщица, величайшей души человек, которая вместо того чтобы орать "выйти всем из помещения! уборка!" - нет-нет да и заглянет в мастерскую - глядит - то ли спит художничек, толи просто сквозь толщу мыслей потолок созерцает. Вот тут-то она раз - пыль со шкафа смахнула, два - крошки с пола подмела, окно протёрла, три - плату за уборку с тумбочку взяла и растворилась осторожно закрыв за собой дверь).
А теперь снова к делу. Так ка же нам поступить со структурой базы? Ситуация как правило такова - имеем 2 базы данных, у одной более актуальная структура, у дрогой - менее. PhpMyAdmin всегда готов нам эту самую структуру продемонстрировать, ну уж не как не сравнить у двух баз... а жаль. Вот тут то и приходит на помощь код, который берет на себя всю рутинную работу по сравнению структуры и даже генерации кода для ее обновления. Я реализовал утилиту, которая выполняет работу по генерации SQL, необходимого для синхронизации структуры баз данных по дампам структуры этих самих баз, взятых, к примеру, из того же phpMyAdmin-а.
Утилита написана на php и ее код доступен на phpclasses.org. Краткая документация к ней на английском лежит здесь. Обсудить можно на форуме.
Столбиковая диаграмма на javascript
Не так давно довелось наваять небольшой яваскрипт для вывода столбиковой диаграммы. Задача была простая - отобразить динамику количества новостей, получаемых по заданной тематике с набора информационных сайтов. Вот собственно что получилось:

Дабы прояснить ситуацию, скажу что:
Скрипт умеет:
- Использовать картинку в качестве фона столбцов
- Умещаться в заданную высоту
- Размещать числовые значения над столбиками "шахматкой", т.е. таким образом, чтобы стоящие на одной высоте цифры не сливались
- Отображать название величин, выводимых по горизонтальной и по вертикальной оси
Скрипт не умеет:
- Ну как минимум рисовать среднее значение за период. Либо какой-либо другой линейный или нелинейный уровень. А иногда так хочется..
- Выводить на диаграмму несколько рядов данных. Мне не понадобилось, но мало ли..
Ну если вас всё устраивает, то вот собственно сам код: