Long time no see …

Kategorija: Faks,Programiranje,Razno — Napisal ZeroCool, 22.5.2010 @ 21:53

Razlog … faks. Zadnje čase se ukvarjam z manipulacijo slik v Javi. Se pravi risanje histogramov, urejanjem kontrasta, enačenjem histograma ipd. Če bo mogoče komu koristila tale majčkena stvarca; funkcija sprejme BufferedImage in en integer (razlaga v komentarju kode), vrne pa sliko histograma velikosti 255×150.

Malce več razlage bom dopisal naslednjič, ko bo več časa : ).

  1.     // ############################################################################################### //
  2.     //                             DRAWING HISTOGRAMS, MAKING HISTOGRAMS                               //
  3.     // ############################################################################################### //
  4.  
  5.     /*
  6.      * Draw an image histogram
  7.      *
  8.      * Author: Boštjan Cigan (ZeroCool), some rights reserved.
  9.      * http://zerocool.area52.us
  10.      * Can be distributed as long as comments stay intact.
  11.      *
  12.      * Function call:
  13.      * BufferedImage histogram = drawHistogram(image, color)
  14.      *
  15.      * Where color is an integer which represents:
  16.      * 0 – Red
  17.      * 1 – Green
  18.      * 2 – Blue
  19.      * 3 – Average
  20.      *
  21.      */
  22.     public static BufferedImage drawHistogram(BufferedImage input, int color) {
  23.  
  24.         int[] histogramValues = new int[256];
  25.         int pixel = 0;
  26.         int fill = colorToRGBNoAlpha(255, 255, 255);
  27.  
  28.         switch(color) {
  29.  
  30.             case 0: {
  31.                 histogramValues = imageHistogram(input).get(color);
  32.                 pixel = colorToRGBNoAlpha(255, 0, 0);
  33.                 break;
  34.             }
  35.             case 1: {
  36.                 histogramValues = imageHistogram(input).get(color);
  37.                 pixel = colorToRGBNoAlpha(0, 255, 0);
  38.                 break;
  39.             }
  40.             case 2: {
  41.                 histogramValues = imageHistogram(input).get(color);
  42.                 pixel = colorToRGBNoAlpha(0, 0, 255);
  43.                 break;
  44.             }
  45.             case 3: {
  46.                 histogramValues = imageHistogramAverage(input);
  47.                 pixel = colorToRGBNoAlpha(0, 0, 0);
  48.                 break;
  49.             }
  50.         }
  51.  
  52.         int maxVal = findMaxValue(histogramValues);
  53.         BufferedImage histogram = new BufferedImage(255, 130, BufferedImage.TYPE_3BYTE_BGR);
  54.  
  55.         float drawValue = (float) (130.0/maxVal);
  56.  
  57.         int[] drawedValues = new int[256];
  58.         for(int i=0; i<drawedValues.length; i++) {
  59.             drawedValues[i] = (int) (histogramValues[i]*drawValue);
  60.         }
  61.  
  62.         for(int i=0; i<histogram.getWidth(); i++) {
  63.             for(int l=0; l<histogram.getHeight(); l++) {
  64.                 histogram.setRGB(i, l, fill);
  65.             }
  66.         }
  67.  
  68.         for(int j=0; j<histogram.getWidth(); j++) {
  69.  
  70.             if(drawedValues[j] > 0) {
  71.                 histogram.setRGB(j, Math.abs(drawedValues[j]-130), pixel);
  72.  
  73.                 for(int k=Math.abs(drawedValues[j]); k>0; k–) {
  74.                     histogram.setRGB(j, Math.abs(k-130), pixel);
  75.                 }
  76.  
  77.             }
  78.         }
  79.  
  80.         return histogram;
  81.  
  82.     }
  83.  
  84.     // Return a histogram containing average values from R, G, B channels
  85.     public static int[] imageHistogramAverage(BufferedImage input) {
  86.  
  87.         int[] histogram = new int[256];
  88.  
  89.         for(int i=0; i<input.getWidth(); i++) {
  90.             for(int j=0; j<input.getHeight(); j++) {
  91.  
  92.                 int red = new Color(input.getRGB (i, j)).getRed();
  93.                 int green = new Color(input.getRGB (i, j)).getGreen();
  94.                 int blue = new Color(input.getRGB (i, j)).getBlue();
  95.  
  96.                 int avg = (int) (red + green + blue)/3;
  97.                 histogram[avg]++;
  98.  
  99.             }
  100.         }
  101.  
  102.         return histogram;
  103.  
  104.     }
  105.  
  106.     // Return an ArrayList containing histogram values for separate R, G, B channels
  107.     public static ArrayList<int[]> imageHistogram(BufferedImage input) {
  108.  
  109.         int[] rhistogram = new int[256];
  110.         int[] ghistogram = new int[256];
  111.         int[] bhistogram = new int[256];
  112.  
  113.         for(int i=0; i<rhistogram.length; i++) rhistogram[i] = 0;
  114.         for(int i=0; i<ghistogram.length; i++) ghistogram[i] = 0;
  115.         for(int i=0; i<bhistogram.length; i++) bhistogram[i] = 0;
  116.  
  117.         for(int i=0; i<input.getWidth(); i++) {
  118.             for(int j=0; j<input.getHeight(); j++) {
  119.  
  120.                 int red = new Color(input.getRGB (i, j)).getRed();
  121.                 int green = new Color(input.getRGB (i, j)).getGreen();
  122.                 int blue = new Color(input.getRGB (i, j)).getBlue();
  123.  
  124.                 rhistogram[red]++; ghistogram[green]++; bhistogram[blue]++;
  125.  
  126.             }
  127.         }
  128.  
  129.         ArrayList<int[]> hist = new ArrayList<int[]>();
  130.         hist.add(rhistogram);
  131.         hist.add(ghistogram);
  132.         hist.add(bhistogram);
  133.  
  134.         return hist;
  135.  
  136.     }
  137.  
  138.     // Find max value in an array
  139.     public static int findMaxValue(int[] input) {
  140.        
  141.         int maximum = input[0];
  142.         for(int i=1; i<input.length; i++) {
  143.             if(input[i] > maximum) {
  144.                 maximum = input[i];
  145.             }
  146.         }
  147.        
  148.         return maximum;
  149.    
  150.     }
  151.  
  152.     // Convert R, G, B to standard 8 bit
  153.     private static int colorToRGBNoAlpha(int red, int green, int blue) {
  154.  
  155.         int newPixel = 0;
  156.         newPixel += red; newPixel = newPixel << 8;
  157.         newPixel += green; newPixel = newPixel << 8;
  158.         newPixel += blue;
  159.  
  160.         return newPixel;
  161.  
  162.     }

