sobota, 5. november 2011

Avtomatizacija

Še ne tako dolgo nazaj sem pisal o Chromu, zaznamkih, aplikacijah oz. o hibridu. V zadnji različici (v15) so odstranili zavihek z zaznamki a še vedno lahko potegnemo zaznamek med aplikacije iz vrstice z zaznamki. A situacija ni idealna - ikona je majhna (favicon) ostalo je belina in naziv ni ustrezen, običajno je kar celoten naslov.
Problem lahko rešimo z izdelavo hibrida ampak to ni preveč praktično. Potrebno je poznati postopek, sintakso in semantiko manifesta. Poleg tega pa je potrebno še ročno zmanjšati sliko. Takšen proces kar kriči po avtomatizaciji.
Izdelal sem preprosto namizno WPF aplikacijo po vzorcu MVVM z uporabo vmesnika ICommand. Takšen način popolnoma loči predstavitveni nivo od poslovne logike. V datoteki za grafičnim vmesnikom se nahajajo samo inicializacije pa še to ni potrebno, če imajo konstruktorje brez parametrov. Aplikacija pa je zlepljena z Ninject-om (Dependency injection framework).

Vmesnik in koda zadaj.
Aplikacija najprej prebere datoteko z zaznamki, ki se skriva v mapi kjer je nameščen Google Chrome. Zaznamki so zapisani v JSON obliki in jih je potrebno deserializirati v objektni model. Model si lahko generiramo s pomočjo pretvornika json2csharp. Dobljeni model lahko potem optimiziramo in pobrišemo polja, ki nas ne zanimajo. Tako dobimo enostavnejši podatkovni model.

Branje zaznamkov.
Za pretvorbo lahko izberemo samo en zaznamek naenkrat. V nadaljevanju poljubno dopolnimo zaznamek in izberemo sliko - slika je obvezna!

Urejanje in izbira slike.
Aplikacija nam sliko pretvori v ikono velikosti 128x128px in potem generira datoteko z "aplikacijo".

Namestitev "aplikacije".
Na namizju se ustvari mapa v kateri je *.crx in *.pem. V primeru, da se nam ni prikazalo potrditveno okno za namestitev še enkrat potrdimo naslov v naslovni vrstici (izberemo in pritisnemo ENTER).  Obnašanje se razlikuje glede na kanal (Stable, Beta, Dev, Canary). Možno je, da deluje tudi preprosto vlečenje datoteke *.crx v okno brskalnika.

Končni rezultat.
Spletne strani postajajo aplikacije, meja se briše. Zato naj bodo lepo pomešane med seboj. Pogrešam pa možnost izdelave map in enostavnega urejanja. V tem primeru bi lahko vrstico z zaznamki kar umaknil.

torek, 4. oktober 2011

Counter-Strike: Source (CSS)

Vse se je začelo leta 2004 s spodnjim napovednikom.


To je potegnilo za seboj nakup novega računalnika, ki je bil zmožen poganjati Half-Life 2.

Navijalske komponente

In smo igrali. Krneker, mongo,veiztex in kayz1. Štirje cimri iz Veluščkove 1c v Mariboru. Od tod tudi ime "klana" [cimer].

krnekerjeva razlaga


Iiyama 17" flat, Logitech MX510, Sennheiser headset na de_aztec, Maribor, 2005
CSS sprej
Skupnost se je začela najprej oblikovati na Joker forumu, kasneje pa na slocss.com.

Najprej se je igral piratski CSS (EMP0R!O) na WhiteWolf strežniku (WhiteWolf [LANT3] postavljen na Barton 3200+, 1GB rama), ki je bil postavljen v študentskem domu v Mariboru. Kasneje to več ni bilo možno zato je bilo potrebno kupiti Half-Life 2. Naročil sem ga preko spletne trgovine Igabiba. Kupil sem dva izvoda Half-Life 2 in en izvod Half-Life.

One bullet? Ja kaj? Ja sej!

Kasneje so se pridružili še ostali kolegi. Imeli smo tudi CSS strežnik [cimer].si. Na žalost je bil deležen DDOS napada konkurence in ga je bilo potrebno umakniti. Krivci so bili verjetno "klan" L4M3RZ oz. njihov vodja VonKroFF.

VonKroFF
[cimer].si DDOS
Kasneje se je razširil Ventrilo in tam smo začeli preživljati cele dneve. Takrat vodilni in edini CSS klan na sceni je bil #source.si. Bili so celo vodilni na ClanBase. Takrat so igrali: dd, opti, obeah, Morpheus, Malecky, bossek. Kasneje so vladali sE (senseless esports, prej aie.si): casper, GizmO, Jaromir, affe in hanibal.

Tudi sam sem nekaj igral klansko. Najprej #9hp.s! kasneje pa niGh. Na koncu pa -Infected Gaming-.

niGh gaming
Najboljše mi je šlo na začetku, ko smo igrali na cl_interpolate "0". Obstaja celo tema na forumu, ki je namenjena meni. Takrat je bilo zelo popularno skalpiranje.

Trofeja Manti
Leta 2006 sem igral tudi v ALL STAR ekipi.

ALL STAR tekma 2006
Zgornjo sliko je naredil FreestY, ki je bil štiri leta kasneje praktično moj cimer.
Običajen dan takrat najboljše opiše spodnja slikica.

