Archive | Programowanie RSS for this section

Mało konkretna relacja z FrontTrends 2010

Przygoda moja rozpoczęła się w środę. Jakoś po południu nadjechał mój pociąg, który tempem rakiety (po jakiś 7 godzinach) dojechał do Warszawy. Chwała panom kolejarzom, że wliczyli do rozkładu czas na postoje w szczerym polu dzięki czemu nie musiałem słyszeć o opóźnieniach.

Będąc w stolicy ok 22 doszedłem do wniosku, że to jest ponure miejsce. Bez większych problemów udało mi się odnaleźć tramwaj, który podwiózł mnie na umówione miejsce. Później wszystko poszło z górki. Przyjaciółka, która mnie odebrała pokazała mi gdzie mieszka. Od tego momentu mieszkanie na ulicy Litewskiej było moją bazą wypadową.

Pierwszy wypad był niespodziewany. Rozmyślając nad snem nagle telefon zadzwonił. Słuchawka przemówiła do mnie, że osoba na drugim końcu fali właśnie przyjechała na miejsce oraz szuka towarzystwa do piwa. Moją jedyną wątpliwością było to jak później wrócę. Na szczęście wyimaginowane opary alkoholu szybko rozwiązały moje wątpliwości. Tak więc już po północy rozpoczęła się pierwsza misja w stolicy – odnalezienie knajpy gdzie będzie można wypić piwo. Nie wiedzieć dlaczego okazało się to wyjątkowo skomplikowane.

Pierwszy wypad na piwo zakończył się dość późnym powrotem do mieszkania, oraz krótkim snem. Trzy godziny później trzeba było wstawać aby zdążyć na rejestrację na konferencję.
Oczywiście po raz kolejny pojawił się problem dojazdu. Tym razem rozwiązał go taksówkarz, który wykorzystał swoją wiedzę zamkniętą w czarnym pudełku z napisem “GPS”.

Konferencja odbywała się na uczelni PWSBiA, tej samej, w której zdemolowaliśmy pokój w akademiku jakieś parę lat temu. Trochę ciężko było znaleźć odpowiednie audytoria, na szczęście umiejętność zadawania podstawowych pytań (“gdzie ja kurna jestem?“) po raz kolejny przydała się.

Tak więc rozpoczął się pierwszy dzień konferencji FrontTrends. Przy rejestracji dostałem fajową smycz, opaskę i jakieś plastikowe coś. Zdaje się, że identyfikator. W sumie nie wiem do czego był potrzebny, w zasadzie ani razu się nie przydał. No może do tego abym mógł coś zawiesić na fajowej smyczy, która szpaniła na mej szyi.

Niestety na moje samopoczucie wpłynął pewien mutagen, zwany kacem, który w pewnym momencie utrudnił mi percepcję świadomości (inaczej mówiąc momentami przysypiałem ;) Ów mutagen został zniszczony w południe. Pokonała go zielona lasagnia. Zapewne te wodorosty miały jakieś antyciała czy cuś.

Pozostawmy kaca samemu sobie, wróćmy do konkretów. Prezentacje na których byłem okazały się być źródłem ogromnej wiedzy. Spikerzy są starymi wyjadaczami w prowadzeniu tego typu zabaw, dzięki czemu merytorycznie nie mogłem się do niczego przyczepić.
Po kilku godzinach wykładów nadszedł czas zakończenia dnia. Właściwie jego rozpoczęcia. Nie wiedzieć dlaczego, ale organizatorzy postanowili po pierwszym dniu zorganizować tzw afterparty. Nie żebym narzekał, wyleczony kac domagał się odrobiny czułości.

Wylądowaliśmy w klubie, którego lokalizacja była częściowo utajniona. Niby ulica znana, ale ja jako szary obserwator nie dostrzegłem niczego konkretnego. Przyczyną tego zapewne było to, że trzeba było przekroczyć bramę, a później to dziedzińczykiem prosto, na prawo, a później na lewo.
Lokal mimo swego ogromu był mały. Może było tak dlatego, że do owej małej przestrzeni przyczynili się ludzie, którzy postanowili swoimi ciałami wypełnić każdy milimetr kwadratowy przestrzeni. Na szczęście udało się znaleźć swoje pół metra, tak aby bez problemu stać w miejscu oraz wykonać figurę akrobatyczną – obrót o 360°.

