Radina radionica

Programiranje

Evidencija pacijenata za opštu praksu

Aplikacija je namenjena manjim privatnim lekarskim ordinacijama i pretstavlja listu pacijenata o kojima se na računaru čuvaju podaci. Aplikacija stoji sakrivena na levoj strani ekrana, a pojavljuje se kada strelicom miša priđete uz ivicu ekrana. Levim klikom na ime pacijenta se otvara direktorijum sa podacima, a desnim klikom se dobija prozor sa istorijom dijagnoza.

Podaci o pacijentima su organizovani kao izveštaji o pregledima u standardnim word dokumentima u doc ili docx formatu, a podrzava i txt. Potrebno je samo da u svakom izveštaju stoji linija koja počinje sa "Dg." da bi aplikacija prepoznala red u kome je navedena dijagnoza.

Ako Vas zanima da je probate, pošaljite mi e-mail, pa ću Vam poslati demo verziju besplatno. Cena aplikacije, ako Vam se dopadne, je 70 eura po računaru, jednokratno. Naravno, pomogao bih Vam, ako ustreba, da sve podesite. Korištenjem "Cloud servisa" (Hubic, Dropbox, Google drive, One drive...) jednostavno je podatke deliti na više računara.

Aplikaciju koristimo u našoj privatnoj lekarskoj ordinaciji Porodični lekar Slavica vec dosta dugo. Dostupna je za windows i za linux.

IOT projekat

Tehnologija poznata pod nazivom "Internet Of Things" je koncept koji, između ostalog, dozvoljava povezivanje i kontrolu kućnih uređaja. U tu svrhu sam napravio skup "opensource"projekata pod zajedničkim nazivom "Ujagaga IOT".

Počelo je kao želja da napravim nekoliko LED lampi koje bih mogao na jedno dugme da isključim. Sada imam, preko lokalne WiFi mreže povezane LED lampe, termostat, termometar, NTP sat koji se sinhronizuje preko interneta, ruter preko kojeg mogu da pristupim svim uređajima iz tog skupa, multimedijalni daljinski za računar i android aplikaciju koja služi za listanje svih uređaja iz Ujagaga IOT projekata. Svaki od uređaja ima svoj web interfejs pomoću kojeg se konfiguriše nakon što se na njega povežete preko web browser-a na lokalnoj mreži. Uređaji koriste čip ESP8266. Gotove module kupujem na AliExpress-u za oko 2 evra po komadu, a za napajanje koristim najjeftinije punjače za mobilni telefon. Napon po potrebi povećam koristeći jeftine DC/DC konvertore.

Svaki od uređaja sa ESP8266 modulom, nekonfigurisan daje sopstveni "WiFi Hotspot", a nakon povezivanja, kroz web interfejs je moguće konfigurisati uređaj da se poveže na lokalnu mrežu.

1. LED lampa dozvoljava regulaciju jačine osvetljenja ("dimmer")

2. Termometar samo prikazuje izmerenu temperaturu.

3. Termostat može da preko RELE-a upravlja nekakvim grejčem (kalorifer, bojler...)

4. Ruter može da se konfiguriše da na e-mail šalje eksternu IP adresu rutera, tako da možete da pristupite Ujagaga IOT Rruteru preko interneta i upravljate Vašim termostatima, lampama,... (Još nije završen)

5. "Lazy control" je aplikacija za daljinsku kontrolu multimedije računara. Ovoj aplikaciji se pristupa preko IP adrese računara na portu 4211.

6. "Ujagaga IOT Browser" je Android aplikacija preko koje možete da izlistate sve uređaje na lokalnoj mreži iz "Ujagaga IOT" projekata. Na taj način ne morate da imate sačuvane IP adrese uređaja niti moraju da budu statičke.

7. NTP sat se sinhronizuje preko interneta, tako da nije potrebno nikakvo podešavanje. Upravlja sa dva step motora koja okreću kazaljke. Krajnji dizajn sata je na korisniku.

 

Lazyfier daljinski upravljač za računar

Tražio sam na Google Play Store-u mutimedijalni daljinski upravljač sa minimalnim brojem komandi za PC sa podrškom za Linux. Sve što sam našao, nije startovalo dovoljno brzo jer sam želeo mogućnost da pauziram film ili muziku za nekoliko sekundi kad neko pozove Skype-om ili telefonom.

Zato sam sam napisao Python server i Android Aplikaciju. Aplikacija sadrži 2 razlicita rasporeda dugmića i nekoliko različitih boja za biranje izgleda. Inicijalno je potrebno pokrenuti server koji napravi konfiguraciju i prijavi korisniku naziv servera (ime mašine). U podešavanju Android aplikacije treba to ime izabrati. Na serveru može da se doda i lozinka kako bi se server zaštitio od neželjenog pristupa.