Leksikon
O ja, bili smo hudi G33KI.

1337

Demotov običajno nisem snemal zato se tudi ni nič ohranilo. Ostali so samo trije videoposnetki, ki sem jih združil v kratek filmček (izberite HD kvaliteto).


Tako ali drugače sem igral z vsemi našimi najboljšimi CSS igralci: Jaromir, hanibal, zeus, Raid3n, oldBoy, diXon, heart_maker, HEROOO...

Mozirjan

Na koncu bi omenil še !nsane Evolution, ki so sicer bili 1.6 klan a nič zato. Sestavljali so ga igralci kot so Drug-L0rd, xsonic, Dante, Major, Brother, Haze, obeah, DavorKO, maestro, Gogi, Rey, yun1, Gin0, B1lson, local, Sajko, eewo ipd. Še vedno veljajo za najboljši slovenski Counter-Strike klan.

xsonic, Drug-L0rd, Dante, eewo, brother, Haze
Zabavno se je bilo potopiti v tiste čase in se spominjati zabavnih prigod. Potem pa se je to končalo in bilo je potrebno nadoknaditi zamujeno na fakulteti. Še vedno pa občasno odigram kakšno igro na javnem strežniku. Na koncu pa se je vedno potrebno ozreti nazaj in se spomniti začetkov.

Za konec pa je potrebno dodati še legendarno povezavo PWNED.NL.

ARJAVKO (Insane Knife Killer) in s w 1 z y - Over and Out.

petek, 30. september 2011

Unboxing Food - Calamares apanado fritos

Tokrat bolj za šalo kot zares prispevek o razpakiranju dostavljene hrane. Splet je poln takšnih videoposnetkov. Seveda ne gre samo za hrano ampak praktično za vse kar ima embalažo. Običajno gre za kakšne elektronske naprave in z njimi povezane dodatke. Ljudje običajno ne marajo takšnih posnetkov a vseeno pridejo prav, ko se sami odločamo za kakšen nakup.


Ko si človek zaželi dostave hrane na dom je v precejšni dilemi. Manjka mu dosti informacij s pomočjo katerih bi se lažje odločil. Običajno imajo dostavljavci hrane slabo opisano ponudbo in je za naročnika težko oddati naročilo, če nima praktičnih izkušenj z lokalom. Obstaja možnost, da lokal sploh nima spletne strani. V primeru, ko pa jo ima, pa gre samo za seznam jedi. Brez slik, količin in mnenj uporabnikov. Če pa slike so, pa so simbolične in nimajo dosti veze z dejanskim stanjem.


Sploh v študentskih letih se ogromno naročuje hrano na dom, ker je praktično in hitro. Poglejmo na primeru v kakšni obliki bi si sam želel imeti predstavljeno ponudbo. Takšne predstavitve bi pisali uporabniki (v našem primeru študenti). To bi se lepo dopolnjevalo s spletnim portalom študentske prehrane a ne bi se bilo potrebno omejevati samo na študente.



Naziv lokala
Cantante cafe center - DOSTAVA

Kontakt dostave
040 30 40 50

Naslov
Vetrinjska ulica 5,
2000 Maribor,
Slovenija

Lokacija

Pogled mesta


Cena
Vrednost obroka: 5,00 EUR
Vrednost doplačila: 2,37 EUR

Čas in način dostave
Približno ena ura. Dostava pred blok - ko so tam, pokličejo.

Delovni čas
Čas nudenja obrokov vsak delavnik: od 11:00 do 22:00
Čas nudenja obrokov ob sobotah: od 12:00 do 22:00
Čas nudenja obrokov ob nedeljah: od 12:00 do 22:00



Meni
Calamares apanado fritos
Dnevna solata
Sadje ali sladica

Slike

Dostava
Hrana

Skupna ocena
Hrana je okusna in topla. Tudi na pogled zgleda dobro. Vse skupaj se dobi v PVC vrečki in je pakirano ločeno. Zaradi tega tudi ne pride do mešanja hrane (solata, omaka itd.). Na solati je že kis in olje zato lahko potemni. Naročilo poteka gladko - nujno jim je treba povedati telefonsko številko saj ne dostavljajo do vrat - vsaj v blok ne. Čas dostave je okoli ene ure. Delovni čas je odličen. Naročilo pa sprejmejo tudi čisto ob zaključku delovnega časa.



Zaključek
Gostilna Tclub-Trust-DOSTAVA je lahko vzor vsem dostavljavcem hrane pri sprejemanju naročil. Vodijo namreč bazo uporabnikov. Ob naročilu je tako potrebno povedati samo priimek in kaj bomo naročili. To je vse. Brez narekovanja naslova, nadstropja in telefonske številke.


Dober tek.

sreda, 28. september 2011

Deset veličastnih

Policaj sredi noči zaustavi pijanca, ki opleta po pločniku.
"Kam pa greste ob tej nočni uri?"
Pijanec : "Na predavanje."
"Aja ? Kdo pa predava ob taki uri?"
Moja žena.

Že dve leti sem svobodni umetnik.
- In? Si že kaj prodal?
Sem. Najprej avto, nato pa še stanovanje.

Pride Ojdip v Bronx in na cesti sreča črnca ter ga pozdravi: "Yo brother!"
Črnc pa mu odvrne: "Yo motherfucker!"

