Kategorijos archyvas: Programavimas

Klaidingų duomenų paieška Tabibitosan metodu

data_islandDarbe iš nutolusių įrenginių kelis kartus per valanda surenkam įvairių meteorologinių jutiklių duomenis. Mums ganėtinai svarbu, kad įrenginys veiktų tvarkingai ir visą laiką fiksuotų realią informaciją. Žinoma, visko pasitaiko: lūžta ryšio įrenginiai ar valdikliai, dingsta elektra arba sugenda pavieniai jutikliai. Kaip identifikuoju viso įrenginio veikimą, jau esu rašęs ankščiau poste apie hierarchines SQL užklausas. Su pavienių jutiklių veikimu-neveikimu yra šiek tiek sudėtingesnė situacija. Kartais pasitaiko, kad sugedus vienam ar kitam įrenginio jutikliui, įrenginio valdiklis „užsiciklina“ ir kiekvienos tolimesnės iteracijos metu gražina paskutinę iš jutiklio surinktą reikšmę, kas labai iškreipią suvokimą apie įrenginio duomenų kokybę. Skaityti toliau

Hibridinė JasperServer ataskaita iš Oracle ir MS SQL vienu metu

dibert_dbTaip jau buvo, taip nutiko, kad prisireikė vienoje ataskaitoje dinamiškai „sukirsti“ Oracle ir MS SQL Server duomenis. Klasikinis variantas šioje situacijoje yra vienos DB duomenų replikavimas/sinchronizavimas į kitą. Toks variantas gal ir yra pats geriausias/patikimiausiais, tačiau jis toli gražu nėra trivialus. Pirmiausia, aš pats nei vienos iš tų DB neadministruoju, todėl nagų kišti į vidų kaip ir negaliu. Antra, abiejų DB duomenų modeliai yra skirtingi, todėl norint gražiai perkelti duomenis, reiktų juos perskaičiuoti ir „pritraukti“ iki vienos iš DB struktūros. Kol DBA keiksnodami bando įsivertinti darbų apimtis, nusprendžiau užduotį atlikti Jasper priemonėmis. Tiesa pasakius, kol pats nepabandžiau net nebuvau tikras, ar Jasperis iš vis gali imti duomenis iš kelių skirtingų DB vienu metu, bet tai atrodė visai logiška, nes Jasperis leidžia vienoje ataskaitoje manipuliuoti keliais tos pačios DB Dataset’ais. Jei jau galima kurti skirtingus datasetus, kodėl gi būtų negalima jų kurti iš skirtingų DB šaltinių? Skaityti toliau

Automatinis nuotraukų mažinimas

app-resizeme-512

Prisireikė darbe sumažinti krūvą kamerų nuotraukų. Nuotraukų, švelniai tariant, daug. Labai daug, apie 6 mln. vnt. (~1 TB).  Visos nuotraukos tvarkingai sudėliotos į hierarchinę aplankų struktūrą pagal kameros pavadinimą, metus, mėnesį ir dieną, todėl „prieiti“ iki konkrečios nuotraukos nėra labai jau paprasta. Dar įdomiau, kad ne visų kamerų vaizdus reikia mažinti. Kai kurie kamerų vaizdai jau yra reikiamo dydžio, ir juos papildomai apdorojant būtų be reikalo gaištamas laikas. Ką daryti..? Aš radau tris skirtingo sudėtingumo šios užduoties įgyvendinimo variantus.  Skaityti toliau

Tekstinių failų paieška ir apjungimas į vieną CSV su Python’u

import soul

Kolega paprašė susitvarkyti su viena kvaila užduotimi. Yra aibė direktorijų, kurių viduje yra krūva subdirektorijų, kuriuose kiekvienoje yra po tekstinį failiuką „info.txt“. Kiekviename failiuke yra 3 eilutės teksto (timestamp, id numeris ir klasifikatorius). Reikia iš visų tų failiukų suformuoti vieną gražų CSV failą. Rankomis tokia užduotis praktiškai neįmanomą (kolega per pusdienį „surinko“ į vieną failą gal tik 250 failiukų), bet su python ji yra išties labai lengva.  Skaityti toliau

JasperServer date input parameters: kaip nustatyti dar gudresnias „default“ vertes

jasper_parametraiSeniai rašiau, kaip JasperServer ataskaitoms suprogramuoti standartines (angl. default) ataskaitos parametrų reikšmes. Po to radau, kaip lengvai ir paprastai galima įjungti ir išjungti SQL užklausos where sąlygas. Nusprendžiau kad iš šių dviejų „metodikų“ galima sukergti visai neblogą sprendimą automatiniam/rankiniam ataskaitų generavimui… Skaityti toliau

Dinaminis SQL užklausos „where“ sąlygų keitimas

