<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8373327933322912173</id><updated>2011-12-27T11:21:49.092+01:00</updated><category term='nowosci'/><category term='pspad'/><category term='decrypt'/><category term='zmiany'/><category term='encoding'/><category term='bug'/><category term='projekt'/><category term='offline'/><category term='pivot'/><category term='github'/><category term='benchmark'/><category term='open source'/><category term='api'/><category term='syntax'/><category term='pdo'/><category term='nirsoft'/><category term='tworzenie'/><category term='insert'/><category term='programowanie'/><category term='browsers'/><category term='serwer'/><category term='sysinternals'/><category term='string'/><category term='xampp'/><category term='module'/><category term='zarzadzanie'/><category term='encrypt'/><category term='simple_validation'/><category term='simple_acl'/><category term='css'/><category term='winmerge'/><category term='git'/><category term='fieldset'/><category term='autoryzacja'/><category term='rss'/><category term='utf8'/><category term='compare'/><category term='class'/><category term='simple_modeler'/><category term='wiele do wielu'/><category term='cakephp'/><category term='windows'/><category term='authorization'/><category term='database'/><category term='manual'/><category term='simple_forms'/><category term='hasla'/><category term='google analytics'/><category term='tabele'/><category term='short tags'/><category term='specyfikacja'/><category term='mysql'/><category term='php'/><category term='check'/><category term='total commander'/><category term='startup'/><category term='reset'/><category term='licence'/><category term='parsowanie'/><category term='coding style'/><category term='mantis'/><category term='zarzadzanie czasem'/><category term='arrayaccess'/><category term='freelancer'/><category term='umowa'/><category term='kohanaphp'/><category term='inclued'/><category term='ie6'/><category term='magic methods'/><category term='zmienne'/><category term='ie7'/><category term='bugtracker'/><category term='symfony'/><category term='fun'/><category term='framework'/><category term='result'/><category term='simple_auth'/><category term='legend'/><category term='web design'/><category term='svn'/><category term='utilities'/><category term='bannery'/><category term='google'/><title type='text'>tips, tricks and other web bricks</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4475200011757827498</id><published>2010-10-05T19:20:00.000+02:00</published><updated>2010-10-05T19:20:48.569+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_forms'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_validation'/><title type='text'>Simple_Forms</title><content type='html'>na bazie wczesniejszego pomyslu (Simple_Validation) stworzylem &lt;a href="http://github.com/thejw23/simple_forms"&gt;Simple_Forms&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;idea jest prosta - wyrzucic do osobnej klasy caly proces walidacji, przypisywania wartosci z bazy, ustawiania nowych wartosci (przeslanych w formularzu) i komunikatow o bledach. taka klase mozna pozniej wielokrotnie wykorzystywac w roznych miejscach.&lt;br /&gt;tak jak wczesniej, calosc raczej skupia sie na walidacji i przypisywaniu wartosci niz generowaniu kodu html dla widokow - od tego jest klasa Form.&lt;br /&gt;&lt;br /&gt;przyklad dzialania:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$data = simplemodeler::instance('users')-&gt;load($id);&lt;br /&gt;    $simpleform = new sampleformer;&lt;br /&gt;    $simpleform-&gt;init()-&gt;set_fields();&lt;br /&gt;&lt;br /&gt;    if ($simpleform-&gt;submit() AND $simpleform-&gt;validate()) &lt;br /&gt;    {&lt;br /&gt;        $result = $data-&gt;set_fields($simpleform-&gt;form_fields)-&gt;save();&lt;br /&gt;        echo "done!";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    $simpleform-&gt;form_database($id, $data);&lt;br /&gt;    $simpleform-&gt;form_populate($this-&gt;template-&gt;content);&lt;/blockquote&gt;&lt;br /&gt;kod jest prosty i czytelny, zachecam do lektury.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4475200011757827498?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4475200011757827498/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/10/simpleforms.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4475200011757827498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4475200011757827498'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/10/simpleforms.html' title='Simple_Forms'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2126262405286016265</id><published>2010-06-03T15:48:00.001+02:00</published><updated>2010-06-03T21:19:19.295+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Git, Windows i Github - podstawy</title><content type='html'>opis zakladania i konfiguracji konta na gihtub znajduje sie na &lt;a href="http://help.github.com/"&gt;github&lt;/a&gt;. tutaj opisze co trzeba robic dalej aby lokalnie zalozyc repozytorium z projektem, wykonywac na nim podstawowe czynnosci, a nastepnie przenosic zmiany do zdalnego repozytorium np. na github.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;zagladamy na strone &lt;a href="http://code.google.com/p/msysgit"&gt;mssygit&lt;/a&gt;. trzeba pobrac najnowsza paczke i zainstalowac.&lt;br /&gt;&lt;br /&gt;dalej typowa sytuacja powinna wygladac mniej wiecej tak:&lt;br /&gt;- na swoim komputerze tworzymy nowy katalog z projketem. moze to byc gdzies 'na boku', z dala od httpdocs, albo wlasnie localhost/projekt.&lt;br /&gt;- na nowym katalogu klikamy PPM i z menu wybieramy 'git bash here'.&lt;br /&gt;&lt;br /&gt;teraz mamy konsole git. pierwsze co trzeba zrobic, to:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git init&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;co stworzy lokalne repozytorium. nastepnie do katalogu z repozytorium kopiujemy/tworzymy pliki projektu itd. jak juz wszystko jest (czyli mamy wszystkie pliki niezbedne aby zaczac/kontynuowac projekt) mozemy wykonac nastepne dwa polecenia:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;br /&gt;oraz&lt;br /&gt;&lt;code&gt;git commit -a -m "komentarz"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;pierwsze doda wszystkie pliki do repozytorium. drugie zrobi commit wszystkich zmian.&lt;br /&gt;&lt;br /&gt;na razie wszystko jednak idzie lokalnie. jesli chcemy 'pchnac' te zmiany na github potrzebne jest kolejne polecenie:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git push [adres_repozytorum] master&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;doda ono wszystkie pliki do wskazanego repozytorium, do branch master (wskazana w poleceniu). jesli chcemy na inna branch dodac, wystarczy zmienic master na odpowiednia nazwe.&lt;br /&gt;&lt;br /&gt;i tak oto doszlismy do branch. lokalnie nowy branch dodajemy za pomoca polecenia:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git branch [nazwa]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;kasujemy za pomoca&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git branch -D [nazwa]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;przelaczamy sie pomiedzy branch'ami za pomoca&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git checkout [nazwa]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;natomiast tagi dodajemy za pomoca&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git tag [nazwa]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;a kasujemy &lt;br /&gt;&lt;br /&gt;&lt;code&gt;git tag -d [nazwa]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;aby przeniesc tagi do zdalnego repozytorium musimy uzyc:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git push --tags [adres_repozytorum]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;dodane do zdalnego repozytorium tagi kasujemy poprzez&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git push [adres_repozytorum] :[nazwa_tagu]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;analogicznie ze zdalnego repozytorium kasujemy branch:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git push [adres_repozytorum] :[nazwa_branch]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;aby podejrzec historie zmian wstukujemy:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git log&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;aby pobrac zdalne repozytorium do siebie wystarczy:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git pull [adres_repozytorium] [branch]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;gdzie [branch] to najczesciej bedzie 'master'.&lt;br /&gt;&lt;br /&gt;teraz kilka uwag:&lt;br /&gt;- tag jest niczym innym jak zapisem aktualnego stanu branch na ktorej jestesmy. jesli wszystko gra, jest stabilnie, warto zrobic tak, aby na github ludzie mogli pobrac z download konkretna wersje.&lt;br /&gt;- branch dziala w ten sposob, ze zmiana branch powoduje podmiane plikow w projekcie. czyli mam projekt z master branch np. dla kohana3. ale chce dodac branch dla kohana2 ze starsza wersja plikow. wtedy powinienem zrobic wszystkie commity dla master. przeniesc (nie skopiowac) pliki na bok, podgrac pliki z kohana2. dodac branch, zrobic checkout, zrobic add, zrobic commit. i teraz: jesli zrobie checkout dla branch kohana3 - w katalogu powinny pojawic sie pliki dla kohana3. jesli zrobie nastepnie checkout dla kohana2 - w katalogu pojawia sie pliki dla kohana2. prawda, ze proste i wygodne?&lt;br /&gt;&lt;br /&gt;poniewaz polecen kilka jest, warto sobie zautomatyzowac czesc z nich. w katalogu gdzie zainstalowalismy msysgit i podkatalogu bin (np. \Program Files\Git\bin\) tworzymy nowy plik, np. gitc (bez rozszerzenia) o zawartosci:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if [ "$1" == "" ]&lt;br /&gt;then&lt;br /&gt;echo "podaj komentarz!";&lt;br /&gt;exit;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;git add .&lt;br /&gt;git commit -a -m "$1"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;i zapisujemy. dzieki temu w konsoli git wstukujac: gitc "jakis komentarz", wykonamy najpierw git add, a nastepnie git commit -a -m, z naszym komentarzem. jesli zapomnimy o komenatrzu to dostaniemy ladne przypomnienie.&lt;br /&gt;&lt;br /&gt;ciekawszy jednak moze byc drugi skrypt. jesli mamy np. 4 projekty na github, to zamiast klepac za kazdym razem dlugiego adresu repozytorum mozna stworzyc plik gitp o tresci:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;case $1 in&lt;br /&gt;ps) repo="git@github.com:user/project_super.git" ;shift;; &lt;br /&gt;pg) repo="git@github.com:user/project_great.git" ;shift;; &lt;br /&gt;pd) repo="git@github.com:user/project_divine.git" ;shift;; &lt;br /&gt;*)  echo "nieznane repozytorium!"; exit ;;&lt;br /&gt;esac &lt;br /&gt;git push $repo $2&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;i teraz klepiac: gitp ps master, wyslemy zmiany na projekt super na branch master. podajac inne niz zadeklarowane repo dostaniemy ladny komunikat. ktos moze jednach chciec wybierac z listy, nic prostszego:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;echo "jakie repozytorium?"&lt;br /&gt;echo "1) project_super"&lt;br /&gt;echo "2) project_great"&lt;br /&gt;echo "3) project_divine"&lt;br /&gt;echo "9) exit"&lt;br /&gt;read case;&lt;br /&gt;case $case in&lt;br /&gt;1) repo="git@github.com:user/project_super.git" ;shift;; &lt;br /&gt;2) repo="git@github.com:user/project_great.git" ;shift;; &lt;br /&gt;3) repo="git@github.com:user/project_divine.git" ;shift;; &lt;br /&gt;*) echo "nieznane repozytorium!"; exit ;;&lt;br /&gt;esac &lt;br /&gt;git push $repo $1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;po wstukaniu: gitp master, dostaniemy zapytanie jakie repozytorium uaktualnic i wybor 1/2/3 oraz 9 dla wyjscia.&lt;br /&gt;&lt;br /&gt;mozliwosci na automatyzacje git jest wiele - to tylko najprostsze przyklady.&lt;br /&gt;&lt;br /&gt;i to by bylo na tyle. tak jak napisalem - to sa tylko podstawy. szybko to pisalem, mam nadzieje, ze sie nigdzie nie walnalem :)&lt;br /&gt;&lt;br /&gt;do poczytania: &lt;a href="http://progit.org/book/"&gt;progit&lt;/a&gt;,&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/"&gt;manual&lt;/a&gt;, &lt;a href="http://book.git-scm.com/"&gt;community book&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2126262405286016265?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2126262405286016265/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/06/git-windows-i-github-podstawy.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2126262405286016265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2126262405286016265'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/06/git-windows-i-github-podstawy.html' title='Git, Windows i Github - podstawy'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-1225876489437568955</id><published>2010-06-02T21:49:00.000+02:00</published><updated>2010-06-02T21:49:40.181+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_acl'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_validation'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Kohana 3.0 czyli zmiany</title><content type='html'>kolejnosc przypadkowa:&lt;br /&gt;&lt;br /&gt;- przechodze z kohana 2.3.4 na 3.0 co w zasadzie rowna sie zakonczeniu prac nad modulami dla 2.x&lt;br /&gt;- repozytorium dla moich projektow zmienilo adres i system. teraz jest to &lt;a href="http://github.com/thejw23/"&gt;Github&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://github.com/thejw23/simple_auth"&gt;Simple Auth&lt;/a&gt; oraz &lt;a href="http://github.com/thejw23/simple_modeler"&gt;Simple Modeler&lt;/a&gt; sa juz dostepne w wersji dla Kohana 3.0, SA w miare dobrze przetestowane, SM wymaga jeszcze sprawdzenia i kilku poprawek&lt;br /&gt;- &lt;a href="http://github.com/thejw23/abandoned_projects"&gt;dodalem&lt;/a&gt; do  repozytorium Simple Acl, Simple Auth Roles, Simple Crypt, Simple Cart w wersji dla Kohana 2.x&lt;br /&gt;- dodalem do repozytorium poprawiony &lt;a href="http://github.com/thejw23/profiler"&gt;profiler&lt;/a&gt; dla Kohana 3&lt;br /&gt;- dodalem do repozytorium &lt;a href="http://github.com/thejw23/simple_validation"&gt;Simple Validation&lt;/a&gt; oraz kilka standardowych ustawien dla nowych projektow (&lt;a href="http://github.com/thejw23/simple_startup"&gt;Simple Startup&lt;/a&gt;)&lt;br /&gt;- &lt;a href="http://github.com/thejw23/boiler_grid"&gt;dodalem&lt;/a&gt; do repozytorium nieco przerobiony framework css Boilerplate, z dodanym gridem oraz generatorem grida&lt;br /&gt;&lt;br /&gt;z czasem pojawi sie &lt;a href="http://github.com/thejw23/simple_cart"&gt;Simple Cart&lt;/a&gt; dla 3.0 - najpierw jednak chce miec finalna wersje Simple Auth oraz Simple Modeler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-1225876489437568955?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/1225876489437568955/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/06/kohana-30-czyli-zmiany.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1225876489437568955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1225876489437568955'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/06/kohana-30-czyli-zmiany.html' title='Kohana 3.0 czyli zmiany'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8861926612129341679</id><published>2010-05-26T19:56:00.000+02:00</published><updated>2010-05-26T19:56:49.611+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>kartka i olowek</title><content type='html'>tak to juz jest, ze nic nie zastapi kartki i olowka/dlugopisu jesli chodzi o rozwiazywanie niektorych problemow informatycznych. jednym z takich zastosowan jest projektowanie ukladu elementow na stronie - znacznie szybciej mozna to zrobic na kartce, niz od razu na komputerze, albo po prostu ja nie trafilem na dedykowane temu celowi oprogramowanie, ktore faktycznie dziala tak jak powinno. w kazdym razie &lt;a href="http://konigi.com/tools/graph-paper"&gt;tutaj&lt;/a&gt; znajduja sie gotowe do pobrania pliki przystosowane do projektowania stron - calosc jest ladnie podzielona na 24 kolumnowy grid, rozne wersje itd. przy najblizszej okazji na pewno sprawdze jak to w praktyce wypada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8861926612129341679?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8861926612129341679/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/05/kartka-i-olowek.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8861926612129341679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8861926612129341679'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/05/kartka-i-olowek.html' title='kartka i olowek'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-1964379344022430448</id><published>2010-04-29T22:42:00.001+02:00</published><updated>2010-04-29T22:42:53.118+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pspad'/><title type='text'>PSPad - edytor dla programisty php</title><content type='html'>kazdy programista ma swoj ulubiony edytor, chyba kazdy tez co jakis czas robi rozeznanie czy nic lepszego sie nie pojawilo. ja po dluzszej przygodzie z Notepad++ przesiadlem sie na PSPad i jest mi z nim bardzo dobrze. oczywiscie wymagal on drobnych poprawek - i to o nich chcialem napisac, podzielic sie informacja co zrobic, aby PSPad byl jeszcze lepszy.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;1) dodatkowe skrypty&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.pspad.com/files/pspad/rozsireni/261-ToDoListJS1.00.zip"&gt;ToDos&lt;/a&gt;&lt;/b&gt; - skrypt pozwala na wyswietlenie listy wpisanych w tresci plikow znacznikow '//TODO: whatever'. mozna to zrobic dla otwartego pliku, wszystkich otwartych plikow lub dla calego projektu. bardzo wygodne, daje pewnosc, ze nie zapomnimy o czyms co bylo do zrobienia/poprawienia. co prawda jest on zalaczony z edytorem, ale w starej wersji, ktora nie jest kompatybilna. poprawiona wersje trzeba sobie sciagnac z netu i zastapic stary plik. plik ToDoList.js powinien trafic do podkatalogu \Script\JScript\&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.phdesign.com.au/download/convertindent_1_0.zip"&gt;ConvertIndent&lt;/a&gt;&lt;/b&gt; i umozliwia zmiane wszystkich poczatkowych wciec tekstu ze spacji na tabulacje. moze to byc dla calego pliku, moze tez dla zaznaczonego bloku. bardzo przydatne. warto dodac tez skrot klawiszowy do przelacznia Show Special Chars. wtedy widac czy plik jaki otwieram ma spacje, czy tabulacje, czy moze czesc tabulacji i w niektorych miejscach spacje itd. plik ConvertIndent.vbs powinien trafic do podkatalogu \Script\VBScript\.&lt;br /&gt;&lt;br /&gt;warto dodac, iz obydwa skrypty maja skroty klawiszowe. mozna je dowolnie zmieniac w samym skrypcie.&lt;br /&gt;&lt;br /&gt;2) kolory&lt;br /&gt;polecam Ocean Depths theme. standardowo jest w PSPad ale wymaga kilku poprawek. pierwsza z nich jest diff, ktory wyglada tragicznie. kolejna aktywna linia. inna kolory w konsoli (czyli tam gdzie pojawiaja sie wyniki np. ze skryptu ToDos) czy kolorowanie skladni plikow SQL.&lt;br /&gt;&lt;br /&gt;3) ustawienia i zbedne dodatki&lt;br /&gt;kilka standardowych ustawien wymaga zmiany, np. Real Tabs, kilka skrotow klawiszowych pokrywajacych sie z polskimi literami. kilka plikow mozna wywalic, zbedne kolorowania skladni, autocomplete, template, niepotrzebne skrypty itp. skoro nie sa potrzebne, to po co maja miejsce zajmwowac i (prawdopodobnie) byc ladowane do pamieci przy kazdym uruchomieniu program.&lt;br /&gt;&lt;br /&gt;ponizej zamieszczam printscreeny z ustawieniami i kolorami.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nsV-pV8mI/AAAAAAAAAB4/0245VNnm9pQ/s1600/colors.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nsV-pV8mI/AAAAAAAAAB4/0245VNnm9pQ/s320/colors.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;s&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_XdQ-3geYeXU/S9nsYdMVzzI/AAAAAAAAACA/MCOR6lY7dSg/s1600/default.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XdQ-3geYeXU/S9nsYdMVzzI/AAAAAAAAACA/MCOR6lY7dSg/s320/default.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;sd&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nsaQ08SJI/AAAAAAAAACI/Ef5goHxwE-Q/s1600/diff.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nsaQ08SJI/AAAAAAAAACI/Ef5goHxwE-Q/s320/diff.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;er&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nscxwdFzI/AAAAAAAAACQ/DNiDLVEbWAo/s1600/keys.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nscxwdFzI/AAAAAAAAACQ/DNiDLVEbWAo/s320/keys.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nseetf9jI/AAAAAAAAACY/5dO_DP8n2MM/s1600/multihighlighter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nseetf9jI/AAAAAAAAACY/5dO_DP8n2MM/s320/multihighlighter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nsgTF09lI/AAAAAAAAACg/8GEcPQrOYqc/s1600/oceandepths.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nsgTF09lI/AAAAAAAAACg/8GEcPQrOYqc/s320/oceandepths.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XdQ-3geYeXU/S9nsh6vklYI/AAAAAAAAACo/kDoW7xvEAnM/s1600/tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XdQ-3geYeXU/S9nsh6vklYI/AAAAAAAAACo/kDoW7xvEAnM/s320/tabs.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nt8H6h2iI/AAAAAAAAACw/0XjIlqTIn7I/s1600/sql.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XdQ-3geYeXU/S9nt8H6h2iI/AAAAAAAAACw/0XjIlqTIn7I/s320/sql.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-1964379344022430448?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/1964379344022430448/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/04/pspad-edytor-dla-programisty-php.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1964379344022430448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1964379344022430448'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/04/pspad-edytor-dla-programisty-php.html' title='PSPad - edytor dla programisty php'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XdQ-3geYeXU/S9nsV-pV8mI/AAAAAAAAAB4/0245VNnm9pQ/s72-c/colors.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8345676789001307951</id><published>2010-02-19T20:02:00.000+01:00</published><updated>2010-02-19T20:02:47.447+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>szybkie kasowanie katalogow svn</title><content type='html'>prosty skrypt kasujacy wszystkie katalogi .svn w projekcie (we wszystkich podkatalogach). nic odkrywczego, ale czasami sie przydaje.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;for /R %%i in (.svn) do rd /s/q "%%i"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;nalezy go zapisac do pliku .cmd, skopiowac do katalogu zawierajacego .svn i uruchomic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8345676789001307951?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8345676789001307951/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/02/szybkie-kasowanie-katalogow-svn.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8345676789001307951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8345676789001307951'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/02/szybkie-kasowanie-katalogow-svn.html' title='szybkie kasowanie katalogow svn'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7137873125392804215</id><published>2010-01-19T22:37:00.005+01:00</published><updated>2010-06-03T16:51:18.917+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inclued'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Inclued pod windows</title><content type='html'>Inclued jest ciekawym rozszerzeniem php pozwalajacym zrzut do pliku informacji na temat includowanych plikow. nie jest to zazwyczaj do niczego niezbedne, ale czasami milo popatrzec na &lt;a href="http://www.chehodgins.com/wp-content/uploads/2009/04/inclued.png"&gt;takie&lt;/a&gt;&amp;nbsp;wykresy, aby moc ocenic stopien komplikacji frameworkow czy rozwiazan ecommerce (lub wlasnych CMSow itd).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;zrodla rozszerzenia sa dostepne np. na &lt;a href="http://t3.dotgnu.info/blog/tags/inclued/"&gt;stronie domowej&lt;/a&gt; autora (wersja 0.3), a w sieci jest kilka przykladow jak to zrobic pod linuxem (np. &lt;a href="http://care2x.wordpress.com/2008/08/24/using-inclued-03-under-ubuntu-804/"&gt;tutaj&lt;/a&gt;), jednak nigdzie nie znalazlem informacji na temat uchomienia tego pod windowsem. juz mialem kompilowac, ale w koncu udalo wyszperac gotowa wersje, w postaci pliku dll. calosc testowana na xampp z php 5.3. tak wiec:&lt;br /&gt;&lt;br /&gt;1) pobieramy z&amp;nbsp;&lt;a href="http://downloads.php.net/pierre/"&gt;tego adresu&lt;/a&gt; odpowiednia wersje pliku. szukamy plikow 'php_inclued-' z odpowiednia dla nas koncowka. phpinfo() prawde powie, u mnie to bylo php_inclued-5.3-svn20091211-VC6-x86.zip (ew. wersja z VC9, nie pamietam, na pewno wersja 'nts')&lt;br /&gt;2) dodajemy w php.ini nowy wpis 'extension=php_inclued.dll' oraz 'inclued.enabled = On' - nie dodajemy inclued.dumpdir, u mnie to nie chcialo dzialac, generowalo puste pliki.&lt;br /&gt;3) restart apache i mozna testowac&lt;br /&gt;4) w wybranym pliku bedacym punktem wejscia* do frameworka czy innego systemu (zazwyczaj index.php) dodajemy na samym koncu:&lt;br /&gt;&lt;br /&gt;$fp = fopen("dump.me", "w");&lt;br /&gt;fwrite($fp, serialize(inclued_get_data()));&lt;br /&gt;fclose($fp);&lt;br /&gt;&lt;br /&gt;co stworzy/nadpisze plik dump.me i doda do niego zrzut includowanych klas. nastepnie uruchamiamy przegladarke, wchodzimy na strone, a jak sie zaladuje, sprawdzamy czy jest plik dump.me,&lt;br /&gt;teraz potrzebujemy plik gengraph.php, do sciagniecia wraz ze zrodlami inclued czyli &lt;a href="http://t3.dotgnu.info/code/inclued-0.3.tar.gz"&gt;tutaj&lt;/a&gt;. uruchamiamy go z lini polecen, cmd i pozniej: php.exe /sciezka/do/pliku/gengraph.php -i /sciezka/do/pliku/dump.me&lt;br /&gt;w efekcie otrzymamy plik inclued.out.dot - polowa sukcesu za nami. teraz potrzebny jest &lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt;, ktory to pobieramy i instalujemy. dzieki niemu przerobimy .dot na ladny wykres. po zainstalowaniu Graphviz przechodzimy do katalogu gdzie jest zainstalowany, nastepnie do bin i uruchamiamy z linii polecen:&lt;br /&gt;dot -Tpng -o inclued.png /sciezka/do/pliku/inclued.out.dot&lt;br /&gt;o i mozemy cieszyc sie wykresami. przyklady wygenerowane dla:&lt;br /&gt;&lt;br /&gt;KohanaPHP 2.3.4 - &lt;a href="http://img683.imageshack.us/img683/7158/included23.png"&gt;click&lt;/a&gt;&lt;br /&gt;KohanaPHP 2.4RC2 - &lt;a href="http://img94.imageshack.us/img94/9200/included24.png"&gt;click&lt;/a&gt;&lt;br /&gt;KohanaPHP 3.0.3&amp;nbsp; - &lt;a href="http://img706.imageshack.us/img706/1452/included303.png"&gt;click&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;nie sa to schematy idealne. wygenerowane sa na podstawie stron startowych frameworka, ktore nie korzystaja z bazy danych, a 3.0.3 nie korzysta z prawie niczego (co nie zmienia faktu, ze jest to bardzo czysty wykres i dobrze przemyslany framework).&lt;br /&gt;&lt;br /&gt;milej zabawy :)&lt;br /&gt;&lt;br /&gt;jedna uwaga. gengraph.php korzysta z getopt(), pod windowsem dla php starszego niz 5.3 sa z tym problemy, trzeba kombinowac.&lt;br /&gt;&lt;br /&gt;* - oczywiscie jest to uproszczenie, mozna ten kod dodac w dowolnym pliku, ale dla frameworkow chyba najwygodniej na koncu index.php, a nastepnie wejsc od razu na interesujacy nad adres, z odpowiednim kontrolerem, tak aby zaladowaly sie biblioteki ktore chcemy miec na wykresie.&lt;br /&gt;&lt;br /&gt;EDIT&lt;br /&gt;zapomnialem o jednej istotnej sprawie. gengraph.php, linia 126: zamiast 'size="6.6";' wpisujemy 'ratio="auto";' - dzieki temu wykresy beda mialy duze rozmiary, latwe do odczytania.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7137873125392804215?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7137873125392804215/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2010/01/inclued-pod-windows.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7137873125392804215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7137873125392804215'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2010/01/inclued-pod-windows.html' title='Inclued pod windows'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2740123742633679436</id><published>2009-11-25T20:21:00.000+01:00</published><updated>2009-11-25T20:21:34.973+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zarzadzanie czasem'/><title type='text'>Printable Task Forms</title><content type='html'>ostatnio natrafilem na link do wpisu z ciekawymi &lt;a href="http://davidseah.com/blog/the-printable-ceo-series/"&gt;arkuszami do zarzadzania czasem&lt;/a&gt;. ich celem jest ulatwienie zarzadzania taskami, tym co aktualnie mamy do zrobienia lub powinnismy niedlugo zrobic.&lt;br /&gt;&lt;br /&gt;arkuszy jest calkiem sporo, a w polaczeniu z kilkoma wariantami kazdego to juz na prawde duzo. mnie sie podoba &lt;a href="http://davidseah.com/pub/downloads/pceo/tou/PCEO-TOU-3UP.pdf"&gt;Task Order Up 3UP on 8.5x11 paper, 3 per page&lt;/a&gt;, jest &amp;nbsp;czytelny i idealnie sie nadaje do zapisywanie krotkich pomyslow zwiazanych z aktualna praca, rzeczy ktore powinnismy zrobic jak tylko skonczymy to co aktualnie zrobimy itd. tak, mozna to wszystko zapisywac na malych karteczkach i potem szukac 'na ktorej to bylo', albo na jednej A4 i pozniej cala przegladac w poszukiwaniu tej jednej notatki - w przytoczonym szablonie ramki, linie, boxy i podzial na 3 czesci pozwalaja na jednej kartce A4 prowadzic zapiski dla kilku spraw nie zwiazanych ze soba i znacznie poprawiaja czytelnosc tak prowadzonych notatek.&lt;br /&gt;&lt;br /&gt;tak jak napisalem na stronie jest duzo wiecej plikow .pdf do sciagniecia, kazdy cos dla siebie moze znalezc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2740123742633679436?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2740123742633679436/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/11/printable-task-forms.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2740123742633679436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2740123742633679436'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/11/printable-task-forms.html' title='Printable Task Forms'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-3950782855980220601</id><published>2009-10-14T20:20:00.003+02:00</published><updated>2009-10-22T10:29:04.625+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freelancer'/><category scheme='http://www.blogger.com/atom/ns#' term='umowa'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>freelancer i umowa, czyli jak nie zwariowac</title><content type='html'>zabierajac sie za robienie stron, umowa jest podstawowa rzecza od ktorej powinno sie zaczynac prace. &lt;b&gt;nie ma umowy - nie ma pracy&lt;/b&gt;. koniec i kropka. poczatkujace osoby lubia wierzyc na slowo i np. wykonac polowe serwisu bez umowy, ale takie postepowanie w koncu sie zemsci, a jedyna stratna na tym osoba bedzie programista. dlatego warto sie zastanowic co tak na prawde powinno byc w umowie aby on tez byl zabezpieczony w razie konfliktu.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;0)&lt;/b&gt; wszystko musi byc ustalane &lt;b&gt;na pismie&lt;/b&gt;, mozna w to wliczyc email. nie mam emaila z informacja o czyms - nie bede tego robil. na wszelki wypadek, klient nie powie pozniej, ze czegos nie chcial, albo chcial inaczej.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1)&lt;/b&gt; umowa zawsze powinna miec &lt;b&gt;zakres prac oraz specyfikacje&lt;/b&gt; dokladnie wyjasniajaca (strona po stronie) funkcjonalnosc wszystkich elementow strony. bez tego mozna ocenic strone na xx godzn pracy, a w trakcie zorientujemy sie, ze na polowie podstron wymagane sa fikusne animacje js plus zaleznosci miedzy obiektami w bazie maja byc znacznie bardziej skomplikowane niz poczatkowo deklarowano i... jestesmy yyy godzin pracy &amp;nbsp;(i zzz PLN) w plecy - bo miesci sie to w zakresie umowy i ogolnych ustaleniach, ale nie bralismy tego pod uwage przy wycenie.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2)&lt;/b&gt; specyfikacja to jedno, ale wazne jest jasne postawienie sprawy: specyfikacja zawiera &lt;b&gt;podstawowa funkcjonalnosc&lt;/b&gt; i to programista okresla co to znaczy 'podstawowa funkcjonalnosc'. czyli nikt nam nie wcisnie finezyjnego prezentowania wynikow wyszukiwania na stron, gdzie animowany renifer przeskakuje przy stronicowaniu. w umowie bylo 'wyszukiwanie i stronicowanie' i to ja okreslam co to znaczy (chyba, ze w specyfikacji jest uwzgledniony renifer)&lt;br /&gt;&lt;br /&gt;i chyba tyle jesli chodzi o to aby nie dac sie zrobic w bambuko i nie pracowac 50% wiecej za ta sama kase. pozostale punkty sa juz tylko emanacja rownouprawnienia w umowie.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3)&lt;/b&gt; &lt;b&gt;akceptacja dziela&lt;/b&gt;. czesto wymagana do zaplaty. warto dac zapis, ze musi byc on np. w przeciagu 7 dni od daty przekazania dziela, po tym terminie dzielo uznaje sie za zaakceptowane. inaczej mozemy sporo czekac az laskawie nam panujacy klient przeleje pieniadze.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4)&lt;/b&gt; termin oddania. czesto jest zwiazany z karami za opoznienia. ok, ale co z &lt;b&gt;karami za brak wynagrodzenia&lt;/b&gt;? czyli np. wynagrodzenie jest platne w przeciagu 14 dni od daty akceptacji. kazdy dzien spoznienia wiaze sie kara umowna xxx - gdzie xxx to kara adekwatna do spoznienia z terminem oddania dziela&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5)&lt;/b&gt; &lt;b&gt;konsultacje&lt;/b&gt;. jesli nie ma kwoty za dzielo, a np. kwota za godzine pracy nad strona, to zawsze musi tam byc informacja, ze w ramach pracy nad strona rozumiane sa rowniez wszelkie konsultacje w tej sprawie. konsultacja rowna sie niemal zawsze przekazaniu wiedzy, a od kiedy to jest darmowe? (ok, sa instytucje &amp;nbsp;pro publico bono, prawnicy tez maja czasami darnowe porady... ale nie kazdy musi)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6)&lt;/b&gt; &lt;b&gt;klient&lt;/b&gt; ma strone, a jeszcze &lt;b&gt;nie zaplacil&lt;/b&gt;. zamiast siedziec i plakac warto dac w umowie podpunkt informujacy, iz do czasu pelnego rozliczenia dziela prawa autorskie i wszystkie inne naleza do wykonawcy, zamawiajacy nie ma prawa dysponowac dzielem bez zgody wykonawcy. do czasu wyplaty pelnego wynagrodzenia wykonawca ma prawo usunac wczesniej przekazane dzielo w stanie w jakim ono jest w dniu skasowania. do czasu zaplaty pelnego wynagrodzenia zamawiajacy nie ma prawa do samodzielnego dysponowania dzielem oraz na zadanie powinien w terminie 24h dzielo usunac z serwera, tak aby nie bylo ono dostepne w internecie. tak na wszelki wypadek jak by zmienili hasla na ftp.&lt;br /&gt;&lt;br /&gt;wiem, temat rzeka. mozna sie zastanawiac po co to miec, po sadach sie ciagac potem? nigdy nie wiadomo. lepiej nosic niz sie prosic - &lt;b&gt;lepiej miec, niz potem zalowac&lt;/b&gt;. to jest kilka podpunktow w umowie dajacych oparcie prawne przed podpisaniem umowy oraz w razie problemow wieksze szanse pomyslnego jej zakonczenia. dzieki nim mamy prawo (a nie tylko mozliwosc, co jest istotna roznica) skasowania klientowi strony jesli nie chce placic. mozemy smialo mowic, ze reniferka nie bylo w umowie i jak chce go miec to musi doplacic. a w razie ciagania sie po sadach mozemy spokojnym krokiem wejsc na sale rozpraw ;)&lt;br /&gt;&lt;br /&gt;oczywiscie &lt;b&gt;sa to tylko luzne uwagi&lt;/b&gt;, a nie gotowe do wstawienia paragrafy. uwagi majace na celu li tylko pokazanie potencjalnych problemow jakie moga sie pojawic oraz jak moze wygladac przykladowe ich unikniecie poprzez odpowiedni zapis w umowie. to, ze umowy nalezy czytac ze zrozumieniem jest chyba oczywiste. inaczej moze sie okazac, ze zrobilismy komus strone za free :)&lt;br /&gt;&lt;br /&gt;EDIT&lt;br /&gt;kilka pomyslow jeszcze mam, zamieszcze tez ten z komentarza.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7) minimalne &lt;/b&gt;&lt;b&gt;wymagania serwera&lt;/b&gt;. musza byc w umowie, kazdy framework je ma, a serwer musi je spelniac. oczywista oczywistosc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8) nowa wersja strony&lt;/b&gt;. jesli robimy nowa wersje strony, tzn. ze istnieje stara, sa dane w bazie itd. wtedy przed wycena konieczne jest uzyskanie dostepu do ftp oraz bazy danych w celu analizy istniejacych rozwiazac. na przyklad czy trzeba baze danych przepisac na nowo, czy tez istniejaca struktura jest ok.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9) zwrot kosztow&lt;/b&gt;. jesli w umowie jest jakis zapis o tym, ze w razie jakiejs wpadki musimy zwrocic zleceniodawcy wszelkie poniesione przez niego koszta (czyli np. nasze wynagrodzenie) to brakuje tam jednego zdania: co rowniez wiaze sie ze zwrotem dziela wykonawcy. skoro cos poszlo nie tak i jest zle, musimy oddac kase, moze jeszcze jakas kara bedzie, to dlaczego zleceniodawca ma dostac gratis owoc naszej ciezkiej pracy? sam fakt zwrotu kosztow oraz bonus w postaci kary umownej powinien byc dla niego wystarczajacy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10)&lt;/b&gt; &lt;b&gt;dobra praktyka&lt;/b&gt;: tam gdzie sie da, strony trozymy na wlasnym serwerze, dopiero na sam koniec przegrywamy gotowy produkt do klienta. wtedy jest prosta zasada: nie ma pieniedzy, nie ma strony.&lt;br /&gt;&lt;br /&gt;i na koniec - wiadomo, to sa umowy. kto nie przeczyta dokladnie, ten bedzie stratny. wiadomo, ze klient nawet jesli sie nie zna, a tym bardziej jesli sie zna, to bedzie w umowie dbal o swoje interesy. wiec kazda umowe nalezy czytac i dbac o swoje. proponowane zmiany sa to tak na prawde wpisy dajace programiscie prawa do terminowej zaplaty, pokrycia kosztow zmian w projekcie czy tez dajace podstawy do uznania, ze strona jest zrobiona jesli spelnia wymagania ze specyfikacji, bez koniecznosci czekania miesiac czy dwa na klienta, az on ja 'klepnie'. wszystko jest dla ludzi, umowy tym bardziej. na koniec moze moral: &lt;b&gt;trzeba tak pracowac i wspolpracowac, aby nie trzeba bylo sie umowami przejmowac&lt;/b&gt;. czego wszyskim zycze :)&lt;br /&gt;&lt;br /&gt;EDIT2&lt;br /&gt;&lt;strong&gt;11) walidacja&lt;/strong&gt;. wiadomo jak jest. strony pod jednymi przegladarkami dzialaja poprawnie, pod innymi nie. wygodnie jest miec zapis np. o uznaniu poprawnosci wyswietlania stworzonej strony www w przegladarkach internetowych decyduje poprawna walidacja wc3 pozwalajaca okreslic czy strona jest zgodna z ogolnie przyjetymi standardami. wyjatek stanowic moga specyficzne skrypty niezbedne do poprawnego dzialania tworzonej strony www.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-3950782855980220601?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/3950782855980220601/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/10/freelancer-i-umowa-czyli-jak-nie.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3950782855980220601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3950782855980220601'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/10/freelancer-i-umowa-czyli-jak-nie.html' title='freelancer i umowa, czyli jak nie zwariowac'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5400102882671662368</id><published>2009-10-10T18:14:00.000+02:00</published><updated>2009-10-10T18:14:13.946+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>KohanaPHP - jak rozwiazywac problemy</title><content type='html'>na polskim forum kohanaphp co jakis czas pojawiaja sie tematy z kategorii 'nie dziala', po czym nastepuje wklejenie fragmentu kodu. rozumiem jesli ma to zwiazek z fameworkiem, moze pytajacy nie wie jakie sa argumenty danej metody itp itd. gorzej jesli jest to problem nie frameworka, ale samego algorytmu.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;zazwyczaj bowiem wystarczy popatrzec na kod, dokonac kilku prostych testow, aby samemu rozwiazac problem. droga bez debuggera powinna mniej wiecej wygladac tak:&lt;br /&gt;- wlaczamy profiler&lt;br /&gt;- w kilku miejscach &amp;nbsp;kodu dodajemy var_dump/echo interesujacych nas zmiennych&lt;br /&gt;- w kluczowym miejscu (np. zapis do bazy) dodajemy zarowno przed jak i po var_dump/echo&lt;br /&gt;- odpalamy strone i widzimy jak kolejno zmieniaja sie wartosci, co daje nam pojecie w ktorym miejsciu nastepuje nieporzadane dzialanie. profiler wyswietli nam wszystkie pozostale informacje (post, get, sesja, cookies czy tez zapytania do bazy)&lt;br /&gt;- widzac w ktorym miejscu zaczyna sie zle dziac wywalamy pozostale echo/var_dump, a tam dodajemy kilka dodatkowych aby wiedziec dokladnie co sie dziele, w ktore petle skrypt wchodzi, w ktore nie i dlaczego (else plus var_dump warunkow) itd&lt;br /&gt;- majac to wszystko samemu mozna naprawic problem, po drodze czegos sie nauczyc&lt;br /&gt;&lt;br /&gt;ja wiem, ze to sa podstawy podstaw, ale chyba nie wszyscy maja pojecie jak sie do tego zabrac. rozumiem, kazdy kiedys zaczynal. teraz jednak czasy sa troche inne, sa frameworki, ktore daja zludne pojecie o tym, ze umie sie programowac (co czesto sprowadza sie do umiejetnosci czytania tutoriali i korzystania z generatorow) i majac przed oczami kod, ktory wlasnie sie napisalo, jest grono osob, ktore nie maja tak na prawde pojecia jak on dziala, tym bardziej jak on powinien dzialac (jak powinien byc rozwiazany dany problem od strony algorytmow) i wreszcie jak zlokalizowac w nim usterki. takie tam pilotowanie samolotu na autopilocie, a chcialo by sie gdzies skrecic czy dowiedziec dlaczego ta czerwona dioda sie swieci 'bo ja jej nie wlaczalem'... ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5400102882671662368?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5400102882671662368/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/10/kohanaphp-jak-rozwiazywac-problemy.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5400102882671662368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5400102882671662368'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/10/kohanaphp-jak-rozwiazywac-problemy.html' title='KohanaPHP - jak rozwiazywac problemy'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5343088106855641415</id><published>2009-10-08T16:34:00.004+02:00</published><updated>2009-10-13T20:15:29.345+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mantis'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracker'/><title type='text'>Mantis - jak dodac wlasny status zagadnienia</title><content type='html'>&lt;a href="http://www.mantisbt.org/"&gt;Mantis&lt;/a&gt; jest jednym z systemow kontroli bledow. nie jest moze idealny, ale ma spore mozliwosci, latwo mozna do skonfigurowac, obsluguje wiele projektow/userow itp itd. w temacie php nie ma (nie znalazlem) chyba lepszego rozwiazania (&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt; czy &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt; nie sa napisane w php), ktore nadal bylo by rozwijane. prosty, czytelny, bez zbednych dodatkow - dziala szybko i tak jak trzeba. dodatkowo jest przetlumaczony na PL co dla wielu jest sporym plusem.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;sama instalacja i konfiguracja jest prosta, ale ostatnio zachcialo mi sie dodac wlasny status zagadnienia. szybko przejrzalem baze i zonk - nie ma ich tam. szybkie skorzystanie z google oraz manuala Mantisa i tak oto znalazlem instrukcje jak dodac wlasny status: trzeba zmodyfikowac kilka plikow konfiguracyjnych. nie bede tu jej przepisywal, odsylam do&amp;nbsp;&lt;a href="http://manual.mantisbt.org/manual.customizing.mantis.customizing.status.values.php"&gt;Customizing Status Values in Mantis BugTracker&lt;/a&gt;&amp;nbsp;- co prawda wpis jest z 2005 roku, ale sprawdzone, dziala z ostatnia stabilna wersja (1.1.8). jedno uzupelnienie: wszystkie pliki custom_ musza byc w katalogu glownym Mantisa.&lt;br /&gt;&lt;br /&gt;EDIT&lt;br /&gt;kolejna rzecza warta zmiany okazal sie wyglad raportu skroconego. czesc pol po prostu jest dla mnie zbedna. sam raport jest w pliku bug_report_page.php, analogicznie raport zaawansowany jest w bug_report_advanced_page.php. aby np. dodac do skroconego raportu przypisanie zagadnienia do uzytkownika wystarczy skopiowac z raportu zaawansowanego dwa odwolania do handler_id oraz sam select wyboru, ktory jest oznaczony jako 'Handler (if permissions allow)'. na koniec mozna np. skasowac z formularza skroconego pola odpowiedzialne za Severity czy Reproducibility i mozna sie cieszyc bardziej funkcjonalnym dodawaniem zagadnien.&lt;br /&gt;&lt;br /&gt;EDIT2&lt;br /&gt;dla niewtajemniczonych, aby w tresci zagadnienia odwolac sie (podac link) do innego zagadnienia wystarczy wpisac jego numer poprzedzony #, czyli np. #0000005 &amp;nbsp;- efektem bedzie link majacy w title tytul oraz status docelowego zagadnienia.&lt;br /&gt;&lt;br /&gt;EDIT3&lt;br /&gt;mantis domyslnie uploaduje pliki do... bazy danych. aby tego uniknac trzeba stworzyc katalog np. mantis/uploads, nadac mu odpowiednie uprawnienia i w config_inc.php ustawic:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$g_file_upload_method = DISK;&lt;br /&gt;$g_absolute_path_default_upload_folder = '/xampp/htdocs/mantis/uploads/';&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5343088106855641415?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5343088106855641415/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/10/mantis-jak-dodac-wlasny-status.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5343088106855641415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5343088106855641415'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/10/mantis-jak-dodac-wlasny-status.html' title='Mantis - jak dodac wlasny status zagadnienia'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4722684156591217933</id><published>2009-09-30T19:00:00.001+02:00</published><updated>2009-09-30T19:02:51.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Re: Który framework wybrać?</title><content type='html'>przeczytalem ostatnio &lt;a href="http://majareq.viawww.pl/ktory-framework-wybrac/"&gt;wypowiedz MajareQ&lt;/a&gt; na temat frameworkow i juz sam wstep zrobil na mnie piorunujace wrazenie:&lt;br /&gt;&lt;br /&gt;"Jeśli się pytasz: “Który framework powinienem wybrać?” to popełniasz błąd logiczny. Zakładasz, że w ogóle potrzebujesz jakikolwiek framework."&lt;br /&gt;&lt;br /&gt;moim zdaniem nie. bledem logicznym jest zakladanie, ze piszac w php nie potrzebuje frameworka :)&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1) start&lt;br /&gt;na dzien dzisiejszy osoba szukajaca frameworka, ktora nie zadala sobie juz wczesniej pytan zadanych przez MajareQ, to na 99% jest osoba, ktora nigdy nie pisala na prawde duzej strony i na 99% w najblizszym czasie jej bedzie robila. wiec nie szuka frameworka do pisania klonu Twittera, czyli bardzo, bardzo wysoka wydajnosc nie jest dla mniej priorytetem. i tu dochodzimy do punktu drugiego&lt;br /&gt;&lt;br /&gt;2) pomijanie calkowicie roli w ktorej frameworki sprawdzaja sie najlepiej&lt;br /&gt;rola polegajaca na szybszym, latwiejszym i przyjemniejszym pisaniu kolejnych aplikacji. frameworki pozwalaja zaoszczedzic duzo czasu, odwalaja za nas brudna robote zwiazana z autoryzacja, formularzami, walidacji itd. jesli 99% (ok, niech bedzie 90%) wykorzystania frameworkow to nie sa strony potrzebujace porad z &lt;a href="http://highscalability.com/"&gt;High Scalability&lt;/a&gt;, to dlaczego mam nie uzywac frameworka, aby lepiej mi sie pracowalo? dlaczego mam pisac wlasne rozwiazania od podstaw i samemu dokonywac zmian na miare wlasnej wiedzy, skoro moge siegnac po cos co jest rozwijane przez osoby co najmniej, a zazwyczaj lepiej, orientujace sie w php? dlaczego nie mam skorzystac z faktu, iz bledy same sie poprawia, nowe funkcje same sie dodadza - wszystko niemal 'magicznie', calkowicie bez mojej ingerencji, po prostu 'pop' i mam kolejna wersje frameworka do sciagniecia. i tak dochodzimy do punktu trzeciego&lt;br /&gt;&lt;br /&gt;3) praca i zabawa&lt;br /&gt;czym innym jest praca, zarabianie z pisania w php, a czym innym bawienie sie w php, pisanie glownie dla przyjemnosci, bez terminow (ew. z odleglymi), rodziny itd. takie pisanie, kiedy po kilku godzinach siedzenia czlowiek ma duza satysfakcje, ze cos zrobil minimalnie lepiej niz bylo wczesniej, czesto po prostu cieszac sie faktem, ze cos sie zrobilo, dziala i jest tak samo funkcjonalne jak inne gotowe rozwiazania dostepne na sieci - ale to jest moje, moje i tylko ja to zrobilem, hoooray :) niestety, czesto pozniej zaczyna sie praca plus rodzina i albo skorzystam z gotowego, sprawdzonego, stabilnego, dzialajacego poprawnie rozwiazania i bede mial gotowa rzecz w 30 minut, albo poswiece najblizsze 4-5h na to aby zrobic to samemu, majac w perspektywie fakt, iz strona nad, ktora pracuje na 90% nie trafi na liste 'optimized by High Scalability'. w 90% przypadkow nie potrzebuje napisac czegos co bedzie musialo miec wydajnosc Twittera, wiec nie bedzie dla mnie roznicy w jakim frameworku to napisze (a roznice w wydajnosci moga byc miedzy nimi duze). i tu dochodzimy do punktu czwartego&lt;br /&gt;&lt;br /&gt;4) framework jaki jest kazdy widzi&lt;br /&gt;na pewno przed wybraniem frameworka trzeba wiedziec czego potrzebujemy, to nie ulega watpliwosci. problem w tym, ze dla 90% wykorzystania frameworkow, wszystkie liczace sie spelniaja te wymagania. maja wsparcie, sa rozwijane, maja obsluge wielu baz, maja mechanizmy wspierajace rozne silniki do cache`owania itd. dlatego wlasciwym kryterium jest to, w ktorym frameworku najlepiej mi sie pracuje. ktory dla mnie i tylko dla mnie jest najfajniejszy. dodatkowo jest jeszcze kolejne kryterium o ktorym warto pomyslec zanim zdecydujemy sie na jakies bardzo niszowe rozwiazanie. i tu dochodzimy do punktu piatego.&lt;br /&gt;&lt;br /&gt;5) w kupie razniej&lt;br /&gt;wlasne rozwiazania sa fajnie, ale jak jestem klientem i mam swoj sklep online napisany na czyims wlasnym silniku, to mam przesrane. tak po prostu. jak mi webmaster odejdzie, to zanim nowy sie polapie, to troche czasu minie - chyba kazdy kiedys robil cos w cudzym kodzie i wie jaka to jest 'przyjemnosc'. a jak wyglada sytuacja jesli mam framework? z nowym webmasterem nie ma problemu, po prostu szukam kogos kto zna dany framewok i sporo problemow z glowy. podobnie jesli mam firme z 20 ITmenami na wlasnym rozwiazaniu. przyjdzie nowa osoba, ile czasu bedzie musiala sie uczyc ? ile czasu bedzie sie uczyl nowy pracownik, ktory zna dany framework? a czas to pieniadz. analogicznie jesli szukam pracy, to znajde ja szybciej znajac gotowe rozwiazania czesto stosowane w firmach.&lt;br /&gt;&lt;br /&gt;6) uwagi koncowe&lt;br /&gt;przewaga frameworkow nad domowymi rozwiazaniami jest zazwyczaj bezpieczenstwo, optymalizacja, 'magiczne' naprawianie bledow i dodawanie nowych funkcjonalnosci, trzymanie sie ogolnie przyjetych standardow, mniejsze lub wieksze wymuszanie pisania zgodnie z MVC. jak dla mnie to wystarczajaca lista, aby zarzucic wlasne rozwiazanie i zajac sie czyms gotowym, czyms co w miare szybko dostosuje do wlasnych potrzeb i bede czul sie 'jak u siebie'. mozna samemu napisac framework, tyko nadal pozostaje jeden minus - samemu trzeba wprowadzac wszelkie poprawki, a  majac gotowe rozwiazanie czas na to przeznaczony moge poswiecic na poza komputerowe hobby. nie sama praca czlowiek zyje.&lt;br /&gt;&lt;br /&gt;konkluzja.&lt;br /&gt;w 95% przypadkow korzystania z frameworkow z niczego nie trzeba rezygnowac czy chodzic na kompromisy. frameworki sprawiaja, ze praca jest szybsza i bardziej efektywna. sprawiaja, ze mniej czasu tracimy na wdrazanie sie w juz istniejace projekty, o ile sa oparte o znany nam framework. funkcjonalnosc frameworkow jest podobna, ale bardzo sie roznia miedzy soba jesli chodzi o detale - dlatego tak wazny jest wybor takiego, ktory nam bedzie odpowiadal i w nim bedziemy najbardziej wydajni. kazdy framework ma swoje plusy i minusy, dobrze jest tez znac podstawy kilku, aby miec realne pojecie o tym czego tak na prawde potrzebujemy. nawet jesli framework X jest ok, to nie znaczy, ze jak poznamy framework Y, nie zorientujemy sie nagle, ze filozofia mu przyswiecajaca jest dla nas bardziej naturalna i mamy dokladnie te same mozliwosci, ale znacznie lepiej dostosowane do naszych potrzeb. &lt;b&gt;dlatego programujac w php nalezy znac jakis framework, a w zwiazku z tym jak najbardziej nalezy pytac o to jaki framework wybrac&lt;/b&gt; i wybierac go z glowa. &lt;br /&gt;&lt;br /&gt;oczywiscie nie nalezy zakladac, ze z marszu napisze w symfony klon Twittera, bo to juz jest problem wydajnosci, a ona znacznie wykracza poza frameworki i jest tematem na osobna dyskusje.&lt;br /&gt;&lt;br /&gt;na koniec odsylam do moich wczesniejszych wpisow w tym temacie:&lt;br /&gt;- &lt;a href="http://thejw23.blogspot.com/2009/03/jaki-framework-wybrac-zanim-zapytasz.html"&gt;jaki framework wybrac - zanim zapytasz...&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://thejw23.blogspot.com/2009/02/dlaczego-kohanaphp.html"&gt;dlaczego KohanaPHP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4722684156591217933?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4722684156591217933/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/re-ktory-framework-wybrac.html#comment-form' title='Komentarze (6)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4722684156591217933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4722684156591217933'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/re-ktory-framework-wybrac.html' title='Re: Który framework wybrać?'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6439698044485316053</id><published>2009-09-28T22:53:00.001+02:00</published><updated>2009-09-28T22:55:12.471+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_validation'/><title type='text'>Simple_Validation</title><content type='html'>jak szalec to szalec. inne podejscie do walidacji, bardziej elastyczne, z regulami walidacji w modelu.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1) libraries/MY_controller.php&lt;br /&gt;&lt;pre class="brush: php"&gt;class Controller extends Controller_Core {&lt;br /&gt;&lt;br /&gt; //reguly walidacji&lt;br /&gt; public $form_rules = array();&lt;br /&gt; //pola do walidacji&lt;br /&gt; public $form_fields = array();&lt;br /&gt; //bledy walidacji&lt;br /&gt; public $form_errors = array();&lt;br /&gt; //obiekt walidatora&lt;br /&gt; public $form_post;&lt;br /&gt; &lt;br /&gt; //dodanie nowego pola do walidacji i formularza &lt;br /&gt; public function make_field($field, $rules = array(), $default = '')&lt;br /&gt; {&lt;br /&gt;  $this-&gt;form_fields[$field] = $default; //przypisanie domyslnej wartosci&lt;br /&gt;  $this-&gt;form_errors[$field] = ''; //ustawienie pustej wiadomosci o bledzie &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //jak wyzej tylko hurtowo&lt;br /&gt; public function make_fields($fields = array()) &lt;br /&gt; {&lt;br /&gt;  if (!empty($fields) AND is_array($fields))&lt;br /&gt;   foreach ($fields as $field)&lt;br /&gt;   {  &lt;br /&gt;    //ustalenie domyslnej pustej wartosci&lt;br /&gt;    $this-&gt;form_fields[$field] = ''; &lt;br /&gt;    //ustawienie pustej wiadomosci o bledzie&lt;br /&gt;    $this-&gt;form_errors[$field] = '';  &lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //przypisanie wartosci do pol&lt;br /&gt; public function assign_values($fields = array()) &lt;br /&gt; {&lt;br /&gt;  if (!empty($fields) AND is_array($fields))&lt;br /&gt;   foreach ($fields as $field =&gt; $value)&lt;br /&gt;   {  &lt;br /&gt;    $this-&gt;form_fields[$field] = $value;  //ustalenie wartosci dla pola&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //przepisanie wartosci i bledow po walidacji&lt;br /&gt; public function set_fields($submit) &lt;br /&gt; { &lt;br /&gt;  if (!empty($submit))  &lt;br /&gt;  {&lt;br /&gt;   $this-&gt;form_fields = arr::overwrite($this-&gt;form_fields, $this-&gt;form_post-&gt;as_array());&lt;br /&gt;   $this-&gt;form_errors = arr::overwrite($this-&gt;form_errors, $this-&gt;form_post-&gt;errors());&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //ustawienie regul walidacji &lt;br /&gt; public function set_rules($all_rules) &lt;br /&gt; { &lt;br /&gt;  if (!empty($all_rules) as is_array($all_rules))  &lt;br /&gt;  {&lt;br /&gt;   foreach ($all_rules as $field =&gt; $rules)&lt;br /&gt;   {&lt;br /&gt;    foreach ($rules as $rule) &lt;br /&gt;    {&lt;br /&gt;     //przypisanie reguly do pola&lt;br /&gt;     $this-&gt;form_post-&gt;add_rules($field, $rule); &lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2)kontroler&lt;br /&gt;&lt;pre class="brush: php"&gt;$this-&gt;form_post = Validation::factory($this-&gt;input-&gt;post())-&gt;pre_filter('trim');&lt;br /&gt;//stworz pola formularza (wartosc oraz ew. blad walidacji)&lt;br /&gt;$this-&gt;make_fields(array_keys($crud_model-&gt;validation)); &lt;br /&gt;//przypisz reguly walidacji&lt;br /&gt;$this-&gt;set_rules($crud_model-&gt;validation);&lt;br /&gt;//opcjonalnie mozna przypisac domyslne wartosci&lt;br /&gt;$this-&gt;assign_values(array('page_title'=&gt;'tytuł'));&lt;br /&gt;//waliduj&lt;br /&gt;$this-&gt;form_post-&gt;validate();&lt;br /&gt;//reszta jak w poprzednim przykladzie&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3) model&lt;br /&gt;&lt;pre class="brush: php"&gt;public $validation = array(&lt;br /&gt;     'page_title' =&gt; array('required'),&lt;br /&gt;     'meta_title' =&gt; array('required'),&lt;br /&gt;     'meta_keywords' =&gt; array('required','length[4,7]'),&lt;br /&gt;     'meta_description' =&gt; array('required')&lt;br /&gt;     ); &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;gotowe. plusy sa takie, ze pola deklarujemy tylko raz w modelu, nie ma potrzeby ponownego ich wpisywania. mozna dowolnie nimi manipulowac, dodawac nowe, kasowac juz dodane (jesli np. ktores pole nie jest w danym formularzu potrzebne). mozna dowolnie zmieniac reguly walidacji, nie jestesmy uwiazani z tymi, ktore sa w modelu. &lt;br /&gt;&lt;br /&gt;generalnie to koncept, tak jak poprzedni przyklad nie jest super hiper extra rozwiazanie powalajace na kolana, zamieszczam w celach edukacyjnych, moze ktos posklada z tego swoja wizje obslugi formularzy i bedzie szczesliwy :) formularze i CRUD sa podstawa kazdej administracji strona, im latwiej (jest to kwestia indywidualna i wzgledna) bedzie sie nam z nimi pracowalo, tym wydajniejsi bedziemy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6439698044485316053?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6439698044485316053/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simplevalidation.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6439698044485316053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6439698044485316053'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simplevalidation.html' title='Simple_Validation'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8797250863306899052</id><published>2009-09-28T15:47:00.003+02:00</published><updated>2009-09-28T17:06:53.156+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>KohanaPHP - przykladowa walidacja i zapis do bazy</title><content type='html'>przykladowy kontroler realizujacy CRUD - tworzenie, zapis i kasowanie rekordu. sam kontroler, poniewaz widok jest podobny do tego z poprzedniego przykladu, a model to zwykly model z Simple_Modeler.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;pre class="brush: php"&gt;class Admin_Crud_Controller extends Site {&lt;br /&gt;&lt;br /&gt; public $template = 'templates/admin';&lt;br /&gt;&lt;br /&gt; public function __construct() //dostep tylko dla zalogowanych uzytkownikow&lt;br /&gt; {&lt;br /&gt;  parent::__construct();&lt;br /&gt;&lt;br /&gt;  if ( ! is_object($this-&amp;gt;user) OR (intval($this-&amp;gt;user-&amp;gt;admin) === 0))&lt;br /&gt;  {&lt;br /&gt;   url::redirect('admin/login');&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //wyswietl liste, w widoku np. foreach z linkiem do admin_crud/details/$id&lt;br /&gt; public function index()&lt;br /&gt; {&lt;br /&gt;  $this-&amp;gt;load_view('admin/crud_all');&lt;br /&gt;  $this-&amp;gt;template-&amp;gt;center-&amp;gt;crud = Simple_Modeler::instance('crud')-&amp;gt;fetch_all();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //detaile, &lt;br /&gt; // id = new pozwala na tworzenie nowego wpisu, czyli link admin_crud/details/new&lt;br /&gt; public function details($id = 0) &lt;br /&gt; {  &lt;br /&gt;  $crud_model = Simple_Modeler::instance('crud',intval($id));&lt;br /&gt;&lt;br /&gt;          if ( ! $crud_model-&amp;gt;loaded() AND ($id != 'new'))&lt;br /&gt;          {&lt;br /&gt;               $this-&amp;gt;session-&amp;gt;setflash('error','Nie ma takiego wpisu.');&lt;br /&gt;               url::redirect('admin_crud');&lt;br /&gt;          } &lt;br /&gt; &lt;br /&gt;  $this-&amp;gt;load_view('admin/crud_one');&lt;br /&gt;&lt;br /&gt;  $this-&amp;gt;form_post = Validation::factory($this-&amp;gt;input-&amp;gt;post())-&amp;gt;pre_filter('trim');&lt;br /&gt;&lt;br /&gt;  $this-&amp;gt;make_field('pole_pierwsze');&lt;br /&gt;  $this-&amp;gt;make_field('pole_drugie');&lt;br /&gt;  $this-&amp;gt;make_field('pole_trzecie');&lt;br /&gt;  $this-&amp;gt;make_field('pole_czwarte');&lt;br /&gt;  $submit = $this-&amp;gt;input-&amp;gt;post('submit');&lt;br /&gt;&lt;br /&gt;  if ($submit AND $this-&amp;gt;validate()) &lt;br /&gt;  {&lt;br /&gt;   $this-&amp;gt;set_fields($submit);&lt;br /&gt;   $result = $crud_model-&amp;gt;set_fields($this-&amp;gt;form_fields)-&amp;gt;save();&lt;br /&gt;&lt;br /&gt;   if ($result) &lt;br /&gt;   {&lt;br /&gt;    $this-&amp;gt;session-&amp;gt;setflash('ok','Zapisane.');&lt;br /&gt;    url::redirect('admin_crud');&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;    $this-&amp;gt;session-&amp;gt;setflash('alert','Błąd lub brak zmian do zapisania.');&lt;br /&gt;   }&lt;br /&gt;  } &lt;br /&gt;&lt;br /&gt;  //przy eydcji rekodu wczytaj dane z bazy, &lt;br /&gt;  //ale tylko jesli formularz nie zostal wyslany&lt;br /&gt;  if (empty($submit) AND (!empty($id))) &lt;br /&gt;  {&lt;br /&gt;   foreach ($this-&amp;gt;form_fields as $key=&amp;gt;$value) &lt;br /&gt;   {&lt;br /&gt;    $this-&amp;gt;form_fields[$key] = $crud_model-&amp;gt;$key;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //przypisz do widoku wartosci pol formularza oraz ew. bledy&lt;br /&gt;  $this-&amp;gt;form_populate($submit); &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //skasuj rekord&lt;br /&gt; public function delete($id) &lt;br /&gt; {&lt;br /&gt;  $crud_model = Simple_Modeler::instance('crud',intval($id));&lt;br /&gt;  if ($crud_model-&amp;gt;loaded()) &lt;br /&gt;  { &lt;br /&gt;   if ($crud_model-&amp;gt;delete()) &lt;br /&gt;   {&lt;br /&gt;    $this-&amp;gt;session-&amp;gt;setflash('ok','Skasowane.');&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;    $this-&amp;gt;session-&amp;gt;setflash('alert','Kasowanie nie powiodło się.');&lt;br /&gt;  } &lt;br /&gt;  else &lt;br /&gt;   $this-&amp;gt;session-&amp;gt;setflash('alert','Nie ma takiego wpisu.');&lt;br /&gt;  url::redirect('admin_crud');&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;i to wszystko. wchodzac na strone admin_crud/details/new mozemy dodac nowy wpis. pod adresem admin_crud/12 mamy edycje rekordu o id = 13. a pod admin_crud/ dostajemy liste wszystich wpisow - mozna tu dodac np. paginacje. calosc jest prosta, edycja roznych tabel to zazwyczaj copy/paste plus drobne korekty (pola formularza, nazwa kontroler itd, 20% nowe, 80% stare).&lt;br /&gt;&lt;br /&gt;brakuje tylko podanej kiedys na forum modyfikacji biblioteki sesji. wiec libraries/MY_session.php:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;&amp;nbsp;class Session extends Session_Core {&lt;br /&gt;&lt;br /&gt; public static function flash() &lt;br /&gt; {&lt;br /&gt;  $flash=Session::get('flash');&lt;br /&gt;  if (!empty($flash)) &lt;br /&gt;  {&lt;br /&gt;   $out='';&lt;br /&gt;   foreach (array_reverse($flash) as $message)&lt;br /&gt;   {&lt;br /&gt;    $out.='&lt;br /&gt;&lt;br /&gt;&lt;div class="message-box '.$message['type'].'"&gt;'.$message['data'].'&lt;br /&gt;&lt;/div&gt;';&lt;br /&gt;   }&lt;br /&gt;   Session::delete('flash');&lt;br /&gt;   return $out;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static function setflash($type,$value) &lt;br /&gt; {&lt;br /&gt;  $flash[]=array('type'=&amp;gt;$type,'data'=&amp;gt;$value);&lt;br /&gt;  $old=Session::get('flash');&lt;br /&gt;  if (!empty($old))&lt;br /&gt;  {&lt;br /&gt;   foreach ($old as $message) &lt;br /&gt;   { &lt;br /&gt;    $flash[]=$message;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  Session::set_flash('flash', $flash);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;plus potrzebne style:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css"&gt;.message-box { text-align: center; padding: 5px; color:#545454; width:80%;  margin:5px auto; }&lt;br /&gt;.clean { background-color: #efefef; border-top: 2px solid #dedede; border-bottom: 2px solid #dedede; }&lt;br /&gt;.info  { background-color: #f7fafd; border-top: 2px solid #b5d3ff; border-bottom: 2px solid #b5d3ff; }&lt;br /&gt;.ok    { background-color: #d7f7c4; border-top: 2px solid #82cb2f; border-bottom: 2px solid #82cb2f; }&lt;br /&gt;.alert { background-color: #fef5be; border-top: 2px solid #fdd425; border-bottom: 2px solid #fdd425; }&lt;br /&gt;.error { background-color: #ffcdd1; border-top: 2px solid #e10c0c; border-bottom: 2px solid #e10c0c; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;i to by bylo na tyle. kod jest dosyc czytelny, nie ma sie co rozpisywac na jego temat. takie podejscie znacznie zmniejszylo ilosc kodu potrzebna do tworzenia kolejnych stron CRUD. formularze wole trzymac w widokach - czesto maja one inne style, mam tez wiekszy (dla mnie) porzadek w kodzie: widok to generowanie html, model to dane, a kontroler robi reszte, czyli pobiera dane z bazy, waliduje, ustawia wartosci formularzy itd. walidacja moze i lepiej aby byla w modelu, ale nie moge sie do tego przekonac. tak jak jest mi na razie odpowiada, kompromis miedzy teoria, a praktyka.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8797250863306899052?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8797250863306899052/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-przykladowa-walidacja-i-zapis.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8797250863306899052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8797250863306899052'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-przykladowa-walidacja-i-zapis.html' title='KohanaPHP - przykladowa walidacja i zapis do bazy'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6409330504828889131</id><published>2009-09-28T14:49:00.009+02:00</published><updated>2009-09-28T17:27:55.654+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>KohanaPHP - formularz, walidacja, logowanie</title><content type='html'>dla poczatkujacych. przewijalo sie to na forum, ale tutaj zebralem w jedno miejsce. krotki tutorial (a raczej po prostu przyklad) jak mozna zrealizowac logowanie czyli prosty formularz i jego walidacja.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp; &amp;nbsp;1) application/controllers/admin.php&lt;br /&gt;&lt;pre class="brush: php"&gt;class Admin_Controller extends Site {&lt;br /&gt;&lt;br /&gt; public $template = 'templates/admin';&lt;br /&gt;&lt;br /&gt; public function index()&lt;br /&gt; {&lt;br /&gt;  //jesli uzytkownik nie jest zalogowany, przekieruj na forme logowania&lt;br /&gt;  if ( ! is_object($this-&amp;gt;user))&lt;br /&gt;   url::redirect('admin/login');   &lt;br /&gt;  //wczytaj glowny widok&lt;br /&gt;&amp;nbsp; $this-&amp;gt;load_view('admin/user');&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //zaloguj usera&lt;br /&gt; public function login()&lt;br /&gt; {&lt;br /&gt;  //wczytaj glowny widok&lt;br /&gt;  $this-&amp;gt;load_view('admin/login');&lt;br /&gt;&lt;br /&gt;  //inicjalizacja walidacji &lt;br /&gt;  $this-&amp;gt;form_post = Validation::factory($this-&amp;gt;input-&amp;gt;post())-&amp;gt;pre_filter('trim');&lt;br /&gt;  //ustaw pola formularzy oraz bledow formularzy, przypisz reguly walidacji&lt;br /&gt;  $this-&amp;gt;make_field('username',array('required','email'));&lt;br /&gt;  $this-&amp;gt;make_field('password',array('required'));&lt;br /&gt;  $this-&amp;gt;make_field('remember');&lt;br /&gt;  $submit = $this-&amp;gt;input-&amp;gt;post('submit');&lt;br /&gt;  //sprawdz czy formularz wyslany i ew. przeprowaz walidacje&lt;br /&gt;  if ($submit AND $this-&amp;gt;validate() AND $post_data = $this-&amp;gt;form_post-&amp;gt;as_array()) &lt;br /&gt;  {&lt;br /&gt;   if (Simple_Auth::instance()-&amp;gt;login($post_data['username'], $post_data['password'], isset($post_data['remember']) ))&lt;br /&gt;   {&lt;br /&gt;    //zalogowany, idziemy do admina&lt;br /&gt;    url::redirect('admin');&lt;br /&gt;   }&lt;br /&gt;   //nie udalo sie zalogowac, rzuc bledem&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;    $this-&amp;gt;form_post-&amp;gt;add_error('password', 'incorrect');&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  //ustaw wartosci pol formularza, przypisz ewentualne bledy&lt;br /&gt;  $this-&amp;gt;form_populate($submit);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //wyloguj usera&lt;br /&gt; public function logout()&lt;br /&gt; {&lt;br /&gt;  Simple_Auth::instance()-&amp;gt;logout();&lt;br /&gt;  url::redirect('admin/login');&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2) application/libraries/site.php&lt;br /&gt;&lt;pre class="brush: php"&gt;class Site extends Template_Controller {&lt;br /&gt;&lt;br /&gt; protected $user;&lt;br /&gt;&lt;br /&gt; public function __construct() &lt;br /&gt; {&lt;br /&gt;  parent::__construct();         &lt;br /&gt;  if (Simple_Auth::instance()-&amp;gt;logged_in())&lt;br /&gt;  {&lt;br /&gt;   $this-&amp;gt;user = Simple_Auth::instance()-&amp;gt;get_user();&lt;br /&gt;  }  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public function load_view($view = 'main') &lt;br /&gt; {&lt;br /&gt;  $this-&amp;gt;template-&amp;gt;center = new View($view);&lt;br /&gt;  (isset($this-&amp;gt;user)) ? $this-&amp;gt;template-&amp;gt;set_global('user',$this-&amp;gt;user) : NULL;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3) application/libraries/MY_controller.php&lt;br /&gt;&lt;pre class="brush: php"&gt;class Controller extends Controller_Core {&lt;br /&gt;&lt;br /&gt; public $form_scenarios = array();&lt;br /&gt; public $form_rules = array();&lt;br /&gt; public $form_fields = array();&lt;br /&gt; public $form_errors = array();&lt;br /&gt; public $form_post = array();&lt;br /&gt; &lt;br /&gt; public function make_field($field, $rules = array(), $default = '', $scenario = array('*')) &lt;br /&gt; {&lt;br /&gt;  $this-&amp;gt;form_fields[$field] = $default;&lt;br /&gt;  $this-&amp;gt;form_rules[$field] = $rules; &lt;br /&gt;  $this-&amp;gt;form_errors[$field] = ''; &lt;br /&gt;  $this-&amp;gt;form_scenarios[$field] = $scenario; &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public function set_fields($submit) &lt;br /&gt; {&lt;br /&gt;  if (!empty($submit))&lt;br /&gt;  {&lt;br /&gt;   $this-&amp;gt;form_fields = arr::overwrite($this-&amp;gt;form_fields, $this-&amp;gt;form_post-&amp;gt;as_array());&lt;br /&gt;   $this-&amp;gt;form_errors = arr::overwrite($this-&amp;gt;form_errors, $this-&amp;gt;form_post-&amp;gt;errors());&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function form_populate($submit) &lt;br /&gt; {&lt;br /&gt;  $this-&amp;gt;set_fields($submit);&lt;br /&gt;  $this-&amp;gt;template-&amp;gt;center-&amp;gt;form = $this-&amp;gt;form_fields;&lt;br /&gt;  $this-&amp;gt;template-&amp;gt;center-&amp;gt;errors = $this-&amp;gt;form_errors;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public function validate($scenario = '') &lt;br /&gt; {&lt;br /&gt;  foreach ($this-&amp;gt;form_rules as $field =&amp;gt; $rules) &lt;br /&gt;  {&lt;br /&gt;   if ( (in_array('*',$this-&amp;gt;form_scenarios[$field])) OR (in_array($scenario,$this-&amp;gt;form_scenarios[$field])) ) &lt;br /&gt;   {&lt;br /&gt;    foreach ($rules as $rule) &lt;br /&gt;    {&lt;br /&gt;     $this-&amp;gt;form_post-&amp;gt;add_rules($field, $rule);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return $this-&amp;gt;form_post-&amp;gt;validate();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4) application/views/admin/login.php&lt;br /&gt;&lt;pre class="brush: php"&gt;echo form::open('/admin/login',array('method'=&gt;'post'));&lt;br /&gt;echo form::label('username', 'Użytkownik: ');&lt;br /&gt;echo form::input('username', $form['username']);&lt;br /&gt;echo form::my_errors($errors['username']);&lt;br /&gt;echo form::label('password', 'Hasło: ');&lt;br /&gt;echo form::password('password', $form['password']); &lt;br /&gt;echo form::my_errors($errors['password']);&lt;br /&gt;echo form::label('remember', 'Zapamietaj: ');&lt;br /&gt;echo form::checkbox('remember', 'true', !empty($form['remember'])) &lt;br /&gt;echo form::my_errors($errors['remember']);&lt;br /&gt;echo form::submit(array('name'=&gt;'submit','type'=&gt;'submit','value'=&gt;'ZALOGUJ')); &lt;br /&gt;echo form::close();&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;5) application/views/admin/user.php&lt;br /&gt;&lt;pre class="brush: php"&gt;echo 'Witaj'.$user-&gt;username.':)';&lt;/pre&gt;&lt;br /&gt;6) application/helpers/MY_form.php&lt;br /&gt;&lt;pre class="brush: php"&gt;class form extends form_Core {&lt;br /&gt;&lt;br /&gt; public static function my_errors($error = '')&lt;br /&gt; {&lt;br /&gt;         return (!empty($error)) ? $error : null;&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7) modules/simple_auth&lt;br /&gt;tutaj modul simple_auth, oczywiscie musi byc aktywny (application/config/config.php i $config['modules']). do dzialania potrzebny jest jakis user w bazie - odsylam do przykladow uzycia simple auth.&lt;br /&gt;&lt;br /&gt;o co w tym chodzi. calosc bazuje na moim podejsciu do walidacji. w my_controller znajduja sie wspolne dla wszystkich kontrolerow zmienne przechowujace tablice z polami do walidacji, bledami walidacji oraz regulami walidacji. dzieki make_field w jednej linijce moge ustalic wszystko co zazwyczaj jest mi potrzebne do obslugi pola formularza: &amp;nbsp;nazwe pola do walidacji, regule, domyslna wartosc, komunikat bledu, a po walidacji przy przypisac wartosc przeslana w formularzu, zamiast tej z bazy.&lt;br /&gt;&lt;br /&gt;walidacja obsluguje tez scenariusze, czyli moge przesylajac parametr walidowac tylko czesc pol, reszte pozostawic nietknieta. czasami sie to przydaje np. jesli walidacja jest zalezna do np. jakiegos checkboxa itp.&lt;br /&gt;&lt;br /&gt;bardzo dobrze sie to sprawdza z simple_modeler, mozna bez problemow walidowac formularz i np. zapisac przeslane dane do kilku modeli, nie martwiac sie o ich wybieranie, dzielenie na dwie zmienne i przekazywanie kazdej do odpowiedniego modelu itd. dzieki $skip i $aliases mozna przekazac caly formularz (jego dane) do kazdego z modeli, a one same wybiora to co jest im potrzebne i zapisza do bazy.&lt;br /&gt;&lt;br /&gt;duzo rzeczy dzieje sie z 'w tle', nie trzeba recznie przypisywac komunikatow o bledach itd. populate_form zrobi to za nas, a my_errors jesli tylko dane pole ma blad, to wyswietli powiadomienie.&lt;br /&gt;&lt;br /&gt;kodu jest sporo, podejrzewam, ze blogspot sie na nim moze wywalic, wiec zapewne niedlugo edytuje posta, na razie zostawiam tak jak jest.&lt;br /&gt;&lt;br /&gt;calosc ladnie wspolpracuje z walidacja podana &lt;a href="http://forum.kohanaphp.com/comments.php?DiscussionID=1729"&gt;tutaj&lt;/a&gt; na angielskim forum Kohany - wspolne komunikaty bledow dla danego typu bledu, nie trzeba definiowac osobnych (zazwyczaj tych samych) komunikatow dla kazdego pola formularzu, wystarczy jedna globalna regula dla typu bledu czyli required, email itd.&lt;br /&gt;&lt;br /&gt;EDIT&lt;br /&gt;blogspot poknocil bardziej niz myslalem, wiec dokonalem szybkiej edycji widokow. mam nadzieje, ze w pozostalych plikach nic nie pozmienial... &lt;br /&gt;widok oczywiscie powinien inaczej wygladac, ale formatowanie kodu gubilo sie, wiec przepisalem na echo :/ takie zycie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6409330504828889131?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6409330504828889131/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-formularz-walidacja-logowanie.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6409330504828889131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6409330504828889131'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-formularz-walidacja-logowanie.html' title='KohanaPHP - formularz, walidacja, logowanie'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5148186085646724956</id><published>2009-09-27T13:43:00.001+02:00</published><updated>2009-09-27T13:50:27.620+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>MySQL i lista zapytan</title><content type='html'>tworzac nowa wersje strony napisanej jeszcze bez uzycia frameworkow, statycznie i generalnie strasznie, mialem ochote zobaczyc wszystkie zapytania jakie ida do bazy. plikow jest sporo, wszedzie include, w kazdym jakies query, wszystko na zwyklym mysql_query - chcac miec liste zapytan musialbym przepiasc wywolania query na nowa funkcje z dodanym logowaniem. niby mozna zrobic search&amp;amp;replace ale od czego jest google :)&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;google podsunelo mi nastepujace rozwiazanie, ktore w moim przypadku zadzialalo dokladnie tak jak trzeba, tj. dostalem liste zapytan ma danej podstronie:&lt;br /&gt;&lt;pre class="brush: sql"&gt;SET GLOBAL general_log = 'ON';&lt;br /&gt;SET GLOBAL log_output = 'TABLE';&lt;br /&gt;-- wchodzimy na strone, czekamy az sie zaladuje, a pozniej:&lt;br /&gt;SELECT * FROM mysql.general_log;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;nastepnie np. export do txt czy html i voila. mozna od razu zapisywac do pliku, wtedy log_output ustawiamy na FILE plus general_log_file na sciezke do pliku - tej wersji jednak nie sprawdzalem.&lt;br /&gt;&lt;br /&gt;do wyczyszczenia tablicy general_log trzeba uzyc truncate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5148186085646724956?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5148186085646724956/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/mysql-i-lista-zapytan.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5148186085646724956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5148186085646724956'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/mysql-i-lista-zapytan.html' title='MySQL i lista zapytan'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2937761346548646264</id><published>2009-09-21T17:14:00.002+02:00</published><updated>2010-03-13T21:12:10.073+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>Simple_Auth Roles</title><content type='html'>jakis czas temu majac chwile wolnego zaczalem modyfikowac Simple Auth tak, aby role obslugiwalo tak samo jak KohanaPHP Auth. teraz ponownie do tego usiadlem, dokonczylem i tak oto powstalo Simple_Auth... _Roles? ;)&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;modul mozna pobrac &lt;a href="http://thejw23-modules.googlecode.com/files/simple_auth_roles.zip"&gt;tutaj&lt;/a&gt;. w paczce jest plik sql ze struktura nowych tabel. tabele user_details mozna (a wrecz nalezy) zmodyfikowac do wlasnych potrzeb.&lt;br /&gt;&lt;br /&gt;zmiany:&lt;br /&gt;- osobna table z rolami (admin, user, guest...)&lt;br /&gt;- osobna tabela z powiazaniami user-&amp;gt;role&lt;br /&gt;- osobna tabela z detalami usera np. potrzebnymi przy rejestracji (co projekt to nieco inne, ale zawsze powiazane z userem), po to aby auth_users nie wymagalo zadnych modyfikacji&lt;br /&gt;&lt;br /&gt;tabela z rolami posiada dwa pola:&lt;br /&gt;- role, ktore jest uzywane wewnetrzenie do sprawdzania rol&lt;br /&gt;- name, ktore moze byc uzyte do wyswietlania i (chyba) nie jest do niczego potrzebne od strony dzialania aplikacji&lt;br /&gt;&lt;br /&gt;model user posiada nowa metode: load_roles(), ktora wczytuje z bazy role usera. klasa simple_user posiada nowa zmienna $roles i metode set_roles(), ktora przypisuje $roles przekazane jako parametr role.&lt;br /&gt;&lt;br /&gt;tabela z detalami nie jest niezbedna do dzialania modulu. &lt;br /&gt;&lt;br /&gt;przyklady:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//tworzenie uzytkownika i nadanie rol:&lt;br /&gt;$user_id = Simple_Auth::instance()-&amp;gt;create_user($user_data); //czyli bez zmian, przekazujemy tablice&lt;br /&gt;Simple_Auth::instance()-&amp;gt;set_roles(array(1,2,3),$user_id); //nadanie rol o id 1,2,3 userowi o id = $user_id&lt;br /&gt;//info: metoda create_user() zwraca ID wlasnie zapisanego do bazy usera&lt;br /&gt;//inne nadanie rol&lt;br /&gt;Simple_Auth::instance()-&amp;gt;set_roles(array('user','admin'),$user_id); //nadanie rol user oraz admin userowi o id = $user_id&lt;br /&gt;//info: jezeli pominiemy w set_roles() id usera, zostana one nadane zalogowanemu userowi (sesja)&lt;br /&gt;//pobranie z bazy usera z id=3&lt;br /&gt;$user = Simple_Auth::instance()-&amp;gt;get_user(3); //bez podania id wczytuje usera z sesji&lt;br /&gt;//sprawdzenie czy user ma role z id = 1&lt;br /&gt;$user-&amp;gt;check_role(1);&lt;br /&gt;//sprawdzenie czy user ma role 'admin'&lt;br /&gt;$user-&amp;gt;check_role('admin');&lt;br /&gt;//wyswietlenie rol usera&lt;br /&gt;print_r($user-&amp;gt;roles);&lt;br /&gt;//sprawdzenie czy zalogowany user ma role moderator&lt;br /&gt;Simple_Auth::instance()-&amp;gt;logged_in('moderator');&lt;br /&gt;//pobranie detali usera, mozna podac jako parametr ID usera, domyslnie wczytuje usera z sesji&lt;br /&gt;$detail = Simple_Auth::instance()-&amp;gt;get_user_details();&lt;br /&gt;echo $details-&amp;gt;lastname;&lt;br /&gt;//pobranie listy rol z bazy (id-rola)&lt;br /&gt;Auth_Modeler::Instance('auth_user_roles')-&amp;gt;select_list('id','role');&lt;br /&gt;//zamiast role mozna uzyc name aby otrzymac opisy rol user friendly &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;calosc napisana z ciekawosci, &amp;nbsp;raczej przetestowana, ale nie daje gwarancji :) SA idzie coraz dalej, w planach opcjonalna integracja z Simple_Acl, tj, pobieranie rol i zasobow z bazy. opcjonalna, bo nie kazdy takiego kombajny potrzebuje. ale to jak bede mial wiecej czasu...&lt;br /&gt;&lt;br /&gt;w razie znalezienia bledow prosze o info, na pewno poprawie.&lt;br /&gt;&lt;br /&gt;acha, tablice w pliku sql sa puste, trzeba samemu dodac np. role admin i user. na razie z palca, w nastepnej wersji dodam prosta metode add_role(). w tej o tym zapomnialem :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2937761346548646264?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2937761346548646264/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simpleauth-roles.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2937761346548646264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2937761346548646264'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simpleauth-roles.html' title='Simple_Auth Roles'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2579244483607321947</id><published>2009-09-19T22:51:00.004+02:00</published><updated>2010-03-13T21:12:58.890+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_acl'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>Simple Acl</title><content type='html'>jesli ktos potrzebuje bardziej skomplikowany system zarzadzania uzytkownikami niz Simple Auth oferuje, polecam port &lt;a href="http://forum.kohanaphp.com/comments.php?DiscussionID=1988"&gt;Zend ACL by Wouter&lt;/a&gt; - bardzo latwo zaadoptowac to rozwiazanie do jakiegokolwiek innego systemu Auth, wiec calosc poprawilem tak, aby wspolpracowala z Simple Auth oraz Simple Modeler.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;- calosc jest do sciagniecia &lt;a href="http://thejw23-modules.googlecode.com/files/simple_acl.zip"&gt;tutaj&lt;/a&gt;&lt;br /&gt;- w Simple_Auth klasa Simple_User posiada nowa metode get_roles(), w Simple_Modeler nic sie nie zmienilo&lt;br /&gt;- instalacja tak sama jak innych modulow czyli do /modules/ i uaktywnic w config.php&lt;br /&gt;- wchodzimy na adres http://example.pl/acldemo i mozemy sie cieszyc 12 przykladami uzycia&lt;br /&gt;&lt;br /&gt;a teraz konkretniej, czyli jak to dziala.&lt;br /&gt;calosc opiera sie na dwoch rzeczach: rolach oraz zasobach. w config/simple_acl.php definiujemy domyslne role (user, admin itd) wraz z ich dziedziczeniem - jest to wazne, mozna bowiem miec bazowa role user z zablokowana edycja i dziedziczace po niej user_forum z np. odblokowana edycja forum skutkiem czego bedzie mozliwosc edycja tylko i wylacznie forum. analogicznie dziedziczone moga byc zasoby - wszystko to siedzi w pliku z konfiguracja, wystarczy popatrzec aby zrozumiec.&lt;br /&gt;&lt;br /&gt;samo uzycie sprowadza sie do:&lt;br /&gt;&lt;pre class="brush: php"&gt;$this-&amp;gt;simple_acl-&amp;gt;allow('guest','blog');&lt;br /&gt;  $this-&amp;gt;simple_acl-&amp;gt;deny('guest','blog','read');&lt;br /&gt;echo ($this-&amp;gt;simple_acl-&amp;gt;is_allowed('guest','blog','read') ? 'yes' : 'no');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;pierwsza linijka dodaje roli guest prawo do wszystkich czynnosci w zasobie blog. kolejna zabiera mozliwosc czytania. ostatnia sprawdza czy rola guest moze czytac bloga. prawda, ze proste? w przykladowym kontrolerze jest wiecej przykladow, wystarczy spojrzec.&lt;br /&gt;&lt;br /&gt;mozna jednak dokonac sprawdzenia zasobow nieco inaczej. mianowicie:&lt;br /&gt;&lt;pre class="brush: php"&gt;$data = Simple_Modeler::factory('articles',2);&lt;br /&gt;$this-&amp;gt;simple_acl-&amp;gt;allowed($data,'edit') ? 'yes' : 'no');&lt;br /&gt;&lt;/pre&gt;w pierwszej linijce wczytujemy artykul z id = 2. w kolejnej sprawdzamy... no wlasnie co? &amp;nbsp;ano sprawdzamy czy obecnie zalogowany user (a dokladnie to jego role wczytywane przez simple_user i get_roles) ma mozliwosc edycji wczytanego obiektu. system acl sam pobiera usera (z sesji), zasob (z modelu poprzez simple_modeler i get_table_name, czyli trzeba dodac zasoby z nazwami tabel), a nastepnie sprawdza czy ktorakolwiek z rol usera daje mu mozliwosc edycji.&lt;br /&gt;&lt;br /&gt;ale to nie wszystko :) jest jeszcze jeden 'myk'. mozna zrobic cos takiego:&lt;br /&gt;&lt;pre class="brush: php"&gt;$this-&amp;gt;simple_acl-&amp;gt;allow('user','articles','edit', new User_Articles_Assert);   &lt;br /&gt;echo ($this-&amp;gt;simple_acl-&amp;gt;allowed($data,'edit') ? 'yes' : 'no') ;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;gdzie &amp;nbsp;User_Articles_Assert jest klasa definiujaca powiazanie danego modelu z userem. dzieki ustawieniu w niej np. array('id'=&amp;gt;'user_id') mozemy zablokowac userowi edycje artykulow napisanych przez inne osoby niz on sam, a odbywa sie to (jak nie trudno sie domyslic) poprzez porownanie id obecnie zalogowanego usera z polem user_id jakie znajduje sie we wczytanym z bazy rekordzie.&lt;br /&gt;&lt;br /&gt;prawda, ze piekne? zyc nie umierac. calosc na pewno wymaga drobnych poprawek, na razie to wersja 0.1 - sam modul ACL nie wspiera w zaden sposob zapisywanie do bazy rol czy powiazan user-rola, wszystko opiera sie o edycje konfiguracji. nic nie stoi na przeszkodzie aby napisac dodatkowe metody, ktore beda operowaly na bazie i z niej pobieraly dostepne role, zasoby jak i ich powiazania z userami.&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;zarowno Simple Auth jak i Simple Modeler nie zalapaly sie do paczki wiec kazdy musi sam je sobie pobrac plus dodac nowa metode to Simple_User:&lt;br /&gt;&lt;pre class="brush: php"&gt;public function get_roles()&lt;br /&gt; {&lt;br /&gt;   return array('user','admin');&lt;br /&gt; }&lt;/pre&gt;ktora nie robi nic innego jak zwraca role uzytkownika. docelowo powinno to byc pobierane z bazy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2579244483607321947?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2579244483607321947/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-acl.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2579244483607321947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2579244483607321947'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-acl.html' title='Simple Acl'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8051706916193886999</id><published>2009-09-19T15:47:00.000+02:00</published><updated>2009-09-19T15:47:39.275+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>Simple_Auth i role uzytkownika</title><content type='html'>wiele osob zwraca mi uwage na to jak SA obsluguje role - inaczej niz KohanaPHP Auth. w SA rolami sa 'zwykle' pola na tabeli z uzytkownikami, natomiast w Auth jest osobna tabela z rolami oraz kolejna z powiazaniami user-rola co daje mozliwosc dynamicznego dodawania nowych rol z poziomu administracji strona.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;w zasadzie rozbija sie to o jedno: Simple Auth nie jest kompletnym systemem ACL. koniec i kropka. dynamiczne role potrzebne sa nie tyle do samej autoryzacji co wlasnie do ACL, dynamicznego zarzadzania uprawnieniamiu userow, gdzie nie tylko dodajemy nowe role, ale tez okreslamy do jakich zasobow strony dana rola/user/grupa ma dostep.&lt;br /&gt;&lt;br /&gt;zazwyczaj na etapie projektowania aplikacji, jesli nie potrzebujemy ACL to mozemy bardzo dokladnie okreslic jakie role beda potrzebne userom, a Simple Auth nie jest ograniczone tylko do domyslnych rol (admin, moderator). dodanie kolejnych to raptem trzy kroki:&lt;br /&gt;- dodac pola np. reporter, developer na tabeli auth_users&lt;br /&gt;- dodac dwie linijki do $data w modelu auth_users.&lt;br /&gt;- dodac dwie nowe wartosci w konfiguracji &amp;nbsp;$config['roles']&lt;br /&gt;&lt;br /&gt;to wszystko, od tej pory mozemy odwolywac sie do $user-&amp;gt;developer aby okreslic czy user jest developerem. nie ma problemu aby user mial wszystkie role, nie ma ograniczen, iz jeden user = jedna rola. takie dzialanie SA jest celowe i wystarczajace w wiekszosci projektow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8051706916193886999?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8051706916193886999/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simpleauth-i-role-uzytkownika.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8051706916193886999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8051706916193886999'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simpleauth-i-role-uzytkownika.html' title='Simple_Auth i role uzytkownika'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6039316174601636543</id><published>2009-09-19T15:21:00.001+02:00</published><updated>2009-09-19T15:22:03.310+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple Modeler 1.6, Simple Auth 1.4</title><content type='html'>ukazaly sie nowe wersje modulow z serii Simple: Auth 1.4 oraz Modeler 1.6&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://projects.kohanaphp.com/projects/simple-modeler/files"&gt;Simple Auth&lt;span id="goog_1253365684567"&gt;&lt;/span&gt;&lt;span id="goog_1253365684568"&gt;&lt;/span&gt; 1.4&lt;/a&gt;:&lt;br /&gt;- poprawka: stare ciasteczka sa automatycznie kasowane&lt;br /&gt;- nowe: klasa Simple_User dzieki ktorej zmniejszylo sie zuzycie pamieci&lt;br /&gt;-  nowe: klasa Auth_Modeler aby uniezaleznic od siebie rozwoj Simple Auth i Simple Modeler&lt;br /&gt;&lt;br /&gt;&lt;a href="http://projects.kohanaphp.com/projects/simple-modeler/files"&gt;Simple Modeler 1.6&lt;/a&gt;:&lt;br /&gt;- sporo zmian wewnetrznych&lt;br /&gt;- nowe: diff() do szybkiego sprawdzania czy zaladowane dane zostaly zmienione&lt;br /&gt;-  nowe: fetch_row() dla wczytywania pojedynczych rekordow bez uzywaina $data&lt;br /&gt;-  nowe: result_object oraz set_result() do ustalania typow zwracanych obiektow&lt;br /&gt;-  nowe: generate_data() dla latwego generowania zmiennej $dala dla poszczegolnych tabel&lt;br /&gt;-  nowe: clear_data() dla szybkiego czyszczenia $data oraz $data_original&lt;br /&gt;- zmiana: select() teraz akceptuje pola wymienione po przecinku&lt;br /&gt;-  zmiana: auto_fields teraz dziala tylko w testowych srodowiskach &amp;nbsp;(IN_PRODUCTION)&lt;br /&gt;-  zmiana: check_id przemianowane na loaded()&lt;br /&gt;-  zmiana: usuniety cache - jesli ktos korzystal to jest do sciagniecia wersja SM 1.5&lt;br /&gt;&lt;br /&gt;w obu przypadkach sa to ostatnie wersje przeznaczone dla KohanaPHP 2.3.x, jedynie powazne bledy beda poprawiane. cache wroci w kolejnej wersji SM przeznaczonej juz tylko dla K2.4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6039316174601636543?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6039316174601636543/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-modeler-16-simple-auth-14.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6039316174601636543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6039316174601636543'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-modeler-16-simple-auth-14.html' title='Simple Modeler 1.6, Simple Auth 1.4'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2829445140909391366</id><published>2009-09-11T19:29:00.000+02:00</published><updated>2009-09-11T19:29:46.183+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple BETA - Auth 1.4 oraz Modeler 1.6</title><content type='html'>z repozytoriow mozna pobrac wersje beta &lt;a href="http://projects.kohanaphp.com/projects/simple-auth/repository/browse/trunk/2.x"&gt;Simple_Auth&lt;/a&gt; oraz &lt;a href="http://projects.kohanaphp.com/projects/simple-modeler/repository/browse/trunk/2.x"&gt;Simple_Modeler&lt;/a&gt; dla KohanaPHP 2.3.x - najprawdopodobniej beda to ostatnie wersje dla 2.3.x i kolejne stabilne obejma juz 2.4 oraz 3.0&lt;br /&gt;&lt;br /&gt;co nowego?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Simple Auth:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;w sesji jest przechowywany obiekt Simple_User zamiast Auth_User_Model, co zmniejszylo uzycie pamieci np. w testach na jednej z aplikacji bylo to 0.7MB przy braku innych zapytan na stronie&lt;/li&gt;&lt;li&gt;Simple Modeler zostal zastapiony Auth_Modeler po to aby uniezaleznic od siebie rozwijanie obu projektow oraz nie obciazac modulu autoryzacji funkcjami, ktore nie sa potrzebne (czyli Simple Modeler Lite)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Simple Modeler:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$original zmienione na $data_original&lt;/li&gt;&lt;li&gt;dodane $primary_key w celu latwej zmiany z ID (domyslne) na jakikolwiek inny&lt;/li&gt;&lt;li&gt;DRY: check_alias(), check_timestamp(), check_skip()&lt;/li&gt;&lt;li&gt;save() oraz delete() kasuja cache (o ile jest ustawiony)&lt;/li&gt;&lt;li&gt;usuniete ArrayAccess, ktokolwiek tej funkcjonalnosci uzywal?&lt;/li&gt;&lt;li&gt;check_id() zmienione na $loaded co jest bardziej intuicyjne (vide ORM)&lt;/li&gt;&lt;li&gt;dodane cache_id oraz cache() do ustawiania cache&lt;/li&gt;&lt;li&gt;usuniete fetch_x_cache, load_cache oraz query_cache, teraz nalezy uzywac cache_id w polaczeniu z fetch_all, fetch_where, fetch_row oraz query&lt;/li&gt;&lt;li&gt;select() teraz umozliwia podanie kolumn po przecinku, a nie tylko jako tablice&lt;/li&gt;&lt;li&gt;dodane fetch_row() w celu szybkiego zaladowania rekordu z bazy - jest load(), ale czytaj dalej&lt;br /&gt;&lt;/li&gt;&lt;li&gt;dodane $result_object oraz set_result() do manipulacji zwracanym typem obiektu&amp;nbsp;&lt;/li&gt;&lt;li&gt;drobna reorganizacja kodu w niektorych miejscach&lt;/li&gt;&lt;/ul&gt;fetch_row() teoretycznie dziala tak samo jak load() ale jak zwykle diabel tkwi w szczegolach. load wczytuje rekord, a nastepnie przypisuje jego wartosc do $data oraz $data_original. czasami (czesto?) jednak chcemy tylko pobrac dane, nie ptrzeba ustawiac $data bo nie bedziemy robic set_fields() i save() - i po to wlasnie jest fetch_row: dzieki niemu nie obciazamy dodatkowo pamieci tylko pobierane dane od razu sa zwracane i przekazywane dalej.&lt;br /&gt;&lt;br /&gt;poniewaz teraz load() bedzie uzywane (powinno byc uzywane) tylko do formularzy i edycji wiec nie korzysta ono wiecej z cache.&lt;br /&gt;&lt;br /&gt;na dniach Simple Auth zostanie zaktualizowane - Auth Modeler 'zaliczy' kilka zmian z najnowszej wersji Simple Modeler. w obu projektach jeszcze raz spojrze na kod i w niedlugim czasie powinny wyjsc wersje stabilne, ostatnie dla 2.3.x&lt;br /&gt;&lt;br /&gt;razem lub dzien po wydaniu nowych wersji dokonam aktualizacji dokumentacji - sporo sie pozmienialo i stare przyklady beda tylko wprowadzaly w blad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2829445140909391366?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2829445140909391366/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-beta-auth-14-oraz-modeler-16.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2829445140909391366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2829445140909391366'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/simple-beta-auth-14-oraz-modeler-16.html' title='Simple BETA - Auth 1.4 oraz Modeler 1.6'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6304747406913187974</id><published>2009-09-09T11:33:00.015+02:00</published><updated>2009-09-13T18:28:22.405+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>KohanaPHP i Codebench</title><content type='html'>czasami zachodzi potrzeba przetestowania, ktore rozwiazanie jest szybsze, mniej pamieciozerne. coby nie wymyslac na nowo kola, mozna skorzystac z modulu &lt;a href="http://www.geertdedeckere.be/article/introducing-codebench"&gt;codebench&lt;/a&gt; - dla KohanaPHP 2.x jest on dostepny &lt;a href="http://github.com/GeertDD/codebench/tree/master"&gt;tutaj&lt;/a&gt;, a dla 3.x &lt;a href="http://github.com/GeertDD/kohana-codebench/tree/master"&gt;tutaj&lt;/a&gt;. ja testowalem wersje dla 2.x&lt;br /&gt;&lt;br /&gt;o co tu chodzi. standardowo kopiujemy wszystkie katalogi i pliki do modules/codebench. nastepnie trzeba przygotowac swoja klase do testowania. tak jak przyklad w libraries/Valid_Color.php musi ona rozszerzac klase Codebench i zawierac metody zaczynajace sie od bench_. dodatkowe ustawienia to $description zawierajace opis jaki pojawi sie z wynikami oraz $loops czyli ilosc powtorzen. zawarte w przykladzie $subjects nie jest do niczego potrzebne, to tylko tablica z danymi do tego konkretnego testu. czyli przykladowo zrobmy klase /modules/codebench/libraries/simple.php:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;class Simple extends Codebench {&lt;br /&gt;&lt;br /&gt; public $description = 'Testujemy roznice miedzy load a fetch_where.';&lt;br /&gt;&lt;br /&gt; public $loops = 100;&lt;br /&gt; public function bench_load()&lt;br /&gt; {&lt;br /&gt;  $user = Simple_Modeler::factory('categories',1);&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public function bench_fetch()&lt;br /&gt; {&lt;br /&gt;  $user = Simple_Modeler::factory('categories')-&gt;fetch_where(array('id' =&gt; '1'));&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;celowo w obu przypadkach dalem factory, a nie instance. nastepnie uruchamiamy w przegladarce kontroler bench np. localhost/myapp/bench, podajemy nazwe naszej klasy (w przykladzie simple), klikamy Run i cieszymy sie wynikami:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XdQ-3geYeXU/Sqd6r8VmzII/AAAAAAAAABg/aj_mVqs-MT4/s1600-h/codebench_simple.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379403175267060866" src="http://3.bp.blogspot.com/_XdQ-3geYeXU/Sqd6r8VmzII/AAAAAAAAABg/aj_mVqs-MT4/s320/codebench_simple.jpg" style="cursor: hand; cursor: pointer; height: 186px; margin: 0 10px 10px 0; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;jak widac jest sens wprowadzenia metody np. current(), ktora zwroci tylko jeden rekord, od razu z dostepem na zasadzie $pole-&amp;gt;wartosc i bez ustawiania $data. czasami wczytuje pojedyncze rekordy aby pobrac dane i z gory wiem, ze nie bede ich edytowal, wiec $data nie jest mi do niczego wtedy potrzebne. a zysk widac tutaj:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XdQ-3geYeXU/Sqd-6l0wIKI/AAAAAAAAABo/SCa2JeGm61g/s1600-h/codebench2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379407824968229026" src="http://4.bp.blogspot.com/_XdQ-3geYeXU/Sqd-6l0wIKI/AAAAAAAAABo/SCa2JeGm61g/s320/codebench2.jpg" style="cursor: hand; cursor: pointer; height: 187px; margin: 0 10px 10px 0; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;i na koniec slow kilka o samym testowaniu. w zasadzie moglbym zostawic to bez komentarza uznajac, ze cyferki przemawiaja dostatecznie dobrze ale... no wlasnie, jest ale. przy load() tworzymy dwie tablice ($data oraz $data_original), dla 100 powtorzen mamy 200 tablic z pojedynczym rekordem z bazy. dla fetch oraz current ich nie ma - tam dane sa od razu zwracane jako obiekt. wystarczy wiec zrobic test dla pojedynczego wczytania jednego rekordu ($loop = 0) aby sie przekonac, ze roznice nie musza byc takie wielkie:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XdQ-3geYeXU/SqeAw0dNblI/AAAAAAAAABw/KhCzyHlLMnc/s1600-h/codebench3.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379409856120581714" src="http://2.bp.blogspot.com/_XdQ-3geYeXU/SqeAw0dNblI/AAAAAAAAABw/KhCzyHlLMnc/s320/codebench3.jpg" style="cursor: hand; cursor: pointer; height: 186px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;zanim wiec zabierzemy sie do testow warto wiedziec co tak na prawde testujemy i czy potrafimy wyciagnac wlasciwe wnioski ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6304747406913187974?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6304747406913187974/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-i-codebench.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6304747406913187974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6304747406913187974'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/kohanaphp-i-codebench.html' title='KohanaPHP i Codebench'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XdQ-3geYeXU/Sqd6r8VmzII/AAAAAAAAABg/aj_mVqs-MT4/s72-c/codebench_simple.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-472842070184564808</id><published>2009-09-08T17:29:00.005+02:00</published><updated>2009-09-08T17:36:17.703+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pspad'/><title type='text'>pspad i tabulacja</title><content type='html'>po ktorejs aktualizacji (uzywam wersji developerskich) pspad namieszal mi cos z ustawieniami tabulacji i zamiast tabulajcji wstawialo mi spacje, dodatkowo czasami mniej, a czasami wiecej - koszmarnie to wygladalo w innych edytorach. dzis sie zmobilizowalem and solution is:&lt;br /&gt;&lt;br /&gt;Settings / Program Settings:&lt;br /&gt;1) Editor (Part 1)&lt;br /&gt;- trim trailing spaces: off&lt;br /&gt;- auto ident mode: on&lt;br /&gt;2) Editor (Part 2)&lt;br /&gt;- real tabs: on&lt;br /&gt;- smart tabs: off&lt;br /&gt;&lt;br /&gt;po tym zabiegu jest tak jak powinno: spacja, to spacja - tabulacja to tabulacja.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-472842070184564808?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/472842070184564808/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/09/pspad-i-tabulacja.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/472842070184564808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/472842070184564808'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/09/pspad-i-tabulacja.html' title='pspad i tabulacja'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2737904963403590569</id><published>2009-08-20T12:14:00.006+02:00</published><updated>2009-08-20T12:26:44.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tworzenie'/><category scheme='http://www.blogger.com/atom/ns#' term='bannery'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google i Bannery</title><content type='html'>google mysli o wszystkim, nawet o tym jak ulatwic uzytkownikom robienie bannerow na strone. w tym celu powstal &lt;a href="http://www.google.pl/adwords/displayadbuilder/index.html"&gt;Display Ad Builder&lt;/a&gt; - proste narzedzie do samodzielnego tworzenia bannera. wiadomo, nie zastapi photoshopa, ale to co oferuja czasami w zupelnosci wystarczy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2737904963403590569?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2737904963403590569/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/google-i-bannery.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2737904963403590569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2737904963403590569'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/google-i-bannery.html' title='Google i Bannery'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-1937007390984964247</id><published>2009-08-20T11:56:00.008+02:00</published><updated>2009-08-20T12:49:21.449+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='coding style'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>KohanaPHP Syntax</title><content type='html'>na forum KohanaPHP oraz na podstronie z projektami mozna spotkac dwa rodzaje formatowania tekstu: &lt;a href="http://dev.kohanaphp.com/help/wiki_syntax.html"&gt;Wiki&lt;/a&gt; oraz &lt;a href="http://daringfireball.net/projects/markdown/syntax"&gt;Markdown&lt;/a&gt;. do wiekszosci postow nie jest to niezbedne, ale czasami lepiej odpowiednio sformatowac tekst, aby byl czytelniejszy. &lt;br /&gt;&lt;br /&gt;natomiast pod adresem &lt;a href="http://dev.kohanaphp.com/wiki/kohana2/CodingStyle"&gt;KohanaPHP Coding Style&lt;/a&gt; znajduja sie zalecenia jaki styl kodowania jest wymagany w oficjalnych modulach, a takze jak pisac aby nasz kod byl tak samo sformatowany jak owe oficjalny moduly - oczywiscie to tylko zalecenia, w koncu KohanaPHP jest dla ludzi, nie dla robotow ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-1937007390984964247?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/1937007390984964247/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/kohanaphp-syntax.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1937007390984964247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1937007390984964247'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/kohanaphp-syntax.html' title='KohanaPHP Syntax'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7019305575881950960</id><published>2009-08-18T15:33:00.004+02:00</published><updated>2009-09-10T00:38:32.632+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple Auth i Modeler - zmiany</title><content type='html'>wraz z wyjsciem wersji 2.4 oraz 3.0 KohanaPHP bedzie miala male zawirowanie:&lt;br /&gt;- stara, sprawdzona 2.3.x z dobrze znana struktura itd&lt;br /&gt;- nowa, 2.4 z odchudzonym core, nowa biblioteka DB oraz i18n &lt;br /&gt;- najnowsza 3.0, przepisana na nowo, z HMVC&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;zarowno &lt;a href="http://dev.kohanaphp.com/projects/simple-auth"&gt;Simple Auth&lt;/a&gt; jak i &lt;a href="http://dev.kohanaphp.com/projects/simple-modeler"&gt;Simple Modeler&lt;/a&gt; (od kilku dni jest oddzielnym projektem) w zwiazku z tym przejda pewne zmiany. do projektu dolaczyl Maciek, ktory zajmie sie wersjami dla 3.x, a ja skupie sie na 2.x - to sa wstepne plany, do czasu ukazania sie stabilnych wersji frameworka. co bedzie dalej, to 'sie zobaczy': jesli faktycznie miedzy 2.4 a 3.0 nie bedzie roznic, to zapewne pomyslimy o ujednoliceniu naszych bibliotek. jesli beda, to nastepne jest pytanie: z ktorej wersji frameworka bede dalej korzystal. na razie tego nie wiem, wiec nie wyrokuje. do czasu ukazania sie nowych wersji KohanaPHP i ustalenia co dalej, nie ma co sie spodziewac nowej finalnej wersji ktoregos z modulow.&lt;br /&gt;&lt;br /&gt;w tzw. miedzyczasie zaszly pewne zmiany w repozytoriach obu projektow (struktura katalogow), plus sa tam podgrane nowe wersje beta - jak to beta, moga byc niestabilne, z bledami i slabo przetestowane ;)&lt;br /&gt;&lt;br /&gt;zmianie tez ulegla numeracja - aby nie bylo watpliwosci dla ktorej wersji jest modul, zarowno obecny Simple Auth jak i Simple Modeler zostaly przenumerowane na wersje 2.x.x: pierwszy numerek oznacza wersje frameworka dla ktorej jest przeznaczony modul, a nastepne faktyczna wersje modulu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7019305575881950960?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7019305575881950960/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/simple-auth-i-modeler-zmiany.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7019305575881950960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7019305575881950960'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/simple-auth-i-modeler-zmiany.html' title='Simple Auth i Modeler - zmiany'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6570310474296335062</id><published>2009-08-18T10:27:00.006+02:00</published><updated>2009-08-18T10:42:33.557+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP i Google Analytics API</title><content type='html'>nie wiem, czy wszyscy wiedza, ale google udostepniolo &lt;a href="http://code.google.com/p/gapi-google-analytics-php-interface/"&gt;GAPI&lt;/a&gt; - Google Analytics API PHP Interface, czyli nic innego jak mozliwosc generownia raportow bezposrednio na stronie, ktora tworzymy - nie trzeba sie logowac na stronach google, mozna od razu wygenerowac np. kilka interesujacych nas raportow bezposrednio w administracji danej strony www.&lt;br /&gt;&lt;br /&gt;nie korzystalem, ale przyklady wydaja sie bardzo proste - oby tak to dzialalo w rzeczywistosci :)&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;tutaj jest &lt;a href="http://code.google.com/intl/pl/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html"&gt;pelna lista&lt;/a&gt; rzeczy, ktore mozemy pobrac za pomoca API. a tutaj glowna strona z &lt;a href="http://code.google.com/intl/pl/apis/analytics/docs/gdata/gdataLibraries.html"&gt;Client Libraries &amp; Sample Code&lt;/a&gt;, z innymi bibliotekami niz PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6570310474296335062?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6570310474296335062/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/php-i-google-analytics-api.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6570310474296335062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6570310474296335062'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/php-i-google-analytics-api.html' title='PHP i Google Analytics API'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2681028970336896095</id><published>2009-08-16T14:03:00.006+02:00</published><updated>2009-09-10T00:38:53.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>przerywnik</title><content type='html'>czas spedzony przed ekranem monitora to nie tylko praca, dlatego warto zapoznac sie z kilkoma bardzo przyjemnymi gierkami, tzw. casual games, czyli gry, ktore mozna w kazdej chwili uruchomic, pograc chwile (5m, 15m, 1h...) i spokojnie zostawic na nastepne posiedzenie. typowe gry bowiem wymagaja raczej dluzszego siedzenia przed kompem - casual`e sa skierowane dla osob zapracowanych, ktore chca sie rozerwac, ale nie chca poswiacac na to minium 3h dziennie i chca miec mozliwosc przerwania gry w dowolnym momencie.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;- &lt;a href="http://www.infinite-interactive.com/puzzlequest.php"&gt;Puzzle Quest: Challenge of the Warlords&lt;/a&gt;&lt;br /&gt;bardzo (BARDZO) udane polaczenie prostej gry RPG (bohater, questy, statsy, czary, potwory itd.) z gra logiczna. wciaga niesamowicie, do kupienia za grosze z kilkoma gazetami czy tez w serii tanich gier.&lt;br /&gt;- &lt;a href="http://www.infinite-interactive.com/galactrix.php"&gt;Puzzle Quest - Galactrix&lt;/a&gt;&lt;br /&gt;rozwiniecie pomyslu z COTW, tym razem w kosmosie, nieco zmienione zasady walki na planszy. &lt;br /&gt;- &lt;a href="http://www.infinite-interactive.com/kingdoms.php"&gt;Puzzle Kingdoms&lt;/a&gt;&lt;br /&gt;kolejna wariacja na temat puzli, tym razem bardziej strategia niz RPG.&lt;br /&gt;- &lt;a href="http://www.gamehouse.com/download-games/azkend"&gt;Azkend&lt;/a&gt;&lt;br /&gt;bardzo wciagajaca gra, zasady nieco podobne do Puzzle Quest - plansza plus polacz podobne, tutaj jednak liczy sie czas - na kazda plansze mamy z gory okreslony przedzial czasu i choc by braklo 3 seknund, to nie ma zmiluj: mission failed :) do tego mamy okolo 10 talizmanow o roznych mocach i przed kazda walka mozemy jeden z nich aktywowac - bardzo fajnie to urozmaica rozgrywke. brak watku RPG sprawia, ze gra jest typowo casual`owa, mozna sobie bardzo przyjemnie pogrywac po 15-20 minut dziennie.&lt;br /&gt;&lt;br /&gt;warte uwagi wydaja sie rowniez &lt;a href="http://www.gry-online.pl/S016.asp?ID=12572"&gt;Braid&lt;/a&gt; oraz &lt;a href="http://www.gry-online.pl/S016.asp?ID=12485"&gt;Trine&lt;/a&gt;, ale nie gralem, wiec nie wiem.&lt;br /&gt;&lt;br /&gt;liste bede staral sie uzupelniac.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2681028970336896095?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2681028970336896095/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/przerywnik.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2681028970336896095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2681028970336896095'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/przerywnik.html' title='przerywnik'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4650849008081844854</id><published>2009-08-03T17:11:00.009+02:00</published><updated>2009-09-10T00:39:07.069+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pivot'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='wiele do wielu'/><category scheme='http://www.blogger.com/atom/ns#' term='tabele'/><title type='text'>mysql i tabele typu pivot</title><content type='html'>mianem pivot zwyklo okreslac sie zazwyczaj trzy tabele mapujace wiele do wielu, np.:&lt;br /&gt;- artykuly (id,name)&lt;br /&gt;- tagi (id,name)&lt;br /&gt;- tagi artykulow (id,article_id,tag_id), powiazanie artykulow z tagami, gdzie jeden artykul moze miec dowolna ilosc tagow&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;jak wyciagnac dane z bazy, tak aby w jednym zapytaniu (bez podzapytan) wydostac dane tak aby w jednym wierszu byl artykul oraz przypisane do niego tagi? sposobow jest kilka, jeden z nich to:&lt;br /&gt;&lt;pre class="brush: sql"&gt;SELECT a.*, GROUP_CONCAT(DISTINCT t.name ORDER BY t.name) AS tags,&lt;br /&gt;GROUP_CONCAT(DISTINCT t.id ORDER BY t.name) AS tags_id &lt;br /&gt;FROM articles a, tags t, article_tags ta&lt;br /&gt;WHERE a.id = ta.article_id AND t.id = ta.tag_id&lt;br /&gt;GROUP BY a.id&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;dzieki wykorzystaniu &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html"&gt;group concat&lt;/a&gt; i temu, ze mozna w jego obrebie dane sortowac jak rowniez ograniczyc je do wyswietlania tylko unikalnych rekordow (distinct) otrzymujemy takie oto wyniki:&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5365758316658589954" src="http://4.bp.blogspot.com/_XdQ-3geYeXU/SncAwo8IgQI/AAAAAAAAABY/6aHXgT-fAP4/s320/groupconcat.jpg" style="cursor: hand; cursor: pointer; display: block; height: 102px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;&lt;br /&gt;mamy kolumne z artykulem, kolejna z tagami oddzielonymi przecinkami (separator mozna dowolnie zmieniac) oraz kolejna z ID poszczegolnych tagow (o ile sa potrzebne) - to samo sortowanie obu kolumn, tj. tagow i ich ID daje pewnosc, ze nie zostana one pomieszane. dzieki temu mozna po pobraniu rekordow i np. przy ich wyswietlaniu zrobic php`owe &lt;a href="http://www.php.net/explode"&gt;explode&lt;/a&gt; na kolumnach z tagami i ich ID, aby otrzymal ladne powiazanie miedzy nimi (np. trzeci element tablicy z nazwami bedzie na pewno mial swoje ID w trzecim elemencie w tablicy z ID`kami).&lt;br /&gt;&lt;br /&gt;nie jest to rozwiazanie idealne, ale czasami w zupelnosci wystarczajace.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4650849008081844854?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4650849008081844854/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/08/mysql-i-tabele-typu-pivot.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4650849008081844854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4650849008081844854'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/08/mysql-i-tabele-typu-pivot.html' title='mysql i tabele typu pivot'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XdQ-3geYeXU/SncAwo8IgQI/AAAAAAAAABY/6aHXgT-fAP4/s72-c/groupconcat.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7137970159077065675</id><published>2009-07-30T00:47:00.004+02:00</published><updated>2009-09-10T00:39:58.488+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='xampp'/><category scheme='http://www.blogger.com/atom/ns#' term='serwer'/><title type='text'>localhost</title><content type='html'>jesli ktos jeszcze tego nie wie to niech sie dowie: pracujac na localhost najwygodniej jest operowac na serwerach wirtualnych. mozna wtedy pracowac pod dowolnym adresem url, a nie tylko 127.0.0.1/strona123/. jakie sa tego plusy? &lt;br /&gt;- krotsze adresy&lt;br /&gt;- unikalne domeny dla kazdego z projektow, co czasem jest bardzo potrzebne&lt;br /&gt;- linki bezwzgledne takie same lokalnie jak i na docelowym serwerze&lt;br /&gt;- wygoda, wygoda, wygoda.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;ok, ale jak to zrobic? dodajemy domene mojastrona.pl, trzy kroki:&lt;br /&gt;1) edycja apache/conf/extra/httpd-vhosts.conf i dodaj na koncu:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;NameVirtualHost 127.0.0.1:80&lt;br /&gt;&amp;lt;*VirtualHost 127.0.0.1:80*&amp;gt;&lt;br /&gt;DocumentRoot /xampp/htdocs/moja_strona/&lt;br /&gt;ServerName mojastrona.pl&lt;br /&gt;&amp;lt;*/VirtualHost*&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;tylko bez gwiazdek, dodalem po to aby poprawnie sie wyswietlalo na stronie...&lt;br /&gt;&lt;br /&gt;2) edycja windows/system32/drivers/etc/host i dodanie na koncu:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;127.0.0.1 mojastrona.pl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3) restart apache i gotowe, pod adresem mojastrona.pl mamy to co chcemy.&lt;br /&gt;&lt;br /&gt;uwagi:&lt;br /&gt;- oczywiscie przyklad jest dla systemu windows i serwera xampp&lt;br /&gt;- /xampp/htdocs/moja_strona/ jest to adres gdzie mamy nasz htdocs i powinien byc odpowiednio zaktualizowany&lt;br /&gt;- a skoro jestesmy w temacie, to polecam xampp. dla windows sprawdza sie idealnie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7137970159077065675?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7137970159077065675/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/07/localhost.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7137970159077065675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7137970159077065675'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/07/localhost.html' title='localhost'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-356591650915667751</id><published>2009-07-30T00:29:00.009+02:00</published><updated>2009-07-30T01:35:34.757+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><title type='text'>Simple Auth - porady</title><content type='html'>1) Simple Auth domyslnie loguje uzytkownika po emailu. &lt;br /&gt;   aby to zmienic edytuj application/modules/simple_auth/config/simple_auth.php  i zmien:&lt;br /&gt;&lt;pre class="brush: php"&gt;$config['unique'] = 'email';&lt;br /&gt;//na&lt;br /&gt;$config['unique'] = 'username';&lt;/pre&gt;&lt;br /&gt;2) Simple Auth nie chce mnie zalogowac, co robic?&lt;br /&gt;   wlaczyc &lt;a href="http://docs.kohanaphp.com/libraries/profiler"&gt;profiler&lt;/a&gt; i sprawdzic zapytanie jakie idzie do bazy. z niego od razu mozna wywnioskowac co jest nie tak, czy dane do logowania sie zgadzaja z tym co jest w bazie, czy jest zwracany jakikolwiek rekord itd.&lt;br /&gt;&lt;br /&gt;3) Simple Auth loguje ale co jakis czas jest gubiona sesja&lt;br /&gt;   edytuj application/config/session.php (jesli go tam nie ma to skopiuj go z system/config/) i zmien adekwatne wpisy na:&lt;br /&gt;&lt;pre class="brush: php"&gt;$config['driver'] = 'native';&lt;br /&gt;$config['gc_probability'] = 0;&lt;br /&gt;$config['regenerate'] = 0;&lt;/pre&gt;&lt;br /&gt;4) Simple_Auth dziala, ale nie chce zapamietywac uzytkownika miedzy sesjami przeladarki&lt;br /&gt;   edytuj application/config/cookie.php (jesli go tam nie ma to skopiuj go z system/config/) i zmien adekwatny wpis na:&lt;br /&gt;&lt;pre class="brush: php"&gt;$config['domain'] = 'nazwa_twojej_domeny.pl';&lt;/pre&gt;&lt;br /&gt;5) haslo w bazie jest inne od tego ktore podaje profiler&lt;br /&gt;   haslo (czyli hash) w Simpe Auth jest generowane za pomoca md5, ale to NIE JEST md5($haslo) i nigdy nie nalezy tak sobie generowac nowych hasel. do tego jest Simple_Auth::instance()-&gt;hash($haslo). a dlaczego tak? ano dlatego, ze haslo to jest md5($string1.$haslo.$string2) gdzie string1/2 sa to wartosci pobrane z konfiguracji (appilation/modules/simple_auth/config/simple_auth.php a tam salt_prefix oraz salt_suffix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-356591650915667751?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/356591650915667751/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/07/simple-auth-porady.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/356591650915667751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/356591650915667751'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/07/simple-auth-porady.html' title='Simple Auth - porady'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7481279848690268477</id><published>2009-07-29T23:43:00.007+02:00</published><updated>2009-07-30T00:11:50.128+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zarzadzanie czasem'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>TreePad i TimeTracker</title><content type='html'>do grona niewielkich programow ulatwiajacych codzienna prace przy komputerze dolaczylem ostatnio &lt;a href="http://www.treepad.com/treepadfreeware/"&gt;TreePad Lite&lt;/a&gt;. jest to niewielki program pozwalajacy tworzyc kategorie (podkategorie itd) a nastepnie przypisywac im notatki. po co to na codzien? ano po to: widze ciekawy skrypt php - pstryk, dodalem go do biblioteczki php. link to smiesznego filmu? copy-paste i mam go. js, css? copy-paste i sa moje. i tak dalej. plus jest taki, ze mam wszystko w jednym niewielkim, lekkim dla systemu programie, w postaci tekstu, a nie html. nie musze szukac w kilku miejscach - mam jedna baze z tego typu rzeczami. a sam program nie integruje sie z systemem, mozna na pendrive nosic.&lt;br /&gt;&lt;br /&gt;druga rzecz to &lt;a href="http://www.anuko.com/content/time_tracker/open_source/index.htm"&gt;Anuko TimeTracker&lt;/a&gt;. jest to niewielka aplikacja php/mysql ulatwiajaca kontrole czasu nad poszczegolnymi elementami projektu. przeznaczona jest bardziej dla freelancera niz managera projektu w firmie i spelnia swoje zadanie calkiem niezle. mozna tu wiec dodac firmy, projekty i zadania. przypisywac codziennie czas spedzony nad poszczegolnymi rzeczami i na koniec wygenerowac raport. calosc ma czytelny interface, sama obsluga jest bardzo prosta i intuicyjna.&lt;br /&gt;owszem, mozna chciec wiecej. np. taki Mantis z wygodnym zarzadzaniem czasem dla kazdego zadania. ale za darmo nie ma (czytaj: nie znam) lepszych rozwiazan. to nie jest jakis wielki problem pracowac z Mantisem i na koniec dnia dodac w TimeTracker czas + info na ktore bug`i zostal on przeznaczony. tym bardziej, ze nie zawsze kontrola czasu musi byc widoczna przez innych uzytkownikow Manisa, czasem (zalezy od projektu) robi sie ja tylko dla siebie, aby wiedziec ile czasu zeszlo na poszczegolne rzeczy i latwiej to w przyszlosci oszacowac.&lt;br /&gt;&lt;br /&gt;oba wspomniane programy sa darmowe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7481279848690268477?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7481279848690268477/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/07/treepad-i-timetracker.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7481279848690268477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7481279848690268477'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/07/treepad-i-timetracker.html' title='TreePad i TimeTracker'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6428402281974087210</id><published>2009-07-29T21:17:00.003+02:00</published><updated>2009-07-29T21:54:52.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>TortoiseGit</title><content type='html'>wreszcie jest program do latwej obslugi Git - &lt;a href="http://code.google.com/p/tortoisegit/"&gt;TortoiseGit&lt;/a&gt;. do dzialania wymaga &lt;a href="http://code.google.com/p/msysgit/"&gt;msysgit&lt;/a&gt;. calosc sprowadza sie do instlacji msysgit (z opcja add git path to windows command line), nastpnie TortoiseGit i juz pod prawym przyciskiem myszy mamy dostep do polecen Git. latwo, prosto i przyjemnie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6428402281974087210?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6428402281974087210/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/07/tortoisegit.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6428402281974087210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6428402281974087210'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/07/tortoisegit.html' title='TortoiseGit'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4078142657498946016</id><published>2009-07-23T13:01:00.002+02:00</published><updated>2009-07-30T00:44:12.420+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple Modeler a Query Builder</title><content type='html'>Simple Modeler jest tylko nakladka (extends Model) na zwykly model, w zwiazku z czym posiada pelna funkcjonalnosc modelu w tym np. Query Builder. to jak sie bedzie korzystalo z SM, czy uzywalo np. w kontrolerze fech_where, czy moze w modelu Query Builder to jest sprawa indywidualna. &lt;br /&gt;&lt;br /&gt;inaczej mowiac: z Simple Modeler mam PELEN dostep do Query Builder, ale ze zwyklego modelu nie mam zadnego dostepu do set_fields()/save()/load() itd, co jest dobrym argumentem za uzwaniem SM ;) nie ma zadnych podstaw do tego, aby dla niektorych modeli celowo nie korzystac z Simple Modeler tylko dlatego, ze w nich akurat musze zrobic zapytanie za pomoca Query Builder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4078142657498946016?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4078142657498946016/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/07/simple-modeler-query-builder.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4078142657498946016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4078142657498946016'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/07/simple-modeler-query-builder.html' title='Simple Modeler a Query Builder'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2824833652821403942</id><published>2009-06-18T17:39:00.003+02:00</published><updated>2009-06-18T18:11:20.863+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parsowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='zmienne'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>DtCSS czyli elastyczne css</title><content type='html'>na angielskim forum kohany 'padl' link do ciekawego projektu - &lt;a href="http://code.google.com/p/dtcss/"&gt;DtCSS&lt;/a&gt; - jest to &lt;span style="font-weight:bold;"&gt;parser plikow css napisany w php&lt;/span&gt;. uruchamia sie go odpowiednim poleceniem w .htaccess (1 linijka), nastepnie kazdy wczesniej zdefiniowany plik (moze to byc kazdy .css, moze tez np. tylko te ktore koncza sie na .parse.css, czyli tylko te w ktorych chcemy uzyc parsowania) jest najpierw parsowany, nastepnie cache`owany i na koniec serwowany przegladarce. &lt;br /&gt;po co to wszystko? zastosowan moze byc wiele, ja widze &lt;span style="font-weight:bold;"&gt;rozwiazanie&lt;/span&gt;, dla mnie bardzo &lt;span style="font-weight:bold;"&gt;denerwujacego problemu - sciezki url w plikach css&lt;/span&gt;. strony na komputerze lokalnym mam na wirtualnych serwerach, czyli odwoluje sie do nich bez podkatalogow. na serwerze testowym czesto jednak pracuje na stronach w podkatalogach, aby aktualna wersja do momentu skonczenia nowej byla nietknieta i caly czas dostepna pod glownym adresem. frameworki pozwalaja mi zapomniec o problemach z odwolaniami w linkach czy sciezkami do plikow/obrazkow. javascript rowniez jest do obejscia, raz definiuje adres bazowy i reszta skryptow z niego korzysta. co jednak z plikami css?  adresami url do obrazkow jakie w nich sie znajduja? ano do tej pory nic. kazdy z nich recznie edytowalem i poprawialem wszystkie sciezki. ale byc moze z DtCSS to sie skonczy, umozliwia on bowiem stosowanie zmiennych, czyli tak jak w .js raz okresle url bazowy i parser sam go przepisze na wszystkie odwolania. &lt;br /&gt;przyklad jest &lt;a href="http://code.google.com/p/dtcss/wiki/QuickInstallation"&gt;tutaj&lt;/a&gt;  razem z opisem instalacji. wiecej mozna przeczytac na pozostalych stronach wiki. &lt;br /&gt;skrypt umozliwia np. instrukcje warunkowe, grupowanie wyrazen, daje dostep do operacji arytmetycznych itd. &lt;br /&gt;sprawdzic na pewno warto. moje pierwsze wrazenia sa pozytywne. na pewno blizej sie DtCSS zapoznam, zobaczymy jakie minusy sie znajda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2824833652821403942?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2824833652821403942/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/06/dtcss-czyli-elastyczne-css.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2824833652821403942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2824833652821403942'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/06/dtcss-czyli-elastyczne-css.html' title='DtCSS czyli elastyczne css'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6949581714970449479</id><published>2009-05-29T19:04:00.007+02:00</published><updated>2009-09-10T00:40:37.823+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Modeler 1.5</title><content type='html'>nowa wersja dostepna jest na &lt;a href="http://source.projects.kohanaphp.com/svn/simple-auth/libraries/Simple_Modeler.php"&gt;SVN&lt;/a&gt;, zmiany, glownie zwiazane z cache:&lt;br /&gt;- update() oraz insert() dzialaja na $timestamp i $skip tak samo jak save()&lt;br /&gt;- dodane $where oraz where(), dla latwiejszego laczenia metod&lt;br /&gt;- fetch_where() oraz count_where() stracily parametr $type, nalezy uzywac $where/where() zamiast niego&lt;br /&gt;- dodane fetch_all_cache(), fetch_where_cache(), query_cache() w celu automatycznego cache`owania pobieranych danych&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;uzycie:&lt;br /&gt;&lt;pre class="brush: php"&gt;$users=Simple_Modeler::factory('ksiazki')-&amp;gt;select('tytul','autor')-&amp;gt;fetch_all_cache('ksiazki_info');&lt;/pre&gt;&lt;br /&gt;spowoduje normalne pobranie danych i dodatkowo zapisanie ich w cache. kazde nastepne wywolanie tego zapytania (np. na innej podstronie) odczyta je nie z bazy, ale z cache.&lt;br /&gt;&lt;br /&gt;jesli chodzi o $where i where(). nie ma juz w fetch_where parametru $type, zamiast niego $this-&amp;gt;where zawiera typ zlaczenia, tak samo jak bylo wczesniej domyslnie jest to 'where'. teaz wiec chcac wykonac zapytanie 'like' nalezy:&lt;br /&gt;&lt;pre class="brush: php"&gt;Simple_Modeler::factory('ksiazki')-&amp;gt;where('like')-&amp;gt;count_where(array('autor'=&amp;gt;'grzesiuk'));&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6949581714970449479?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6949581714970449479/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/05/simplemodeler-15.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6949581714970449479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6949581714970449479'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/05/simplemodeler-15.html' title='Simple_Modeler 1.5'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-189831150463871638</id><published>2009-04-20T16:32:00.003+02:00</published><updated>2009-04-20T18:45:36.089+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Modeler 1.4.2</title><content type='html'>nowa wersja dostepna na &lt;a href="http://source.projects.kohanaphp.com/svn/simple-auth/libraries/Simple_Modeler.php"&gt;SVN&lt;/a&gt;, zmiany, glownie zwiazane z laczeniem metod:&lt;br /&gt;- dodane update(), tak dla porzadku skoro jest insert()&lt;br /&gt;- dodane select() aby ograniczyc liczbe zwracanych pol (wczesniej zawsze *)&lt;br /&gt;- dodane limit(), aby fetch_x mialo mniej parametrow&lt;br /&gt;- uwaga: w zwiazku z powyzszym fetch zgubilo parametr $limit&lt;br /&gt;- load() zwraca $this&lt;br /&gt;&lt;br /&gt;dzieki temu mozna teraz w jednej linijce np. tak:&lt;br /&gt;&lt;pre class="brush: php"&gt;//pobranie 2 pol z limitem 3 rekordow&lt;br /&gt;$users=Simple_Modeler::factory('auth_users')-&gt;select('username','email')-&gt;limit(3)-&gt;fetch_all();&lt;br /&gt;//zaladowanie pojedynczego rekordu z bazy, username=janek&lt;br /&gt;$user=Simple_Modeler::factory('auth_users')-&gt;load('janek','username');&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-189831150463871638?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/189831150463871638/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-142.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/189831150463871638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/189831150463871638'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-142.html' title='Simple_Modeler 1.4.2'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4710128874706904694</id><published>2009-04-19T13:57:00.005+02:00</published><updated>2009-09-10T00:41:04.402+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Simple_Auth - przyklady</title><content type='html'>&lt;span style="font-weight: bold;"&gt;aktualne dla wersji:1.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;1. dodawanie uzytkownika&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;$user_data['email']='my@email.com';&lt;br /&gt;$user_data['username']='myuser';&lt;br /&gt;$user_data['password']='verysecret';&lt;br /&gt;$user_data['admin']=true;&lt;br /&gt;Simple_Auth::instance()-&amp;gt;create_user($user_data);&lt;br /&gt;//domyslnie rola active jest true, a moderator jest false, wiec jesli nie chcemy ich zmienia, to nie ma potrzeby ich przekazywac&lt;br /&gt;//aby ograniczyc usera czasowo wystarczy przed wywolaniem create_user dodac kolejna wartosc:&lt;br /&gt;$user_data['active_to']='2009-06-01 22:23:24';&lt;br /&gt;//domyslnie bowiem jest ona ustawiona na null, czyli user nie ma ograniczen czasowych&lt;br /&gt;//aby uzyskac date np. teraz + 3 miesiace mozna:&lt;br /&gt;$user_data['active_to']=date('Y-m-d H:i:s',mktime(date('H'), date('i'), date('s'), date('m')+3, date('d'), date('Y')));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. kasowanie uzytkownika&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//kasuje obecnie zalogowanego usera&lt;br /&gt;Simple_Auth::instance()-&amp;gt;delete_user();&lt;br /&gt;//kasuje usera z id=5&lt;br /&gt;Simple_Auth::instance()-&amp;gt;delete_user('5');&lt;br /&gt;//kasuje usera przekazanego jako obiekt $user&lt;br /&gt;Simple_Auth::instance()-&amp;gt;delete_user($user);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. nadawanie uprawnien&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//zabranie obecnie zalogowanemu userowi roli admin&lt;br /&gt;Simple_Auth::instance()-&amp;gt;set_role(array('admin'=&amp;gt;false));&lt;br /&gt;//nadanie userowi z id=5 roli moderator&lt;br /&gt;Simple_Auth::instance()-&amp;gt;set_role(array('moderator'=&amp;gt;true),5);&lt;br /&gt;//nadanie userowi przekazanemu jako obiekt $user prawa do logowania&lt;br /&gt;Simple_Auth::instance()-&amp;gt;set_role(array('active'=&amp;gt;true),$user);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. logowanie&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//logowanie bez zapisania cookies, po zamknieciu przegladarki sesja wygasa&lt;br /&gt;Simple_Auth::instance()-&amp;gt;login($username, $password, false);&lt;br /&gt;//logowanie z cookies, sesja nie wygasa po zamknieciu przegladarki&lt;br /&gt;Simple_Auth::instance()-&amp;gt;login($username, $password, true);&lt;br /&gt;//jesli logowanie pomyslne, zostanie zwrocone true, czyli mozna:&lt;br /&gt;if (Simple_Auth::instance()-&amp;gt;login($username, $password, false))&lt;br /&gt;echo 'logowanie pomyslne';&lt;br /&gt;else&lt;br /&gt;echo 'logowanie nie powiodlo sie';&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. weryfikacja logowania, pobieranie informacji i userze i wyswietlanie jej.&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//jesli user jest zalogowany, przypisz do $user jego dane i wyswietl username&lt;br /&gt;if (Simple_Auth::instance()-&amp;gt;logged_in())&lt;br /&gt;$user = Simple_Auth::instance()-&amp;gt;get_user();&lt;br /&gt;echo 'witaj '.$user-&amp;gt;username;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. przeladowanie uzytkownika&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//ponowne wczytanie z bazy danych uzytkownika&lt;br /&gt;Simple_Auth::instance()-&amp;gt;reload_user();&lt;br /&gt;//ponowne wczytanie z bazy danych uzytkownika z id=5&lt;br /&gt;Simple_Auth::instance()-&amp;gt;reload_user('5');&lt;br /&gt;//ponowne wczytanie z bazy danych uzytkownika przekazanego jako obiekt $user &lt;br /&gt;Simple_Auth::instance()-&amp;gt;reload_user($user);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8. wylogowanie uzytkownika&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//wylogowuje i kasuje tylko token przypisany do aktualnie uzywanej przegladarki&lt;br /&gt;Simple_Auth::instance()-&amp;gt;logout();&lt;br /&gt;//wylogowuje i kasuje wszystkie tokeny, takzle dla innych przegladarek&lt;br /&gt;Simple_Auth::instance()-&amp;gt;logout(TRUE);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9. uzyskanie zakodowanego hasla&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//koduje podany ciag znakow zgodnie z ustawieniami w konfiguracji simple_auth&lt;br /&gt;$my_password = 'moje_haslo';&lt;br /&gt;echo Simple_Auth::instance()-&amp;gt;hash($my_password);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10. pobieranie informacji o uzytkownku&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;//pobranie informacji o obecnie zalogowanym uzytkowniku&lt;br /&gt;$user = Simple_Auth::instance()-&amp;gt;get_user();&lt;br /&gt;//pobranie informacji o userze  z id=5&lt;br /&gt;$user = Simple_Auth::instance()-&amp;gt;get_user('5');&lt;br /&gt;//pobranie informacji o userze przekazanym jako obiekt $user&lt;br /&gt;$user = Simple_Auth::instance()-&amp;gt;get_user($user);&lt;br /&gt;//w efekcie $user bedzie albo pusty (nie ma takiego usera), albo bedzie zawieral dane uzytkownika&lt;br /&gt;//z bazy i bedzie mozna sie do nich odwolywac poprzec $user-&amp;gt;username&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;wszystkie opisy simple_Auth oraz Simple_Modeler sa pisanie nieco 'na kolanie', wiec tu i owdzie moga byc literowki itd. :/&lt;br /&gt;&lt;br /&gt;w nastepnej czesci zrobie niewielki (lecz kompletny, ze zrodlami) tutorial pokazujacy logowanie oraz wybrane metody Simple_Auth. bedzie to rowniez calkiem dobry tutorial do Simple_Modeler z racji na wykorzystanie set_fields, save itd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4710128874706904694?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4710128874706904694/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-przyklady.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4710128874706904694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4710128874706904694'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-przyklady.html' title='Simple_Auth - przyklady'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-3307704147086669695</id><published>2009-04-19T12:56:00.005+02:00</published><updated>2009-09-10T00:41:14.530+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Simple_Auth - wprowadzenie</title><content type='html'>&lt;span style="font-weight: bold;"&gt;aktualne dla wersji: 1.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simple_Auth (dalej SA) jest biblioteka frameworka KohanaPHP umozliwiajaca uwierzytelnianie uzytkownikow.&lt;br /&gt;w odroznieniu od domyslnego Auth dolaczonego do frameworka, SA:&lt;br /&gt;- nie korzysta z ORM&lt;br /&gt;- jest bardziej konfigurowalny, elastyczny i prostszy do modyfikacji / dostosowania do juz istniejacych systemow z inna niz domyslna struktura tabel&lt;br /&gt;- sama biblioteka autoryzacji sklada sie z tylko jednego pliku&lt;br /&gt;- zapisywanie ostatnio uzytego przy logowaniu IP oraz daty logowania&lt;br /&gt;- mozliwosc ustawienia daty po ktorej uplywie user nie bedzie mogl sie zalogowac&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;ponadto SA umozliwia:&lt;br /&gt;- dodawanie/kasowanie uzytkownikow&lt;br /&gt;- pobieranie informacji o uzytkownikach&lt;br /&gt;- nadawanie uprawnien uzytkownikom (logowanie/zarzadzanie/pelna administracja)&lt;br /&gt;- 'remember me', automatyczne logowanie na podstawie cookies&lt;br /&gt;- automatycznie zliczanie logowan&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. zmienne&lt;/span&gt;&lt;br /&gt;protected $session;&lt;br /&gt;dostep do sesji php&lt;br /&gt;&lt;br /&gt;protected $config; &lt;br /&gt;konfiguracja wczytana z pliku&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. metody&lt;/span&gt;&lt;br /&gt;public function hash($str)&lt;br /&gt;koduje podany string za pomoca algorytmu ustaloengo w konfiguracji&lt;br /&gt;&lt;br /&gt;public function reload_user()&lt;br /&gt;przeladowuje zalogowanego usera: pobiera dane z bazy i zapisuje je w sesji.&lt;br /&gt;&lt;br /&gt;public function set_role($role, $user=0)&lt;br /&gt;pozwala ustawic admin/active/moderator dla wybranego uzytkownika, domyslnie aktualnie zalogowanego.&lt;br /&gt;jako parametr $role nalezy przekazac tablice w postaci array('admin'=&amp;gt;true,'active'=&amp;gt;0), wszelkie inne klucze niz role ustawione w konfiguracji sa pomijane.&lt;br /&gt;jako $user mozna przekazac obiekt lub ID uzytkownika, ktoremu chcemy zmienic role.&lt;br /&gt;&lt;br /&gt;public function logout($destroy=FALSE)&lt;br /&gt;wylogowuje usera, jesli $destroy=true, niszczy cala sesje, w innym wypadku tylko klucz z uzytkownikiem.&lt;br /&gt;kasowane jest tez cookies oraz token przypisany dla danej przegladarki.&lt;br /&gt;&lt;br /&gt;public function logged_in()&lt;br /&gt;zwraca true jesli user jest zalogowany, false jesli nie. sprawdzanie odbywa sie na podstawie danych zapisanych w sesji&lt;br /&gt;&lt;br /&gt;public function get_user($user=0)&lt;br /&gt;pobiera informacje o uzytkowniku, domyslnie o obecnie zalogowanym. jako $user mozna przekazac obiekt lub ID uzytkownika, wtedy pobierane sa dane tego usera z bazy.&lt;br /&gt;&lt;br /&gt;public function create_user($user_data, $second=FALSE)&lt;br /&gt;tworzy uzytkownika na podstawie przeslanych danych.&lt;br /&gt;&lt;br /&gt;public function delete_user($user) &lt;br /&gt;kasuje uzytkownika. domyslnie aktualnie zalogowanego. jako $user mozna przekazac obiekt, lub ID uzytkownika, wtedy on zostanie skasowany.&lt;br /&gt;&lt;br /&gt;public function login($user, $password, $remember = FALSE)&lt;br /&gt;loguje uzytkownika. jesli pomyslnie, zwraca true. zarowno $user jak i $password musza byc typu string&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Ustawienia konfiguracji&lt;/span&gt;&lt;br /&gt;przed pierwszym uzyciem modulu na danej stronie najlepiej zmienic wartosci kluczy salt_prefix i salt_suffix na inne niz domyslne, unikalne, nie powrarzajace sie na innych stronach. podobnie mozna postapic z session_key, cookie_key.&lt;br /&gt;&lt;br /&gt;$config['hash_method'] = 'md5';&lt;br /&gt;rodzaj algorytmu kodujacego haslo&lt;br /&gt;&lt;br /&gt;$config['salt_prefix'] = 'simple_auth_secret';&lt;br /&gt;string dodawany do hasla (na jego poczatku) przed kodowaniem&lt;br /&gt;&lt;br /&gt;$config['salt_suffix'] = '_secret';&lt;br /&gt;string dodawany do hasla (na jego koncu) przed kodowaniem&lt;br /&gt;&lt;br /&gt;$config['lifetime'] = 1209600;&lt;br /&gt;waznosc cookie przechowujacego dane do automatycznego logowania&lt;br /&gt;&lt;br /&gt;$config['session_key'] = 'auth_user';&lt;br /&gt;nazwa klucza sesji gdzie zapisywane beda dane uzytkownika&lt;br /&gt;&lt;br /&gt;$config['cookie_key'] = 'auth_auto_login';&lt;br /&gt;nazwa ciasteczka gdzie zapisywane beda dane do automatycznego logowania&lt;br /&gt;&lt;br /&gt;$config['roles'] = array('admin'=&amp;gt;'','active'=&amp;gt;'','moderator'=&amp;gt;'')&lt;br /&gt;nazwy pol na tabeli user przechowujacych role. wartosci musza pozostac puste, poniewaz jest to uzywane w set_roles jako filtr - wszelkie inne klucze przekazane w set_roles sa odrzucane.&lt;br /&gt;&lt;br /&gt;$config['password'] = 'password';&lt;br /&gt;nazwa pola do ktorego jest zapisywane haslo uzytkownika&lt;br /&gt;&lt;br /&gt;$config['unique'] = 'email';&lt;br /&gt;nazwa pola jakie bedzie uzywane przy logowaniu jako login&lt;br /&gt;&lt;br /&gt;$config['unique_second'] = 'username';&lt;br /&gt;nazwa pola jakie opcjonalnie bedzie uzyte w parze z $config['unique'] do sprawdzenia czy dana nazwa uzytkownika jest wolna&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. model user&lt;/span&gt;&lt;br /&gt;user_exists($name, $second='')&lt;br /&gt;metoda, sprawdza czy podany login usera jest wolny. opcjonalnie mozna podac pole jakie bedzie sprawdzone w parze, np. login+email czy sa unikalne.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. model token&lt;/span&gt;&lt;br /&gt;$now;&lt;br /&gt;zmienna, przechowuje aktualny timestamp&lt;br /&gt;&lt;br /&gt;delete_expired()&lt;br /&gt;metoda, kasuje wszystkie stare tokeny z tabeli, porownujac date wygasniecia z $now&lt;br /&gt;&lt;br /&gt;delete_user_tokens($id,$all=FALSE)&lt;br /&gt;metoda, kasuje wszystkie tokeny uzytkownika o podanym ID, domyslnie tylko dla aktualnej przegladarki. ustawienie $all na true kasuje wszystkie tokeny.&lt;br /&gt;&lt;br /&gt;create_token()&lt;br /&gt;metoda, tworzy unikalny token&lt;br /&gt;&lt;br /&gt;w kolejnej czesci zajme sie luznymi przykladami, a w nastepnej niewielkim tutorialem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-3307704147086669695?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/3307704147086669695/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-wprowadzenie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3307704147086669695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3307704147086669695'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-wprowadzenie.html' title='Simple_Auth - wprowadzenie'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7053131694466008958</id><published>2009-04-19T12:33:00.004+02:00</published><updated>2009-04-19T13:23:00.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Auth 1.3</title><content type='html'>Nowa wersja dostepna na svn, a w niej kilka zmian:&lt;br /&gt;&lt;br /&gt;zmiany w SA:&lt;br /&gt;- usuniete enable/disable user (set_role() je zastepuje)&lt;br /&gt;- dodane set_role(), ktore pozwala ustawic dowolna role, domyslnie dla zalogowanego usera, umozliwia ustalanie dla dowolnego usera z bazy&lt;br /&gt;- za pomoca get_user() mozna pobrac z bazy dane dowolnego usera &lt;br /&gt;- nazwa pola przechowujacego hasla wyciagnieta do konfiguracji&lt;br /&gt;- create_user uzywa teraz set_fields() zamiast recznego przypisania&lt;br /&gt;- nazwy kolumn z rolami wyciagniete do konfiguracji&lt;br /&gt;- dodane: active_to. jesli jest w nim data, to user po jej uplywie nie moze sie wiecej logowac do systemu&lt;br /&gt;&lt;br /&gt;zmiany w SM:&lt;br /&gt;- dodane insert()&lt;br /&gt;- $skip usuniete z get/set, wystarczy jesli jest w save()&lt;br /&gt;- $limit zmienil sie z array('limit'=&gt;value,'offset'=&gt;value) na array($limit,$offset=0)&lt;br /&gt;- poprawiony potencjalny bug w column cache&lt;br /&gt;&lt;br /&gt;zaktualizowalem dokumentacje i przyklady simple_modeler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7053131694466008958?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7053131694466008958/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-13.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7053131694466008958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7053131694466008958'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-13.html' title='Simple_Auth 1.3'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-1840637056045999961</id><published>2009-04-16T19:41:00.013+02:00</published><updated>2009-09-10T00:41:49.867+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Modeler - przyklady</title><content type='html'>&lt;span style="font-weight: bold;"&gt;aktualne dla wersji: 1.4.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;w drugiej czesci opisu Simple_Modeler podam kilka przykladow:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;zaladowanie rekordu o id=4:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$model = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;load(4);&lt;br /&gt;//mozna pozniej wyswietlac dane korzystajac z echo $model-&amp;gt;imie&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;zaladowanie rekordu na podstawie innego niz ID pola:&lt;br /&gt;&lt;pre class="brush: php"&gt;$user=Simple_Modeler::factory('auth_users')-&amp;gt;load('janek','username');&lt;/pre&gt;&lt;br /&gt;pobranie wszystkich rekordow z tabeli:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$dane= Simple_Modeler::factory('nazwa_modelu')-&amp;gt;fetch_all();&lt;br /&gt;//wersja 2, dla stronicowania:&lt;br /&gt;$dane= Simple_Modeler::factory('nazwa_modelu')-&amp;gt;limit(10,5)-&amp;gt;fetch_all();&lt;/pre&gt;&lt;br /&gt;pobranie wszystkich rekordow z imie=jan i nazwisko=kowalski:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$dane= Simple_Modeler::factory('nazwa_modelu')-&amp;gt;fetch_where(array('imie'=&amp;gt;'jan','nazwisko'=&amp;gt;'kowalski'));&lt;br /&gt;foreach ($dane as $rekord)&lt;br /&gt;echo  $rekord-&amp;gt;imie;&lt;br /&gt;//wersja 2, dla stronicowania:&lt;br /&gt;$dane=Simple_Modeler::factory('nazwa_modelu')-&amp;gt;limit(5)-&amp;gt;fetch_where(array('imie'=&amp;gt;'jan','nazwisko'=&amp;gt;'kowalski'));&lt;/pre&gt;&lt;br /&gt;zapis do tabeli:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$model = Simple_Modeler::factory('nazwa_modelu');&lt;br /&gt;$model-&amp;gt;imie='jan';&lt;br /&gt;$model-&amp;gt;nazwisko='kowalski';&lt;br /&gt;$model-&amp;gt;save();&lt;br /&gt;//zapisze dane - wykona insert (tworzymy nowy wpis)&lt;br /&gt;//wersja 2:&lt;br /&gt;$model = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;load(4);&lt;br /&gt;$model-&amp;gt;nazwisko='malinowski';&lt;br /&gt;$model-&amp;gt;save();&lt;br /&gt;//zapisze dane, wykona update, rekord o id=4 zmieni nazwisko na malinowski&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;kasowanie rekordu:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$result = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;load(4)-&amp;gt;delete();&lt;br /&gt;//jesli rekord o id 4 zostal skasowany $result bedzie true&lt;br /&gt;//wersja 2:&lt;br /&gt;Simple_Modeler::factory('nazwa_modelu')-&amp;gt;delete(array('imie'=&amp;gt;'jan'));&lt;br /&gt;//skasuje wszystkich o imie=jan&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;generowanie selecta:&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$lista =  Simple_Modeler::factory('nazwa_modelu')-&amp;gt;select_list('id', 'name');&lt;br /&gt;//wygeneruje tablice z parami id=name, sortowana po id&lt;br /&gt;//wersja 2:&lt;br /&gt;$lista =  Simple_Modeler::factory('nazwa_modelu')-&amp;gt;select_list('id', 'name', 'name',array('miasto'=&amp;gt;'londyn'));&lt;br /&gt;//wygeneruje tablice z parami id=name, sortowana po name, tylko dla rekordow ktore maja miasto=londyn&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;zliczanie rekordow (np. dla stronicowania):&lt;br /&gt;&lt;pre class="brush: php"&gt;//wersja 1:&lt;br /&gt;$ile = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;count_all();&lt;br /&gt;//policzy wszystkie rekordy w tabeli&lt;br /&gt;//wersja 2:&lt;br /&gt;$ile = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;count_where(array('imie'=&amp;gt;'jan'));&lt;br /&gt;//policzy wszystkie rekordy w tabeli o imie=jan&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;insert do bazy:&lt;br /&gt;&lt;pre class="brush: php"&gt;$result = Simple_Modeler::factory('nazwa_modelu')-&amp;gt;insert(array('imie'=&amp;gt;'jan','nazwisko'=&amp;gt;'kowalski')); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;zapis danych z formularza:&lt;br /&gt;&lt;pre class="brush: php"&gt;$result = Simple_Modeler::factory('my_model')-&amp;gt;set_fields($form_data)-&amp;gt;save();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;pobieranie tylko okreslonych pol:&lt;br /&gt;&lt;pre class="brush: php"&gt;$dane= Simple_Modeler::factory('nazwa_modelu')-&amp;gt;select('id','nazwisko')-&amp;gt;fetch_all();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;oczywiscie jesli mamy juz wczesniej utworzony model np.&lt;br /&gt;$moj_model = Simple_Modeler::factory('nazwa_modelu');&lt;br /&gt;to pozniej nie ma sensu pisac:&lt;br /&gt;Simple_Modeler::factory('nazwa_modelu')-&amp;gt;...&lt;br /&gt;poniewaz mozna od razu dac:&lt;br /&gt;$moj_model-&amp;gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;koniec czesci drugiej, w niedlugim czasie pojawi sie kolejna. bedzie to tutorial do Simple_Auth pokazujacy rowniez przykladowe dodawanie usera do bazy z wykorzystaniem set_fields, save, skip, aliases itp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-1840637056045999961?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/1840637056045999961/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-przyklady.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1840637056045999961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/1840637056045999961'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-przyklady.html' title='Simple_Modeler - przyklady'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5297208791963670719</id><published>2009-04-16T19:33:00.014+02:00</published><updated>2009-09-10T00:42:02.054+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Modeler - wprowadzenie</title><content type='html'>&lt;span style="font-weight: bold;"&gt;aktualne dla wersji: 1.4.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;razem z Simple_Auth dolaczony jest Simple_Modeler (dalej nazwany SM), ktory jednak jest osobnym, niezaleznym modulem i z powodzeniem moze byc stosowany bez systemu autoryzacji - wystarczy skopiowac plik Simple_Modeler.php do katalogu application/libraries oraz stworzyc modele dla poszczegolnych tabel.&lt;br /&gt;&lt;br /&gt;jedna uwaga: Simple_Modeler jest nakladka (imho bardzo wygodna) na systemowy query builder, w razie watpliwosci nie zaszkodzi poczytac o nim w &lt;a href="http://docs.kohanaphp.com/libraries/database/builder"&gt;dokumentacji&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;przykladowy model (application/models) dla tabeli 'sample' wyglada tak:&lt;br /&gt;&lt;pre class="brush: php"&gt;class Sample_Model  extends Simple_Modeler&lt;br /&gt;{&lt;br /&gt;// Database table name&lt;br /&gt;protected $table_name = 'sample';&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;to wszystko. na jego podstawie SM zna nazwe tabeli i sam pobierze z niej nazwy kolumn (o ile beda mu one do czegos potrzebne). jesli recznie ustawimy dla danego modelu $auto_fields = FALSE; wtedy trzeba samemu podac nazwy kolumn i model bedzie wygladal tak:&lt;br /&gt;&lt;pre class="brush: php"&gt;class Sample_Model  extends Simple_Modeler&lt;br /&gt;{&lt;br /&gt;// Database table name&lt;br /&gt;protected $table_name = 'sample';&lt;br /&gt;&lt;br /&gt;protected $auto_fields = FALSE;&lt;br /&gt;&lt;br /&gt;protected $data = array('id' =&amp;gt; '',&lt;br /&gt;'pole1' =&amp;gt; '',&lt;br /&gt;'pole2' =&amp;gt; '',&lt;br /&gt;'pole3' =&amp;gt; '');&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;dodatkowa konfiguracja to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. zmienne:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$auto_fields&lt;/span&gt;&lt;br /&gt;true oznacza, ze SM sam ma pobierac nazwy kolumn. &lt;br /&gt;false oznacza, ze musza byc one podane w tablicy $data&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$data&lt;/span&gt;&lt;br /&gt;tablica $data zawiera nazwy kolumn w tabeli. do $data trafiaja tez wartosci z tabeli jesli je pobieramy za pomoca load(). set_fields() przypisuje do $data przekazywane wartosci (np. z formularza).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$original&lt;/span&gt;&lt;br /&gt;tablica $original zawiera oryginalne dane z tabeli (domyslnie puste, czyli same nazwy kolumn). przy zapisie sa one porownywane z $data i do tabeli zapisywana jest tylko roznica (zmienione rekordy).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$aliases&lt;/span&gt;&lt;br /&gt;tablica zawiera aliasy dla set_fields(). dzieki temu mozna np. w formularzu nazwac input 'imie' i zapisac je automatycznie do kolumny 'client_name'. np. $aliases=array('imie'=&amp;gt;'client_name');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$skip&lt;/span&gt;&lt;br /&gt;tablica z polami jakie maja byc pominiete przy save(). np. $skip=array('pole1','pole2');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$use_cache&lt;/span&gt;&lt;br /&gt;jesli true, nazwy kolumn sa cache`owane, czyli tylko raz sa pobierane tabeli, nastepnie juz z cache. uzywane tylko jesli $auto_fields jest true.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$timestamp&lt;/span&gt;&lt;br /&gt;tablica zawierajaca nazwy pol, ktore przy save() maja miec automatycznie przypisana aktualna date i czas wykonania zapisu. np. $timestamp=array('pole1','pole2');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$timestamp_created&lt;/span&gt;&lt;br /&gt;tablica zawierajaca zawiera nazwy pol ktore przy save() maja miec automatycznie przypisana aktualna date i czas wykonania zapisu, ale tylko przy wykonywaniu insert, dla update pozostaja one bez zmian. np. $timestamp=array('pole1','pole2');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$select&lt;/span&gt;&lt;br /&gt;tablica zawierajaca nazwy pol ktore zastana pobrane z bazy (domyslnie wszystkie)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$limit&lt;/span&gt;&lt;br /&gt;limit wierszy do pobrania z bazy&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$offset&lt;/span&gt;&lt;br /&gt;numer wiersza od ktorego zaczac pobieranie z bazy&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. metody:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;load($value, $key='id', $type='where')&lt;/span&gt;&lt;br /&gt;parametry: wartosc szukana,kolumna szukanej wartosci,rodzaj zlaczenia.&lt;br /&gt;laduje rekord (tylko jesli jest on unikalny) dane do $data. mozliwe sa nastepujace wywolania:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;load('1') - laduje rekord o id=1&lt;br /&gt;load('john','name') - laduje rekord o name=john&lt;br /&gt;load(array('imie'=&amp;gt;'jan','nazwisko'=&amp;gt;'kowalski')) - laduje rekord z imie=jan i nazwisko=kowalski&lt;br /&gt;mozna dodatkowo przekazac typ zlaczenia czyli np.:&lt;br /&gt;load(array('imie'=&amp;gt;'jan','nazwisko'=&amp;gt;'kowalski'),null,'orwhere') - laduje rekord z imie=jan LUB nazwisko=kowalski&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;aby bylo to jasne: rekord jest ladowany (dane przypisywane do $data) tylko jesli w tabeli jest JEDEN taki wpis. jesli dla ostatniego przykladu bedzie wiecej niz jeden jan kowalski, to $data zostanie puste, dane sie nie zaladuja - jesli chcemy pobrac wiecej niz dokladnie jeden rekord, trzeba stosowac fetch_where&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;set_fields($data)&lt;/span&gt;&lt;br /&gt;parametry: tablica. musi miec ona postac array('pole'=&amp;gt;'wartosc',...), a jej wartosci zostaja przypisane do odpowiednich kluczy $data. tutaj wykorzystywane sa $aliases, aby przekazane dane wstawic do odpowiedniego pola, oraz skip, aby pominac pewne pola.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;save()&lt;/span&gt;&lt;br /&gt;zapisuje aktualna zawartosc $data do bazy. wczesniej sa porownanie wartosci z oryginalymi danymi z tabeli ($original) i zapisywane sa tylko roznice. tutaj tez pola zdefiniowane jako timestamp sa automatycznie wypelniana data i tutaj pomijane sa pola wymienione w $skip.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;delete($what)&lt;/span&gt;&lt;br /&gt;parametr: tablica&lt;br /&gt;kasuje aktualnie zaladowany rekord (na podstawie id) lub, jesli przekazany jest parametr, kasuje wszystkie rekordy na podstawie okreslonych warunkow. np. delete(array('imie'=&amp;gt;'jan')) kasuje wszystkich z imieniem jan.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;fetch_all($order_by = 'id', $direction = 'ASC')&lt;/span&gt;&lt;br /&gt;parametry: order by, sortowanie. dane sa zwracane jako return metody, nie sa one zapisywane w $data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;public function fetch_where($where = array(),  $order_by = 'id', $direction = 'ASC', $type = 'where')&lt;/span&gt;&lt;br /&gt;parametry: warunki, order by, sortowanie, typ zlaczenia.&lt;br /&gt;pobiera wybrane dane z tabeli. warunki musza byc przekazane w tablicy np. array('imie'=&amp;gt;'jan'), zwroci wszyskie rekordy z imie=jan. typ zlaczenia domyslnie to 'where', mozna je zmienic na 'like' itd.&lt;br /&gt;dane sa zwracane jako return metody, nie sa one zapisywane w $data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;count_all()&lt;/span&gt;&lt;br /&gt;zlicza wszystkie rekordy w tabeli&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;count_where($where=array(),$type='where')&lt;/span&gt;&lt;br /&gt;zlicza wszystkie rekordy w tabeli na podstawie podanych warunkow&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;select_list($key, $display, $order_by = 'id', $where = array(), $direction = 'ASC')&lt;/span&gt;&lt;br /&gt;parametry: klucz (option value), wyswietlana nazwa, order by, warunki, sortowanie&lt;br /&gt;zwraca tablice, ktora mozna przekazac do html::dropdown aby wygenerowac element select. tablica ma postac $key=&amp;gt;$display&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;check_id()&lt;/span&gt;&lt;br /&gt;sprawdza czy dane zostaly zaladowane, domyslnie na podstawie pola 'id'. ma to zastosowanie tylko w polaczeniu z load() - przy uzywaniu fetch dane nie sa ladowane do $data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;as_array()&lt;/span&gt;&lt;br /&gt;zwraca aktualnie przechowywane dane jako tablice (zmienna $data)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;insert($data_to_save = array()) &lt;/span&gt;&lt;br /&gt;dodaje do aktualnej tabeli nowy wiersz zwracajac jego ID&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;update($data_to_update = array(), $where = array()) &lt;/span&gt;&lt;br /&gt;wykonuje update na tabeli zgodnie z przekazana tablica klucz=&amp;gt;wartosc oraz warunkami okreslajacymi ktore rekordy zmienic&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;select($what=array())&lt;/span&gt;&lt;br /&gt;ustawia $select&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;limit($limit,$offset = 0)&lt;/span&gt;&lt;br /&gt;ustawia $limit i $offset&lt;br /&gt;&lt;br /&gt;koniec czesci pierwszej. w kolejnej czesci podam przyklady uzycia poszczegolnych metod, a w nastepnej przyklad walidacji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5297208791963670719?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5297208791963670719/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-wprowadzenie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5297208791963670719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5297208791963670719'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simplemodeler-wprowadzenie.html' title='Simple_Modeler - wprowadzenie'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8163886127739270189</id><published>2009-04-15T23:46:00.003+02:00</published><updated>2009-04-15T23:52:18.341+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='offline'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>MySQL Reference Manual Offline</title><content type='html'>podobnie jak wspomniany juz wczesniej &lt;a href="http://www.php.net/download-docs.php"&gt;manual PHP&lt;/a&gt;, dostepny offline jest rowniez &lt;a href="http://dev.mysql.com/doc/"&gt;manual MySQL&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;calkiem wygodnie sie porusza po nich w wersji chm. szybko mozna zlokalizowac potrzebne informacje. przy braku netu, czy tez slabym laczu, nie trzeba tracic nerwow na tempo ladowania sie stron :/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8163886127739270189?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8163886127739270189/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/mysql-reference-manual-offline.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8163886127739270189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8163886127739270189'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/mysql-reference-manual-offline.html' title='MySQL Reference Manual Offline'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2039727781090562241</id><published>2009-04-14T21:31:00.002+02:00</published><updated>2009-04-14T21:41:54.035+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='autoryzacja'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Auth 1.2</title><content type='html'>nowa wersja Simple_Auth, do pobrania na razie tylko z &lt;a href="http://source.projects.kohanaphp.com/svn/simple-auth"&gt;SVN&lt;/a&gt;. zmiany:&lt;br /&gt;&lt;br /&gt;Simple_Auth&lt;br /&gt;- zmiany w strukturze tabel&lt;br /&gt;- dodane kolumny przechowujace date oraz ip ostatniego logowania&lt;br /&gt;- time_stamp na tabeli z uzytkownikami jest aktualizowany tylko przy logowaniu&lt;br /&gt;- dodana kolumna przechowujaca date utwozenia uzytkownika&lt;br /&gt;- dodane w konfigu unique_second, ktore razem z unique moze (jest to opcjonalne) byc uzyte przy dodawaniu uzytkownikow do sprawdzenia czy taki user juz nie jestnieje&lt;br /&gt;- dodane enable_user()&lt;br /&gt;&lt;br /&gt;Simple_Modeler&lt;br /&gt;- poprawione sleep/wakeup dla MySQLi&lt;br /&gt;- nazwy kolumn w tabeli sa teraz ladowane tylko jesli faktycznie sa potrzebne&lt;br /&gt;- nazwy kolumn sa domyslnie 'keszowane', mozna to wylaczyc&lt;br /&gt;- dodane timestamp_create, pole datetime aktualizowane tylko przy insert&lt;br /&gt;- skip jest sprawdzane jako ostatnie, moze wylaczyc timestamp&lt;br /&gt;&lt;br /&gt;w niedlugim czasie (next week) pojawi sie kompletny tutorial do poruszania sie po simple_auth wraz z simple_modeler oraz przykladem walidacji. stay tune :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2039727781090562241?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2039727781090562241/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-12.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2039727781090562241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2039727781090562241'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/simpleauth-12.html' title='Simple_Auth 1.2'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4906792722633449631</id><published>2009-04-05T14:37:00.003+02:00</published><updated>2009-04-05T14:49:41.956+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hasla'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>generowanie losowych hasel</title><content type='html'>bardzo przyjemny, darmowy, program do generowania hasel: &lt;a href="http://pwgen-win.sourceforge.net/"&gt;PWGen&lt;/a&gt;. znacznie usprawnia zmiane hasel na serwerach, bazach itd - wszedzie tam gdzie powinny byc one losowe. do zapamietania tych hasel swietnie nadaje sie wymieniony tam na stronie &lt;a href="http://keepass.info/"&gt;KeePass&lt;/a&gt; - na pewno jest do duzo lepsze rozwiazanie niz trzymanie ich np. w Total Commander, gdzie bezpieczenstwo hasel jest praktycznie zerowe (dopiero TC 7.5 bedzie je szyfrowal AES).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4906792722633449631?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4906792722633449631/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/generowanie-losowych-hasel.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4906792722633449631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4906792722633449631'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/generowanie-losowych-hasel.html' title='generowanie losowych hasel'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4066713781253904800</id><published>2009-04-04T13:31:00.004+02:00</published><updated>2009-04-05T14:45:27.899+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='compare'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>git vs svn</title><content type='html'>tak jak SVN zastapil CVS, tak teraz wydaje sie, ze GIT zastepuje SVN. warto sie zapoznac z tym rozwiazaniem:&lt;br /&gt;- &lt;a href="http://whygitisbetterthanx.com/"&gt;Why Git is Better than X&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.gitcasts.com/"&gt;GitCasts&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://git.or.cz/course/svn.html"&gt;Git - SVN Crash Course&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;szczegolnie drugi jest wskazany - screencast`y pokazujace jak wyglada praca z GIT`em.&lt;br /&gt;do testow, darmowe konto z SVN mozna zalozyc na &lt;a href="http://xp-dev.com/"&gt;xp-dev&lt;/a&gt;, platne np. na &lt;a href="http://www.nq.pl/svn"&gt;nq&lt;/a&gt;. darmowe konto GIT to np. &lt;a href="http://github.com/"&gt;github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4066713781253904800?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4066713781253904800/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/04/git-vs-svn.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4066713781253904800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4066713781253904800'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/04/git-vs-svn.html' title='git vs svn'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4269672810896617904</id><published>2009-03-24T11:33:00.004+01:00</published><updated>2009-03-24T13:56:33.951+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='specyfikacja'/><category scheme='http://www.blogger.com/atom/ns#' term='zarzadzanie'/><category scheme='http://www.blogger.com/atom/ns#' term='projekt'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>zarzadzanie projektem</title><content type='html'>dobre zarzadanie projektem znacznie przyspiesza prace nad nim, pozwala szybko ocenic wytyczne, cele ktore juz osiagnelismy, to co jest do zrobienia. dobra i czytelna specyfikacja zaoszczedzi wiele rozmow/emaili na temat tego co i jak zrobic. i tutaj z pomoca przychodza dwa programy:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.xmind.net/"&gt;XMind&lt;/a&gt; Social Brainstorming and Mind Mapping &lt;br /&gt;oraz&lt;br /&gt;- &lt;a href="http://www.abstractspoon.com/"&gt;ToDoList&lt;/a&gt;  A simple but effective way to keep on top of your tasks&lt;br /&gt;&lt;br /&gt;pierwszy pozwala w bardzo szybki, prosty i czytelny sposob stworzyc ogolna specyfikacje projektu. pokazac powiazania pomiedzy niektorymi elementami, wizualnie pokazac (nie tylko jako slowa na papierze) wszystkie skladowe strony, elementy panelu administracyjnego itd. jak to sie mowi: jeden obrazek potrafi zastapic 1000 slow :)&lt;br /&gt;&lt;br /&gt;drugi program jest bardzo poreczna lista rzeczy do zrobienia. maly, intuicyjny, pozwala szybko zapanowac nad zadaniami do zrobienia w roznych projektach, dodawac je, edytowac, oznaczac jako zakonczony, procent ukonczenia, czas realizacji, deadline itd. moze na prawde wiele i mnie sie bardzo przydaje.&lt;br /&gt;&lt;br /&gt;jest jeszcze &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; free mind mapping software, ale na razie nie sprawdzalem go - xmind wydaje sie miec wszystko czego potrzebuje. wiecej programow jest &lt;a href="http://en.wikipedia.org/wiki/List_of_mind_mapping_software"&gt;tutaj&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;oczywiscie to wszystko odnosi sie do jednoosobowego zespolu i wlasnych potrzeb. dla grupy programistow potrzebny bedzie program ktory daje to wszystko z mozliwoscia wspoldzielenia tych informacji, edycji przez wiele osob itp. ale to juz osobny temat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4269672810896617904?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4269672810896617904/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/zarzadzanie-projektem.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4269672810896617904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4269672810896617904'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/zarzadzanie-projektem.html' title='zarzadzanie projektem'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2041116187211126763</id><published>2009-03-20T19:29:00.004+01:00</published><updated>2009-03-24T11:52:47.071+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>humorum developerum</title><content type='html'>jak znajde cos nowego, bede edytowal posta :)&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.youtube.com/watch?v=bXoc9hOIj3M"&gt;smutny programista&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.youtube.com/watch?v=1lqxORnQARw"&gt;hug a developer&lt;/a&gt; today&lt;br /&gt;- &lt;a href="http://www.vimeo.com/928615"&gt;Groove Is In The Heart&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://img234.imageshack.us/img234/7849/czasbb2.jpg"&gt;real life&lt;/a&gt; programisty&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2041116187211126763?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2041116187211126763/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/humorum-developerum.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2041116187211126763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2041116187211126763'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/humorum-developerum.html' title='humorum developerum'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7291982852130364178</id><published>2009-03-20T18:40:00.003+01:00</published><updated>2009-03-22T11:51:25.169+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Odstaw Internet Explorera 6 do lamusa!</title><content type='html'>&lt;a href="http://www.ie6.pl/"&gt;niniejszym&lt;/a&gt;, wnosze jak na wstepie ;)&lt;br /&gt;&lt;br /&gt;stara, podatna na ataki przegladarka. zmora web developerow. a kysz! sio! a poszedl! nastap sie! :)&lt;br /&gt;&lt;br /&gt;mam nadzieje, ze ta inicjatywa pozwoli wyeliminowac ie6 z rynku przegladarek. skoro jest juz ie8, to nie obrazilbym sie gdyby ie7 rowniez gdzies sobie poszedl...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7291982852130364178?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7291982852130364178/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/odstaw-internet-explorera-6-do-lamusa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7291982852130364178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7291982852130364178'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/odstaw-internet-explorera-6-do-lamusa.html' title='Odstaw Internet Explorera 6 do lamusa!'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-70147528031928061</id><published>2009-03-18T22:23:00.004+01:00</published><updated>2009-03-18T22:39:43.213+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>jak odniesc sukces</title><content type='html'>kilka ciekawych wypowiedzi do obejrzenia/posluchania:&lt;br /&gt;&lt;br /&gt;1) &lt;a href="http://www.youtube.com/watch?v=UF8uR6Z6KLc"&gt;Steve Jobs&lt;/a&gt; o zyciu, pokretnych drogach jakimi przez nie idziemy.&lt;br /&gt;2) &lt;a href="http://www.youtube.com/watch?v=0CDXJ6bMkMY"&gt;David Heinemeier Hansson&lt;/a&gt; opowiada startup`ach &lt;br /&gt;3) &lt;a href="http://www.youtube.com/watch?v=iG9CE55wbtY"&gt;Sir Ken Robinson&lt;/a&gt; o systemie edukacji i jego wplywie na kreatywnosc&lt;br /&gt;4) &lt;a href="http://www.youtube.com/watch?v=EhqZ0RU95d4"&gt;Gary Vaynerchuk&lt;/a&gt; o tym jak osiagnal sukces (rowniez temat startupow)&lt;br /&gt;&lt;br /&gt;dobrze jest sie uczyc od innych, a najlepiej od takich, ktorzy osiagneli sukces (chociaz trudno to jednoznacznie ocenic) i maja cos ciekawego do powiedzenia. od takich, ktorzy chca sie podzielic swoja wiedza po to, abysmy unikneli ich bledow i portafili zrobic to co oni - tylko lepiej.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-70147528031928061?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/70147528031928061/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/jak-odniesc-sukces.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/70147528031928061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/70147528031928061'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/jak-odniesc-sukces.html' title='jak odniesc sukces'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5234080439115599014</id><published>2009-03-12T22:13:00.005+01:00</published><updated>2009-03-12T22:26:25.606+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Auth 1.1</title><content type='html'>Simple_Modeler (bedacy czescia Simple_Auth, ale stanowiacy tak na prawde osobny modul) doczekal sie wersji 1.3, a wraz z nia:&lt;br /&gt;- nazwy kolumn w tabeli sa automatycznie pobierane z bazy (nie trzeba ich recznie definiowac w modelu)&lt;br /&gt;- update zapisuje tylko faktycznie zmodyfikowane pola, pomijajac reszte&lt;br /&gt;- load() umozliwia zaladowanie pojedynczego wiersza na podstawie dowolnego unikalnego pola (nie musi to byc ID) badz tablicy pol&lt;br /&gt;- $timestamp zawiera pola, ktore automatycznie przy insert/update beda mialy przypisany aktualny timestamp&lt;br /&gt;&lt;br /&gt;plik do pobrania &lt;a href="http://source.projects.kohanaphp.com/svn/simple-auth/libraries/Simple_Modeler.php"&gt;tutaj&lt;/a&gt; badz jako czesc &lt;a href="http://projects.kohanaphp.com/projects/list_files/simple-auth"&gt;Simple_Auth 1.1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;samo Simple_Auth jako takie nie posiada innych zmian niz tez zwiazane z Simple_Modeler (czyli glownie w modelach).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5234080439115599014?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5234080439115599014/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/simpleauth-11.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5234080439115599014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5234080439115599014'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/simpleauth-11.html' title='Simple_Auth 1.1'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-618383754034499342</id><published>2009-03-12T19:54:00.003+01:00</published><updated>2009-03-12T20:01:29.399+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>rss, czyli czytamy</title><content type='html'>pod &lt;a href="http://www.filedropper.com/rss032009"&gt;tym&lt;/a&gt; adresem zamieszczam plik .opml zawierajacy wszystkie blogi jakie przegladam/czytuje. od dluzszego czasu korzystam z &lt;a href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx"&gt;FeedDemon&lt;/a&gt; i na razie jestem zadowolony - polecam.&lt;br /&gt;&lt;br /&gt;tematyka blogow jest bardzo rozna, najlepiej sprawdzic samemu co tam w srodku siedzi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-618383754034499342?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/618383754034499342/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/rss-czyli-czytamy.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/618383754034499342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/618383754034499342'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/rss-czyli-czytamy.html' title='rss, czyli czytamy'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4408530262283583307</id><published>2009-03-11T14:26:00.003+01:00</published><updated>2009-03-11T14:39:14.425+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nowosci'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP 5.3 - co nowego</title><content type='html'>ano sporo nowego, bardzo dobre podsumowanie jest na stronach IBM developerWorks:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new1/index.html"&gt;czesc 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html"&gt;czesc 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new3/index.html"&gt;czesc 3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new4/index.html"&gt;czesc 4&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new5/index.html"&gt;czesc 5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;w skrocie: &lt;br /&gt;- The _callStatic() magic method&lt;br /&gt;- Dynamic static calls&lt;br /&gt;- Late static binding&lt;br /&gt;- Few more classes in Standard PHP Library&lt;br /&gt;- Circular garbage collection&lt;br /&gt;- Lambda functions&lt;br /&gt;- Closures&lt;br /&gt;- Namespaces&lt;br /&gt;- Phar&lt;br /&gt;&lt;br /&gt;wszystko to moze (i zapewne tak bedzie) wprowadzic nowa jakosc do programowania w php. frameworki ktore chca sie liczyc beda musialy isc za powyzszymi zmianami, co wydaje mi sie, ze jednoznacznie przekresla wspolprace z php4 (vide CI oraz CakePHP). zanosi sie na to, ze PHP 5.3.x moze zdrowo namieszac w php`owym swiecie.&lt;br /&gt;&lt;br /&gt;milego czytania.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4408530262283583307?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4408530262283583307/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/php-53-co-nowego.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4408530262283583307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4408530262283583307'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/php-53-co-nowego.html' title='PHP 5.3 - co nowego'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6042115116986044241</id><published>2009-03-07T10:38:00.003+01:00</published><updated>2009-03-11T14:38:34.254+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nirsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='sysinternals'/><title type='text'>Sysinternals plus Nirsoft - all in one</title><content type='html'>&lt;a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx"&gt;Sysinternals&lt;/a&gt; oraz &lt;a href="http://www.nirsoft.net/"&gt;Nirsoft&lt;/a&gt; sa to dwa zbiory malych, ale bardzo przydatnych programow. w obu przypadkach jest ich calkiem sporo i zdecydowanie wygodniej jest raz na jakis czas pobraz cala paczke, wszystkie aplikacje, niz sprawdzac czy akurat ta ktorej uzywamy nie ma nowszej wersji.&lt;br /&gt;rozwiazan jest wiele, ja proponuje skorzystac np. z &lt;a href="http://gnuwin32.sourceforge.net/packages/wget.htm"&gt;wget&lt;/a&gt; dla windows. &lt;br /&gt;&lt;br /&gt;dla sysinternals jest to wyjatkowo proste, wystarczy jedno polecenie:&lt;br /&gt;&lt;pre&gt;wget -r -N -l 1 --no-remove-listing http://live.sysinternals.com/&lt;/pre&gt;dla nirsoft nie ma juz az tak lekko - potrzebna jest lista plikow do sciagniecia:&lt;br /&gt;&lt;pre&gt;wget -r -N -l 1 --no-remove-listing --cut-dirs 1 -i nirsoft.list&lt;/pre&gt;gotowe. wget automatycznie sprawdza timestamp plikow zdalnych i nie pobiera  ich jesli nic sie nie zmienilo.&lt;br /&gt;&lt;br /&gt;ciekawym dodatkiem do obu tych zbiorow jest &lt;a href="http://www.kls-soft.com/freeware/wscc.php"&gt;Windows System Control Center&lt;/a&gt; - panel sterowania, dzieki ktoremu wszystko przypomina tradycyjny panel sterowania windows.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.filedropper.com/nirinternals"&gt;tutaj&lt;/a&gt; zamieszczam archiwum zip zawierajace wget (windows), pliki .cmd do pobierania plikow z obu zbiorow oraz liste programow z pakietu nirsoft (bez wersji pod win9x) na podstawie ktorej sa one pobierane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6042115116986044241?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6042115116986044241/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/sysinternals-plus-nirsoft-all-in-one.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6042115116986044241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6042115116986044241'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/sysinternals-plus-nirsoft-all-in-one.html' title='Sysinternals plus Nirsoft - all in one'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7447725431296502775</id><published>2009-03-02T19:40:00.006+01:00</published><updated>2009-03-02T22:38:36.576+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>jaki framework wybrac - zanim zapytasz...</title><content type='html'>nie bede sie rozpisywal na temat konkretnych frameworkow, tylko o celu jaki im przyswieca. &lt;span style="font-weight:bold;"&gt;kazdy framework zostal stworzony po to, aby z jego pomoca szybciej tworzyc aplikacje webowe&lt;/span&gt;. i na tym w zasadzie moglibysmy zakonczyc ten wpis, bo juz wiadomo jaki wybrac: taki w ktorym bedzie sie najszybciej pracowalo. koniec. kropka. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;wszystko jest fajnie jak nie ma innych zobowiazan&lt;/span&gt;, mozna siedziec i dlubac w kodzie do woli, zarywac noce, sprawdzac rozne rozwiazania i delektowac sie wybraniem najlepszego. ja to sobie nazwalem 'czasem teoretyka'. niestety to sie zawsze kiedys konczy i zaczyna sie dom, praca, rodzina. czlowiek zaczyna sobie wtedy &lt;span style="font-weight:bold;"&gt;cenic swoj czas&lt;/span&gt;, musi go dzielic pomiedzy rozne rzeczy i dosyc szybko orientuje sie, ze calkiem sporo czasu mozna zaoszczedzic na pracy, poprzez lepsza jej organizacje: mniejsza ilosc bawienia sie, a wieksza efektywnosc. wtedy przychodzi 'czas praktyka'. zamiast kodu z przydomkiem 'sophisticated', zaczna sie interesowac wersja otagowana 'clean and simple'. zamiast super wymyslnych rozwiazan zgodnych z wszelkimi mozliwymi zalozeniami teoretycznymi zaczyna sie korzystac z tych, ktore dadza &lt;span style="font-weight:bold;"&gt;ten sam efekt w znacznie krotszym czasie&lt;/span&gt;. odstepstwa od zalozen, ktore wczesniej byly traktowane jako zbrodnia, zaczynaja byc dopuszczalne - &lt;span style="font-weight:bold;"&gt;teoria przestaje rzadzic praktyka&lt;/span&gt;. a im blizej konca projektu, im bardziej daje sie we znaki deadline, tym bardziej &lt;span style="font-weight:bold;"&gt;praktyka przejmuje kontrole nad teoria&lt;/span&gt; ;) ale do rzeczy: kazdy framework ma swoje plusy i minusy, &lt;span style="font-weight:bold;"&gt;kazdy korzystajacy z frameworka ma tez inne potrzeby&lt;/span&gt;, ale niestety &lt;span style="font-weight:bold;"&gt;nie kazdy wybiera framework aby tworzyc szybciej&lt;/span&gt;. czesto wybiera sie ten, ktory polecaja inni, czy ten ktory ma dobra opinie na sieci &lt;span style="font-weight:bold;"&gt;i potem trzeba sie z nim meczyc&lt;/span&gt; :/ a gdzie jazda probna? zamiast glupio pytac wystarczy sciagnac kilka frameworkow, poswiecic tydzien na testowanie i od razu wiadomo w ktorym najszybciej sie pisze. reszta jest milczeniem... &lt;br /&gt;&lt;br /&gt;przytocze wypowiedz z ktora sie w pelni zgadzam i ktora natchnela mnie do tego wpisu: &lt;br /&gt;&lt;br /&gt;"&lt;span style="font-weight:bold;"&gt;Dla mnie najlepsze narzędzie do projektowania web-aplikacji to takie, za pośrednictwem którego doprowadzenie projektu do działania pochłonie możliwie jak najmniej czasu&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;oraz jego krotsza wersja: "&lt;span style="font-weight:bold;"&gt;albo się bawi w mastah programistę, albo się pracuje&lt;/span&gt;" :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7447725431296502775?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7447725431296502775/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/jaki-framework-wybrac-zanim-zapytasz.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7447725431296502775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7447725431296502775'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/jaki-framework-wybrac-zanim-zapytasz.html' title='jaki framework wybrac - zanim zapytasz...'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7838084345091128489</id><published>2009-03-02T16:17:00.003+01:00</published><updated>2009-03-02T16:27:42.857+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='authorization'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><title type='text'>Simple Auth 1.0</title><content type='html'>nowa wersja, tym razem oznaczona 1.0. powody do takiego skoku (z 0.3) sa dwa:&lt;br /&gt;- modul posiada teraz cala planowana funkcjonalnosc&lt;br /&gt;- modul wydaje sie dzialac jak najbardziej poprawnie&lt;br /&gt;&lt;br /&gt;stad tez skok do numerka, ktory bardziej odpowiada w pelni funkcjonalnemu projektowi.&lt;br /&gt;&lt;br /&gt;jesli chodzi o zmiany to tzw. 'code cleanup' oraz dodanie nowej funkcjonalnosci: pole uzywane do logowania jako username jest teraz ustawiane w konfiguracji modulu. dzieki temu mozna logowac sie na email, login, username, lastname czy jakiekolwiek inne pole jakie mamy na tabeli. &lt;br /&gt;&lt;br /&gt;nowa wersje mozna pobrac ze strony &lt;a href="http://projects.kohanaphp.com/projects/list_files/simple-auth"&gt;download&lt;/a&gt; projektu, jak rowniez z &lt;a href="http://source.projects.kohanaphp.com/svn/simple-auth"&gt;repozytorium&lt;/a&gt; SVN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7838084345091128489?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7838084345091128489/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/03/simple-auth-10.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7838084345091128489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7838084345091128489'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/03/simple-auth-10.html' title='Simple Auth 1.0'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5709824093881576606</id><published>2009-02-26T23:29:00.002+01:00</published><updated>2009-02-26T23:35:34.590+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_modeler'/><title type='text'>Simple_Auth SVN</title><content type='html'>pod adresem http://source.projects.kohanaphp.com/svn/simple-auth znajduje sie repozytorium SVN dla projektu Simple_Auth oraz Simple_Modeler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5709824093881576606?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5709824093881576606/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/simpleauth-svn.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5709824093881576606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5709824093881576606'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/simpleauth-svn.html' title='Simple_Auth SVN'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4328007550041449383</id><published>2009-02-24T22:59:00.011+01:00</published><updated>2009-09-10T00:42:54.936+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>dlaczego KohanaPHP</title><content type='html'>na poczatku bylo &lt;a href="http://www.symfony-project.org/"&gt;Symfony&lt;/a&gt;. oj, nie bylo lekko... &lt;span style="font-weight: bold;"&gt;pierwsze zetkniecie z frameworkami&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;walka z wieloma drobnymi rzeczami&lt;/span&gt;, tak aby byly zrobione 'zgodnie z zasadami', a sztywnych zasad w symfony nie brakuje. praktycznie wszystko zajmowalo wiecej czasu, niz gdybym robil to po swojemu, nawet majac pod reka guide to symfony. akurat tak wyszlo, ze nie korzystalem z propel`a, tylko za pomoca creole wszystkie zapytania klepalem recznie (nie byla to moja decyzja), wiec i tak zaoszczedzilem sobie troche czasu na ORM. zniechecala rowniez spora paczka i duzo zaleznosci (np. pear). w wiekszych firmach, gdzie wielu programistow wspolpracuje ze soba, to jest niezle rozwiazanie, bo wymusza pewne rzeczy i np. od razu wiadomo gdzie czego szukac siadajac do czyjegos kodu. freez i unfreez tez sie przydaje. ale nie, &lt;span style="font-weight: bold;"&gt;symfony nie bylo dla mnie stworzone&lt;/span&gt;.     &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;zaczalem wiec szukac czegos lepszego/innego. padlo na &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;. rewelacja. &lt;span style="font-weight: bold;"&gt;takie lekkie symfony&lt;/span&gt;. swietna walidacja w modelu polaczona z generowaniem formularzy, &lt;span style="font-weight: bold;"&gt;duzo tutoriali, liczna spolecznosc&lt;/span&gt;, poprawki do kodu wprowadza sie w iscie ekspresowym tempie. po prostu bajka. przynajmniej do czasu, az musialem napisac calkiem zlozony serwis z licznymi zaleznosciami miedzy tabelami. zrobienie tego w ORM zakonczylo sie fiaskiem (szczegolnie po zobaczeniu zapytan sql wygenerowanych przez niektore zlaczenia) i wiedzialem, ze &lt;span style="font-weight: bold;"&gt;ORM jest fajny, ale bez przesady&lt;/span&gt;. porownanie ORM/nieORM nie ma przelozenia na programowanie obiektowe/strukturalne - a tak mi sie poczatkowo wydawalo, ze ORM jest po prostu killerem dla innych sposobow wyciagania danych z bazy, jest prosty, latwy i przyjemny. no, w zasadzie to jest, ale ma duzo wad, czy moze raczej niedogodnosci. jednemu nie beda one przeszkadzac, innego zniecheca i ja sie do tej drugiej grupy zaliczam. oczywiscie ORM to ogolne zasady, w kazdym frameworku jest nieco inny, ma inne ograniczenia.&lt;br /&gt;&lt;br /&gt;skoro nie cakephp, to co. kiedys zrobilem wprawke w CodeIgniter i postanowilem do niego wrocic. w miedzyczasie widzialem, ze wyszlo BlueFlame, pozniej &lt;a href="http://www.kohanaphp.com/"&gt;KohanaPHP&lt;/a&gt; 1.0, wreszcie 2.0, ale nie wnikalem w kod, wiedzialem, ze sa. znalem ograniczenia CI, plusy jego nastepcy, wiec od razu skierowalem sie ku niemu. i jak o sie mowi - &lt;span style="font-weight: bold;"&gt;trafilem w dziesiatke&lt;/span&gt;. dlaczego jest to 'moj' framework:&lt;br /&gt;- nie ogranicza mnie. ma pewne zasady, ale sa one bardziej wytycznymi niz nakazami.&lt;br /&gt;- elastyczny. bardzo latwo zmodyfikowac potrzebne elementy frameworka&lt;br /&gt;- maly, szybki, bez zaleznosci typu pear.&lt;br /&gt;- intuicyjny. o symfony tego nie moge powiedziec.&lt;br /&gt;&lt;br /&gt;KohanaPHP jak na porzadny framework przystalo posiada oczywiscie ORM - podobno calkiem niezly i przemyslany. modul autoryzacji uzytkownikow. wsparcie dla stron wielojezycznych. proste generowanie formularzy i walidacje. i tak dalej - odsylam na &lt;a href="http://kohanaphp.com/"&gt;strone projektu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;jesli chodzi o moje osobiste 'dlaczego KohanaPHP', nie bez znaczenia jest tez &lt;a href="http://projects.kohanaphp.com/projects/show/automodeler"&gt;Auto_Modeler&lt;/a&gt;, nakladka na klase do bazy danych. prosta w swoim pomysle, i jak to czesto bywa z dobrymi pomyslami, niesamowicie upraszcza czesto wykonywane operacje z uzyciem bazy danych, szczegolnie zapis danych z formularza, obojetnie czy to do jednej czy do wielu tabel.  &lt;br /&gt;&lt;br /&gt;nie tak dawno ukazal sie &lt;a href="http://projects.kohanaphp.com/projects/show/kohana-debug-toolbar"&gt;DebugToolbar&lt;/a&gt; (tak tak, wzorowany na symfony), ktory tez jest bardzo pomocny, a jednym z jego plusow jest to, ze posiada wsparcie dla FirePHP oraz przechwytuje wywolania AJAXa. &lt;br /&gt;&lt;br /&gt;wiecej projektow &lt;a href="http://projects.kohanaphp.com/projects"&gt;tutaj&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;dla mnie jedynym minusem jest brak tutoriali. trzeba sie przyzwyczaic i z tym zyc. &lt;span style="font-weight: bold;"&gt;samemu zagladac do dokumentacji&lt;/span&gt;, zrodel frameworka, kombinowac. zawsze jest jeszcze forum (zarowno &lt;a href="http://forum.kohanaphp.com/"&gt;eng&lt;/a&gt; jak i &lt;a href="http://forum.kohanaphp.pl/"&gt;pl&lt;/a&gt;), kazdy moze tam uzyskac pomoc. na pewno nie majac doswiadczenia latwiej jest zaczac cos robic w cakephp, gdzie jest bardzo duzo przykladow prowadzacych za raczke, ale wydaje mi sie, ze &lt;span style="font-weight: bold;"&gt;KohanaPHP ma troche inna grupe docelowa - osoby ktore wiedza czego chca&lt;/span&gt;, maja juz jakies doswiadczenie, nie potrzebuja frameworka ktory za nich bedzie wszystko robil, tylko da im solidne podstawy do tworznia aplikacji wg. wlasnych preferencji. i dla takiego targetu obecna dokumentacja i niewielka ilosc tutoriali jest w zasadzie wystarczajaca, mozna sobie spokojnie dac rade, szczegolnie, ze na forum na prawde zawsze sie znajdzie pomoc. dla takiego targetu nie jest problemem sledzenie trac i interesowanie sie zmianami, zamiast biernego czekania na wydanie tutoriali do kazdej zmiany w funkcjonalnosci jaka pojawi sie w nowym wydaniu frameworka. &lt;br /&gt;&lt;br /&gt;pojawily sie tez dwie inicjatywy: &lt;a href="http://learn.kohanaphp.com/"&gt;learn kohanaphp&lt;/a&gt;, ktora niestety chyba upadla, oraz nowa, dopiero ruszajaca &lt;a href="http://nasza.kohanaphp.pl/"&gt;nasza kohanaphp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;jako uzupelnienie: nie wiem tak do konca na ile jest to trafna &lt;a href="http://redotheweb.com/2008/07/10/symfony-11-a-smart-move/"&gt;krytyka&lt;/a&gt; (nie uzywalem Sf 1.1), ale pokrywa sie z moimi spostrzezeniami co do samego symfony: "And if any madman really sticks to symfony 1.1, then he has to read 50 more pages than for the 1.0 version and understand the sfValidatorSchema to build a simple contact form". ja po prostu nie lubie takich przestojow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4328007550041449383?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4328007550041449383/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/dlaczego-kohanaphp.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4328007550041449383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4328007550041449383'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/dlaczego-kohanaphp.html' title='dlaczego KohanaPHP'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7068341957997106851</id><published>2009-02-24T19:27:00.005+01:00</published><updated>2009-02-24T19:35:59.867+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encrypt'/><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='decrypt'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Simple_Crypt</title><content type='html'>obok Simple Auth 0.3 (nie jest zalaczana w archiwum) dostepna jest klasa &lt;a href="http://projects.kohanaphp.com/projects/list_files/simple-auth"&gt;Simple_Crypt&lt;/a&gt; pozwalajaca na kodowanie/dekodowanie zmiennych typu string oraz integer. mozna ja uzyc w celu wyswietlenia ich na stronie, jesli koniecznie musimy je tam miec, a nie chcemy aby np. client_id bylo jawnie widoczne. base64 mozna latwo dekodowac, mcrypt nie zawsze jest dostepny. i tak jesli kodujemy ID:&lt;br /&gt;1) zostaje do niego dodany prefix oraz suffix&lt;br /&gt;2) calosc jest szyfrowana md5&lt;br /&gt;3) iryginalne id jest konwertowane do hex i wstawiane na wybrana pozycje zaszyfrowanego wyzej ciagu znakow&lt;br /&gt;4) na wybrana pozycje jest wstawiana informacja o dlugosci stringa z punktu pierwszego&lt;br /&gt;&lt;br /&gt;dekodowanie:&lt;br /&gt;1) na podstawie ustawien z zakodowanego ciagu jest wycinana dlugosc, a nastepnie samo hex id&lt;br /&gt;2) konwertowanie hex id do dec&lt;br /&gt;3) gotowe&lt;br /&gt;&lt;br /&gt;klasa napisana dla zabawy, wyglada na to, ze dziala ok, ma pewne ograniczenia (wymienione w kodzie). &lt;br /&gt;&lt;br /&gt;przyklad uzycia:&lt;br /&gt;&lt;pre class="brush: php"&gt;$id = 123;&lt;br /&gt;echo "start: ".$id; &lt;br /&gt;$enc_id = $cipher-&gt;encrypt($id);&lt;br /&gt;echo "encrypt: ".$enc_id;&lt;br /&gt;echo " decrypt: ".$cipher-&gt;decrypt($enc_id);&lt;br /&gt;&lt;br /&gt;$id='jaskolka';&lt;br /&gt;echo "start: ".$id;&lt;br /&gt;$enc_id = $cipher-&gt;encrypt($cipher-&gt;strhex($id),true);&lt;br /&gt;echo "encrypt: ".$enc_id;&lt;br /&gt;echo " decrypt: ".$cipher-&gt;decrypt($enc_id,true);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7068341957997106851?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7068341957997106851/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/simplecrypt.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7068341957997106851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7068341957997106851'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/simplecrypt.html' title='Simple_Crypt'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-5511970308903194752</id><published>2009-02-24T17:17:00.006+01:00</published><updated>2009-02-24T19:37:58.344+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='authorization'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='module'/><title type='text'>Simple Auth 0.3</title><content type='html'>ukazala sie wersja 0.3 modulu autoryzacji uzytkownikow dla frameworka KohanaPHP, &lt;a href="http://projects.kohanaphp.com/projects/list_files/simple-auth"&gt;Simple_Auth&lt;/a&gt;:&lt;br /&gt;glownie zmiany wewnetrzne plus jedna nowa rzecz - mozna kasowac/wylaczac uzytkownikow przekazujac zarowno ID jak i caly obiekt uzytkownika.&lt;br /&gt;&lt;br /&gt;troche zmian przeszedl rowniez Auto_Modeler, wiec aby nie bylo problemow przy jednoczesnym uzywaniu zmodyfikowanej i oryginalnej wersji dostal nowa nazwe: Simple_Modeler. jest on zalaczony w archiwum z modulem do autoryzacji.&lt;br /&gt;&lt;br /&gt;zmiany sa dosyc istotne, wiec sugeruje wszystkim upgrade&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-5511970308903194752?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/5511970308903194752/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/simple-auth-03.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5511970308903194752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/5511970308903194752'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/simple-auth-03.html' title='Simple Auth 0.3'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8253319501925790421</id><published>2009-02-23T23:14:00.002+01:00</published><updated>2009-02-23T23:15:15.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='offline'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>manual php offline</title><content type='html'>w razie problemow z netem - &lt;a href="http://www.php.net/download-docs.php"&gt;jak znalazl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8253319501925790421?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8253319501925790421/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/manual-php-offline.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8253319501925790421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8253319501925790421'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/manual-php-offline.html' title='manual php offline'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6847918833867919725</id><published>2009-02-23T10:07:00.012+01:00</published><updated>2009-02-23T16:50:45.652+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='result'/><category scheme='http://www.blogger.com/atom/ns#' term='magic methods'/><category scheme='http://www.blogger.com/atom/ns#' term='check'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>magia bywa zwodnicza</title><content type='html'>wystarczy popatrzec na wyniki zwracane przez ten prosty test:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;class test {&lt;br /&gt;     public $data=array('id'=&gt;'5');&lt;br /&gt;&lt;br /&gt;     public function  __get($key) {&lt;br /&gt;          return $this-&gt;data[$key];&lt;br /&gt;     }&lt;br /&gt;}  &lt;br /&gt;&lt;br /&gt;$test = new test();&lt;br /&gt;&lt;br /&gt;echo " 1) "; echo $test-&gt;id;&lt;br /&gt;echo " 2) "; if ($test-&gt;id) echo "jest";&lt;br /&gt;echo " 3) "; if (!empt.y($test-&gt;id)) echo "jest";&lt;br /&gt;echo " 4) "; if (isset($test-&gt;id)) echo "jest";&lt;br /&gt;echo " 5) "; $id=$test-&gt;id; if (!empt.y($id)) echo "jest";&lt;br /&gt;echo " 6) "; $id=$test-&gt;id; if (isset($id)) echo "jest";&lt;br /&gt;echo " 7) "; if (intval($test-&gt;id)!==0) echo "jest";&lt;br /&gt;echo " 8) "; if ((int) $test-&gt;id!==0) echo "jest";&lt;/pre&gt;&lt;br /&gt;a samych wynikow celowo nie podaje :)&lt;br /&gt;jak widac metody magiczne dzialaja faktycznie magicznie w polaczeniu ze standardowym empty czy isset.&lt;br /&gt;&lt;br /&gt;EDIT: dodalem kropki do empt.y, bez nich blogger sie gubil&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6847918833867919725?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6847918833867919725/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/magia-bywa-zwodnicza.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6847918833867919725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6847918833867919725'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/magia-bywa-zwodnicza.html' title='magia bywa zwodnicza'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2093490811651601973</id><published>2009-02-22T22:35:00.006+01:00</published><updated>2009-02-22T22:43:52.505+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encrypt'/><category scheme='http://www.blogger.com/atom/ns#' term='decrypt'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>kodowanie i dekodowanie w php</title><content type='html'>znalezione na sieci, calkiem niezly pomysl - mozna sie pobawic i na podstawie tego zrobic cos swojego. a jak wiadomo, pomysl jest polowa sukcesu :)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: php"&gt;function EncryptClientId($id) {&lt;br /&gt;  return substr(md5($id), 0, 8).dechex($id);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function DecryptClientId($id) {&lt;br /&gt;  $md5_8 = substr($id, 0, 8);&lt;br /&gt;  $real_id = hexdec(substr($id, 8));&lt;br /&gt;  return ($md5_8==substr(md5($real_id), 0, 8)) ? $real_id : 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$id = 723;&lt;br /&gt;$enc_id = EncryptClientId($id);&lt;br /&gt;echo $enc_id." / ".DecryptClientId($enc_id);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2093490811651601973?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2093490811651601973/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/kodowanie-i-dekodowanie-w-php.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2093490811651601973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2093490811651601973'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/kodowanie-i-dekodowanie-w-php.html' title='kodowanie i dekodowanie w php'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-3146446261841483066</id><published>2009-02-22T22:31:00.006+01:00</published><updated>2009-02-23T10:22:34.762+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>zabawa ze stringami</title><content type='html'>jak wstawic zmienna typu string do innej zmiennej typu string i na dodatek na okreslona pozycje... &lt;br /&gt;&lt;pre class="brush: php"&gt;$newstring=substr_replace($orig_string, $insert_string, $position, 0);&lt;/pre&gt;dziala :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-3146446261841483066?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/3146446261841483066/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/zabawa-ze-stringami.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3146446261841483066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3146446261841483066'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/zabawa-ze-stringami.html' title='zabawa ze stringami'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6396886540162986836</id><published>2009-02-21T23:17:00.005+01:00</published><updated>2009-02-23T10:23:08.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='licence'/><title type='text'>licencje</title><content type='html'>licencji opensource jest wiele, spis jest &lt;a href="http://www.opensource.org/licenses/category"&gt;tutaj&lt;/a&gt;. latwa, prosta i przyjemna jest np. &lt;a href="http://www.opensource.org/licenses/isc-license.txt"&gt;licencja ISC&lt;/a&gt;, niemal identyczna jesli chodzi o efekt z &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;licencja MIT&lt;/a&gt;. do tego stopnia ja pokochano, ze powstal wiersz:&lt;br /&gt;&lt;br /&gt;This work ‘as-is’ we provide.&lt;br /&gt;No warranty, express or implied.&lt;br /&gt;We’ve done our best,&lt;br /&gt;to debug and test.&lt;br /&gt;Liability for damages denied.&lt;br /&gt;&lt;br /&gt;Permission is granted hereby,&lt;br /&gt;to copy, share, and modify.&lt;br /&gt;Use as is fit,&lt;br /&gt;free or for profit.&lt;br /&gt;On this notice these rights rely&lt;br /&gt;&lt;br /&gt;(c) 2005 Alexander E Genaud&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6396886540162986836?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6396886540162986836/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/licencje.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6396886540162986836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6396886540162986836'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/licencje.html' title='licencje'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-3267974463895491707</id><published>2009-02-21T23:07:00.005+01:00</published><updated>2009-02-23T10:22:56.945+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magic methods'/><category scheme='http://www.blogger.com/atom/ns#' term='arrayaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>czy mozna zmierzyc magie</title><content type='html'>ano mozna. bardzo ladne porownanie szybkosci metod magicznych, ArrayAccess itd. &lt;a href="http://www.garfieldtech.com/blog/magic-benchmarks"&gt;click&lt;/a&gt;.&lt;br /&gt;moze przytocze tylko kilka liczb:&lt;br /&gt;&lt;br /&gt;Get ArrayAccess Property 2.379&lt;br /&gt;Set ArrayAccess Property 3.030&lt;br /&gt;Get Magic Property (__get()) 2.066&lt;br /&gt;Set Magic Property (__set()) 2.623&lt;br /&gt;&lt;br /&gt;vs&lt;br /&gt;&lt;br /&gt;Get Array Property 0.473&lt;br /&gt;Set Array Property 0.655&lt;br /&gt;Get Native Property 0.619&lt;br /&gt;Set Native Property 0.752&lt;br /&gt;&lt;br /&gt;polecam lekture calosci tekstu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-3267974463895491707?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/3267974463895491707/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/czy-mozna-zmierzyc-magie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3267974463895491707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/3267974463895491707'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/czy-mozna-zmierzyc-magie.html' title='czy mozna zmierzyc magie'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6910841317809991421</id><published>2009-02-20T22:08:00.009+01:00</published><updated>2009-02-24T17:17:41.615+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='authorization'/><category scheme='http://www.blogger.com/atom/ns#' term='simple_auth'/><category scheme='http://www.blogger.com/atom/ns#' term='kohanaphp'/><category scheme='http://www.blogger.com/atom/ns#' term='module'/><title type='text'>Simple Auth 0.2</title><content type='html'>ukazala sie pierwsza oficjalna publiczna wersja (0.2) modulu autoryzacji dla frameworka KohanaPHP, znanego pod jakze trafna nazwa &lt;a href="http://projects.kohanaphp.com/projects/show/simple-auth"&gt;Simple_Auth&lt;/a&gt; ;)&lt;br /&gt;&lt;br /&gt;jest to fork oryginalnego modulu auth, ktory:&lt;br /&gt;- jest prosty&lt;br /&gt;- nie korzysta z orm, tylko z auto_modeler&lt;br /&gt;- bardzo latwo go dostosowac do wlasnych potrzeb&lt;br /&gt;- nie posiada ograniczen w postaci wymuszonych nazw tabel w bazie&lt;br /&gt;- posiada wsparcie dla 'zapamietaj mnie' przy logowaniu&lt;br /&gt;- zapisuje w bazie date ostatniego logowania, ip i laczna liczbe logowan&lt;br /&gt;- hasla sa kodowane wybranym algorytmem (domyslnie md5) w polaczeniu z dwoma stringami dodawanymi na poczatku i koncu hasla&lt;br /&gt;&lt;br /&gt;domyslnie sa 3 role: admin, moderator i zwykly user - sa to kolejne kolumny w tabeli users. nie jest i nie bedzie to dedykowany system ACL.&lt;br /&gt;&lt;br /&gt;opcja 'zapamietaj mnie' po udanym logowaniu zapisuje w bazie oraz cookie uzytkownika unikalny token, ktory jest sprawdzany przy nastepnym wejsciu na strone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6910841317809991421?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6910841317809991421/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/simple-auth-02.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6910841317809991421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6910841317809991421'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/simple-auth-02.html' title='Simple Auth 0.2'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4475385249557271150</id><published>2009-02-18T14:25:00.003+01:00</published><updated>2009-02-23T10:23:33.012+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reset'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>resetowanie css</title><content type='html'>stare, ale nie wszystkim znane: &lt;a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/"&gt;reset.css&lt;/a&gt; - u mnie tak gdzies o 90% zmniejszylo ilosc poprawek html zwiazanych z roznicami miedzy przegladarkami.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4475385249557271150?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4475385249557271150/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/resetowanie-css.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4475385249557271150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4475385249557271150'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/resetowanie-css.html' title='resetowanie css'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-6785210307563939502</id><published>2009-02-18T14:17:00.003+01:00</published><updated>2009-02-18T14:20:19.767+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zmiany'/><title type='text'>drobne zmiany</title><content type='html'>kosmetyka czyli inny (czytelniejszy?) szablon + &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt; do kolorowania skladni php :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-6785210307563939502?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/6785210307563939502/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/drobne-zmiany.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6785210307563939502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/6785210307563939502'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/drobne-zmiany.html' title='drobne zmiany'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-8036920110059421925</id><published>2009-02-17T23:36:00.004+01:00</published><updated>2009-02-18T14:22:04.553+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>czego uzywam</title><content type='html'>&lt;p&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.ghisler.com/"&gt;Total Commander&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.pspad.com/"&gt;PsPad&lt;/a&gt; (Notepad++ do niedawna mial denerwujacy problem z automatycznym ustawianiem utf8 dla otwieranych plikow ANSI i dziwne problemy z function_list.dll w nowych wersjach)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.apachefriends.org/en/xampp.html"&gt;Xampp&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://filezilla-project.org/"&gt;Filezilla&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.webyog.com/en/"&gt;SqlYog Community Edition&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;amp;displaylang=en"&gt;Consolas Font Pack&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.faststone.org/FSCaptureDetail.htm"&gt;FastStone Capture&lt;/a&gt; (5.3 bylo darmowe)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.paint.net/"&gt;Paint.NET&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;- &lt;a href="http://www.abstractspoon.com/"&gt;ToDoList&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-8036920110059421925?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/8036920110059421925/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/czego-uzywam.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8036920110059421925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/8036920110059421925'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/czego-uzywam.html' title='czego uzywam'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4349333041009690158</id><published>2009-02-17T23:10:00.021+01:00</published><updated>2009-02-23T10:23:46.494+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='short tags'/><category scheme='http://www.blogger.com/atom/ns#' term='compare'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>na skroty w php</title><content type='html'>&lt;p&gt;zadziwiajace jak wielu programistow php nie orientuje sie w &lt;a href="http://www.php.net/manual/en/types.comparisons.php"&gt;tych kwestiach&lt;/a&gt;. dobrze dobrane operatory porownania pozwalaja uniknac wielu dziwnych problemow z gatunku 'to nie ma prawa tak dzialac'.jak rowniez wielu nie slyszalo/korzysta ze skroconych form (short tags):&lt;br /&gt;&lt;pre class="brush: php"&gt;$foo = ($bar &gt; 0) ? "jest!" :  ($bar === 0 ? "zero" : "mniej niz zero");&lt;br /&gt;&lt;br /&gt;&lt;?= $zmienna;?&gt; //spacja po '?' jest do usuniecia - kolorowanie kodu samo ja dodaje :/&lt;br /&gt;&lt;br /&gt;if ($foo):&lt;br /&gt; ...&lt;br /&gt;endif;&lt;br /&gt;&lt;br /&gt;while ($foo):&lt;br /&gt; ...&lt;br /&gt;endwhile;&lt;br /&gt;&lt;br /&gt;foreach($data as $item): &lt;br /&gt; ...&lt;br /&gt;endforeach;&lt;br /&gt;&lt;br /&gt;for ($i = 0; $i&lt;=2; $i++) :&lt;br /&gt; ... &lt;br /&gt;endfor;  &lt;br /&gt;&lt;/pre&gt; czesto taki format zapisu znacznie poprawia czytelnosc kodu. szczegolnie jesli chodzi o if`y.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4349333041009690158?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4349333041009690158/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/na-skroty-w-php.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4349333041009690158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4349333041009690158'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/na-skroty-w-php.html' title='na skroty w php'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4192236902175964017</id><published>2009-02-17T23:01:00.008+01:00</published><updated>2009-02-23T10:23:55.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf8'/><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>php i utf8 output</title><content type='html'>&lt;p&gt;czsami w skryptach ustawienie w html charset na utf8 oraz kodowanie bazy danych na utf8 (wraz z set_names) okazuje sie byc niewystarczajace. wtedy pomaga (przynajmniej mnie) dodanie na samym poczatku pliku:&lt;br /&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;mb_internal_encoding("UTF-8");&lt;br /&gt;mb_http_output( "UTF-8" );&lt;br /&gt;ob_start("mb_output_handler");&lt;/p&gt;&lt;p&gt;sprawdzone, dziala.&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4192236902175964017?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4192236902175964017/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/php-i-utf8-w-skryptach.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4192236902175964017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4192236902175964017'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/php-i-utf8-w-skryptach.html' title='php i utf8 output'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-7159806681613332950</id><published>2009-02-17T22:31:00.007+01:00</published><updated>2009-02-23T10:24:10.015+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='pdo'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>class database</title><content type='html'>&lt;p&gt;kazdy framework korzysta z gotowych klas ulatwiajacych odpytywanie bazy danych i wszystko jest ok do chwili kiedy trzeba napisac jakis maly skrypt (np. wywolywany przez cron), ktory wykona jakies drobne (albo i nie) operacje na bazie. pisanie wszystkiego na golym php i mysql wydaje sie niemal chore, znowu uzywanie ulubionego frameworka troche nie ma sensu - po co ladowac mase niepotrzebnych klas, jak jedyne co bedzie uzyte to klasa do bazy danych. mozna oczywiscie siegnac po Creole czy AdoDB, ale to jest nadal za duzo w stosunku do tego co jest  potrzebne. i wtedy mozna siegnac po jedna z dwoch klas:&lt;/p&gt;&lt;p&gt;1) klasa  TMVC_PDO z mini frameworka TinyMVC - &lt;a href="http://tinymvc-php.googlecode.com/svn/trunk/tinymvc/sysfiles/plugins/db.TMVC_PDO.php"&gt;link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2) klasa CxPDO z mini frameworka MicroMVC - &lt;a href="http://svn.codexplorer.com/CXPDO/"&gt;link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;klasy te korzystaja z PDO i sa wprost stworzone do mini skryptow.  przyklad uzycia - select i dla jego wynikow update.&lt;/p&gt;&lt;p&gt;TinyMVC (problem - nie udalo mi sie wykonac tego z uzyciem tylko 1 instancji klasy):&lt;pre class="brush: php"&gt;$config=array();&lt;br /&gt;$config['type']='mysql';&lt;br /&gt;$config['host']='127.0.0.1';&lt;br /&gt;$config['name']='test';&lt;br /&gt;$config['user']='test';&lt;br /&gt;$config['pass']='test';&lt;br /&gt;$config['persistent']=true;&lt;br /&gt;$config['charset']='utf8'; &lt;br /&gt;&lt;br /&gt;$db = new TMVC_PDO($config);&lt;br /&gt;$db2 = new TMVC_PDO($config);&lt;br /&gt;&lt;br /&gt;$zamien   = array('A'=&gt;'a');&lt;br /&gt;$sql="select name from my_table";&lt;br /&gt;$db-&gt;query($sql);&lt;br /&gt;  while($row = $db-&gt;next()) {&lt;br /&gt;    $new_name = strtr(trim($row['name']), $zamien);&lt;br /&gt;    $sql2="update my_table set name_strip = '".strtolower($new_name)."' where name = '".$row['name']."'";&lt;br /&gt; $db2-&gt;query($sql2);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;CXPDO:&lt;pre class="brush: php"&gt;$config = array();&lt;br /&gt;$config['user'] = 'test';&lt;br /&gt;$config['pass'] = 'test';&lt;br /&gt;$config['name'] = 'test';&lt;br /&gt;$config['host'] = '127.0.0.1';&lt;br /&gt;$config['type'] = 'mysql';&lt;br /&gt;$config['port'] = null;&lt;br /&gt;$config['persistent'] = true;&lt;br /&gt;&lt;br /&gt;include('cxpdo/cxpdo.php');&lt;br /&gt;$db = db::instance($config);&lt;br /&gt;$db-&gt;set_encoding();&lt;br /&gt;&lt;br /&gt;$zamien   = array('A'=&gt;'a');&lt;br /&gt;$sql="select name from my_table";&lt;br /&gt;$result = $db-&gt;query($sql);&lt;br /&gt;  while($row = $result-&gt;fetch(PDO::FETCH_ASSOC)) {&lt;br /&gt;    $new_name = strtr(trim($row['name']), $zamien);&lt;br /&gt;    $sql2="update my_table set name_strip = '".strtolower($new_name)."' where name = '".$row['name']."'";&lt;br /&gt;$result2 = $db-&gt;query($sql2);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;male, a cieszy.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-7159806681613332950?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/7159806681613332950/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/dwie-klasy-dostepu-do-bazy-danych.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7159806681613332950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/7159806681613332950'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/dwie-klasy-dostepu-do-bazy-danych.html' title='class database'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-2832419681567479314</id><published>2009-02-17T21:41:00.004+01:00</published><updated>2009-02-17T23:07:17.969+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='total commander'/><category scheme='http://www.blogger.com/atom/ns#' term='winmerge'/><title type='text'>winmerge i total commander</title><content type='html'>&lt;p&gt;niewiele jest osob ktore programuja pod windowsem i nie korzystaja z total commander.  zapewne wiekszosc z nich korzysta z programow do porownywania zawartosci plikow takich jak np. project diff czy beyond compare. maja one calkiem niezla darmowa alternatywe: WinMerge. jesli polaczymy go z totalcmd, mozna z nich stworzyc bardzo fajny tandem. a wszystko co trzeba zrobic, to dodac nowa pozycje do menu (wybieramy z menu Configuration/Button Bar/Add):&lt;/p&gt;&lt;p&gt;command: tutaj sciezka do WinMergeU.exe &lt;/p&gt;&lt;p&gt;parameters: /ub "%P\%N" "%T\%M"&lt;/p&gt;&lt;p&gt;icon file: co kto lubi :)&lt;/p&gt;&lt;p&gt;i gotowe. teraz mozna w kazdym z paneli zaznaczyc po jednym pliku, kliknac nowo stworzony przycisk i juz mamy piekne zestawienie pokazujace roznice miedzy dwoma wersjami kodu (pliku).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-2832419681567479314?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/2832419681567479314/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/winmerge-i-total-commander.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2832419681567479314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/2832419681567479314'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/winmerge-i-total-commander.html' title='winmerge i total commander'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-505449939816238079</id><published>2009-02-17T19:15:00.004+01:00</published><updated>2009-02-23T10:24:37.063+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='legend'/><category scheme='http://www.blogger.com/atom/ns#' term='fieldset'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='ie7'/><title type='text'>ie7 oraz fieldset / legend</title><content type='html'>&lt;p&gt;prosta sprawa: formularz z fieldset i legend, oba maja border. na firefox i opera wszystko wyglada ok, ramka fieldset w zaden sposob nie nachodzi na tekst w legend. ale jak zwyle ie7 musi byc madrzejsze - tam border idzie po calosci, wobec czego legend jest... przekreslone :) nie mialem czasu wiec na razie prowizorka - legend ma jako tlo bialy obrazek z ustawionym odpowiednio repeat. dziala? dziala. i to to chodzi.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-505449939816238079?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/505449939816238079/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/ie7-oraz-fieldset-legend.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/505449939816238079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/505449939816238079'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/ie7-oraz-fieldset-legend.html' title='ie7 oraz fieldset / legend'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-501668402812723126</id><published>2009-02-17T13:06:00.007+01:00</published><updated>2009-02-23T10:24:49.571+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf8'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><title type='text'>mysql, kodowanie utf8: polish czy general</title><content type='html'>&lt;p&gt;dla wszystkich zastanawiajacych sie czym sie rozni w mysql kodowanie utf8_general_ci utf8_polish_ci proponuje zrobic maly eksperyment: tworzymy w tabeli dwa pola varchar, jedno na polish drugie na general, dodajemy kilka rekordow, w tym po jednym zaczynajacym sie na literke 'Ł', a nastepnie robimy select z order by [nazwa pola] :)&lt;/p&gt;&lt;p&gt;ot i cala roznica: utf8_general_ci wrzuca 'Ł' na sam koniec. po zmianie na utf8_polish_ci dziala tak jak powinno. hurra :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-501668402812723126?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/501668402812723126/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/mysql-kodowanie-utf-polish-czy-general.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/501668402812723126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/501668402812723126'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/mysql-kodowanie-utf-polish-czy-general.html' title='mysql, kodowanie utf8: polish czy general'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8373327933322912173.post-4155345537706929926</id><published>2009-02-16T21:49:00.001+01:00</published><updated>2009-02-16T22:07:03.096+01:00</updated><title type='text'>let`s go!</title><content type='html'>pomyslow jest sporo, zobaczymy co z tego wyjdzie.&lt;br /&gt;w planach jest pisanie o tym co na co dzien robie, czyli webmasterka (kohanaphp, jquery i tematy pokrewne).  a co jeszcze sie pojawi, tego nie wie nikt...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8373327933322912173-4155345537706929926?l=thejw23.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thejw23.blogspot.com/feeds/4155345537706929926/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://thejw23.blogspot.com/2009/02/lets-go.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4155345537706929926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8373327933322912173/posts/default/4155345537706929926'/><link rel='alternate' type='text/html' href='http://thejw23.blogspot.com/2009/02/lets-go.html' title='let`s go!'/><author><name>thejw23</name><uri>http://www.blogger.com/profile/17334652334375366804</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_XdQ-3geYeXU/SZnRCf1tuNI/AAAAAAAAAAM/qMKWWqFl2AA/S220/guest.png'/></author><thr:total>0</thr:total></entry></feed>