Server simulira unos sa multimedijalne tastature. Ako želite da testirate, na donjim linkovima možete preuzeti Android applikaciju, Linux ili Windows server. Dostupan je i izvorni kod klijenta i servera.

Android aplikaciju sam testirao na Android verziji 5.1 i 4.2. Trebalo bi da radi na bilo kojoj vecoj od 4.0.2.

Mali saveti: Pritiskom na taster za isključivanje se zatvara aktivni prozor, a dužim pritiskom se isključuje računar. Slično se ponašaju tasteri za premotavanje, kratki pritisak prebacuje na sledeći fajl, a dugi premotava. Prilikom korišćenja funkcije upravljanja kursorom (MOUSE), početna tačka je sredina ekrana kad se telefon postavi u horizontalni položaj. Naginjanjem telefona se pomera kursor.

Server sam testirao na Linux verziji XUbuntu 16, na 64-bitnom Windows7 i Windows 10. 

Linux version  Preuzmite Lazyfier server za Linux

windows version  Preuzmite Lazyfier server za Windows

Android app  Preuzmite Lazyfier klijent APK za Android  ili  instalirajte sa Play Store-a

Podsetnik za račune

Sve svoje račune plaćam preko interneta sa kućnog računara. Povremeno neki račun kasni i bude zaboravljen. Napisao sam aplikaciju u kojoj mogu da pribeležim koje sam račune platio čim ih platim. Posle datuma konfigurisanog za proveru, ako neki od računa nije plaćen, po uključenju računara iskoči obaveštenje. Klikom na dugme za konfiguraciju, otvara se tekstualni fajl koji sadrži spisak računa koji treba ispraviti prema potrebama. Plaćenim računima se u tom fajlu dodaje datum plaćanja. Na početku tekućeg meseca se konfiguracija za prethodni mesec arhivira, a novi fajl se kopira sa očišćenim datumima kako bi se proces ponovio za tekući mesec. Ako ne podešavate datum provere, podrazumevani je 19-ti u mesecu.

Možete preuzeti aplikaciju za Linux ili Windows, kao i izvorni kod u Python-u.

Pravljenje USB uređaja

 

Odricanje od odgovornosti

U daljem tekstu je sažeto moje skromno iskustvo vezano za pravljenje hardvera na Atmel mikro kontrolerima i softverske podrške za USB uređaje na linux i windows operativnim sistemima. Tekst je namenjen da služi kao početnički vodič za pravljenje USB uređaja. Nadam se da će Vam skratiti vreme potrebno za rešavanje problema na tom polju. Ovde nije navedeno sve što treba da znate o USB uređajima. Ni u kom slučaju ne mogu da tvrdim da je moj tekst primenljiv na Vaš konkretan problem, niti da neće doći do materijalne štete praćenjem ovih instrukcija. Koristite na sopstvenu odgovornost.

 

Uvod u USB standard

USB uređaj može da bude klase HID, CDC, Miš, HUB, Vaša specifična klasa… Najviše sam koristio CDC i HID.

CDC uređaj je jednostavan za komunikaciju. Na linux operativnim sistemima se prepozna bez problema kao serijski uređaj tipa „/dev/ttyACM0”, ali na windows-u je potrebno pripremiti i drajver da bi se video kao, recimo „COM4”. U ovom trenutku, pretpostavljam da Vam to zvuči komplikovano, ali srećom postoje programi koji to odrade umesto Vas. CDC uređaj možete koristiti iz gotovih programa kao što su na linux-u GTKTERM ili HTERM, a na windows-u PUTTY, HTERM,...

HID uređaj zahteva pisanje sopstvenog programa za komunikaciju jer niti operativni sistem niti gotovi programi znaju kako ste Vi implementirali komunikacioni protokol. To će zavisiti od toga kako pripremite firmver mikro kontrolera. Meni je najjednostavnije bilo da napišem program u Python programskom jeziku jer je dosta dobro dokumentovan i jednostavan za korištenje.

Ako izaberete uređaj tipa MIŠ ili Tastatura, operativni sistem će sam instalirati drajvere koje već ima i preuzeti kontrolu nad uređajem. Da bi ste ga koristili iz Vašeg programa, morate da nađete način da operativnom sistemu kažete da otpusti uređaj, kako biste ga Vi preuzeli. To još nisam radio, pa ne mogu da pomognem.