Java MD5 implementacija

Kategorija: (Ne)vsakdanjik,Razno — Napisal ZeroCool, 20.3.2010 @ 00:16

MD5 Danes sem ugotovil, kako je v PHP-ju življenje enostavnejše. Če sem tam želel zakodirati niz z MD5, sem samo klical funkcijo md5($niz). V Javi je pa to seveda malce drugače. Da marsikomu (ki bo mogoče to rabil) olajšam življenje, prilagam kodo ; )

  1.  import java.security.MessageDigest;
  2.  
  3.  // Java MD5 implementacija; to ni PHP da bi šlo v eni vrstici lol
  4.  private static String md5(String input) {
  5.  
  6.      String ret = "";
  7.  
  8.      try {
  9.  
  10.          MessageDigest algorithm = MessageDigest.getInstance("MD5");
  11.          algorithm.reset();
  12.          algorithm.update(input.getBytes());
  13.          byte[] md5 = algorithm.digest();
  14.          String tmp = "";
  15.  
  16.          for(int i=0; i<md5.length; i++) {
  17.  
  18.              tmp = (Integer.toHexString(0xFF & md5[i]));
  19.              if(tmp.length() == 1) {
  20.                  ret += "0" + tmp;
  21.              }
  22.              else {
  23.                  ret += tmp;
  24.              }
  25.          }
  26.  
  27.      } catch (NoSuchAlgorithmException ex) {}
  28.  
  29.      return ret;
  30.  
  31.  }

Študentski zajtrk #8 – PF

Kategorija: Kuhanje,Razno,Študentski zajtrki — Napisal ZeroCool, 20.1.2010 @ 15:40

Spet sem tu, in spet sem prišel z novim študentskim zajtrkom. Tokrat sem se spravil na pravno fakulteto. Za njih sem pripravil vmešana jajca z lososom in porom na pečenemu toastu ki je nastrgan z zaseko in česnom. Pod vsem tem pa leži zelena solata in rukola, ki je prelita s kapljicami bučnega olja. Sliši se dobro, jaz vem da sem to hitro pojedel ko sem naredil, še fotografiral sem komaj : ) Tole objavim, potem se grem pa naprej igrat z izpitnim obdobjem (tako kot vsi ostali faksi : P)