Afterek żył swoim życiem, a ja walczyłem z barierą językową. To nie jest tak, że nie znam języka. Raczej świadomość tego na ile go znam przyczyniła się do mej niechęci. Na szczęście odpowiedni motywator sprawił, że w końcu i w tej kwestii się przełamałem. Poznało się kilka osób, pogadało się trochę. Trochę też się nie zrozumiało. Ciężko zrozumieć faceta, który mówi coś o technologiach webowych, aż nagle wspomina coś o nazistach. A może to po prostu wina złego akcentu, albo pewnej odmiennej rzeczywistości wywołanej przez motywator?
Dla mnie impreza skończyła się raczej szybko. W końcu odezwało się niewyspanie, oraz jego brat – zmęczenie.

Drugi dzień był całkiem podobny do pierwszego. Z tym wyjątkiem, że mutagenem zaraził się jeden ze spikerów, a nie ja. Przyznać trzeba, że owy spiker był naprawdę dzielny. Wprawdzie spóźnił się, ale udało mu się poprowadzić swój wykład. Co więcej zrobił to naprawdę dobrze, a pewne wpadki (które można nazwać humorem sytuacyjnym) sprawiły że atmosfera była naprawdę dobra.

Ponownie, te kilka godzin minęło strasznie szybko. Na szybko zorganizowano kolejnego afterka. Tym razem w bawarskiej knajpie mającej aspiracje na bycie czeską strefą eksterytorialną. Ponownie lokal duży, a jednak ciasno. Tym razem nie z powodu ludzi, a fatalnie zorganizowanego zagospodarowania przestrzennego. Na szczęście FrontTrendowcy to nie są stereotypowi informatycy – potrafią przesuwać krzesła, a nawet stoły.
Szkoda, że obsługa lokalu miała bardzo niską przepustowość myśli. Do tego te myśli były jedynie w języku polskim przez co trzeba było zatrudnić się w branży tłumaczy.
Nie będę wspominał o tym, że nastąpiła profanacja podczas nalewania piwa. I to nie raz.

Na obronę obsługi muszę powiedzieć, że również nie zależałoby mi. Przynajmniej nie po całodniowym treningu podnoszenia ciężarów jedną ręką. Widok pani, chucherka, z tacą wypełnioną kilkoma ogromnymi kuflami piwa potrafi wzbudzić litość.

Moja bariera językowa zupełnie została przełamana. W pewnym momencie odkryłem, że napotkałem inną barierę. Zapomniałem jak się mówi po polsku. Skutkiem tego było zwracanie się do obsługi po angielsku. Szczęście, że miało to miejsce w innym lokalu, ponieważ o północy oznajmiono delikatnie aby spierdzielać.
Zadziwiające, ale możliwe jest gadanie o technologii po kilku(-nastu?) piwach o godzinie 4 nad ranem.

Ostatni dzień (tj sobota) polegał na tzw. aktywnym wypoczynku. Jako że jestem typowym polskim patriotą w Warszawie (mimo tych kilkunastu lat na karku) byłem po raz pierwszy. Miałem okazję przejść się po starówce. Robi wrażenie. Ot takie coś, niby to stare, a jednak o niebo lepsze niż młodsze paskudztwa z ostatniego dwudziestolecia. Zaskoczyły mnie marmurowe tablice, z interaktywnym panelem. Nie wiedziałem, że matka natura zaczęła się interesować tak intensywnie branżą IT.
Podczas spacerku minąłem parę osób, które spotkałem na konferencji. Nie miałem czasu z nimi pogadać, ponieważ byłem w całkiem normalnym pośpiechu na pociąg.

Tym razem PKP nie zawiodło, pociąg miał opóźnienie. Podróż powrotna upłynęła w błogiej atmosferze nudy i sudoku. Atmosferę podgrzewała czasami pani, która do przechodzących pasażerów krzyczała, aby zamykali drzwi. Chodziło o drzwi automatyczne. Zapewne ta ich automatyka polegała na tym, że trzeba je było nauczyć jak otwierać i zamykać się. Niestety po kilku godzinach prób nadal nie udało się przyswoić tej wiedzy.

