?

Log in

Previous 10

Mar. 28th, 2013

О защите своих прав

Было совсем недавно:
Купил маме usb-модем (нет у них возможности другого интернета, совсем никакой). Выбрал известного полосатого провайдера (не будем показывать пальцем) только за то, что у них есть тарифы с абонентской платой, это было основным требованием. Покупал в офисе продаж, чтобы не было никаких косяков и недомолвок, которые я уже заранее чуял пятой точкой. В офисе продавец-консультант объяснил, что "в сумму входят сам модем 840 ру и оплата первого месяца по такому-то тарифу 350 ру, итого 1190 ру". Принес маме, подключил, активировал симку и стартовый баланс, все довольны.
Проходит дней 5, мама говорит. что в интернет выйти не может. Проверяем баланс... копейки. Таааак. Звонок в техподдержку - добрая девушка по номеру сим-карты выдала сведения, что не активировался тариф, что для активации должно было быть 390 ру, а на счете было лишь 350(!!!) поэтому деньги списывались по 2 ру/Мб, и отправила в тот же офис продаж: "Продавцы напишут заявку в главный офис, там разберутся. Раз Вам обещали акцию, что первый месяц оплачен - значит акция должна быть". Крестный на это только рукой махнул: "Да не вернут ничего, сволочи там все, и вообще нехорошие люди". Ладно. Пришел я в офис продаж, объяснил ситуацию. Продавец тоже посмотрел данные по номеру телефона, все подтвердил. При мне составил заявку в центральный офис, сказал, что поставил "высокую" срочность, и что через пару дней должно придти решение. О решении меня уведомили, действительно, через пару дней, звонком на мобильник, и радостно сообщили, что "деньги Вам на счет вернули, тариф заново активировали, все должно быть хорошо". Проверили вечером - да, действительно. Тариф есть, все нормально. Сейчас, спустя несколько дней - тоже все хорошо.
А мораль сей басни - не стесняйтесь, друзья, отстаивать свои права)

Feb. 25th, 2013

Неокубик

Подарила мне супруга неокубик. Занимательная головоломка, и развитие мелкой моторики рук (злободневно - последние несколько недель работаю в условиях стройки, к концу дня от холода и строительной пыли моторика просто отсутствует как функция).
Собственно, сижу, развлекаюсь. Пытаясь отковырять лишний шарик от собранной фигурки, слишком неаккуратно ковырнул, и... шарик выскочил и плюхнулся аккуратно в кружку с чаем. Я сначала обалдел на секунду от такого конфуза, а потом... помешал чай, и вынул ложку. Беглец был пойман)))

Dec. 6th, 2012

О старой технике

Есть у меня старенькие часы-будильник, подаренные мне еще в младше-школьные годы. Такие простенькие электронные часы-будильник с радио, каких сейчас на каждом углу полно. Уже покрытые трещинами, не единожды клеенные, работают, как ни странно, исправно. Многого от девайса не требуется - используется как часы, которые видно ночью, видимо из-за этого и прожили так долго. На днях собрался я подправить на них время (на 10 минут вперед ушло), но обнаружил, что кнопки настройки продавлены. С кнопками у девайса давнишняя проблема, что ж, отвертка, клей - все под рукой. Но когда я разбирал эти часы, корпус буквально рассыпАлся у меня в руках. Все это время, он похоже, не разваливался лишь из-за огромного морального духа девайса))), а когда до них добрался, прибор словно старик-часовой отдал честь, "Пост сдал", выдохнул и рассыпался)
Такие вот верные хозяевам девайсы бывают)

З.Ы. Сейчас заклеиваются, соберу - приложу фото. Наверное. Если тут можно.

Oct. 30th, 2012

Штрих PriceChecker в Delphi

