суббота, 5 марта 2016 г.

О базах и инструментах

Ковырясь с разными базами, внезапно начинаешь все больше ценить Firebird и особенно IBExpert. Firebird не дает тебе стрелять себе в ногу а IBExpert чертовски удобная среда.

вторник, 8 сентября 2015 г.

Ubuntu 12.04 и внезапно кончившеся место

В один прекрасный осенний день ничего не предвещало страшного, как вдруг зазвонил телефон. 
-"у нас чего то почта ошибку пишет при присоеденении файла". 
-"гм.... а файл нормальный ?"
-"да открывается нормально, но при попытке присоеденить пишет ошибку"

четверг, 21 мая 2015 г.

Проброс паралельного порта (lpt) в VirtualBox

VirtualBox достаточно хорошая система виртуализации и в последних версиях (4.3.28) позволяет пробросить разное из хост системы в гостеву. Много чего кроме паралельного порта. Вернее его можно пробросить через VBoxManager и если хост система Windows. 

Задача стояла пробросить паралельный прорт из Linux хост системы в Windows гостя (для заливки шрифтов на принтер Zebra). После непродолжительного гугления был найден следущий рецепт : http://blog.my1matrix.org/2013/04/parallel-port-on-virtualbox.html

Но так как там на иностранном языке :) вот вам вольный перевод на русский :

Откроем терминал и поглядим если у нас нужные нам устройства:

dmesg | grep parport

Если в выводе есть что то похожее то нам повезло :

[   10.303217] parport_pc 00:08: reported by Plug and Play ACPI
[   10.303261] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
[   10.422795] lp0: using parport0 (interrupt-driven).

 
Нам интересны строчки с parport0 а так же мы видим привязку к lp0

Устанавливаем паралельный порт в виртуальную машину. Виртуальная машина должна быть сосздана и установленна. Все операции выполняются на не запущенной машине.

VBoxManage modifyvm SM --lptmode1 /dev/parport0 
VBoxManage modifyvm SM --lpt1 0x378 7

 Здесь SM - это имя нашей машины а parport0 и 0x378 и 7 мы взяли из вывода выше.

Возможно придется добавить разрешения для на порт. 
Таже выполняем следующие команды :

VBoxManage setextradata SM "VBoxInternal/Devices/parallel/0/LUN#0/Config/DevicePath" /dev/parport0 
VBoxManage setextradata SM "VBoxInternal/Device/parralel/0/LUN#0" HostParallel
VBoxManage setextradata SM "VBoxInternal/Device/parralel/0/Config/IOBase" 0x378
VBoxManage setextradata SM "VBoxInternal/Device/parralel/0/Confgin/IRQ" 7
Последнее что возможну нужно сделать это выгрузить модуль устройства

rmmod lp 

Данное действие нужно что бы система отдала порт виртуалке. 






понедельник, 17 ноября 2014 г.

Первое впечатление о Oculus Rift

Опробовал в кототком тесте данное устройство. Впечатления противоречивые. На обычные очки не одеть. Можно конечно подогнать линзами на самом устройстве но это не всегда удобно. Использовать устройство стоя без страховки сложно. Организм начинает считать, что что то не то происходит и соотвественно реагировать. Возможно сидя было бы проще и удобнее. Без системы как в "Газонокосильщике" использовать сложно и чревато. 
Вот как то так.

четверг, 27 марта 2014 г.

Себе на заметку: Определение номера колонки в JTable по которой произошол клик мышью.

В одном из проектов понадобилось переключать внутрению логику обработки редактирования данных в JTable в зависимости от клика на колонки.
В результате получилось следующее :

 JTable grid.getTableHeader().addMouseListener(new HeaderClick()); 

вешаем слушателя на заголовок таблицы.

класс HeaderClick выглядит следующим образом:

class HeaderClick implements MouseListener {

        @Override
        public void mouseClicked(MouseEvent me) {
            if (me.getSource() instanceof JTableHeader){
                TableColumnModel cl=((JTableHeader) me.getSource()).getColumnModel();
                if (cl.getColumn(cl.getColumnIndexAtX(me.getX())).getHeaderValue().toString().equals("Брутто")){
                    Glu.setCFG("CardSpecDirection", "brutto");
                    cl.getColumn(cl.getColumnIndexAtX(me.getX())).setHeaderRenderer(null);
                   
                }

            }

        }
 номер колонки по заголовку которой мы кликнули получаем с помошью -
cl.getColumnIndexAtX(me.getX())  т.е. me.getX() - это положение мыши и по положению мыши мы получаем номер колонки в заголовке.
 

вторник, 25 февраля 2014 г.

Себе на заметку: загрузка и выгрузка файлов с FTP

Загрузка файлов с FTP сервера

import os
import ftplib
# сохранем файлы по маске и ftp сервера
# из корня в папку expath
def copyData(expath,ftp_srv,user=None,passw=None,mask='.txt'):
    conn=ftplib.FTP(ftp_srv,user,passw)
    dir_res=[]
    conn.dir('.',dir_res.append)
    files=[f.split(None,8)[-1] for f in dir_res if f.startswith('-')]
    print files
    for f in files :
        if f.find(mask)!=-1:
            outf=open(expath+os.sep+f,'wb')
            try:
                conn.retrbinary('RETR %s' % f,outf.write)
            finally:
                outf.close()
    conn.quit()
Сохранение файлов на FTP сервере

import ftplib
import os

local_file=os.listdir('./exp')

ftp_srv='192.168.1.1'
user='ftp'
passw='1234'
# каталог на FTP сервере куда мы закидываем данныне remote_path='xt1'

conn=ftplib.FTP(ftp_srv,user,passw)

if len(remote_path)!=0:
    conn.cwd(remote_path)

for l in local_file:
    print l
    f=open('./exp/'+l,'rb')
# вот ради это все остальное и затевается     conn.storbinary('STOR '+l,f)
    f.close()
    pass

conn.quit()

пятница, 24 января 2014 г.

Рабочее место официанта..

Вот примерно такой дизайн у рабочего места официанта для кассовой системы Unicash. (Делается под Touch Screen)