…опять этот WordPress!
Архивы для Август, 2010
Библиотека – Книговыдача
31 Август
Одной из самых первых задач поставленных передо мной, была реализация электронной книговыдачи на базе Drupal.
Как оно должно работать: читатель (студент/преподователь) показывает свой цифровой ключ (представляет из себя карточку на простой бумаге, с логином в двух вариантах отображения: штрихкод и текстовый), библиотекарь сканирует штрих код и открывается формуляр читателя. Читатель называет книги которые ему нужны, библиотекарь их приносит, и начинает сканировать штрих-коды с книг. После каждого сканирования выдаётся чек на принтер. Читатель расписывается в чеке за каждый экземпляр выданной ему книги и получает книги на руки. Всё.
Технические средства: сканер штрих кодов NoName, принтер Zebra EPL 2824.
Разработка: был написан парсер базы ИРБИС, под utf8:
$file=file_get_contents($files->filepath);
$file = str_replace(pack("CCC", 0xef, 0xbb, 0xbf), '', $file);
$arr=explode('*****',$file); $arr = array_diff($arr,array('')); # разбиваем на массив по разделителю (*****) и удаляем пустые элементы
foreach ($arr as $key=>$list): # цикл - обработка каждой книги
$s_arr = explode("\n", trim($list));
foreach ($s_arr as $str) { # обработка каждой строчки
preg_match('/^#(\d+): (.*)$/',$str,$res);
if ($res[1]=='700' or $res[1]=='701') {
$author = trim(preg_replace('#(\^\d+|\^.)#', ' ', $res[2]));
}
if ($res[1]=='200') {
$title = trim(preg_replace('#\^.#', ' ', $res[2]));
}
if ($res[1] == '461' and strlen($title)<10) {
$title = trim(preg_replace('#\^.#', ' ', $res[2]));
}
if ($res[1]=='910') {
// Когда количество наклееных штрихкодов на книгах станет больше 99999 следует исправить эту строчку
preg_match("/[H][0]{3}[0-9]{5}/", $res[2], $ololo);
$code = $ololo[0];
$shcode=substr($code, 1, strlen($code));
if (strlen($code)>0) { // echo '<b>'.$author.'</b> '.$title.' '.$shcode.'<br>';
} } }
$author = '';
endforeach;
}
Затем был словлен геморрой по настройке принтера. Он такой особый, что не сохраняет введённые настройки в виндовую оболочку дров. Путём нелёгких манипуляций он таки начал печатать прямо, так как нам надо. Пока никакой дизайн чеков не придумали, просто выводим системную информацию. Позже эта система будет изменена. Кстати о зебрах.
Zebra EPL 2824 использует язык программирования EPL. Когда в нём разбераешся, то печатать очень просто. Вот пример:
'N\n', 'A00,0,0,a,1,1,N,"Книга:"\n', 'A00,50,0,a,1,1,N,"'.$b1.'"\n', 'A00,100,0,a,1,1,N,"Код: '.$shcode.'"\n', 'A00,150,0,a,1,1,N,"Взял:'.$fio.'"\n', 'A00,200,0,a,1,1,N,"Логин: '.$login.'"\n', 'A00,250,0,a,1,1,N,"Подпись: _____________"\n', 'P1\n'
Где A – ASCII текст, p1 – позиция Х, p2 – позиция Y, p3 – шрифт.
Поскольку дефолтный шрифт не знал русского языка, пришлось заливать на него Arial с русскими символами через спец утилиту от производителя.
В общем метров 15 ленты я на тесты истратил. Облепил ей широкоформатный моник ![]()
Ещё была приделана аварийная форма для ввода данных вручную. Работает она по такому принципу: пока не все книги в библиотеке обладают штрих-кодами, соответственно их нет в базе книг. В форму вбивается автор, название книги, инвентарный номер (по которому можно однозначно опознать экземпляр в ИРБИСе) и наклеенный штрих код. С этой формы сразу идёт занесение на пользователя. Позже выводится отчёт, и в базу ИРБИСа вбиваются новые штрих коды. Затем когда базу перезаливают, те записи которые были сделаны через аварийную форму принимают нормальный вид (название по библиотечным ГОСТам и т.д.).
Как всё получилось: весь первый день я стоял в библиотеке и наблюдал как они работают. Без фокуса на поле и при большом формуляре им приходилось прокручивать форму вниз и кликать на нужном поле, что при больших объёмах непрактично. Вбивать вручную 10 одинаковых книг смертельно долго. Расписываться на каждом чеке тоже неудобно. Ещё несколько мелких программных багов, которые я за сегодня исправил.
Итого: в общем пока не получилось быстродействия. Я поправил дизайн, начал дорабатывать автофокус на нужном поле, и приделывать копирование для аварийной формы. Всё, и то что выплывет за следующие дни работы системы и сложит её конечное рабочее состояние.
Need For Speed World Starter Pack
20 Август
На этой неделе купил себе стартер пак. То чего так давно хотел
Просматривал множество предложений магазинов, однако все не подходили. Отчего и захотел опубликовать краткую инструкцию по покупке:
1. Идём в магазин «Связной» http://www.svyaznoy.ru/
2. Просим оформить карту «Связной Клуб Master-Card» http://pay.sclub.ru/
3. Закидываем на счёт 800 рублей.
4. Идём в настройки своего аккаунта на EA.com и меняем страну проживания на «United States».
5. Идём в store.ea.com и добавляем игру в корзину. (примерно 20 евро)
6. В корзине нажимаем ссылку вверху страницы «worldwide». Откроется окошко (pop-up) в котором нужно будет выбрать любой пункт и нажать кнопку внизу.
7. Возвращаемся в корзину и видим что нам сделали скидку в 2 евро. (общая сумма примерно 18 евро)
8. На странице ввода информации о себе вводим логин и пароль и входим в аккаунт. Затем вводим всю информацию о себе и о карте.
9. Оплачиваем и ждём письма на электронный ящик.
10. В игре добавляем ник Timka и зовём играццо