Sreča Mujo v Ljubljani nuno in jo razbije na mrtvo, nato pa vpraša: "Šta je ninđa, danas nisi u formi?"

Nekega dne je v Slovenijo prišel na obisk Ruski predsednik Putin. Kučan mu razkaže celo Slovenijo vse njene lepote, znamenitosti in na koncu ga vpraša če hoče videti še kaj. In res Putin reče, da bi še rad pozdravil Vinka iz Renč. In to mu seveda ugodijo.
Naslednji mesec pa pride v Slovenijo na obisk Bush, ravno tako mu vse razkaže, in na koncu tudi on hoče pozdraviti Vinka in tudi njemu to uresničijo.
Vse to pa se je zdelo čudno šefu od Vinka. Kako da ga poznajo tako ugledni
možje in on mu odgovori pač da je prepotoval cel svet in ga vsi poznajo. Šef mu
pa ne verjame in se gre stavit da papeža pa ne pozna. In Vinko sprejme stavo in
se odpeljeta v Vatikan. Ko papež zagleda Vinkota mu steče v objem. Potem se
obrneta in vidita šefa kako nezavesten leži na tleh. Hitro stečeta tja in ga
predramita ter vprašata kaj je bilo. Ko šef pride k zavesti pove: vse sem
prenesel, da Vinka pozna Putin, Bush, Papež ampak ko je pa en Kitajec zraven
mene rekel: "Kdo je pa tisti z belo kapico na glavi ki objema Vinka?", to je bilo
pa preveč.


Name?
- Abdul al-Rhazib
Sex?
- Three to five times a week
No, no! I mean male or female?
...- Male, female, sometimes camel...
Holy cow!
- Yes. Cow, sheep... animals in general.
But isn't that hostile?
- Horse style, doggy style, any style!
Oh dear!
- No, no! Deer run too fast!

Mož: "Žena, dajva se igrati Big Brotherja."
Žena: "No, pa dajva."
Mož: "Govori Big Brother. Imaš dve minuti časa, da zapustiš hišo."


Slišal sem, da je tvoja žena dvojčica. Kako ju pa ločiš?
Brez težav. Moja žena je črnolaska, njen brat ima pa rjave lase.

Stari Arabec živi že več kot 40 let v New Yorku. Nekega jutra si zaželi, da bi na svojem vrtu posadil krompir. Ker je že star in šibkega zdravja, napiše pismo sinu, ki študira v Parizu: "Dragi Ahmed, zelo sem žalosten, ker ne zmorem posaditi krompirja na svojem vrtu. Ko bi bil ti tukaj, bi mi pomagal pri takšnih opravilih. Tvoj ljubeči oče.". Sin mu odgovori: "Dragi oče, prosim nikar se ne dotikaj ničesar na vrtu. Tam sem moral skriti TISTO stvar. Tudi jaz te imam rad. Ahmed". Ne mine niti dobra ura, ko hišo starega Arabca obkolijo FBI, CIA, marinci... Ped po ped prekopljejo celoten vrt. Presejejo vsako pest zemlje in nič ne najdejo. Očitno razočarani po več urah iskanja zapustijo prizorišče. Zvečer prejme stari Arabec sinovo sporočilo: "Dragi oče, vrt je sedaj sigurno v celoti preštihan in ne bo ti težko posaditi krompirja. Nažalost ti od tukaj nisem mogel kaj več pomagati. Tvoj Ahmed".

Zapadel je prvi sneg,  tovornjak se ustavi na semaforju. Blondinka vsa zadihana
potrka na okno.
Kamiondžija odpre, ona reče:
"Zdravo, sem Jana, tovor ti pada s kamiona, vse bos zgubil!"
Kamiondžija ne reagira, pelje naprej. Na naslednjem semaforju isto:
"Zdravo, sem Jana, ves tovor bos izgubil!"
Kamiondžija nič, pelje.
Spet semafor, spet blondinka, tokrat že zelo zadihana pravi:
"Zdravo, jaz sem Jana, tovor izgubljaš!!!"
Kamiondzija, živčno: "Ja sam Fikret, pada snijeg i sipam sol, pizda ti
materina!"

sobota, 24. september 2011

Obvladovanje virov

Kaj storiti, da bi bili na tekočem glede teme, ki nas trenutno zanima? Pa naj gre za novico, knjigo, film, glasbo, recept ali poljubno tematiko. V primeru, ko moramo zadevo nekako predelati oz. se je naučiti je mogoče dober začetek, da vzamemo v roke knjigo s to tematiko. To je lažje reči kot pa storiti. Knjig je veliko in so obsežne. Problem lahko predstavlja tudi format knjige, cena in dostopnost. Informacije potrebujemo tukaj in zdaj. Poleg tega morajo biti sveže kar pa je pri knjigah težko doseči. So pa dober začetek, da se seznanimo s temo.

Logični odgovor je seveda splet. V Google vtipkamo iskano geslo in začnemo pregledovati rezultate. Obliko in svežino informacij pa določimo na levi strani Google vmesnika. Za boljše rezultate je potrebno poznati naprednejše možnosti iskalnika.

Torej je to vse kar lahko storimo? Seveda ne. Poglejmo si še nekaj drugih možnosti s katerimi lahko pridobivanje informacij avtomatiziramo. Večina jih temelji na socialnih omrežjih. Najboljše informacije širimo ravno uporabniki.