ŠTUDENTSKI PF ZAJTRK
(PF – Pravna fakulteta)

Potrebujemo (za 1 osebo):

  • 2 rezini toasta
  • 2 jajci
  • 1 žličko alpskega mleka
  • 4 liste zelene solate
  • 1 pest rukole
  • 4 kaplje bučnega olja
  • 3 dag prekajenega lososa
  • 1/4 manjšega pora
  • 1/2 zrna česna
  • 2 žlički zaseke
  • 2 žlički popra, 3 žličke paprike v prahu, 1 žlička soli
  • 2 žlički olivnega olja

Student PF breakfast Vmešajte jajci z mlekom (mešajte toliko časa dokler ne dobite zmešanega rumenjaka in beljaka). Naoljite ponev in vlijte jajce. Narezite lososa na manjše rezince, por pa nasekljajte. Sedaj lahko prižgete štedilnik, vržete k jajcem še por in losos ter pričnete s pečenjem. Dodajte še začimbe (sol, papriko, poper) in pecite toliko časa, dokler se ne obarva zlato (vmes pa razsekajte, tako kot šmorn). Popecite toast, ga nastrgajte oziroma premažite s česnom (podrgnite tako kot na brusketkah), namažite z malce zaseke (zelo malo) in narežite na polovice. Položite na liste solate (glej sliko). Ko so vmešana jajca spečena, jih servirajte na pečenih kruhkih (zopet, glej sliko za servirni predlog), na koncu pa pokapajte z bučnim oljem. Pa dober tek ; )

Obudite mrtvo Nokio 5800 – “dead brick” fenomen

Kategorija: (Ne)vsakdanjik,Oprema,Razno — Napisal ZeroCool, 05.6.2009 @ 15:47

Shrani.si Včasih se pri posodobitvi telefona lahko marsikaj zalomi. Eden izmed takšnih scenarijev je tako imenovani “dead brick” fenomen. Vaš telefon je po posodobitvi (uspeli ali pa mogoče neuspeli) dobesedno “mrtev cigl”. Če verjamete ali ne, tudi to se da na nek način popraviti in rešiti. Je pa res, da je velika možnost da vaši podatki (telefonske številke, smsi …) po popravilu ne bodo več dostopni. Če se vam ne da iti na servis, vam lahko sledeče besedilo zelo pomaga, če se pa slučajno kaj izjalovi, se ga pa vseeno nese na servis.

POZOR: Za napake v postopku in kakršnekoli posledice uporabe postopka ne odgovarjam. Vse počnete na lastno odgovornost. Če se kaj zalomi pa telefon vseeno lahko nesete na servis, saj postopek ne pusti vidnih posledic.

