29 дек. 2010 г.
17 дек. 2010 г.
Сокращения на Yahoo!
Yahoo! закрывает delicious.com (и некоторые другие сервисы). Надеюсь они предоставят возможность слить ссылки. Обидно будет потерять все, что нажито непосильным трудом :(
PS: Привет Романчуку. Не всегда инвестор заинтересован в развитии и сохранении приобретенного предприятия. Бывает и так: поматросили и бросили.
PS: Привет Романчуку. Не всегда инвестор заинтересован в развитии и сохранении приобретенного предприятия. Бывает и так: поматросили и бросили.
Labels:
интернет
13 дек. 2010 г.
По дороге к унифицированному парсеру SQL запросов
Создатели SQL похоже всерьез надеялись, что каждая кухарка со знанием английского будет писать запросы к реляционным базам. Чем еще объяснить такое буйство синтаксисов для некоторых функций? Все эти EXTRACT(year FROM date), DATEADD(month 5 TO date) и т.п. Странно, что для функции BIN_AND оставили синтаксис BIN_AND(a, b), а не придумали что-нибудь вроде BIN_AND(a AND b). Или возьмем синтаксическую избыточность многих конструкций и наличие необязательных зарезервированных слов. Например, SELECT [ALL] * FROM..., column [AS] alias... Простым разработчикам SQL парсеров от этого теперь одна головная боль.
Labels:
SQL
2 дек. 2010 г.
Лечение поврежденной БД под Firebird 2.0
От клиентов пришла поврежденная база. Сервер Firebird 2.0. Внешне все ОК: gbak и gfix проходят без проблем, но некоторые хранимые процедуры не перекомпилируются (ALTER PROCEDURE) и не удаляются с сообщением:
Соответственно, невозможен процесс апгрейда базы с помощью утилиты FDBConvert.
Вылечить базу получилось следующим образом:
UPD: Конкретно в этой базе проблемы были с процедурами: MSG_P_GETCHILDCOUNT_BOX, MSG_P_EXPANDLIMIT_BOX, MSG_P_RESTRUCT_BOX.
This operation is not defined for system tables.
unsuccessful metadata update.
cannot delete.
COLUMN RDB$220.
there are 1 dependencies.
Соответственно, невозможен процесс апгрейда базы с помощью утилиты FDBConvert.
Вылечить базу получилось следующим образом:
- Определили список поврежденных процедур
- Для каждой из них сохранили исходный текст
- Удалили параметры процедуры с помощью запроса
DELETE FROM rdb$procedure_parameters WHERE rdb$procedure_name = 'name' - Удалили процедуру (DROP PROCEDURE)
UPD: Конкретно в этой базе проблемы были с процедурами: MSG_P_GETCHILDCOUNT_BOX, MSG_P_EXPANDLIMIT_BOX, MSG_P_RESTRUCT_BOX.
Labels:
fdbconvert,
Firebird
30 нояб. 2010 г.
Ищут пожарные, ищет милиция
Что приятно, теперь в любой момент загляни в базу резюме на rabota.by и обязательно найдется кто-то со знанием Гедымина.
А мы, в свою очередь, продолжаем набирать людей. Нам нужны:
Чуствуете в себе силы? Желаете пополнить наш дружный коллектив? Ищите возможность участия в амбициозном проекте? Заполняйте форму у нас на сайте.
А мы, в свою очередь, продолжаем набирать людей. Нам нужны:
- Программисты (Delphi, SQL, WinAPI)
- Специалисты по внедрению и сопровождению (знание основ баз данных, программирования и бухучета обязательно)
- Технический писатель
Чуствуете в себе силы? Желаете пополнить наш дружный коллектив? Ищите возможность участия в амбициозном проекте? Заполняйте форму у нас на сайте.
29 нояб. 2010 г.
32 или 64? Определение разрядности ОС из bat файла
Чтобы из пакетного файла определить какая операционная система установлена приходится буквально стучать в бубен и взывать к духам предков:
set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
reg.exe Query %RegQry% > checkOS.txt
find /i "x86" < CheckOS.txt > StringCheck.txt
if %ERRORLEVEL% == 0 (
goto os32
) else (
goto os64
)
:os32
rem do something here
goto check_done
:os64
rem OS is 64 bit
:check_done
del StringCheck.txt
del CheckOS.txt
Labels:
windows
21 нояб. 2010 г.
А ларчик просто открывался!
Оказалось, избавиться от регистрации midas.dll — простейшая вещь. Берем утилиту regsvr42 и запускаем:
regsvr42 -client:gedemin.exe midas.dll
На выходе получаем два манифеста, для выполняемого файла и COM сервера.
gedemin.exe.manifest:
Подробнее, про регистрацию COM серверов side-by-side можно прочитать здесь.
regsvr42 -client:gedemin.exe midas.dll
На выходе получаем два манифеста, для выполняемого файла и COM сервера.
gedemin.exe.manifest:
midas.sxs.manifest:
Собственно и все. Осталось избавиться от обращений к системному реестру и переносимый Гедымин будет готов.
Подробнее, про регистрацию COM серверов side-by-side можно прочитать здесь.
Labels:
технология
14 нояб. 2010 г.
Такой шанс бывает лишь раз
Oracle таки сделала это. Минимальная цена на MySQL выросла в четыре раза и составляет теперь 2000 USD с сервера. Вопреки распространенному заблуждению, MySQL никогда не был полностью бесплатным сервером. Свободно можно было использовать только community edition (движок без поддержки транзакций) и только для open source проектов. Таким образом, перед Firebird открывается блестящая возможность заполучить часть пользователей MySQL, которые будут искать альтернативный сервер. Учитывая, что основная сфера применения MySQL &mdash это веб, где большое количество одновременных подключений к базе на мощных многопроцессорных и многоядерных серверах, распараллеливание запросов и общий кэш становятся приоритетом номер один. Будем надеяться, что Firebird 3.0 не заставит себя долго ждать.
Labels:
Firebird
12 нояб. 2010 г.
Поиск дублирующихся FOREIGN KEY
Стандарт SQL запрещает создание более одного первичного ключа для таблицы, а вот количество внешних ключей по одному и тому же полю никак не ограничивается. Хотя ясно, что свыше одного — это пустая нагрузка на сервер и лишний индекс в базе данных. Запрос ниже помогает найти дублирующиеся внешние ссылки.
SELECT
rf.rdb$relation_name,
rf.rdb$field_name,
LIST(TRIM(rc.rdb$constraint_name)),
COUNT(*)
FROM
rdb$indices i
JOIN rdb$index_segments iseg
ON iseg.rdb$index_name = i.rdb$index_name
JOIN rdb$relation_constraints rc
ON rc.rdb$index_name = i.rdb$index_name
AND rc.rdb$constraint_type = 'FOREIGN KEY'
JOIN rdb$relation_fields rf
ON rf.rdb$relation_name = i.rdb$relation_name
AND iseg.rdb$field_name = rf.rdb$field_name
GROUP BY
1, 2
HAVING
COUNT(*) > 1
Labels:
SQL
9 нояб. 2010 г.
Шажок к MVC
С выходом версии 2.5.7 с форм стандартных бухгалтерских отчетов и складской карточки исчезли компоненты xdeStart и xdeFinish. Их заменил компонент ввода периода gsDatePeriod. Но, не спешите с заменами по тексту скрипт-функций. Модель MVC запрещает обращение к визуальным контролам из кода прикладной логики. В интерфейсы классов Tgdv_frmG, Tgdc_frmInvCard добавлены свойства DateBegin, DateEnd. Их (и только их!) следует использовать для считывания и установки периода построения отчета.
Код, который обращался напрямую к удаленным компонентам работать не будет. В процессе апгрейда БД, Гедымин ищет в исходных текстах обращение к xdeStart, xdeFinish и меняет на работу со свойствами. Естественно, что трудно создать абсолютно универсальный алгоритм. Поэтому, после апгрейда следует открыть редактор скрипт-объектов и поискать в текстах функций строки "xdeStart", "xdeFinish". Если что найдется — исправлять вручную.
В эталоне присутствует код, который проверяет наличие компонента xdeStart или gsDatePeriod и обращается или к одному, или ко второму.
Клиентам, которые работают с Книгой покупок, после установки версии 2.5.7 следует или проделать операции ручного удаления компонентов из DFM или загрузить новые версии настроек.
Код, который обращался напрямую к удаленным компонентам работать не будет. В процессе апгрейда БД, Гедымин ищет в исходных текстах обращение к xdeStart, xdeFinish и меняет на работу со свойствами. Естественно, что трудно создать абсолютно универсальный алгоритм. Поэтому, после апгрейда следует открыть редактор скрипт-объектов и поискать в текстах функций строки "xdeStart", "xdeFinish". Если что найдется — исправлять вручную.
В эталоне присутствует код, который проверяет наличие компонента xdeStart или gsDatePeriod и обращается или к одному, или ко второму.
if Assigned(OwnerForm.FindComponent("xdeStart")) then
...
elseif Assigned(_
OwnerForm.FindComponent("gsPeriodEdit")) then
...
end if
Я думаю, стоит пройтись по исходникам и заменить на обращение к свойствам формы без всяких проверок.Other.FieldByName("Period").AsString = _
"за период с " & OwnerForm.DateBegin & _
" по " & OwnerForm.DateEnd
На эталоне одна пользовательская форма содержит компоненты xdeStart, xdeFinish. Это Книга покупок. Найти ее можно в Глобальном хранилище, по вхождению строки xdeStart в значения параметров. Форма книги покупок наследуется от Tgdv_frmG поэтому с нее компоненты надо удалить вручную. Для этого открываем в окне Хранилища просмотр текста DFM формы и удаляем из него описание объектов xdeStart, xdeFinish, а заодно и метки к ним: Label1, Label2. Клиентам, которые работают с Книгой покупок, после установки версии 2.5.7 следует или проделать операции ручного удаления компонентов из DFM или загрузить новые версии настроек.
Labels:
технология
5 нояб. 2010 г.
Добавляя новые типы параметров
Двоичные форматы — это зло. Пишутся в поток быстро, занимают мало места, но дальше начинается сплошной геморрой. Просмотреть невозможно, стандарным поиском по базе данных пользоваться нельзя и, самое неприятное, когда программист не позаботился об изменении структуры потока в будущем. Типичный пример — список параметров макроса в двоичном потоке (см. метод SaveToStream класса TgsParamData в модуле prm_ParamFunctions_unit.pas). Хорошо, здесь нашелся относительно безболезненный выход: все последние расширения дописываются в поле комментария при записи, изымаются и распознаются при считывании. Например, признак "Обязательный", дописывается в коментарий как последовательноcть ^R, порядок сортировки выпадающих списков задается как ^A и ^D, и т.д.
Более затратным, но и более удобным способом было бы хранение параметров прямо в тексте макроса. Например:
Более затратным, но и более удобным способом было бы хранение параметров прямо в тексте макроса. Например:
Sub Test (A, B, C) '<params> ' <param name="A" required="TRUE" type="INTEGER" /> ' <param name="B" type="LIST" values="..." /> ' <patam name="C" type="DBLIST" table="GD_CONTACT" /> '</params> 'Test's actual code goes here End SubОпытный разработчик определял бы типы параметров прямо в тексте, а для начинающего &mdash мы сохранили бы отдельную вкладку, в том виде, в котором она существует сейчас.
Labels:
идеи
25 окт. 2010 г.
21 мільён даляраў, аднак
Сайт Ohloh.org намагаецца падлічыць кошт стварэньня з нуля праекту, такога як Гедымін:
Бягучая статыстыка:
Выкарыстаныя мовы:
PS: Для падатковай. Калі што, насамрэч усё абышлося значна таньней :)
Бягучая статыстыка:
Выкарыстаныя мовы:
PS: Для падатковай. Калі што, насамрэч усё абышлося значна таньней :)
Labels:
цікава
Подписаться на:
Сообщения (Atom)