пятница, 21 мая 2010 г.

Сетевой сканер (usb+saned)

Устав от сканирования в консоли, я задался целью настроить "сетевой" сканер у нас в офисе. "Сетевой" в данном случае означает, что операция сканирования должна быть доступна с любого компьютера без применения специальных знаний администрирования linux. Эту задачу можно решить двумя способами:
  1. web gui для sane: phpSANE, sanewi, linux_scan_server.
  2. сетевой демон saned.
Функционал web интерфейсов крайне урезан по сравнению  с десктопными утилитами и зачастую требует "поработать напильником", поэтому в данном обзоре я подробно остановлюсь на описании процесса настройки saned.
(см. также другие способы сканирования при помощи sane)

Исходные данные:
  • USB сканер - МФУ HP LaserJet 3030
  • сервер - Ubuntu 8.04.4 LTS i386
Алгоритм:
  • sudo apt-get install sane
  • Убедиться, что сканер доступен из под пользователя root и функционирует:
    • $ sudo scanimage -L
      покажет список подключенных сканеров. В моем случае результат был следующим:
      device `hpaio:/usb/hp_LaserJet_3030?serial=00CNBF041264' is a Hewlett-Packard hp_LaserJet_3030 all-in-one
    • $ sudo scanimage --resolution 100 --format=pnm > test_im.pnm
      в результате в test_im.pnm должна быть сканированная картинка
  • Убедиться, что сканер доступен из под пользователя saned и функционирует. Метод тот же, что и для пользователя root. Если сканер не определяется (у меня так и было), то нужно добавить пользователя saned в группу scanner.
  • Добавить в конец /etc/inetd.conf строку:
    sane-port  stream  tcp  nowait  saned.saned  /usr/sbin/saned saned
    ВАЖНО: нужно проверить, что sane-port определен в /etc/services и, что saned действительно находится по пути /usr/sbin/saned (grep sane-port /etc/services; which saned).
  • Перезапускаем inet.d
    sudo kill -HUP `ps ax|awk '/inetd/ {print $1}'`
  • Проверяем, что saned слушает соответствующий порт:
    telnet localhost 6566
    Если подключиться удалось, что можно продолжать дальше. Возможно придется внести соответствующие изменения в правила iptables.
  • Настраиваем клиентскую машину. Устанавливаем xsane. Добавляем адрес сервера отдельной строкой в файл /etc/sane.d/net.conf
  • Проверяем, что сканер доступен с клиентской машины:
    scanimage -L
    Если все хорошо, то результат должен быть примерно таким
    device `net:192.168.0.1:hpaio:/usb/hp_LaserJet_3030?serial=00CNBF041264' is a Hewlett-Packard hp_LaserJet_3030 all-in-one
  • Сканер готов к работе.
У saned есть одна особенность - он создает подключение по одному порту, а данные передает по другому. Поэтому, если у вас на сервере iptables настроен пропускать трафик только с известных портов, потребуется дополнительная настройка. В новых версиях saned есть опция data_portrange:
data_portrange = min_port - max_port
              Specify the port range to use for the data  connection.  Pick  a
              port  range  between 1024 and 65535; don't pick a too large port
              range, as it may have performance issues.  Use  this  option  if
              your saned server is sitting behind a firewall. If that firewall
              is a Linux machine, we strongly recommend  using  the  Netfilter
              nf_conntrack_sane module instead.

У меня на сервере стоит старое ядро 2.6.24-27, в котором нет модуля nf_conntrack_sane и старая убунта, со старой версией пакета sane, в которой нет этой версии. Ну и iptables настроен жестко, поэтому описанная мной схема у меня не сразу заработала :) Мне дополнительно пришлось скачать и собрать новую версию sane
  • git clone git://git.debian.org/sane/sane-backends.git
  • ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
  • make
  • make install
    или, если вы чтите ubuntu policy
    checkinstall --pkgname=sane --pkgversion=1.0.21-trunk --backup=no --default -D

воскресенье, 7 февраля 2010 г.

WireframeSketcher

I've spend a lot of time to find appropriate free tool to make a prototypes for web pages and desktop GUI, but without any noticeable success. And most of the odosh.com was prototyped in Inkskape and Gimp. It wasn't easy cause this tools not designed for prototyping - theirs main purpose to create and edit a vector and raster graphics, but not making mockups. I've heard about powerful tools for ms windows, but this os is considered only for hopeless cases, such as using some bank clients.

One of the most interesting free tool I was happen to find was DENIM. It is very funny and rather handy after some time spend to ready it's manual. But it has objective disadvantage - it is look like real handmade sketch.