sql_geekSituacija dažnai sutinkama kasdieniniame darbe. Turim select’ą su daug where sąlygų. Vieną kartą select’ą tenka įvykdyti su vienomis sąlygomis, antrą kartą su kitomis, trečią – su visomis išskyrus vieną ir pan. Jeigu select’as trumpas, bėdos nėra: užkomentuojam nereikalingas eilutes ir tiek. Jeigu select’as yra labai ilgas, su daug join’ų, union’ų ir daug daug kintančių sąlygų, problema pasidaro gan rimta. Galima lengvai susipainioti ar kažką praleisti. Taip pat toks „užkomentavimo“ metodas nelabai tinka automatiniam ataskaitų generavimui. Na bet pasirodo yra gan paprastas ir patogus where sąlygų įjungimo/išjungimo būdas. Skaityti toliau

TARDIS modeliuko modifikacija

IMG_8793

Esu didelis Doctor Who gerbėjas. Nesu toks pamišęs, kaip „tikrieji“ Whovian‘ai, kurie mintinai moka visus dialogus, atsimena senąsias serialo serijas, žino aktorių biografijas ir pan., bet net ir man ilgą laiką norėjosi turėti nors kokios Doctor Who atributikos. Iš ebay pirkti buvo brangu, o Lietuvoje  serialų atributikos net su žiburiu nesurasi, todėl ilgą laiką taip ir gyvenau svajodamas apie kokį nors menkniekį. 2014 m. pabaigoje svečiavausi Stoholme, kur visai netikėtai ir tuo labiau visai neplanuotai vienoje komiksų parduotuvėje užtikau Doctor Who kampelį. Tą kart spjoviau į visus suvalkietiško kraujo nuogąstavimus ir įsigijau TARDIS ir Dalek’o modeliukus. Dalek’u likau labai patenkintas, o vat TARDIS mano įgeidžių šiek tiek netenkino. Nors modelio kosmetinė išvaizda ir pagaminimo kokybė yra tiesiog ideali, tačiau TARDIS lemputę galima tik įjungti/išjungti, t. y. arba ji šviečia, arba ne, o ne pulsuoja, kaip turėtų. Na bet tai lengvai pataisoma..  Skaityti toliau

Flip-Dot Clock laiko sinchronizavimas su Aviete per Bluetooth

flip-dot clock synch

Persukdamas savo elektromechaninį laikrodį į vasaros laiką, pastebėjau, kad laikrodis skuba daugiau nei viena minute. Kadangi laikrodis surinktas kreivai – šleivai, gali būti, kad RTC veikimą įtakoja kokia nors elektromagnetinė interferencija ar pan. Per daug į tai gilintis patingėjau, nes prisiminiau, kad prie laikrodžio kaip tyčia yra prijungtas HC05 BlueTooth moduliukas, kuris leidžia laikrodžio laiką atnaujinti nuotoliu būdu, o tai yra puiki galimybė laiko neatitikimą nuo realybės išspręsti reguliaria laiko sinchronizacija su RPI, kuri savo ruožtu laiką gauna iš NTP serverioSkaityti toliau

Avietė: DHT22 duomenų atvaizdavimas

highcartsKaip jau rašiau ankščiau, prie savo RaspberryPi esu prisijungęs porą termometrų/higrometrų, kurių duomenis kas tam tikrą laiką saugau MySQL duomenų bazėje. Kaip man ir nepatiktų rašyti SQL užklausas, vis tiek norėtųsi namų „meteo stotelės“ duomenis matyti gražiu, suprantamu, grafiniu formatu. Taip pat būtų visai smagu turėti galimybė pasiekti tuos duomenis iš bet kurios pasaulio vietos internetu. Žodžiu, prisižiūrėjęs pavyzdžių internete, nusprendžiau surinktus duomenis atvaizduoti internetinėje naršyklėje grafiku, skalėmis ir tekstu. Skaityti toliau

Flip-Dot Clock

IMG_7319

Idėja susikonstruoti unikalų sieninį laikrodį mano galvoje kirbėjo gan seniai, tačiau iki šiol niekaip iki to „nepriėjo“ rankos. Be to, internetas yra pilnas kuo įvairiausių „nixie“, LED’inių, mechaninių, pneumatinių, hidraulinių ir kitokių laikrodžių, o man norėjosi kažko įdomesnio. Taip pat kaip ir kiekvienas tikras inžinierius esu didelis tinginys, todėl nenorėjau per daug vargti su mandromis konstrukcijomis ir kitokiais velniais, todėl ilgai laukiau reikiamo momento kol į rankas paklius kas nors, iš ko būtų galima pasidaryti laikrodį. Šis momentas atėjo buvusiame darbe, kai į mano rankas pakliuvo elektromechaninė (angl. flip-dot) švieslentė. Skaityti toliau