Google Alerts
V polje vpišemo iskano geslo, določimo obliko, količino in frekvenco objav. Izbiramo lahko tudi način dostave. Lahko dobivamo elektronsko pošto ali pa se naročimo preko RSS.


Blogi, strani oz. RSS
Razni članki in blogi so dober vir informacij. Običajno so kratki in jedrnati. Informacije so sveže in praviloma dobro razložene. Običajno pa je zraven tudi povezava do izvornega vira. Najboljše jih je spremljati preko RSS bralnikov.

TweetDeck
TweetDeck je aplikacija za socialna omrežja, ki je dostopna na različnih platformah. Uporabili jo bomo na socialnem omrežju Twitter, ki je idealno za gradnjo našega interesnega grafa. Poglejmo si jo na brskalniku Google Chrome. Poženemo aplikacijo in zgoraj levo izberemo TweetDeck. V polje vpišemo geslo, izberemo tvite ali uporabnike in dodamo stolpec.




Google+
Komaj zdaj je spletni gigant v Google+ dodal možnost iskanja. Tam kjer smo prej lahko iskali samo osebe je zdaj možno iskati tudi gesla. Rezultat je skupek objav in oseb, ki imajo zvezo z iskanim geslom. Izbiramo lahko med najboljšimi in najnovejšimi. To iskanje potem shranimo in se bo samodejno posodabljajo. Postane nov tok informacij. V prihodnosti lahko pričakujemo še dosti več možnosti, saj gre za Google - kralja iskanja.

Zaključek
To je vse kar sem zaenkrat uporabil v praksi. Socialno omrežje Facebook takšnega iskanja ne omogoča. Ocenjujem, da ga niti ne bo, ker gre za socialni graf in ne interesni. Za sledenje interesov sta primernejša Twitter in Google+.
Najboljše se je držati naslednjega zaporedja za obdelavo tematike:

  1. Google za seznanitev s temo in iskanje gradiva.
  2. Knjigo za študiranje tematike.
  3. Bloge, strani oz. RSS na stopnji, ko tematiko že poznamo.
  4. Socialna omrežja pa so zadnja poljudna stopnja. Tukaj gre za dobre prakse, ekstremno uporabo, izvirne ideje oz. za zelo dobro poznavanje.
  5. Znanstveni članki. Teoretično in matematično obdelani problemi, študije in eksperimenti. Na tej stopnji se oblikujejo smernice za prihodnost.
  6. Še več bi? :) Če si prišel tako daleč si ekspert na tematiki in bolje zate, da od tega tudi dobro živiš.

nedelja, 4. september 2011

Hibrid

Nov zavihek (New Tab) v Google Chromu postaja vedno bolj uporaben. Aplikacije, zaznamki, najbolj obiskane strani in nazadnje zaprte strani so možnosti, ki so na dosegu roke. Velike ikone, zavihki in velike stranske navigacijske tipke so kot nalašč za zaslone občutljive na dotik. Omogoča urejanje aplikacij v skupine (zavihke), ki jih je možno tudi poljubno poimenovati.

Aplikacije
Najbolj obiskane strani lahko povlečemo med aplikacije, obratno pa ni mogoče. Škoda je, da za zaznamke tega ni mogoče storiti. V prihodnosti bo to verjetno omogočeno a ikona spletne strani je premajhna. Kot takšna pa bi zelo izstopala med lepo oblikovanimi aplikacijami. Še bolj pomembno pa je, da bi lahko poljubno kombinirali aplikacije in zaznamke na želenem zavihku. Chrome si namreč zapomni zadnji uporabljen zavihek in je privzeto izbran ob odpiranju novega zavihka.

Zaznamki
Kombinacijo aplikacij in zaznamkov na enem zavihku pa je vseeno mogoče doseči. In to celo z lepimi in velikimi ikonami. Najlažje je pobrskati po Chromovi spletni trgovini. Če smo našli iskano spletno stran med aplikacijami jo moramo samo še namestiti in postaviti na želeni zavihek. Večino aplikacij zaenkrat tako ali tako predstavlja samo zaznamek za spletno stran.

V primeru, ko pa ustrezne aplikacije ne najdemo, pa jo moramo napisati sami. Postopek je precej enostaven.

  1. Na namizju ustvarimo mapo s poljubnim imenom.
  2. V mapo dodamo sliko, ki bo predstavljala ikono aplikacije/zavihka.
  3. Sliko pomanjšamo na 128px širine (lahko tudi 64px). Priporočljivo je ohraniti razmerje slike.
  4. Samo še ustvarimo datoteko manifest.json. Za začetek naj bo prazna.
Manifest datoteka predstavlja opis aplikacije v JSON formatu.
{
    "name": "IME APLIKACIJE",
    "description": "OPIS APLIKACIJE",
    "version": "RAZLIČICA APLIKACIJE",
    "icons": {
        "128": "IME IN KONČNICA SLIKE"
    },
    "app": {
        "urls": [
            "http://SPLETNI NASLOV/"
        ],
        "launch": {
            "web_url": "http://SPLETNI NASLOV/"
        }
    }
}

V manifestu poljubno spremenimo polja.
  1. Poimenujemo aplikacijo. Ime bo prikazano na zaznamku. Npr.: Podnapisi.NET
  2. Kratek opis aplikacije. Npr.: Baza podnapisov za filme in serije
  3. Vpišemo različico. Npr.: 0.1.
  4. Relativno pot do slike (ikone). Ime in končnica. Npr.: icon_128.png
  5. Celoten spletni naslov. Npr.: http://www.podnapisi.net/
  6. Shranimo spremembe.
