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.     }

Nedeljska rižota in ukinitev Shrani.si

Kategorija: Kuhanje — Napisal ZeroCool, 25.4.2010 @ 12:50

Kot veste (vsaj tako kroži po forumih in po Facebooku) bo Najdi.si ukinil Shrani.si z začetkom prvega septembra letos. Kaj to pomeni zame? Da bo celoten blog ostal brez slik. Zato svoje fotografije selim na Flickr, kolikor bo tam sploh prostora (omejitev 100MB). Tako da je to moja prva objava, kjer uporabljam Flickr račun : ). No ja; malce k hrani, danes bom(o) skuhali eno čist simpl rižotko, ki navdušuje s svojo barvitostjo.

NEDELJSKA RIŽOTA

Potrebujemo (za 4 osebe):

  • 4 vrečkice Uncle Bens riža
  • 6 žlic graha
  • 3 žlice koruze
  • 10 dag pancete
  • 3 žlice olivnega olja
  • 1 strok česna
  • Sol, poper
  • Parmezan

Nedeljska rižotaNarežite panceto na majhne koščke in pričnite kuhati riž. Na olivnemu olju prepražite nasekljan česen in panceto, ko se panceta obarva na malce svetlo rjavo dodajte koruzo in grah. Vse skupaj se peče okoli deset minut. Ko se riž skuha, ga stresite v veliko posodo, dodajte tisto kar smo prej prepražili in vse skupaj premešajte. Servirajte na širokih krožnikih s peteršiljem in parmezanom. Simpl!!

vsftpdG #1 – Trenutni napredek

Kategorija: Projekti,vsftpdG — Napisal ZeroCool, 15.4.2010 @ 17:45

Shrani.si vsftpdG (GUI manipulator z vsftpd FTP strežnikom) napreduje kar lepo. Zaenkrat mi je ratalo sprogramirati do konca dodajanje uporabnikov, urejanje konfiguracije serverja, zagon in zaustavitev serverja, brisanje uporabnikov in export podatkovne baze. Pa običajne nebuloze v vseh programih (about, tip of the day, help). Mogoče mi celo “rata” stvar usposobiti do konca aprila. Seveda se mi med programiranjem porajajo nove ideje kot so backup vseh config datotek v ZIP datoteko (ali tar.gz), backup celotne konfiguracije v ZIP; backup podatkov in podobne stvari. Skratka … Če bo volja se bo programiralo naprej.

Shrani.si Poraja se le še vprašanje kje končni projekt objaviti : ). Seveda bo tu, vendar se mi poraja zamisel o kakšnemu Sourceforgu. Je pa res, da koda niti najmanj ni blizu perfektnosti. Vendar je važno to, da program dela : ). Kaj me še čaka? Brisanje uporabnikov, bannanje IP naslovov, sintaktični analizator za loge in podobne stvari. Vse ob svojem času pravijo : ). Seveda me časovno ovira tudi faks pri temu : ). BTW, danes ni kuharskega recepta, naslednjič : P Kar je pa dobro; ta program je del seminarske, ki sem jo že uspešno zagovoril (vsaj en na FRI-ju, ki dovoljuje da nekaj spišeš sam; to sem delal pri uporabniških vmesnikih); WOOHOOO : )

TODO:

  • Bannanje uporabnikov
  • Urejanje uporabnikov
  • Branje konfiguracijske datoteke (sedaj fiksno mysql geslo in uporabniško ime zaradi testiranja)

Optimalno:

  • Backup konfiguracijskih datotek uporabnikov v ZIP, TAR.GZ datoteke
  • Nadzor preko spletnega vmesnika?
  • Konzolni način delovanja (nimajo vsi serverji nameščenega GUI-ja)

Koruzne brusketke

Kategorija: Kuhanje — Napisal ZeroCool, 30.3.2010 @ 23:57

Preden se lotim kuharskega dela, naj povem da vsftpdG napreduje zelo lepo (sem že okoli na 1000 vrsticah kode; vendar se vse skupaj malce komplicira, zato bo verjetno prva verzija malce kilava : P). Danes sem tu da dodam en čist simpl recept, ki je zelo koristen na zabavah, kjer potrebujete hitro in okusno predjed. Pa tudi pri navadnih kosilih je zelo dobra jed (naj omenim da sem jo jedel v Don Felipeju – katerega opis sledi kmalu). Vse kar morate narediti prej je to da si spečete hlebček koruznega kruha (manjši hlebček).

KORUZNE BRUSKETKE Z ALIOLI OMAKO

Potrebujemo (za 1 osebo):

  • 3 rezine koruznega kruha
  • 2 žlici olivnega olja
  • 2 žlici majoneze
  • 2 zrni česna
  • Sol, poper

Corn bruschettas with alioli sauce Narežite kruh počez in ga dajte na pol. Majonezo, olivno olje, sol, poper in nasekljan česen premešajte in pustite stati v hladilniku vsaj dve uri. Ko bo alioli omaka pripravljena (naj omenim, da je to zelo hitra varianta nje) popečite kruh na toasterju (še najbolje je če na žaru) dokler ne porumeni. Postrgajte s česnom (čisto malo), malo posolite in servirajte z alioli omako. Simpl kot pasulj!!! : )

vsftpdG – GUI upravljalec z vsftpd FTP strežnikom

Kategorija: Projekti,vsftpdG — Napisal ZeroCool, 20.3.2010 @ 17:36

Shrani.si Trenutno sem čisto v javanski kodi, saj pišem (razvijam) GUI za vsftpd1 (če kdo ne ve; najbolj varen in najhitrejši ftp strežnik za UNIX sisteme). Po forumih je bilo veliko zahtev in razprav za GUI, vendar trenutno še ni na voljo nekega. Zato sem ga začel pisati sam.

V planu (za prvo verzijo) so sledeče funkcionalnosti:

  • Zagon in zaustavitev strežnika
  • WYSIWYG out-of-the-box namestitev (vse avtomatizirano)
  • Uporabniki v SQL bazi (MySQL) z md5 enkripcijo za gesla
  • Dodajanje, urejanje in brisanje obstoječih uporabnikov
  • Bananje IP naslovov
  • Backup vsftpd nastavitev in backup uporabnikov

Čez čas (ali skozi razvoj; odvisno od zanimanja) mogoče še implementacija sledečih:

  • Podpora za GUI in konzolni način (avtomatizacija)
  • Podpora za ssh in zagon programa iz remote računalnika
  • Kar mi pride še na misel ; )

Trenutno sem na 640 vrsticah kode in zadeva še raste : ). Prva (public) verzija sledi aprila.

  1. http://vsftpd.beasts.org/ []
Teče na Wordpress | Powered by Kaley, Gostuje SCE
© 2006-10 Boštjan Cigan (ZeroCool). Vse pravice pridržane.