Poznałem wiele osób, chociaż co do niektórych to nawet nie wiem jak się nazywają. Rozmawiałem ze spikerami, wymieniliśmy sporo ciekawych spostrzeżeń. Z częścią z nich wymieniłem wizytówki. Zobaczymy czy coś z tego wyjdzie.
Przypomniałem sobie tajniki władania językiem angielskim. Mój sukces był na tyle duży, że tymczasowo zapomniałem o ojczystej mowie. Nawet na drugi dzień pod prysznicem myślałem do siebie po angielsku.

Z ciekawostek warto też wspomnieć o mojej nagrodzie. Chyba pierwszej od kilku lat (dlatego mam nieczystą ochotę pochwalenia się nią). Jest nią telefon Palm Pre Plus.
Wprawdzie otrzymałem go jako nagrodę (a może prezent?) w wyniku losowania, ale obiecałem, że wykorzystam go do poznania tajników tworzenia aplikacji na smartfony (w wypadku Palma mowa o HTML 5 i rzeczach związanych z tym językiem). Jeśli w jakiś sposób tego nie będę robić zobowiązuję się do przekazania tego telefonu komuś kto będzie chciał poznać technologię.

Pierwotnie na konferencję miałem nie jechać. Zasoby mojego portfela przekonały mnie, że może w następnym życiu będzie mnie stać na taką przyjemność. Na szczęście, dzięki wspaniałomyślności mojej firmy dostałem w prezencie bilety. Jeśli za rok odbędzie się coś podobnego to można być pewnym, że nic mnie nie powstrzyma i pojadę tam.

Jestem zdania, że brakuje w Polsce takich wydarzeń. Zjazd tylu osobistości na pewno wpływa na rangę imprezy, oraz daje szanse na wysoki merytorycznie poziom.
Zastanawiam się również nad tym, czy uda mi się zorganizować na podobne imprezy poza granicami Polski. Jeśli chodzi o rozwój to na pewno będą bardzo pomocne. Do tego zawsze jest ten czynnik ludzki, dzięki któremu pozostają o wiele lepsze wspomnienia.

Miniblog: Zapomniany Agile

Wydaje mi się, że w Polsce agile jest jakimś tabu. Na studiach mam przedmiot zwany “Inżynieria oprogramowania”. Pani doktor skupiła się jedynie na tradycyjnych metodach, o agile mówiąc tyle, że istnieje (choć miała poświęcić temu więcej czasu). Podobnie z różnymi wykładami na konferencjach. Ostatni przykład Infoshare i wykład pt. “Kiedy na twardo a kiedy na miękko – porównanie skuteczności stosowania tradycyjnych metodyk zarządzania TPM i podejścia zwinnego Agile.”. Tam również poświęcono 90% czasu na omówienie tradycyjnych metod i jedynie wspomniano o zwinnych metodach.

Czy u nas to jest jakiś temat zakazany, a może jest na tyle nieatrakcyjny, że nie warto o tym wspominać? Rozumiem, że obie metody mają swoje “za” i “przeciw”. Zastanawia mnie jedynie to dlaczego poświęca się tyle czasu na tradycyjne metodyki, a zwinne się hm.. pomija?

Netbeans IDE

Parę osób polecało mi ten edytor. Z powodu przyzwyczajeń do Zend Studio (w wersji 5.1.0) inne edytory były zawsze gorsze. Wszystko to co wywodzi się z Eclipse’a to również zło.

No i w tym miejscu dochodzimy do Netbeansa. Edytor dość przyjemny w obsłudze. Panel z opcjami jest czytelny, łatwo znaleźć co trzeba. Instalacja wtyczek banalna, a ogólne wrażenia z obsługi całkiem dobre.

Wkurza mnie trochę powolne indeksowanie plików źródłowych, momentami też są problemy z odnalezieniem metod/funkcji/etc. Jeśli dalej miałbym się czepiać to mogę dodać, że pomimo otwartego jednego projektu wyszukiwanie jest po wszystkich, wcześniej dodanych, projektach.

Postaram się jeszcze wykorzystać to IDE do innych projektów. Bardzo możliwe, że przesiadka ze starego Zend Studio może być prawie bezbolesna ;)

PHP: przezabawny sposób na wyskakiwanie z if’a

Gdzieś na php.net znalazłem zabawny sposób na to jak wyskoczyć z if’a :) .