Vse mora biti napisano v narekovajih.

Sedaj je potrebno aplikacijo samo še zapakirat. Dobiti je potrebno datoteko z imenom aplikacije in .crx končnico. Datoteka je pravzaprav samo podpisana ZIP datoteka, ki vsebuje manifest in ikono. Ne moremo pa je samo zazipati in spremeniti končnico, ker ne bo podpisana.

Datoteko lahko zapakiramo preko Google Chroma. Pod Orodja > Razširitve (Tools > Extensions) je možnost pakiranja razširitev (Pack extension). Samo poiščemo mapo, ki smo jo na začetku ustvarili na namizju.
Druga možnost pa je, da to storimo preko ukazne vrstice.
C:\Users\UPORABNIK\AppData\Local\Google\Chrome\Application\chrome.exe --pack-extension=C:\Users\UPORABNIK\Desktop\IME_MAPE_NA_NAMIZJU

Polji UPORABNIK spremenimo v trenutno uporabniško ime računalnika. Ime mape na namizju pa je mapa, ki smo jo ustvarili na začetku. Google Chrome ne sme teči v ozadju!

Če je šlo vse po načrtih bi nas morali na namizju pričakati dve novi datoteki z imenom aplikacije. Razlikujeta se samo v končnici. CRX je datoteka, ki jo potrebujemo. PEM pa predstavlja privatni ključ, ki ga potrebuje razvijalec za posodabljanje aplikacije/razširitve v Chromovi spletni trgovini.

Sedaj nam ostane le še zadnji korak, da .crx datoteko povlečemo v odprt Google Chrome brskalnik. Namestitev je potrebno samo še potrditi in že se naša aplikacija pojavi med ostalimi aplikacijami. Potrebno je še vedeti, da se tako nameščena aplikacija ne bo samodejno posodobila na ostalih povezanih Google Chrome brskalnikih. Razlog je to, ker je nismo namestili iz spletne trgovine.

Nekaj podobnega pa lahko dosežemo tudi z namestitvijo Speed Dial razširitve. Tako nov zavihek postane podoben tistemu pri Operi.

ponedeljek, 29. avgust 2011

Hobotnica

Gledam svojo vrstico z zaznamki. Lepo je urejena. Kar potrebujem imam na dosegu enega ali dveh klikov. Vsak zaznamek vodi k novi izkušnji, vsebinam, zabavi ali delu. Potem začnem razmišljati širše. Poskušam si vizualizirati na katere načine sem vpet v splet. Koliko povezav nudi podatke in koliko informacije? Zabava ali resno delo? Kaj mi določene zadeve sploh koristijo? Za boljši občutek izbrišem nič hudega sluteči zaznamek. Vem, ni imelo smisla, ampak sem.
Začnem pogledovati proti zagonskemu meniju. Katere programe imam zagnane? Katere pripete v hitri meni? Foobar in LINQPad, vse ostalo je povezano s spletom. Od tega je samo LINQPad neposredno namenjen resnemu delu. Kje pa so ostali programi za delo? V mapi, na namizju. Stran, da ne bi po nesreči kliknil.
Na namizju me iz strani gleda koledar, pod njim pa vremenar. Zaupam samo prvemu. Drugi je odvisnik od interneta. Ostale mape na namizju vsebujejo resno programje. Urejanje, programiranje, risanje, montiranje, načrtovanje, razvoj...
Treba je biti pošten do sebe. Vse kaže, da je v prvi vrsti zabava. Jasno, saj gre za domači računalnik. Bolj zanimivo pa je pogledati vse te kanale, ki vodijo do mene.
V ta namen sem na hitro narisal diagram organizacije.


Zadeva niti ne zgleda tako kritična. Zahvala gre Google Reader-ju, ki je agregator za novice. Za pokritost komunikacijskih protokolov pa skrbi Digsby. Vsak skrbi za centralizacijo svojega področja. Seveda pa nista vsemogočna. Google Reader je najboljši za spremljanje portalov/blogov, ki ne generirajo veliko vsebine. Če mu predstaviš npr. 24ur.com, postane neobvladljiv, to pa nima smisla. V teh primerih se je treba naročiti na bolj specifične RSS-e. Za hiter pregled pa kar zaznamek. Na drugi strani pa Digsby tudi ne more ponujati vsega iz vseh svetov. Podprt ni recimo Skype. Svojo elektronsko pošto sem uspešno centraliziral s povezavo vseh računov v Gmail. Za ustvarjanje vsebin je tu samo Blogger. Razni spletni forumi so sicer odličen vir informacij a nisem nikjer posebej aktiven.
Med socialnimi omrežji pa imamo tri kandidate. Facebook za bolj privatne zadeve. Twitter za deljenje povezav in občutkov. Najmlajši, Google+, pa je hibrid obeh.

Problem
Iz sheme je razvidno, da so problematična socialna omrežja in klepeti.