Just before I've give up the idea to use professional tool to make mockups, Peter Severin point me his wireframesketcher. Today I've tried it and it gives me all that I ever need for prototyping: all UI components, alignment, grouping, exporting, creating reusable widgets and dozen other attractive features.

Here is my first prototype made with wireframesketcher eclipse plugin.

P.S. Special thank to Peter for the license key :)

среда, 27 января 2010 г.

Синдром эмоционального выгорания

Попробую поднять тему, не свойственную моему роду деятельности, но, думаю, что те из вас, кто руководит проектами или сам является программистом, поймут почему я решил об этом поговорить. А речь пойдет о так называемом "синдроме эмоционального выгорания" применительно к специалистам IT профессий, и в частности программистам.

Синдромом выгорания врачи называют серьёзное снижение работоспособности, сопровождающееся эмоциональным истощением и физическим переутомлением. Сопровождается этот синдром ухудшением самочувствия, потерей интереса к жизни, депрессиями. Первые работы по этой проблеме появились в США. Американский психиатр H.Frendenberger в 1974 г. описал феномен и дал ему название "burnout", для характеристики психологического состояния здоровых людей, находящихся в интенсивном и тесном общении с пациентами (клиентами) в эмоционально нагруженной атмосфере при оказании профессиональной помощи. Относительно недавно об этом синдроме начали говорить и применительно к программистам. Я попробую разобраться, в чем его специфика именно для близкой мне профессии.

При эмоциональном выгорании ухудшаются показатели качества и количества работы, увеличивается текучесть кадров. Сотрудники начинают избегать любой ответственности и сложных ситуаций, теряется лояльность к клиентам и организации. По данным Американского института стресса, профессиональное выгорание обходится США в 200 млрд. долл. в год.

Главной причиной этого синдрома считается психологическое, душевное переутомление, вызванное тем, что требования (внутренние и внешние) длительное время преобладают над ресурсами (внутренними и внешними).

В современном обществе бесстрастность и невозмутимость принято считать положительными качествами, а эмоциональность – признаком слабости. Многим кажется, что в программировании эмоциям нет места в принципе, и современные супермены программисты не плачут. Однако это не совсем так.

В том случае, когда эмоция есть (и, значит, есть потребность к действию), а человек не действует, ему приходится затрачивать энергию на подавление потребности действовать. При неоднократных повторениях подобных состояний человек перестает осознавать собственную эмоцию.

Хороший программист - существо импульсивно увлекающееся. Пришла в голову идея реализовать очередную астролябию, которая сама все меряет - нет тебе ни сна, ни покоя, пока ты её не сделаешь. Вышел новый движок/библиотека/API - надо их срочно попробовать, поиграться. Если в рабочем графике отсутствует время на такие занятия (большинство из них не связано с выполнением календарного плана), то такие эмоции дисциплинированный программист вынужден подавлять. Это вызывает негативные переживания. Подавляя и негативные эмоции тоже, человек постепенно становится бесчувственным. Психологи едины во мнении, что не осознаваемые эмоции не исчезают и становятся источником серьезных проблем.

Процесс выгорания начинается незаметно. Человеку становится свойственно забывание каких-то моментов (не закоммитился, пофиксил не то не там и не так, не ответил на письмо), сбои в выполнении каких-либо двигательных действий (уронил сервер, превратил продакшн в дев) и т.д. Первые признаки эмоционального выгорания – повышение уровня тревожности, связанного с чувством безвыходности и профессиональной беспомощности на фоне недовольства результатами своей деятельности, занижение оценки своих профессиональных качеств.

На следующей стадии наблюдается снижение интереса к работе, потребности в общении (в том числе и дома, с друзьями) нарастание апатии к концу недели, появление устойчивых соматических симптомов (нет сил, энергии, особенно к концу недели, головные боли по вечерам; увеличение числа простудных заболеваний; повышенная раздражительность)

В итоге - собственно личностное выгорание. Характерна полная потеря интереса к работе и жизни вообще, эмоциональное безразличие, ощущение постоянного отсутствия сил.

Факторами, способствующими прогрессированию этого синдрома являются: неопределенность целей деятельности, размытость профессиональных обязанностей, неясность результатов деятельности, нечеткость требований; пренебрежение собственными эмоциями и здоровьем; избегание праздников; неумение себя поощрять и фиксация на неудачах; неумение принимать похвалу; отсутствие других интересов; перфекционизм; сверхурочная работа; сидячий режим; страх потери рабочего места.