Снова нам привезли новое оборудование. На этот раз это информационный терминал Штрих PriceChecker. Как обычно, вопрос: что это и с чем едят. Терминал содержал модуль Wi-Fi, и было заявлено, что работать он может как по Wi-Fi, так и по Ethernet. Как это делается: на задней стенке терминала есть RJ-45 разъем, в него подключается RJ-45 же хвостик, торчащий рядом. Гнездо - это Wi-Fi модуль, хвостик - это сам терминал. Вафельный модуль оказался, собственно, простым Асусным роутером ASUS WL-330N, кажется. Разъем - это его LAN-порт. WAN-порт отсутствует напрочь. Дефолтный IP у него 192.168.220.1, пароль admin/admin, кажется. Там можно выставить режимы работы модуля - повторитель, адаптер, точка доступа, еще чего-то. Не разбирался, т.к. вафля особо-то нам и не нужна. Заметил только, что модуль регулярно терял сеть, хотя точка доступа стояла в 20 сантиметрах от него. Нехорошо... В общем, для нормального кошерного Ethernet пришлось обратить внимание на хвостик. Дефолтный IP терминала находиться не хотел, нашелся только с помощью сниффера, и как ни странно, был 192.168.1.166, кажется, как и заявлено в документации. Дальше через драйвер прайс-чекеров (с прилагавшегося CD) терминалу был выдан православный IP, настройка оказалась интуитивно понятной (Описывать не буду - для этого есть документация). Тогда можно стало переходить к основной задаче - написать для него собственный сервер прайс-чекеров. "Описание протокола" принесло больше ужаса, чем ответов, их я нашел в "Руководстве программиста". Долго втыкал в примеры использования, ни один из которых не компилировался, прошу заметить! потому что ну нет у меня такого класса "SizeableForm", откуда "Штрих" его выкопал?. Все оказалось просто как палка. Добавляем в список interface/uses PriceDrv, и копируем в папку со своим проектом файлы PriceDrv.pas (создание объекта драйвера) и PriceDrv_TLB.pas (собственно, его описание). После этого смело используем объект Driver и его методы, описанные в "Руководстве программиста". Например, я сделал так:

//При создании формы:
Driver.OnDataEvent := DataEvent;
Driver.OpenServer;

//В процедуре DataEvent описываем весь запрос к базе данных, или откуда у Вас берутся данные в ответ на штрих-код
//Штрих-код содержится в переменной Data в виде хексовой последовательности.
//Не забываем описывать процедуру в type!!! А то не полетит.
procedure TfrmMain.DataEvent(Sender: TObject; const Data: WideString; SenderID: Integer);
begin
Driver.Line2 := Data;
Driver.Line1 := Data;
Driver.ShowMessage;
end;

//На закрытие формы:
Driver.CloseServer;
Driver.OnDataEvent := nil;

ЗЫ. Саппорт "Штрихов" промолчал в ответ на вопрос "может ли таким образом используемый объект Driver работать с несколькими прайс-чекерами, если у них указан параметр "отключаться от сервера после выполнения запроса?"".

Oct. 16th, 2012

Программирование весов Mettler Toledo Tiger P

Привезли нам на работе новые весы. Нормальные такие весы самообслуживания, симпатичные. Обычно на наших магазинах используется Mettler Toledo Tiger 8442-3600, а эти - Mettler Toledo 8442-3610S. Принципиально, разницы никакой нет, с программной части они одинаковые, кроме пары пунктов. У 3610S клавиатура по умолчанию находится в режиме выбора товара, и как добраться до настроек - непонятно. С этим разбирались 2 дня. Оказалось - надо весы выключить, нажать CODE, весы включить, держать CODE до посинения, пока не появится приглашение ввести код. Ладно. Настроили IP, накатили через SPCT торговые настройки, прогрузили товар. А как кнопки для покупателя программировать? Ну да, можно через ту же SPCT. Но, например, 25-кнопочная раскладка клавиатуры подразумевает, что 1 кнопка занимает 4 места на клавиатуре, стало быть, нужно выгружать привязку товара к кнопке 4 раза. Для тётушек на магазинах такая математика сложнее высшей алгебры. Пришлось браться за перо, точнее, за любимый Delphi. Еще дней 5 я вкуривал в сандартный драйвер, предоставляемый Mettler Toledo. И вот что оказалось:
Нам нужна кучка библиотек драйвера (ну, найти - проблемы не составляет). Как он действует:
Файл ScaleAddress.ini содержит адреса-порты весов.
Файл TransScale.ini содержит номер весов (из ScaleAddress.ini) и имя файла с командой (обычно trf.out).
Файл trf.out содержит, собственно, команду. Описание этих команд есть в "описании протокола обмена данными Tiger P", не буду разоряться на объяснение. Скажу только, что команда выглядит как 000216000000010009900000004530000000000, где 099 - номер места на клавиатуре (по 100-кнопочной раскладке), а 000453 - это номер PLU. То есть, этой командой у нас привяжется PLU №000453 к кнопке №99. Если используется, например, 25-кнопочная клавиатура, нам нужно выгрузить эту команду для кнопок №1, 2, 11 и 12. То есть, 4 выгрузки подряд:
000216000000010000100000004530000000000
000216000000010000200000004530000000000
000216000000010001100000004530000000000
000216000000010001200000004530000000000
Я каждый раз переписывал trf.out, мне так показалось лучше. С записью в файл, я думаю, читающие справятся... Обратим внимание, что если соберетесь выгружать кириллицу - ее нужно набирать в DOS-кодировке.