Niestety nie wkleję kodu bezpośrednio tutaj, coś GESHI mnie nie lubi. Swoją drogą, od wersji 5.3 PHP oferuje możliwość użycia goto :D

Miniblog: programiści nie potrafią programować

Natknąłem się dzisiaj na artykuł “Dlaczego programiści nie potrafią.. programować?“. Uwierzcie lub nie, ale ludzie podczas rozmowy kwalifikacyjnej w naszej firmie naprawdę mieli problem z rozgryzieniem tego jak zrobić pętlę FizzBuzz.

Miniblog: JsZen

Na Joggerze wspomniano już czym jest ZenCoding. Jakoś nie potrzebuję odpowiedniego pluginu do mojego IDE. Pomyślałem sobie za to, że fajnie by było gdyby mieć takie coś co by generowało elementy po stronie JavaScript.

Okazało się, że coś takiego istnieje, ciągle jest rozwijane i zapowiada się naprawdę fajnie :) Ten skrypt zdecydowanie może przyspieszyć tworzenie dynamicznych elementów strony.

Czysto poglądowo zrobiłem klona z repo, kodziwo możecie zobaczyć na: radmen.info/jszen.

Nie zapominaj o RSS autodiscovery!

Przeglądając sobie stare śmieci trafiłem na adres do stronki Minds.pl. Pomyślałem sobie, że może warto będzie śledzić ich kanał RSS. Patrzę sobie na pasek adresu i nie widzę znajomej mi ikonki. Pobieżnie przeglądam witrynę, również nie znalazłem nic co by przypominało ikonkę kanału RSS. Zrezygnowany chciałem już opuszczać witrynę, gdy nagle udało mi się odnaleźć to co poszukiwałem. Potrzebowałem na to ok. minuty, co w zasadzie oznacza, że poświęciłem sporo czasu na odnalezienie tylko jednej rzeczy!

Normalnie to ZU po prostu opuściłby przeglądaną witrynę. Pomyśleć, że wystarczyłoby dodać RSS Autodiscovery i byłby jeden problem mniej.

Pamiętaj, jeśli już robisz kanały RSS/Atom to nie zapomnij również o tej jakże przydatnej rzeczy. Zdecydowanie zwiększy użyteczność i zwiększy zapewne oglądalność (o ile użytkownik będzie śledził feedy).

AdBlock potrafi zirytować

Osobiście uważam, że AdBlock jest jednym z najlepszych rozszerzeń dostępnych dla Firefoksa. Świat bez reklam jest milszy. Niestety nie zawsze. Okazało się, że podczas pisania kolejnego frontendu, oraz przy pracach nad Just Proto AdBlock sporo namieszał. Zaczęły znikać poszczególne boksy, lub całe grafiki (nawet z tła). Zanim wpadliśmy na to co jest przyczyną stracono sporo czasu.

Najczęściej jest to wina omyłkowego nazwania elementów, lub plików. Robiąc zaślepkę, która w nazwie ma frazę “_300x250″ ryzykuję, że jej nie ujrzę. Podobnie może się stać nadając boksom z ogłoszeniem nazwę typu “Ad”. Pamiętaj, gdy ze stroną dzieją się cuda, upewnij się, czy to przypadkiem nie jest zasługa AdBlocka.

Obrazkowy bruteforce

Wczoraj uświadomiłem sobie, że skoro piksel (w bitmapach 24-bitowych) przyjmuje wartości R,G i B z zakresu 0-255, to istnieje 256^3 (czyli 16 777 216) kombinacji jednego piksela. Bitpama 2-megapikselowa zawiera 1600×1200=1 920 000 pikseli, czyli istnieje (256^3)^1920000 => (((2^8)^3)^1920000) => 2 ^ 46080000 kombinacji bitmap dwumegapikselowych…

Przypuścmy, że istnieje komputer kwantowy, który wygenerowałby wszystkie 2 ^ 46 080 000 kombinacje takowych bitmap Jakie zdjęcia znalazłyby się w tej “bazie”? Każde Np. każda chwila z Twojego życia widziana z każdej możliwej kamery, dodatkowo na każdym możliwym tle, z kiełbasą, drukarką, papieżem i kartonie po mleku na pierwszym planie…