Наиболее часто рекомендуемыми способами борьбы с эмоциональным выгоранием являются: умение переключать себя на пассивное созерцание природы или предметов искусства, приятные воспоминания, творчество. Также общеизвестно, что физически здоровые люди гораздо легче переносят стрессовые состояния и психические нагрузки. В общем, все, что позволяет поднять себе самооценку, будет хорошим противодействием выгоранию. Так утверждают психологи. От себя добавлю, что следование принципам тайм менеджмента также очень положительно сказывается на эмоциональном состоянии.

В чем я вижу главную проблему выгорающих программистов? Выходом из кризиса самооценки хорошего программиста может быть только то, что его к этому кризису привело - получение красивого результата. Чем больше результатов, тем выше самооценка. Но постоянное получение красивых результатов принципиально не возможно. Каждая неудача увеличивает вероятность следующей неудачи. Замкнутый круг? Если процесс пустить на "самотек" - ДА. Думаю, что если использовать указанные рекомендации, то красивых результатов будет значительно больше, чем неудач и вероятность наступления синдрома эмоционального выгорания будет незначительной.

---
Источники: kv.by, psj.ru, healthplanet.by, health.mpei.ac.ru
P.S. Прошу прощения за отсутствие цитирования в моей компиляции из чужих и своих мыслей
P.P.S Спасибо жене, которая натолкнула меня на эти размышления и ознакомила с терминами

суббота, 14 ноября 2009 г.

МТС Коннект и Ubuntu

В нашем славном городе Таганроге появился 3G от МТС с безлимитным тарифом, поэтому задача настройки USB модема стала весьма актуальна.

Проблема автоматического определения модема заключается в том, что кроме функций модема продоваемое МТС устройство (в моем случае это HUAWEI Mobile Broadband E1550), также выполняет функции CD (в него встроена flash карта и при помощи технологии ZeroCD она видится как CD-ROM). Так вот, пока это устройство работает как CD-ROM оно не может работать как модем, поэтому для переключения в режим модема нужно извлечь этот CD - для этого можно кликнуть правой конопкой на этом CD и вырабть "извлечь". Что бы не делать этого постоянно, предлагается создать соответствующий udev скрипт. После того, как устройство распознано как USB модем, интернет подключение прекрасно создается при помощи штатных средств Network Manager (у меня Ubuntu 9.10 и в ней NM работает просто превосходно)

Метод настройки:

  1. Подключаем подем, ждем минуту, смотрим вывод lsusb:
  2. gorban@gorban-laptop:~$ lsusb |grep Modem Bus 002 Device 011: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem
  3. Подстрока "12d1:1001" - это idVendor:idProduct
  4. Добавляем соответствующее правило в udev, заменя выделенное на соответствующие ID:
  5. echo 'SUBSYSTEM=="usb", SYSFS{idProduct}=="1001", SYSFS{idVendor}=="12d1", RUN+="/lib/udev/modem-modeswitch --vendor 0x12d1 --product 0x1001 --type option-zerocd"' | sudo tee /etc/udev/rules.d/45-huawei1550.rules
  6. Извлекаем устройство и подключаем заново. Создаем при помощи Network Manager интернет подключение
Ну и для фанатов полезные команды модема:
echo -e "AT+CSQ\r">/dev/ttyUSBX — уровень сигнала в у.е. децибелах (для каждого модема это можно узнать в даташитах, обычно для GPRS/EDGE максимум 30, для 3G — 26) ответ можно увидеть в другом терминале — cat /dev/ttyUSBX
AT+CREG? — роуминг и регистарция в сети
AT+COPS? — информация о регистрации в сети (её тип, название и т.п.)
AT+CPAS — состояние (звонок, готовность к приёму команд и т.п.)
AT+CMEE? — формат вывода ошибок (AT+CMEE=<0-2> — изменение формата вывода ошибок, больше число — больше информации)
Точно также можно посылать смс-ки, но больно муторно. А чтобы более подробно узнать о командах нужно искать даташит на данный модем, или AT команды характерные для данного производителя.
AT+ZPAS? (тип оператора GSM/GPRS/EDGE/UMTS/HSDPA и тип сервиса голос/данные/голос+данные) AT+ZDON? — the name of local operator, the MCC of local operator, the MNC of local operator, the name of attributive operator, the MCC of attributive operator, the MNC of attributive operator, service domain (может отсутствовать), ROAM_STATUS (ROAM _NONE, ROAM _OFF, ROAM _ON)

Источники: launchpadforum.ubuntu.ruopenkazan

воскресенье, 14 декабря 2008 г.

пароль на lib.homelinux.org