Shrani.siPred uporabo tega namestite JAF Tools (več o tem si lahko preberete v moji prejšnji objavi tukaj: http://zerocool.area52.us/?p=293). Spreminjanje product coda pustite pri miru, program le zaženite. Naslednja stvar, ki jo morate dol potegniti je Navi Firm (zelo priročen programček s katerim lahko iz Shrani.siNokia strežnikov direktno downloadate najnovejše posodobitve programske opreme za telefone). Uploadal sem ga na sledeč naslov: http://www.megaupload.com/?d=LNDCKFQH. Odpakirajte in zaženite edino izvršljivo datoteko, ki je v arhivu.

Shrani.siPojavilo se bo okno, na kateremu izberite Nokia 5800 XpressMusic RM-356, najnovejšo verzijo, potem pa izberete tisto, kar pripada vašemu operaterju (za Simobil je to 5800 VF Simobil R); izberite gumb “All” in potem “Download from Fire”, ko se bo pojavil dialog za izbiro direktorija izberite sledeč direktorij (če ga ni, ga ustvarite):
“C:\Program Files\Nokia\Phoenix\Products\RM-356″. Program bo downloadal stvari in opravil svoje.
Shrani.si
Sedaj zaženite JAF Pkey (tako kot je bilo opisano v prejšnjemu vodiču) in v oknu v zavihkih izberite “BB5″, za tem pa obkljukajte “Use ini”. Program bo samodejno našel posodobitev, ki ste jo prej downloadali (če jo ni; poskrbite da je posodobitev res v tistemu direktoriju, ki je opisan zgoraj).
Če je vaš telefon čisto mrtev (ne zazna ga niti USB); izberite “Dead USB” in potem kliknite “Flash”. Program bo posodobil telefon; za tem vam bo pa rekel da ga prižgite. Stisnite “Power” in vaš telefon bo ponovno obujen.

Nokia 5800 posodobitev firmwara (Simobil)

Kategorija: (Ne)vsakdanjik,Oprema,Razno — Napisal ZeroCool, 01.5.2009 @ 13:36

Shrani.siDa po enem mesecu (če ne že več) še kar ni na voljo firmware updata za Nokio 5800 pri Simobilu (seveda ne krivim njih ampak Vodafone) je pa že več kot lenoba. Človek se niti ne bi pritoževal, če bi firmware imel le kakšne manjše popravljene napakice. Ampak te napakice niso majhne. Pri posodobitvi se občutno poveča občutljivost touchscreena, hitreje se tudi obrača, telefon je sam po seb tudi hitrejši, fotoaparat dela boljše posnetke, možnost uporabe sekundarne kamere itd. K sreči se vedno najdejo alternativne metode. V sledečem postopku bom opisal kako nadgraditi vaš firmware na v20.

POZOR: Za napake v postopku ne odgovarjam (čeprav jih še ni nobeden do sedaj imel). Četudi je možno da s tem izgubite garancijo, še vedno lahko namestite stari firmware in vaš star product code, kar ne pusti nobenih sledi o posodobitvah.

Pred uporabo postopka obvezno namestite najnovejši Nokia Software Update in Nokia PC Suite.

Za posodobitev bomo potrebovali dva programa. Prvi je JAF Pkey Emulator, drugi pa JAF. Vse skupaj sem uploadal na Megaupload, tako da si lahko to downloadate na sledečemu naslovu http://www.megaupload.com/?d=98N93B9P.

Shrani.si Poženite JAF setup in ga namestite. Potem zaženite JAF Pkey Emulator – mogoče vas bo antivirusni opozoril na kaj ampak ignorirajte. Kliknite na GO. Program vas bo potem opozoril na nekaj, vendar kliknite OK. Poženite vaš telefon preko priloženega kabla v “PC Suite Mode”. Med zavihki izberite “BB5″ in odkljukajte “Prod manager”.

Shrani.siPotem kliknite na “Service”. Kliknite na “Read Values” in na zaslonu bi se vam moralo izpisati par podatkov. Najpomembnejši izmed njih je “Product code”. Tega si skopirajte in shranite. Ko ste ga shranili na varno mesto, v okence vpišite enega izmed sledečih (odvisno od vašega modela) – če imate rdečo barvo 5800-ke vtipkajte 0559299, če pa modro pa 0559395. Seveda bi lahko uporabile tudi druge (npr. iz Hong Konga), vendar so te namenjene našemu potrošniškemu predelu.

Shrani.siStisnite “Write values”. Sedaj ste vaš telefon pretentali, da ne deluje na Vodafonovem posebnem firmwaru. Zaženite Nokia Software updater, stisnite na update in firmware se bo avtomatsko posodobil (spodaj so še za boljšo predstavo na voljo slike). Če želite telefon spraviti nazaj na star firmware, pa preprosto uporabite isti postopek, le “Product code” zamenjajte s staro.

To bi bilo to; sedaj je vaša Nokia 5800 boljša, stabilnejša in hitrejša. Pa še par bombončkov dobite zraven kot je npr. slovar. Vodafonu pa lahko samo rečem; prenehajte biti kapitalisti in nehajte uporabljati vaš “custom” narejen firmware, ker uporabnikom to onemogoča redne posodobitve telefona in s tem boljšo uporabniško izkušnjo.

[EDIT] Na voljo je že posodobitev v21.0.025. Nokia Software Updater je sicer ne zazna, vendar če vtipkate za klicno številko *#0000#, Možnosti->Preveri posodobitve, vam bo telefon našel posodobitev. Vse skupaj downlodate (priporočljivo je da ste na kakšnem wireless omrežju, saj je vse skupaj okoli 3mb), izberete namesti zdaj (prej naredite backup telefona) in telefon se bo posodobil.

Teče na Wordpress | Powered by Kaley, Gostuje SCE
© 2006-10 Boštjan Cigan (ZeroCool). Vse pravice pridržane.