pejotr.log
blog pasjonata
Informatyk to urządzenie peryferyjne przetwarzająe kawę linie kodu źródłowego, czyli programujące. Jest jedynym znanym stworzeniem, które potrafi rozwiązać twój problem, o którym nie miałeś pojęcia, że istnieje, w sposób którego absolutnie nie zrozumiesz.
4th
MAR
Umarł król niech żyje król
Posted by pejotr under Bez kategorii
Zapraszam na piotr.doniec.eu/devlog …
Nowa wersja, nowa baza, nowa jakość…
23rd
FEB
Symfony vs Zend Framework
Posted by pejotr under PHP, Programowanie
Jeśli czytasz ten wpis to prawdopodobnie chcesz porównać oba frameworki celem wybrania jednego który będziesz zgłębiał. Pewnie też przeczytałeś 10 opinii że są od siebie tak różne że nie można i porównywać, a może nawet że ZF jest lekko niedorozwinięty (ang. inmature) z porównaniu z Zendem. Zbadałem te poglądy. Zend Framworkiem bawiłem się wcześniej, na Symfony swoją uwagę zwróciłem nie dawno z czystej ciekawości. Zrobiłem “My first project” i Jobeet i wyrobiłem sobie trochę inny pogląd.
Porównanie
Ludzie piszą: “ZF jest jak .NET, tylko zbiór bibliotek ułatwiających pisanie aplikacji” a ja pytam a Symfony to co? Zbiór bibliotek i magicznych generatorów. Opanowanie tych generatorów zajmuje więcej czasu niż pisanie czegoś sensownego. I to tyle. Poza generatorami które wymagają dostępu do shella w zawartości obu frameworków nie widać różnicy, helepery w bardzo dużej mierze się powtarzają, tylko czasami pod zmienioną nazwą.
Na korzyść ZF w mojej opinii przemawia dodatkowo ilość tych bibliotek, między innymi do AMF którego Symfony nie ma, ale oczywiście można skorzystać z tego od Zenda.
System routingu w Symfony wydaje się ciężki do opanowania, średnio rozumiem wszystkie te parametry jakie można podać, ale może to wynika z braku praktyki w posługiwaniu się ty mechanizmem.
Nie wątpliwie bardzo fajną opcjom w Symfony jest tryb developerski który działa wolniej aleloguje wszystko co się dzieje w aplikacji, jakie zostały wykonane zapytania do SQL’a itp.
Wydaje się że Symfony bardziej dba o swoją społeczność, duże tutoriale jak tworzyć prawdziwe aplikacje napewno przysparzają grona użytkowników którzy będą korzystać z Symfony, niestety polityka Zenda w tej sferze jest dziwna, na dobrą sprawę jest tylko jakiś marny tutorial z samych podstaw. Dokumentacja i społeczność zdecydowanie na korzyść Symfony.
Podsumowanie
Nie wydaje mi się że mozna tu mówić że coś jest frameworkiem (Symfony) a coś frameworkiem do robienia frameworków ( tak niektórzy mówią o ZF ) bo oba mają te same możliwości, a różnica polega głównie na tych generatorach. Fajie że można sobie wygenerować panel admin ( wow, jak w django ) ale i tak nikt takiego standardowego nie zostawi więc trzeba się nauczyć przerabiać, a to może być jednak trudniejsze od napisania swojego.
17th
FEB
Nowości w Zend Framework
Posted by pejotr under PHP, Programowanie
No proszę, chwila nie uwagi a Zend Frameork rozrósł się o nowe komponenty. Żeby tego było mało to doszły takie ktorych mi najbardziej brakowało. Pojawiło się między innymi Zend_Paginator co by łatwo robić paginację stron, ZendX_JQuery czyli helpery widoku do obsługi JQuery ( jeszcze nie wiem dokładnie jak działają i czy nie piszę głupot, ale zaraz zapewne zacznę zgłębiać temat ) oraz Zend_Captcha.
Ponad to jak widać zaraz po wejściu na stronę główna frameworka, istnieje ułatwienie wiązania aplikacji napisanych w ZF z aplikacjami Adoba jak Flex czy AIR.
Zend_Amfprovides support for Adobe’s Action Message Format (AMF), to allow communication between Adobe’s Flash Player and PHP. Specifically, it provides a gateway server implementation for handling requests sent from the Flash Player to the server and mapping these requests to object and class methods and arbitrary callbacks.
Brzmi interesująco…
12th
FEB
Polski Alfabet Morse’a
Posted by pejotr under Java, Programowanie, Studia, Życie
Jak by nie patrzyć na kod Morse’a jest to pewnego rodzaju kod służący do przesyłania informacji. Nic nie stoi na przeszkodzie żeby stworzyć własny podobny kod. Ta myśl mnie naszła na wykładzie z Teorii Sygnałów i Informacji na którym został przedstawiony kod Huffmana. Zakodowanie symboli w kodzie Huffamana wymaga obliczenia prawdopodobieństw wystąpienia każdego znaku a następnie na budowie odpowiedniego drzewa. Tak zbudowany kod ma dodatkową właściwość jest tzw. kodem prefixowym, to znaczy że żadne ze słów kodowych nie jest przedrostkiem innego słowa, nie ma zatem potrzeby stosowania znaczników końca znaku, a zakodowana wiadomość i tak będzie miała jednoznaczną interpretację. Więcej na ten temat można doczytać w Wikipedii i innych źródłach. Warto zauważyć że kod uzyskamy z kodowania Huffmana jest kodem optymalnym.
Aby zautomatyzować proces znajdowania kodów dla poszczególnych znaków napisałem prostą aplikacyjkę w Javie. Przytym skorzystałem z klasy o której wcześniej nie wiedziałem mianowicie z SwingWorker’a. Szerszy opis powinien się zresztą nie długo tu pojawić. W każdym razie jest to obudowa na interface’y Runnable i Future, która uruchamiana jest jako oddzielny wątek i umożliwia zwracanie tymczasowych wyników (tymczasowych w sensie, że nie zwróci np. wszystkich obrazków kiedy wszystkie odczyta, tylko co jakiś czas tyle ile odczyta do tego momentu).
Kod programu i paczuszka jar do pobrania poniżej.
Lubię jak każdy wpis zawiera chociaż kawałek kodu, więc teraz umieszczę kod SwingWorkera odpowiedzialnego za kodowanie.
[sourcecode="java"]
class HuffmanPracownik extends SwingWorker
private HuffNode[] drzewa_;
private int wolnePole_;
private int size_;
public HuffmanPracownik(int[] stat) {
size_ = stat.length;
wolnePole_ = size_;
drzewa_ = new HuffNode[2*size_ - 1];
int liczbaZnakow = 0;
for(int i=0; i < size_; i++) {
liczbaZnakow += stat[i];
}
for(int i=0; i < size_; i++) {
drzewa_[i] = new HuffNode((double)stat[i]/liczbaZnakow, (char)(i+97));
}
}
@Override
public HuffNode doInBackground() {
HuffNode temp1, temp2;
while(wolnePole_ != drzewa_.length) {
temp1 = null;
temp2 = null;
for(int i = 0; i < wolnePole_; i++) {
// wezly majace rodzica nie sa brane pod uwage
if(drzewa_[i].rodzic_ != null) {
continue;
}
// poszukiwanie dwoch najmniejszych prawdopodobienstw
if(temp1 == null) {
temp1 = drzewa_[i];
} else if (temp2 == null) {
temp2 = drzewa_[i];
} else if(temp1.prawdopod_ > drzewa_[i].prawdopod_) {
temp2 = temp1;
temp1 = drzewa_[i];
// usunięcie błędu w wikipedii
} else if(temp2.prawdopod_ > drzewa_[i].prawdopod_) {
temp2 = drzewa_[i];
}
}
drzewa_[wolnePole_] = new HuffNode(temp1.prawdopod_ + temp2.prawdopod_, temp1, temp2, null);
temp1.rodzic_ = temp2.rodzic_ = drzewa_[wolnePole_];
wolnePole_++;
}
return drzewa_[drzewa_.length-1];
}
@Override
public void done() {
wypisz();
}
}
[/sourcecode]
7th
FEB
Sztuka programowania w C
Posted by pejotr under C/C++, Programowanie
Tak, programowanie w C to nie tylko programowanie – to sztuka. To że program się kompiluje nic nie znaczy i jedyna radość z tego tak że kod jest składniowo poprawny. Prawdziwe zabawa zaczyna się przy pierwszy “segmentation fault” – chyba najmniej lubiany tekst jaki można ujrzeć po uruchomieniu programu. Z taką sytuacją i ja się zetknąłem testując na wskroś przed oddaniem projekt o którym mowa w poście poniżej. Błąd był tak mały, ale tak trudny do znalezienia że zajęło mi to dobre 3h szukania. Cały program wywalał się w pętli odczytującej pojedyncze bloki. Żeby było śmiesznie robił to tylko dla dużych plików które wymagały podziału i rozmieszczenia w różnych blokach. Szybko udało się dojść że to strcpy() powoduje segmenatation, ale jak to możliwe ?
[sourcecode lang="c"]
do {
tempBlock = __file_blocks[tempBlock.nextBlock_];
strcpy(data, tempBlock.data_);
fwrite((char*)tempBlock.data_, 1, strlen(tempBlock.data_), destFile);
} while(tempBlock.nextBlock_ != -1);
[/sourcecode]
Oczywiście musiało się okazać że błąd nie tkwi tak gdzie by się wydawało. Jego zaistnienie powodował brak znakcznika końca tablicy, czyli tego maginczego ‘\0′. Więc szybko poprawiłem, dopisując go do tablicy, ale z rozpędu zapisałem ten znacznik już za tablicą(jako indeks użyłem rozmiaru tablicy, zapominając na chwilę o tym że ostatni indeks tablicy to rozmiar-1), tak że wielkie moje było zdziwienie gdy okazało się że jakimś dziwnym zrządzeniem losu program napisuje mi zmienną będącą już za pętlą wartością 0. Na szczęście niefortunną pomyłkę udało mi się znaleźć przed oddaniem projektu.
Warsztat
pejotr.log
- Umarł król niech żyje król 04/03/2009
- Symfony vs Zend Framework 23/02/2009
- Nowości w Zend Framework 17/02/2009
- Polski Alfabet Morse’a 12/02/2009
- Sztuka programowania w C 07/02/2009
Categories
- Bez kategorii (3)
- Hydepark (6)
- Linux (9)
- Programowanie (32)
- VoIP (4)
- Windows 2008 (1)
- WWW (4)
- Życie (3)
- Studia (3)
Blogroll
- Antoni Jakubiak – zeznania programisty
- Karol “Xion” Kuczmarski
- Na Jawie
- O technologiach dla języka Java
- Piotr “Riddle” Petrus
- Racjonalny developer
- Tomasz “Zyx” Jędrzejewski
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Mar | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||