По поводу того, как подключить драйвер к делфе - отдельная эпопея. В описании сказано, что нужно вызвать функцию ireturn = Transfer_Ethernet_EX("Transscale.ini",251245664). В реале, оказалось, ее зовут _Transfer_Ethernet_EX@8. Подчерк, собачка и "8" в имени функции - я так понимаю, name mangling, результат работы Си при компиляции библиотеки. Короче, вызов у меня выглядел так:

<code>
procedure UploadTRF;
type
Transfer_Ethernet_EX = procedure(cTrfTxtout: PChar; Key: integer); stdcall;

var
LibHandle: THandle;
TransferProc: Transfer_Ethernet_EX;

begin
@TransferProc := nil;
LibHandle := LoadLibrary('TransferEth.dll');
@TransferProc := GetProcAddress(LibHandle, '_Transfer_Ethernet_EX@8');
if @TransferProc <> nil then TransferProc('Transscale.ini', 251245664);
FreeLibrary(LibHandle);
end;
</code>

Такой вот сумбурный набросок-памятка получился...

Sep. 22nd, 2012

Кластер? - окончание

В прошлом посте писал про невнятное поведение маминого компа при замене винта. Вот чем история закончилась:
Как я ни бился, распиливая винт (даже не распиливая), - все равно один раздел создавался с ошибкой "раздел не выровнен (не кратен) по 512 байтам". Даже если создавался один раздел ext4 на всю емкость винта. А значит, проблема кроется не в ОСях, а в винте. В конечном итоге, ошибка перестала появляться после того, как я создал раздел FAT16 самого маленького доступного размера в начале винта.

Sep. 15th, 2012

Кластер?