Как это не пародоксально, но firefox под управлением OS Linux показывает окно авторизации к этому очень хорошему сайту в неправильной кодировке. Самое неприятное, что текст в этом окне является загадкой, отгадав которую вы сможете войти на сайт этой обширнейшей библиотеки. Что бы каждый раз не просить своих непросветленных знакомых работающих в OS Windows прочитать вам загадку, предлагается следующий код на python для решения этой надоедливой проблемы


#!/usr/bin/env python
import httplib2
(req,cont) = httplib2.Http().request('http://lib.homelinux.org')
wa = req['www-authenticate']
print wa.split('=')[1].decode('cp1251')

вторник, 12 июня 2007 г.

Open AI & Image Processing

Данная статья представляет собой список ссылок на открытые разработки по обработке изображений и искусственному интеллекту. Обзор составлен на основе проектов размещенных на sourceforge.net.

OpenCV

OpenCV (Open Source Computer Vision) is a library of programming functions mainly aimed at real time computer vision.

Example applications of the OpenCV library are Human-Computer Interaction (HCI); Object Identification, Segmentation and Recognition; Face Recognition; Gesture Recognition; Motion Tracking, Ego Motion, Motion Understanding; Structure From Motion (SFM); and Mobile Robotics.



RapidMiner (YALE) -- Java Data Mining

(aka YALE) data mining, machine learning, knowledge discovery, business intelligence in Java. 400+ operators: data mining incl. Weka,learning,preprocessing,validation,visualization. GUI,API,XML,analysis,knowledge discovery,databases,business intelligence

The VXL Project

A multi-platform collection of C++ software libraries for Computer Vision and Image Understanding.

LTI-Lib (C++ Computer Vision Library)

LTI-Lib is an object oriented computer vision library written in C++ for Windows/MS-VC++ and Linux/gcc. It provides lots of functionality to solve mathematical problems, many image processing algorithms, some classification tools and much more...

valenki

Processing monocrome images to analyse the morphology. Input: image. Output: skeleton of the picture or class of the recognized object. May function as OCR.

Free FingerPrint Imaging Software

Fingerprint Imaging Software -- fingerprint pattern classification, minutae detection, Wavelet Scalar Quantization(wsq) compression, ANSI/NIST-ITL 1-2000 reference implementation, baseline and lossless jpeg, image utilities, math and MLP neural net libs

GLipKit

GLipKit (GL Image Processing Kit) is a collection of image processing and computer vision algorithms performed on current programmable 3D graphics hardware for faster execution. The main focus is currently computational stereo.

Face Detector

Program to detect human faces on a digital picture. It uses a MLP neural net that receive relative distances from face distribution clusters of the image space. Written in C++. Requires newmat and libann libraries.

Pretext

A tool to extract text from any grayscale image. It can output this text in a number of ways, the simplest being an output image with just the graphical text in it. It can also output an XML file with co-ordinates of every character unit in the image.

FarSee

Farsee is a c++ implementation of cascaded face detection algorithm using integral image and adaboost training method. The implementation of adaboost is a generic library that able to classify any weighted positive and negative samples.

Handwritten Number Recognition

A handwritten number recognition system was developed by using image processing and neural network technique. The system was developed in Java. Other applications which make use of image processing and neural network technique will be published too.


Unified Image Manipulation Program

UIMP(Unified Image Manipulation Program) is an OS independent Image Processing system, which provides over 1000 algorithms and supports web online, console and GUI program.


ANIMAL - AN IMAging Library

Animal is AN IMAging Library written in C. Its simple API supports over 80 image formats, and is intended to make massive use of other image processing libraries. Animal aims at image analysis and recognition. It is mainly the C basis of the SIP toolbox.

FreeImage

FreeImage is a library project for developers who would like to support popular graphics image formats (PNG, JPEG, TIFF, BMP and others). Some highlights are: extremely simple in use, not limited to the local PC (unique FreeImageIO) and Plugin driven!

Amoeba

Amoeba is an implemenatation of a research paper titled "Fast and Accurate Edge-Based Segmentation with No Contour Smoothing in 2-D Real Images" (IEEE tran on Image Processing, July 2000).This is a completed work, hence no promises for support ;)

Gandalf vision and numerical library

Gandalf is a computer vision and numerical algorithm library, written in C, which allows you to develop new applications that will be portable and run FAST. Dynamically reconfigurable vector, matrix and image structures allow efficient use of memory.


Другие полезные ссылки

Software, Open Source Projects & Hardware
Open Directory Project
Computer Vision Homeрage


P.S.

В своей работе интенсивно использую пока только библиотеку OpenCV и Image Processing Toolbox для Matlab

My Delicious Tags