Ty z 23 nogami, Ty uprawiający seks ze zwierzętami, Ty siędzący w tej chwili przed komputerem czytający ten wątek, najpiekniejsze zdjęcie na świecie, zdjęcia z nieodkrytych planet, zdjęcia nieistniejących marsjaninów z tobą w tle jedzącym słonecznik i to wszystko w różnych poziomach zaszumienia od wysokiego/niskiego ISO oraz wiele wiele innych ciekawych zdjęć A te “sensowne” zdjęcia to mikroskopijna część tych wszystkich 2 ^ 46 080 000, bo reszta to jakieś kolorowe śmieci…

Tamyl @ DigArt

Mnie ten tekst zainteresował ze strony programistycznej. Napisałem prosty skrypt w PHP (:P), który metodą bruteforce generuje sobie takie kolejne obrazki. W drodze uproszczeń obrazki są tylko kwadratami, a liczba kolorów ograniczona do dwóch. Już przy wymiarach 4×4 liczba kolejnych obrazków przyrastała niesamowicie szybko.

Dla ciekawskich zamieszczam niżej kod klasy. Całość jest prosta, banalna wręcz. Algorytm wydaje się być poprawny, natomiast całość mogłaby być inaczej (czyt. lepiej) napisana. Może kiedyś spróbuję zaimplementować w kod klasy możliwość zatrzymywania i wznawiania kolejnych iteracji. Ciekaw jestem jak takie coś zrobić.

<?php
/**
 * @class ImgGen
 *
 * @author radmen <radmen_at_gmail.com>
 * @license WTFPL <http://sam.zoy.org/wtfpl/>
 */
class ImgGen {
  
  private $mImgSize = 3;
  
  private $mColors = array();
  
  private $mImage;
  
  private $mImgCount = 0;
  
  private $mFileType = 'gif';
  
  public function __construct() {
    $this->mImage = imagecreatetruecolor($this->mImgSize, $this->mImgSize);
    
    $this->mColors = array(
        'black' => imagecolorallocate($this->mImage, 0, 0, 0),
        'white' => imagecolorallocate($this->mImage, 255, 255, 255),
    );
    
  }
  
  public function CreateImg() {
    
    foreach ($this->mColors as $name => $color) {
      $this->Iterate(0, $name);
    }
  }
  
  private function Iterate($pIteration, $pColorName, & $pPoints = false) {
    
    if(false === $pPoints) {
      $pPoints = array();
    }
    
    if($pIteration == ($this->mImgSize * $this->mImgSize)) {
      $this->Save2File($this->mFileType, $pPoints);
      return;
    }
    
    $x = $pIteration % $this->mImgSize;
    $y = floor($pIteration / $this->mImgSize);
    
    // echo "x: {$x} y: {$y}\n";
    
    $pPoints[$pColorName][] = array(
      'x' => $pIteration % $this->mImgSize,
      'y' => floor($pIteration / $this->mImgSize),
    );
    
    foreach ($this->mColors as $name => $color) {
      $this->Iterate($pIteration+1, $name, & $pPoints);
    }
  }
  
  private function Save2File($pType, $pPoints) {
    
    $path = 'imgs/'.md5($this->mImgCount++);

    if(false === file_exists(dirname($path))) {
      mkdir(dirname($path), 0777);
    }
    
    foreach($pPoints as $color_name => $points) {
      foreach($points as $point) {
	imagefilledrectangle($this->mImage, $point['x'], $point['y'], $point['x'], $point['y'], $this->mColors[$color_name]);
      };
    }

    if('gif' == $pType) {
      imagegif($this->mImage, $path.".gif");
    }
    else {
      imagepng($this->mImage, $path.'.png');
    }
  }
  
  public function __toString() {
    return $this->mImgCount." obrazkow wygenerowano\n";
  }
  
}
?>

Który framework PHP?

W pracy siedzę na firmowym frameworku. W wolnej chwili chciałbym poznać jakiś inny, tak aby móc porobić coś z własnych pomysłów. Po głowie chodzą mi trzy frameworki:

  • Symfony
  • Kohana
  • CakePHP

Który z nich jest warto większej uwagi. Nie chciałbym, żeby to była kobyła pokroju Zenda. Poza tym chciałbym móc w miarę łatwo zmieniać pewne rzeczy itd. Generalnie proszę o wypowiedzenie się, dlaczego ten, a nie inny framework :)