Svaki USB uređaj, ima tzv. deskriptor koji „Host-u“ govori o detaljima uređaja. Ako je deskriptor takav da se uređaj ne identifikuje kao standardni miš, tastatura ili neki drugi osnovni uređaj, windows će Vas pitati za drajvere. Možete da ne implementirate deskriptor u kom slučaju windows neće ništa prijaviti, pa će na Vama biti da instalirate odgovarajući drajver.

Ako koristite Microchip-ov kontroler i neku od njihovih biblioteka, MLA ili Harmony, obično možete da nađete gotov drajver koji je već potpisan. Ako koristite Atmelov mikrokontroler više klase, priča je slična, ali ako upotrebite neki jeftiniji kontroler kao što je AtTiny, on nema  USB interfejs, pa možete USB funkcionalnost postići VUSB bibliotekom za softwersku emulaciju. VUSB biblioteka dolazi sa gotovim primerima koji se dosta jednostavno modifikuju.

 

CDC konfiguracija

Iako je najjednostavnija za komunikaciju jer ne morate da pišete dodatnu aplikaciju nego koristite gotov program za komunikaciju preko serijskog porta, na windows operativnom sistemu može da stvori dosta problema ako ste uređaj implementirali koristeći VUSB biblioteku. Drajver koji može da se nađe na netu ( http://www.recursion.jp/prose/avrcdc ) nije digitalno potpisan. Da bi ste koristili taj drajver na 64-bitnoj verziji windows-a, morate prilikom starta držati F8 i u boot meniju izabrati “Disable driver signing enforcement”. Naravno, možete koristiti i neki dodatni program za to. Na 32-bitnoj verziji windows 7, trebalo bi da prilikom instalacije drajvera možete da samo odaberete “Install anyway” kad prijavi da nije digitalno potpisan.

Na linux-u CDC uređaj jednostavno radi. Ipak imajte na umu, CDC uređaj je u stvari tretiran kao modem, pa može da prođe i do 10 sekundi dok modem manager osveži spisak prisutnih uređaja i Vaš uređaj bude dostupan.

 

HID konfiguracija

Iako nema puno gotovih programa za komunikaciju, relativno je jednostavno napisati aplikaciju za Vaš uređaj. Ima dosta gotovih primera za HID komunikaciju, a Python ima gotove module za to. Ono što je bitno da znate je da postoji dosta različitih biblioteka za rad sa HID uređajima (pisanje drajvera i aplikacije koja koristi taj drajver) a ovde ću navesti samo LibUSB jer pruža najjednostavnije rešenje.

Na linux operativnom sistemu, libusb biblioteka dolazi već instalirana i nema nikakavih problema sa korištenjem drajvera. Dovoljno je da napišete aplikaciju koja komunicira preko libusb sa Vašim uređajem.

Na windows-u, situacija je nešto komplikovanija. Potrebno je instalirati libusb-win32 paket. On dolazi sa InfWizard-om koji će Vam pomoći da napravite digitalno potpisani drajver za windows.

 

Hardverski identifikatori

Svaki USB uređaj ima hardverski identifikator proizvođača (Vid) i proizvoda (Pid). Oni se konfigurišu u samom firmveru mikrokontrolera. Gotovi primeri dolaze sa nekim slobodnim identifikatorima. Vi možete da ih promenite, ali problem nastaje ako se poklope sa nekim drugim uređajem koji koristite. Zbog toga se plaća sertifikacija identifikatora, kako bi se održala jedinstvena tabela uređaja i kako bi operativni sistemi umeli da uključe odgovarajuće drajvere. Za komercijalne urećaje je zato razvoj nesto skuplji, ali za hobi uređaje koje svakako koristite samo Vi, ostavite Vid koji dobijete uz primer, a slobodno promenite Pid. Na taj način ćete biti sigurni da niste potrefili proizvođački identifikator nekog komercijalnog uređaja, a možete da pravite više uređaja za ličnu upotrebu.

 

Pisanje aplikacije

Kao primer izrade USB uređaja može da Vam posluži moj USB puls generator za koji je kompletan projekat sa šemom i firmverom kontrolera dostupan besplatno. Nakon napravljenog uređaja, potrebno je pobrinuti se za drajver. Ako ste se odlučili za uređaj klase CDC, ostaje vam da pokrenete program za serijsku komunikaciju (HTERM, PUTTY, GTKTERM,...), a ako ste se odlučili za uređaj klase HID, neophodno će biti da napišete neku aplikaciju kako bi ste sa njim komunicirali.

Uz gotove primere firmvera, obično dolazi i primer aplikacije u C programskom jeziku. Meni je Python bio jednostavniji jer ima gotove module za to, pa je pisanje aplikacije svedeno na mnogo manje linija koda. Ovde ću navesti najbitnije delove koda kako bih Vam skratio vreme potrebno da ostvarite komunikaciju sa Vašim uređajem.

Koristio sam Python2.7, a nešto osnovnog koda bi izgledalo ovako:

from usb import core, util

VENDOR_ID = 0x16c0
PRODUCT_ID = 0x05dc
dev = None
dev_status_changed = False


def connect_to_dev():
    global dev
    global VENDOR_ID
    global PRODUCT_ID

    dev = core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)

    if dev is not None:
        dev.set_configuration()