Сегодня не в первый раз убедился, что виндус - это система не для людей, а против людей.
Некогда давно состряпал я для мамы системник, не вот передовой, но крепенький такой. Собран из старого железа, которе у меня самого раньше стояло, и нареканий не вызывало. Материнка Gigabyte 945 Intel, оперативка Corsair 4 x 512 Мб, процессор 4-й пень, видеокарта NvIdia GeForce 7700 GS 256 Мб. Единственная ходовая деталь, которую поменял - это винт, поставил IDE-шный Seagate 80 гектар. Признаться, я его так же давно подозревал в измене, но на момент сборки ничего другого не нашлось. Распилил его на 4 раздела - под виндус, линукс и файлопомойку, так и поставил. 
И вот недавно комп накрылся. Подозрел я сразу винт, поскольку упали обе ОСи с промежутком дня в три. Купил новый, ибо нефиг, теперь это sata-3 WD Caviar Green 500 гектар, нормальная емкость. 
Забрал у мамы ящик к себе, стал ставить ОСи. Решил так: для каждой ОСи буду создавать раздел ее встроенным редактором разделов, чтоб уютнее устроились. А кто знает линукс - тот знает и то, что сначала лучше ставить виндус, чтобы не чинить потом grub лишний раз. 
Вот, начал ставить виндус. Решил создать под ОСи разделы по 20 Гб, не много-не мало. 20 Гб х 1024 Мб-в-Гб = 20480 Мб, велел я виндусу создать новый первичный NTFS раздел в начале диска. Тот создал, поставился, загрузился - все нормально. День после этого я еще ставил сервис-паки, дрова, софт, нашпиговал его тетрисами и пакменами - все, что есть у меня в арсенале, и так нравится маме. 
Вечер. Пора доставать бубен, наряжаться в шкуру медведя и ставить Убунту. 12.04 был отметен из-за неудобного юнити, с которым возиться не хотелось, из загашника вынут проверенный 11.04 "Натти Нарвал" (обновлений все равно не будет - у мамы так и нет интернета). Сую диск в дисковод, загружаюсь. Убунта рада меня видеть, дружелюбно улыбается и кивает головой. Создаю первичный ext4 20480 Мб сразу за виндовым, и еще 512 Мб своп в конце диска. Слааавно... Пока я не спеша заполняю информацию о пользователе и местоположении, убунта уже поставила половину себя. Через 20 минут готово, перезагружаемся, достаем диск из дисковода. Еще 20 минут на последние в жизни убунты обновления и поприетарные драйвера. Пора бы и файлопомойку создать... Go-go-go, дисковая утилита...
И тут убунта испуганно закричала и заплакала, и прямо за руку потащила меня прочь от этих еретических ntfs! Сказала, что не выровнен (не кратен) раздел "Windows" по 512 байтам, и раздел "Файлопомойка", соответственно, тоже, и не подобает уважающему себя компьютеру пользоваться такими вот разделами, ибо производительность это сильно снижает, и перераспределить их посоветовавла.
Еще два с половиной часа я пытался GParted'ом виндовый раздел исправить, да куда там. Меньше мегабайта от раздела отрезать ведь нельзя. Плюнул, все нафиг снес, делаю с нуля и пишу вот пост в ЖЖ.
Tags: ,

Sep. 2nd, 2012

DELL PP29L

Вчера взялся почистить ноутбук жены, DELL PP29L. Понравилось. И радиатор охлаждения, и процессор, и видеопроцессор - все находится под одной крышкой, добраться проблем не составляет никаких. Снял с радиатора, естественно, целый валенок. Термопасту с процессора пришлось соскабливать - закаменела донельзя. А вот на видео проце... Первый раз такую штуку видел - вроде, и термопаста, а вроде и нет. Как кусочек резины или, скорее, пенки, правильной прямоугольной формы. Интересно, если это какой-то заменитель термопасты, то каковы его качества, и где можно достать?
Далее по курсу был кулер, и до него пришлось лезть через весь ноут. Клавиатура на двух винтах, спрятанных под верхней панелькой, снялась без проблем. Потом снял верхнюю часть корпуса, не знаю даже, обязательно ли это было - мной двигало больше любопытство. С защелками пришлось помучиться - много и держат крепко. Материнка отцепилась от корпуса и плат расширения довольно легко. И вот, собственно, добрались до кулера. Почистил.
Обратная сборка тоже особых хлопот не вызвала, только под конец забыл засунуть ethernet-модуль на место, пришлось снимать клавиатуру и панельку, благо то, что легко.
Итог - ноут порадовал конструкцией, не то, что некоторые)))

Aug. 26th, 2012

Скрипт

Написал недавно скрипт, который скачивает для меня комиксы с известного сайта. Для запасливых, так скажем))

#!/bin/bash

# Объявляем константы
# Структура папок: $DOWNDIR/$SITEDIR/$INSITEDIR/$AUTHOR1/$COMICS1/*.jpg

SITE=http://bla-bla-bla.com # адрес сайта не разглашаю...
DOWNDIR=/home/axl_nefersky/Downloads/Comics # Местонахождение скрипта и папки
                                                                          # загрузки. В теории, можно
 
                                                                          # использовать `basename $0`, но
                                                                          # поленился

SITEDIR="bla-bla-bla.com"
INSITEDIR="users"
PICTUREDIR=/home/axl_nefersky/Pictures # папка с картинками

# Параметры первого комикса
NAME1="Geterodin" # Нормальное название
COMICS1="girl-genius"
AUTHOR1="gadzilla"
PAGE1=$(grep HavePage $COMICS1.ini| cut -f2 -d"=") # Ага, рядом со скриптом
                                                                                 # валяется инишник с записью
                                                                                 # HavePage=903 - это
                                                                                 # последняя полученная
                                                                                 # страница