Rešitev
Pri klepetu se je potrebno znebiti MSN dinozavra. Poskušal bom počasi prestavljati kontakte v Google Talk.
Socialna omrežja pa so bolj komplicirana. Najlažje bi se odkrižal Twitterja. Je zelo neoseben, ne uporablja ga dosti znancev, sledim pa predvsem tehnološkim novicam. Twitter služi predvsem mojim interesom, področju.  Večina teh twitterašev pa je že na Google+. Prehod bo trajal nekaj časa a ocenjujem, da bo Google+ API zadevo pospešil. Potem bo namreč možno pošiljati vsebine na vsa omrežja hkrati. Pogrešal pa bom možnost iskanja v TweetDecku a tudi to lahko reši Google+ API.
Facebook je trd oreh zaradi socialnega grafa. V bistvu si kar nekako priklenjen zaradi vseh stikov. Ampak zadeva je daleč od rožnatega. Zelo malo je pravih vsebin, ljudje so naveličani in zato niso dosti aktivni. Že dolgo nisem objavil nič osebnega, večinoma naključne domislice. Večina uporablja Facebook kot Twitter. Na takšen način bo Facebook izzvenel in postal rumeni tisk našega življenja. Pogrešal pa bi dogodke, ki dejansko povezujejo ljudi.

Sklep
Vse ima dobre in slabe strani. Skupni imenovalec pa je Google. Iz skice je razvidno, da pokriva vsa področja. Je to dobro? Se je pametno navezati samo na enega? Tega ne moremo vedeti. Kaj lahko se v prihodnosti zgodi, da bo Googlov ekosistem postal v neki meri plačljiv. Pokazal bo čas. V tem trenutku je to pametna poteza. Sploh, če upoštevamo še trg mobilnih telefonov in tablic. Google zelo dobro pokriva vse komunikacijske kanale. Trenutna situacija je takšna, v prihodnosti pa lahko pridejo novi igralci in nova pravila. Že dolgo je tega, ko je Reporter Milan rekel: "PAZITE SE KITAJCEV". Mi pa smo se smejali...



nedelja, 28. avgust 2011

Evolucija

Dolgo, dolgo je že tega... A? Odkar sem nazadnje nekaj napisal. V tem času se je zgodil Google+, kar je vplivalo na celoten Googlov ekosistem. Ampak ne bom pisal o G+, čeprav se težko zadržujem, da ne bi. Omenil sem ga samo zato, ker so te spremembe vplivale tudi na tale Blogger. Enotna grafična podoba v kombinaciji z minimalističnim oblikovanjem. Vse to izraženo z najnovejšimi tehnologijami. Gradi se stabilna osnova za operacijski sistem v oblaku. Uporabljali ga bomo prej kot si lahko mislimo. Zakaj? Ker ga že uporabljamo.
No, tudi o tem nisem hotel pisati. Kaj pa potem? Blogger ima novo podobo in vmesnik, jaz pa hočem to samo preizkusit. Ok, ok, priznam, to je vse. Nič pametnega nimam za napisat.

Da pa bo vsaj nekaj vsebine bom tole objavo povezal s prvim odstavkom. S programjem, ki nam je toliko časa služilo. Čisto preprostim, vsakodnevno uporabljanim namiznim programjem.

Zbral sem par programov, ki jih trenutno uporabljam, in pogledal kaj sem uporabljal pred tem.

Št.StandardTrenutno
1.Mozilla FirefoxGoogle Chrome
2.Winampfoobar2000
3.BS PlayerGOM Player
4.WinRAR7-Zip (Teme)
5.NotepadNotepad++
6.Adobe ReaderGoogle Chrome
7.MSN MessengerDigsby
8.DAEMON ToolsPowerISO
9.BitTornadouTorrent
10.Adobe PhotoshopPaint.NET
11.Nero Burning ROMImgBurn

Zaključki so jasni. Stare tehnologije se umikajo novim, grafični vmesniki so poenostavljeni in minimalni. Programje postaja odprtokodno - brezplačno. Z drugimi besedami, preproste stvar s katerimi lahko naredim vse kar sem počel že prej. Zadostujejo mojim potrebam. Pravzaprav so skoraj vsi boljši od svojih izvirnikov.

Kje dobiti še več takšnih alternativ obstoječim programom? Tukaj je lepo urejena spletna stran, ki je namenjena ravno temu.

Aja, novi Blogger. Intuitivno, uporabno in všečno. Pogrešam integracijo z Google+. No pa smo spet tam.

torek, 5. april 2011

Javin naštevni tip – Enum

Redko kaj napišem pa čeprav imam kar nekaj idej – lenoba pač. Nekatere ideje so že vsaj delno realizirane a do objave tukaj bi bilo potrebno vložiti še nekaj dela. Tokrat bom pisal o Javinem naštevnem tipu in njegovi uporabi.