def query_device(msg, value=0):
    global dev
    global dev_status_changed

    REQUEST_TYPE = 0x20
    HID_SET_PROTOCOL = 0x0b

    if dev is None:
        connect_to_dev()
        if dev is None:
            return None
        else:
            dev_status_changed = True

    cfg = dev.get_active_configuration()
    endpoint = cfg[(0, 0)][0]

    result = None

    try:
        dev.ctrl_transfer(REQUEST_TYPE, HID_SET_PROTOCOL, (value << 8) | msg, 0, 0)
        response = dev.read(endpoint.bEndpointAddress, 1)
        result = response[0]
    except core.USBError as e:
        print e

    # release the device
    util.release_interface(dev, endpoint)
    if result is None:
        if dev is not None:
            dev = None

    return result


my_msg = 0xAB
my_value = 0xCD

print query_device(my_msg, my_value)

Workspace switcher

Kod kuce i na poslu koristim linux, Xubuntu sa XFCE desktop okruženjem. Ono ima opcije za korištenje više radnih prostora ("workspace"), ali je teško razlikovati na kojem se trenutno radi.

Napisao sam skript koji prebacuje izmedju različitih radnih površina i u istop vreme menja boju panela radi lakšeg prepoznavanja aktivne radne površine. Samo pozovite skript sa brojem workspace-a koji želite. Na primer:

wswitch 1

da bi ste se prebacili na workspace broj 1. Brojevi idu od nule. bckgnd0.png, bckgnd1.png,... se koriste za postavljanje izgleda panela. Njih možete menjati po želji.

Script se oslanja na paket wmctrl, pa sam napravio debian paket koji može da se instalira i usput instalira i wmctrl. Izvorni kod i instalacioni debian paket za ovaj skript se nalaze na mom Github repozitorijumu. Prethodno spomenute slike za panel se nakon instalacije nalaze u "HOME" direktorijumu u podfolderu ".wswitch".

Shellmail

Shellmail je automatski skript namenjen brzom slanju obaveštenja preko mail-a.

Ponekad moram da čekam dugo vremena da se neki proces na računaru završi, pa podesim da mi šalje e-mail kada završi.

Na linux-u ima više opcija, ali svaka zahteva konfigurisan smtp server. Treba dosta vremena da se sve podesi dok proradi onako kako želite, pa i onda nije jednostavno poslati mail. Komanda ume da bude prekomplikovana da bi se zapamtila posle dužeg vremena. Zato sam napisao skript koji sadrži sva podešavanja za slanje preko gmail-a, a mozete to i da promenite kako Vam odgovara.

Nakon što podesite dva fajla koja Vam skript otvori prilikom instalacije, možete poslati email pozivanjem komande "shellmail"

korištenje: shellmail [ < opcija > < vrednost opcije > ] [ < "Opciona poruka za slanje" ili putanja do tekstualnog fajla > ]

primeri:

shellmail (šalje prazan mail predefinisanom primaocu sa predefinisanim subjektom)

shellmail "Neki tekst poruke" (šalje datu poruku predefinisanom primaocu)

shellmail -r vaše.ime@gmail.com "tekst poruke" (šalje željenu poruku željenom primaocu)

shellmail -c (otvara konfiguraciju)

shellmail -h (pomoć)

 

Ceo kod i debian paket su dostupni na mom Github repositrijumu.

Quiet At Work

Ima dosta aplikacija na ovu temu, ali sam zeleo da napisem svoju jer na mom novom telefonu druge nisu radile. Lokacija se pokazala kao nepouzdana jer ne radi na svakom telefonu dobro, a i cesto je iskljucujem radi stednje baterije. WiFi ukljucujem na poslu, pa sam napisao aplikaciju koja preko detektovanih WiFi mreza odlucuje kad sam na poslu i utisava ton telefona kako nebih smetao kolegama. Mozete je skinuti sa play store-a. Dostupan je i sors kod na github-u.