echo "Geterodin last page: "
read READ1 # спрашиваем, до какой страницы скачивать
if [ -z "$READ1" ] # Если пустой ввод
  then
    LAST1=$PAGE1 # то до той же, которая уже есть
  else
    LAST1=$READ1 # если нет - то до введенной
fi

# То же самое для второго комикса
NAME2="Gunnerkrigg"
COMICS2="gunnerkrigg"
AUTHOR2="light"
PAGE2=$(grep HavePage $COMICS2.ini| cut -f2 -d"=")

echo "Gunnerkrigg last page: "
read READ2
if [ -z "$READ2" ]
  then
    LAST2=$PAGE2
  else
    LAST2=$READ2
fi

# если запускать скрипт с выводом в файл - создаст красивый файл лога
echo "#################### Script started at ####################"
date
echo
echo


echo "Prepare to download $COMICS1 $NAME1 comics..."
echo "Download from $PAGE1 to $LAST1 pages"
echo

while [ $PAGE1 -le $LAST1 ] # Пока не доберемся до указанной последней страницы
  do
    wget -p $SITE/$COMICS1/$PAGE1 # Загружаем страницу
    echo "Page $PAGE1 downloaded"
    echo "HavePage=$PAGE1" > $COMICS1.ini # Сохраняем ее номер в инишник
    PAGE1=`expr $PAGE1 + 1` # Топаем к следующей
  done

echo "Download $COMICS1 $NAME1 comics completed!"
echo
echo


# То же самое для второго комикса
echo "Prepare to download $COMICS2 $NAME2 comics..."
echo "Download from $PAGE2 to $LAST2 pages"
echo


while [ $PAGE2 -le $LAST2 ]
  do

    wget -p $SITE/$COMICS2/$PAGE2
    echo "Page $PAGE2 downloaded"
    echo "HavePage=$PAGE2" > $COMICS2.ini
    PAGE2=`expr $PAGE2 + 1`
  done

echo "Download $COMICS2 $NAME2 comics completed!"
echo
echo


# Приступаем к сортировке первого комикса
echo "Prepare to sort $COMICS1 $NAME1 comics..."
echo "Move comics from $DOWNDIR/$SITEDIR/$INSITEDIR/$AUTHOR1/$COMICS1 to $PICTUREDIR/$NAME1 folder"
echo


# Перебрасываем все jpg из папки его загрузки в папку с картинками, в подпапку этого комикса
find $DOWNDIR/$SITEDIR/$INSITEDIR/$AUTHOR1/$COMICS1 -name \*.jpg -exec mv {} $PICTUREDIR/$NAME1 \;

echo "Move $COMICS1 $NAME1 completed!"
echo
echo


# То же самое для второго комикса
echo "Prepare to sort $COMICS2 $NAME2 comics..."
echo "Move comics from $DOWNDIR/$SITEDIR/$INSITEDIR/$AUTHOR2/$COMICS2 to $PICTUREDIR/$NAME2 folder"
echo

find $DOWNDIR/$SITEDIR/$INSITEDIR/$AUTHOR2/$COMICS2 -name \*.jpg -exec mv {} $PICTUREDIR/$NAME2 \;

echo "Move $COMICS2 $NAME2 completed!"
echo
echo


# Прибираем за собой
cd $DOWNDIR
rm
-r $SITEDIR

echo "Trash removed!"
echo
echo
echo


exit 0

Aug. 9th, 2012

Дистрибутив

Хотел сегодня обновить систему, установить Ubuntu 12.04. Скачал дистрибутив amd64 для своего процессора Intel i7, записал на флешку. Довольный собой, загружаюсь с нее, появляется окно, в котором нужно выбрать установку или "живой" диск. Окно появляется, но в нем ничего нет, ни кнопок, ни текста... Работает только курсор и кнопка reset)) Думал, что из-за странной системы "флешки" - внутренний картридер, подключенный к USB + карточка microSD. Попробовал записать на диск - то же самое. Ладно, скачал дистрибутив i686, хотя б 32-х разрядный, думаю, заработает точно. Не... та же фигня... Непонятно, почему. Буду ждать Ubuntu 12.10, благо, недолго осталось))
Tags:

Previous 10