Naštevni tip v Javi je dosti močnejši kot pa v ostalih programskih jezikih (C, C++, C# …). Precej so podobni razredom. Lahko imajo konstruktor, metode, spremenljivke in implementirajo vmesnike. Pred časom sem jih uporabil za izdelavo grafičnega vmesnika za vnos virov(referenc) pri člankih ipd. Cilj je bil narediti karseda enostavno strukturo teh virov, ki bo enostavna za vzdrževanje in pregledna. Za začetek je potrebno definirat grafične gradnike, ki se bodo prikazali na zaslonu. Vnosna polja, izbira datuma, kombinirano polje ipd.

To naredimo z naštevnim tipom, ki mu definiramo abstraktno metodo, ki vrača Swing komponento. Pri vsakem definiranem tipu to metodo prepišemo, da nam vrača ustrezno komponento. Definiramo si vse različne tipe komponent in njihove izpeljanke, ki jih bomo kasneje rabili.
package javaenumblog.sourcecontrol;

import java.awt.Component;
import javax.swing.JComboBox;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//define all kind of types/components with contents and variations

public enum Type {

    TEXTFIELD {

        @Override
        public Component getComponent() {
            return new JTextField(30);
        }
    },INITIAL
    {

        public Component getComponent()
        {
            return new JTextField(5);
        }
    },
    AUTHORS {

        @Override
        public Component getComponent() {
            JTextArea textArea = new JTextArea(1, 40);
            textArea.setLineWrap(true);
            return textArea;
        }
    },
    EDUCATION {

        @Override
        public Component getComponent() {
            return new JComboBox(new Object[]{
                        "B.Sc", "M.Sc.", "PHD"
                    });
        }
    };

    public abstract Component getComponent();
}
V naslednjem koraku definiramo vse različne tipe in njihove nazive. Kasneje jih bomo uporabili za sestavljanje vseh različnih vrst referenc. Definiramo si dve spremenljivki in pripadajoči metodi, ki vračata njuno vrednost. Konstruktor pa nam predpisuje ustrezno obliko naštevnega tipa. Za lepšo kodo statično uvozimo imensko področje. To nam omogoča direktno delo s tipi brez kvalifikatorja.
package javaenumblog.sourcecontrol;
//staticly imported enums may be used without qualification
import static javaenumblog.sourcecontrol.Type.*;
//define fields (title and type)
public enum SourceTypes {

    articleTitle("Article title:", TEXTFIELD),
    authors("Authors:", AUTHORS),
    publicationTitle("Publication title:", TEXTFIELD),
    year("Year:", INITIAL),
    initials("Initials:", INITIAL),
    obtainedUrl("Page URI:", TEXTFIELD),
    education("Education:", EDUCATION),;
    protected String label;
    protected Type type;

    SourceTypes(String label, Type type) {
        this.label = label;
        this.type = type;
    }

    public String getLabel() {
        return label;
    }

    public Type getType() {
        return type;
    }
}
V naslednjem koraku pa že definiramo vse različne oblike referenc na vire. Sestavimo jih iz polj, ki smo jih določili zgoraj. Vsaki referenci pa dodamo tudi naziv. To naredimo na podoben način kot smo zgoraj le da tukaj potrebujemo polje vseh potrebnih vnosnih polj. Prepišemo pa tudi metodo toString() tako, da nam bo vračala samo oznako. Pravtako statično uvozimo naštevni tip za čistejšo kodo.
package javaenumblog.sourcecontrol;

import static javaenumblog.sourcecontrol.SourceTypes.*;

//construct sources you need from sourceTypes
public enum Sources {

    WEBARTICLE("Web magazine - article", new SourceTypes[]{
authors, articleTitle, publicationTitle, year, obtainedUrl
}), ARTICLE("demo article", new SourceTypes[]{
initials, education, articleTitle
});
//and more...
    protected String label;
    protected SourceTypes[] sourceTypes;

    private Sources(String title, SourceTypes[] sourceTypes) {
        this.label = title;
        this.sourceTypes = sourceTypes;
    }

    public SourceTypes[] getSourceTypes() {
        return sourceTypes;
    }

    public String getLabel() {
        return label;
    }

    @Override
    public String toString() {
        return label;
    }
}
Sedaj je potrebno še napisati razred, ki bo izbrane komponente razporedil na grafični vmesnik in kasneje shranil ustrezne podatke k pripadajoči komponenti. Logiko poskušamo karseda ločiti od grafičnega vmesnika zato v konstruktor dobimo samo referenco na JPanel komponento. Na njo bomo izrisali vmesnik za vnos. V metodi za generiranje vmesnika pa se sprehodimo skozi vse gradnike, ki jih zahteva referenca in jih izrisujemo na panel v dvojicah (naziv, komponenta). Ker jih dodajamo kar absolutno moramo vsakemu določiti tudi meje preden jih dodamo. Ne smemo pozabiti tudi na ustrezne odmike. Da pa lahko za vsako polje vemo k kateri komponenti spada pa jih sproti dodajamo še v povezan seznam (LinkedHashMap) – vrstni red je pomemben! Seveda pa moramo napisati še metodo, ki nam bo nove vrednosti tudi prebrala iz ustreznih komponent. Tukaj se sprehodimo čez naš seznam dvojic (naziv, komponenta) in glede na tip komponente preberemo njeno vrednost. To naredimo kar na takšen način, ki sem ga že opisal TUKAJ. V tem primeru lastnosti in vrednosti izpišemo kar na standardni izhod.
package javaenumblog.sourcecontrol;
import java.awt.Component;
import java.util.LinkedHashMap;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class GUIGenerator {
    private JPanel panel = null;
    private LinkedHashMap<String, Component> mapComponent = new LinkedHashMap<String, Component>();
    private enum Classes {
        JTextField, JTextArea, JComboBox
    };

    public GUIGenerator(JPanel panel) {
        this.panel = panel;
    }

    public void generateInput(Sources types) {
        mapComponent.clear();
        if (types != null) {
            panel.removeAll();
            int Y = 20;
            for (SourceTypes sourceTypes : types.getSourceTypes()) {
                String labelTag = sourceTypes.getLabel();
                JLabel label = new JLabel(labelTag);
                label.setBounds(20, Y, label.getPreferredSize().width, label.getPreferredSize().height);
                Component component = sourceTypes.getType().getComponent();
                panel.add(label);
                component.setBounds(200, Y, component.getPreferredSize().width, component.getPreferredSize().height);
                panel.add(component);
                mapComponent.put(sourceTypes.name(), component);
                Y += 40;
            }
            panel.repaint();
            panel.revalidate();
        }
    }

    public void generateOutput() {
        for (String label : mapComponent.keySet()) {
            Component component = mapComponent.get(label);
            String sout = "Property: " + label + " ; value: ";
            String className = component.getClass().getSimpleName();
            switch (Classes.valueOf(className)) {
                case JTextField:
                    sout += ((JTextField) component).getText();
                    break;
                case JTextArea:
                    sout += ((JTextArea) component).getText();
                    break;
                case JComboBox:
                    sout += ((JComboBox) component).getSelectedItem();
                    break;
            }
            System.out.println(sout);
        }
    }
}
V zadnjem koraku pa še sestavimo enostaven grafični vmesnik, ki bo glede na izbiro v kombiniranem polju izrisal pripadajoč grafični vmesnik. Kombinirano polje vežemo na seznam, ki ga napolnimo iz naštevnega tipa. Naredimo nov objekt generatorja in mu dodamo panel. Ob spremembi izbire v kombiniranem polju preberemo za katero vrsto reference gre in izrišemo ustrezen vmesnik. Pri izpisu pa samo pokličemo metodo, ki smo jo prej napisali.



Pri zagonu programa nas pričaka podoben zaslon kot spodaj. V kombiniranem polju sta na voljo dve različni referenci, ki generirata različna vnosna polja.


S klikom na gumb Print pa se na standardni izhod izpišejo nazivi in vrednosti kot smo določili pri posamezni vrsti reference.

torek, 25. januar 2011

Podnapis naš vsakdanji

Od mojega zadnjega prispevka je minilo že kar nekaj časa zato je bilo počasi spet nekaj spraviti skupaj. Tokratna tem je prevajanje podnapisov za filme. Da pa sem lahko sploh napisal tale prispevek sem moral najprej prevesti še zadnji film do konca. Niti ne vem kdaj sem ga začel prevajati a bo že kmalu kakšno leto verjetno. Preprosto se mi ga ni ljubilo dokončati. Zdaj pa sem se lotil in ga dokončal. Takoj pa sem napisal tudi tale prispevek, da bom imel vse kar rabim na enem mestu.

Motivacija
Glavni motiv za prevajanje je bilo utrjevanje in učenje Angleščine. A ni bilo nekega velikega učinka predvsem zaradi pomoči, ki nam je na voljo. Bodisi v obliki slovarjev, programov ali interneta. Ko prevedeš se ne ubadaš več s tem in greš dalje. Druga stvar je, da prispevaš nekaj nazaj v skupnost in tudi ostalim omogočiš karseda kvalitetno spremljanje filmov v maternem jeziku. Seveda pa je pomembno tudi obvladovanje Slovenščine saj omejen besedni zaklad zelo poslabša prevod. Pomemben faktor je bila tudi spletna stran Podnapisi.net, ki je združevala vse boljše prevajalce in gradila skupnost.

Kriteriji
Glede izbora filmov se nisem preveč obremenjeval. Izpolnjenih je moralo biti samo par osnovnih pogojev. Jasno, da podnapis še ne obstaja oz. da ga nihče ne prevaja. Nisem maral priganjanja zato sem si izbiral starejše in pozabljene filme. Tako sem prevajal, ko se mi je ljubilo in me še vedno ni nihče prehitel. Film je seveda moral biti že na disku in moral je biti dobro ocenjen. Potem pride pa še mogoče najpomembnejši kriterij – izvoren podnapis mora imeti čim manj vrstic. Predpogoj za to je seveda podnapis v Angleščini, ki se ga je dalo časovno sinhronizirat s filmom, ki sem ga imel.

Koristne stvari


Postopek
Najprej sem poiskal najboljši angleški podnapis za film, ki sem ga želel prevesti. Vsak podnapis sem uskladil z verzijo filma kolikor se je dalo natančno. To sem delal v SRT formatu saj nam je najbolj razumljiv. Nato sem podnapis spremenil v SUB format, ki ga je prebavljal moj program za prevajanje. Ko sem končal s prevodom sem ga spremenil nazaj v SRT in dodal morebitne manjkajoče dialoge, naslov in prevajalca na koncu. Vse skupaj sem potem pravopisno preveril v programu Microsoft Word. Na koncu pa sem si film ogledal s svojimi podnapisi in še popravil napake, ki sem jih sproti opazil. Filma prej nikoli nisem pogledal zato je ta korak zelo pomemben, da vidiš prevod v širšem kontekstu. Prevod sem potem naložil na Podnapisi.net.

Prevodi
Spodaj je seznam prevodov z vsemi povezavami. To je tudi dejanski vrstni red prevodov. Za zdaj bom nehal prevajati saj sem dosegel normo (10 prevodov) po disku pa se mi ne valja nobeden star film. Mogoče pa še kdaj.