<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Tag turbogears</title>
    <link>http://blog.zabiello.com/articles/tag/turbogears</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Por&#243;wnanie wydajno&#347;ci framework&#243;w</title>
      <description>&lt;p&gt;Ciekawe i dosy&#263; dok&#322;adne  &lt;a href="http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/"&gt;por&#243;wnanie wydajno&#347;ci&lt;/a&gt; paru framework&#243;w:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.codeigniter.com/"&gt;CodeIgniter&lt;/a&gt; (PHP)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; (Perl)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt; (Python)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt; (Python + Psyco)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://rubyonrails.org"&gt;RubyOnRails&lt;/a&gt; (Ruby)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.symfony-project.com/"&gt;Symfony&lt;/a&gt; (PHP)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt; (Python)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Django bez trudu zdeklasowa&#322;o konkurencj&#281;. Szkoda, &#380;e w por&#243;wnaniu nie uwzgl&#281;dniono &lt;a href="http://pylonshq.com"&gt;Pylons&#243;w&lt;/a&gt; i &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;. Bardzo te&#380; dziwne, &#380;e nowy Rails 1.2.1 w tych testach jest mocno wolniejszy od starszej wersji 1.1.6. Frameworki pehapowe okaza&#322;y si&#281; najwolniejsze. Najgorszy okaza&#322; si&#281; pehapowy &lt;a href="http://www.symfony-project.com/"&gt;Symfony&lt;/a&gt;. Jest skomplikowany i wolny, 35x wolniejszy od &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt;!&lt;/p&gt;</description>
      <pubDate>Sun, 04 Feb 2007 22:54:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:778b23bb-3fe6-4d3c-a715-f75c2f2c8dc8</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2007/02/04/por%C3%B3wnanie-wydajno%C5%9Bci-framework%C3%B3w</link>
      <category>django</category>
      <category>rails</category>
      <category>symfony</category>
      <category>turbogears</category>
      <category>catalist</category>
      <category>python</category>
      <category>php</category>
      <category>perl</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Django i jego konkurenci</title>
      <description>&lt;p&gt;Po ostatnich paru &lt;a href="http://blog.zabiello.com/articles/2006/06/12/django-zab%C3%B3jcza-aplikacja-cz%C4%99%C5%9B%C4%87-iii"&gt;tekstach o Django&lt;/a&gt;, pora na odrobin&#281; odmiany, bo Django niekoniecznie musi by&#263; uwa&#380;any za najlepszy framework w klasie &#347;rodowisk &amp;#8220;railsopodobnych&amp;#8221;. :)&lt;/p&gt;


	&lt;h2&gt;TurboGears&lt;/h2&gt;


	&lt;p&gt;Trzeba pochwali&#263; dobry marketing megaframeworku&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt;, bo ju&#380; w Amazonie jest nawet dost&#281;pna &lt;a href="http://www.amazon.com/gp/product/0132433885/102-4872618-4917751?adid=114F4FPZ5WP720AHCPNB&amp;#38;camp=14573&amp;#38;creative=327641&amp;#38;link%5Fcode=as1&amp;#38;n=283155"&gt;ksi&#261;&#380;ka&lt;/a&gt; na jego temat. Jednak&#380;e, ma&#322;e to pocieszenie. TurboGears raczej nie b&#281;dzie powa&#380;n&#261; alternatyw&#261; dla &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt; z prostej przyczyny. Ca&#322;y jego kr&#281;gos&#322;up opiera si&#281; na ma&#322;o profesjonalnej implementacji frameworka &lt;a href="http://cherrypy.org"&gt;CherryPy&lt;/a&gt;. Na ten temat by&#322;o sporo dyskusji na grupie pl.comp.lang.python, wi&#281;c nie b&#281;d&#281; si&#281; powtarza&#322;.&lt;/p&gt;


	&lt;h2&gt;Pylons&lt;/h2&gt;


	&lt;p&gt;&lt;a href="http://blog.zabiello.com/articles/2006/03/04/pylons-czyli-si%C5%82a-myghty-i-wygoda-rubyonrails"&gt;O Pylons pisa&#322;em wcze&#347;niej&lt;/a&gt;  ale nie w kontek&#347;cie &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt;. Moim zdaniem, Pylons jest jedynym frameworkiem, kt&#243;ry aktualnie mo&#380;e stanowi&#263; by&#263; realn&#261; alternatyw&#281; dla &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Wpierw trzeba napisa&#263; kilka s&#322;&#243;w wyja&#347;nienia dla tych, co my&#347;l&#261; &#380;e &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; to jaki&#347; taki zlepek innych bibliotek i framework&#243;w jak &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt;. Pylons to w&#322;a&#347;ciwie nic innego jak framework &lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; tylko, &#380;e ze znacznie wi&#281;kszym prze&#322;o&#380;eniem akcent&#243;w na paradygmat &lt;span class="caps"&gt;MVC&lt;/span&gt; i podobie&#324;stwo do b&#281;dacych aktualnie &amp;#8220;na fali&amp;#8221; &lt;a href="http://rubyonrails.com"&gt;Rails&#243;w&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Tw&#243;rcy Myghty, mimo bardzo dobrej implementacji i wydajno&#347;ci nie mogli wcze&#347;niej przebi&#263; si&#281; do mi&#322;o&#347;nik&#243;w Pythona ze wzgl&#281;du na zbytnie podobie&#324;stwa do Perla (nic dziwnego, Myghty by&#322; wzorowany na bardzo dobrym perlowym &lt;a href="http://masonhq.com"&gt;Masonie&lt;/a&gt;, kt&#243;ry jest u&#380;ywany na dosy&#263; du&#380;&#261; skal&#281;)&lt;/p&gt;


	&lt;p&gt;Postanowiono wi&#281;c troszk&#281; dostosowa&#263; Myghty dla ludzi lubi&#261;cych prostot&#281; &lt;a href="http://python.org"&gt;Pythona&lt;/a&gt; i elegancj&#281; &lt;a href="http://rubyonrails.com"&gt;Ruby on Rails&lt;/a&gt;. I tak powsta&#322; &lt;strong&gt;Pylons&lt;/strong&gt;.&lt;/p&gt;


	&lt;h3&gt;Zalety Pylons&#243;w.&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; pozwala praktycznie na wymian&#281; wszystkich swoich &amp;#8220;podzespo&#322;&#243;w&amp;#8221;. W wypadku Pylons&#243;w, u&#380;yto resolvera adres&#243;w &lt;span class="caps"&gt;URL&lt;/span&gt; opartego na bibliotece &lt;a href="http://routes.groovie.org/"&gt;Routes&lt;/a&gt;. W skr&#243;cie mo&#380;na powiedzie&#263;, &#380;e &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; jest tu prawie identyczne jak Rails. &amp;#8220;Prawie&amp;#8221;, bo Routes jest &lt;strong&gt;pot&#281;&#380;niejszym&lt;/strong&gt; resolverem od tego co maj&#261; Railsy (pozwala np. na u&#380;ywanie wi&#281;kszych uog&#243;lnie&#324; i wyra&#380;e&#324; regularnych).&lt;/p&gt;


	&lt;h4&gt;Elastyczno&#347;&#263;&lt;/h4&gt;


	&lt;p&gt;Elastyczno&#347;&#263; Pylons&#243;w jest znacznie wi&#281;ksza od Django. W praktyce tam, gdzie stosuje si&#281; wstawki &lt;span class="caps"&gt;PHP&lt;/span&gt; do profesjonalnych system&#243;w &lt;span class="caps"&gt;CMS&lt;/span&gt; takich jak &lt;a href="http://reddot.pl"&gt;RedDot&lt;/a&gt;, Pylons dzi&#281;ki  swojej elastyczno&#347;ci i pot&#281;dze szablon&#243;w Myghty znacznie &#322;atwiej mo&#380;e wyprze&#263; tu &lt;span class="caps"&gt;PHP&lt;/span&gt;. Django jest systemem znacznie bardziej &lt;strong&gt;monolitycznym&lt;/strong&gt;. To jest jego zalet&#261; ale r&#243;wnocze&#347;nie tak&#380;e i &lt;strong&gt;wad&#261;&lt;/strong&gt; w wypadkach kiedy potrzebujemy znacznie wi&#281;kszej elastyczno&#347;ci.&lt;/p&gt;


	&lt;h4&gt;&lt;span class="caps"&gt;DRY&lt;/span&gt; w kontek&#347;cie generowania adres&#243;w &lt;span class="caps"&gt;URL&lt;/span&gt;&lt;/h4&gt;


	&lt;p&gt;Przewag&#261; korzystania z &lt;a href="http://routes.groovie.org/"&gt;Routes&lt;/a&gt; jest nie tylko prostota budowania adres&#243;w url bez konieczno&#347;ci posiadania wiedzy o wyra&#380;eniach regularnych. Najwi&#281;ksz&#261; zalet&#261; jest stosowanie helper&#243;w do budowania adres&#243;w &lt;span class="caps"&gt;URL&lt;/span&gt;. Identycznie jak w Railsach, jakakolwiek zmiana zasady rozwi&#261;zywania adres&#243;w, automatycznie przemapuje wszystkie adresy http we wszystkich szablonach. W wypadku Django musimy mozolnie poprawia&#263; wszystkie szablony. W wypadku du&#380;ego serwisu jest to kupa, niepotrzebnej roboty&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;


	&lt;h4&gt;Ajax i ca&#322;a reszta helper&#243;w z Ruby on Rails.&lt;/h4&gt;


	&lt;p&gt;Django (jak dot&#261;d) nie posiada wbudowanej implementacji Ajax&amp;#8217;a. Nie ma nawet jednomy&#347;lno&#347;ci jak&#261; bibliotek&#281; do tego celu mieliby u&#380;y&#263;&lt;sup&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt;. Poza tym Pylons implementuj&#261; wiele z &lt;a href="http://pylonshq.com/WebHelpers/module-index.html"&gt;helper&#243;w&lt;/a&gt; jakie maj&#261; Rails dost&#281;pne dla swoich szablon&#243;w.&lt;/p&gt;


	&lt;h4&gt;Pot&#281;ga szablon&#243;w Myghty&lt;/h4&gt;


	&lt;p&gt;Je&#347;li komu&#347; przeszkadzaj&#261; ma&#322;e mo&#380;liwo&#347;ci szablon&#243;w Django (celowo takie s&#261;, bo s&#261; kierowane do nieprogramist&#243;w) to mo&#380;liwo&#347;ci jakie daj&#261; szablony Myghty s&#261; po prostu powalaj&#261;ce. Je&#347;li kto&#347; m&#243;wi, &#380;e Django ma dobry cache, to niech si&#281; przyjrzy temu co potrafi&#261; wykorzystywane w Pylons &amp;#8211; szablony Myghty.&lt;/p&gt;


	&lt;p&gt;Ka&#380;dy szablon mo&#380;e by&#263; komponentem niezale&#380;nie keszowanym wg bardzo wyrafinowanych zasad (pot&#281;&#380;niejszych od tych, co oferuje Django) Regeneracja cache jest tak&#380;e inteligentnie napisana (podobnie jak to robi &lt;a href="http://skunkweb.sourceforge.net/"&gt;Skunkweb&lt;/a&gt;) Tzn. nigdy nie ma sytuacji, kiedy nadchodzi &#380;&#261;danie wy&#347;wietlenia strony i w tym samym momencie trzeba od&#347;wie&#380;y&#263; cache (bo si&#281; np. przeterminowa&#322;). Pylons w takim wypadku, odwleka operacj&#281; od&#347;wie&#380;ania cache&amp;#8217;a i podaje star&#261; zawarto&#347;&#263;. Regeneracja nast&#281;puje zaraz za tym requestem. W efekcie nigdy nie ma &#380;adnych &amp;#8220;czkawek&amp;#8221; w takiej krytycznej sytuacji.&lt;/p&gt;


	&lt;p&gt;Je&#347;li kto&#347; my&#347;li, &#380;e to bardzo rzadki przypadek, to niech sobie wyobrazi czy co si&#281; dzieje w wypadku naprawd&#281; du&#380;ego obci&#261;&#380;enia serwera. Pylons/Myghty by&#322; od pocz&#261;tku tworzony z my&#347;la pracy w sytuacji mocno obci&#261;&#380;onego serwera.&lt;/p&gt;


	&lt;p&gt;Szablony Myghty obs&#322;uguj&#261; nie tylko bardzo &lt;strong&gt;pot&#281;&#380;ne mechanizmy includowania&lt;/strong&gt; (tzn. mo&#380;na przekaza&#263; wiele r&#243;&#380;nych parametr&#243;w do includowanego szablonu w&#322;&#261;cznie z indywidualnymi zasadami keszowania). Myghty obs&#322;uguj&#261; tak&#380;e mechanizm dziedziczenia&lt;sup&gt;&lt;a href="#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;


	&lt;h4&gt;Automatyczne generowanie dokumentacji.&lt;/h4&gt;


	&lt;p&gt;Pylonsy pozwalaj&#261; na &lt;a href="http://pylonshq.com/docs/0.8.2/adding_docs.html"&gt;automatyczne generowanie dokumentacji&lt;/a&gt; z projektu. Wykorzystuje do tego celu pythonowe &lt;a href="http://blog.zabiello.com/articles/2006/03/06/dokumentacja-dla-leniwych-pot%C4%99ga-pythona"&gt;docstringi&lt;/a&gt; i zamiast &lt;span class="caps"&gt;HTML&lt;/span&gt; &amp;#8211; reStructuredText (kt&#243;re s&#261; cz&#281;&#347;ci&#261; projektu &lt;a href="http://docutils.sf.net/"&gt;docutils&lt;/a&gt;)&lt;/p&gt;


	&lt;h4&gt;Zapakowanie projekt&#243;w do uniwersalnego formatu .egg.&lt;/h4&gt;


	&lt;p&gt;Pylonsy potrafi&#261; &lt;a href="http://pylonshq.com/docs/0.8.2/application_setup.html"&gt;zapakowa&#263; ca&#322;y projekt do paczki .egg&lt;/a&gt; co umo&#380;liwia bardzo &#322;atw&#261; dystrybucj&#281; aplikacji pylonsowych. Django tej (jak&#380;e po&#380;ytecznej) opcji w og&#243;le nie ma zaimplementowanej!&lt;/p&gt;


	&lt;h3&gt;Zalety Django.&lt;/h3&gt;


	&lt;p&gt;Mimo powy&#380;szych zalet Pylons&#243;w, Django ma tak&#380;e kilka swoich, dobrych stron.&lt;/p&gt;


	&lt;h4&gt;Lepsza dokumentacja.&lt;/h4&gt;


	&lt;p&gt;Dzi&#281;ki swojej monolityczno&#347;ci, Django dysponuje znacznie pe&#322;niejsz&#261; dokumentacj&#261; i jest ona zgromadzona w jednym miejscu. W wypadku Pylons&#243;w dokumentacja jest niezbyt wyczerpuj&#261;ca i porozrzucana. Wynika to w g&#322;&#243;wnej mierze z tego, &#380;e Pylons u&#380;ywa gotowych komponent&#243;w z innych projekt&#243;w.&lt;/p&gt;


	&lt;h4&gt;&#346;wietna obs&#322;uga formularzy.&lt;/h4&gt;


	&lt;p&gt;Django pracuje na wy&#380;szym poziomie abstrakcji odno&#347;nie pracy z formularzami. O ile nie potrzebujemy wi&#281;kszej elastyczno&#347;ci, to t&#261; kwesti&#281; maj&#261; doskonale zaprojektowan&#261;. Je&#347;li chcemy czego&#347; wi&#281;cej, mo&#380;emy przeci&#261;&#380;y&#263; metody jakie u&#380;ywa Django i wzbogaci&#263; je w dodatkowe opcje (np. obs&#322;ug&#281; zdarze&#324; javascript). Django obs&#322;uguje bardzo elegancko walidacj&#281; formularzy. Pylons TurboGears te&#380;) korzysta z &lt;a href="http://www.turbogears.org/about/extras.html#formencode"&gt;FormEncode&lt;/a&gt;, ale wydaje mi si&#281;, &#380;e Django jest tu jeszcze prostsze.&lt;/p&gt;


	&lt;h4&gt;&lt;span class="caps"&gt;ORM&lt;/span&gt;&lt;/h4&gt;


	&lt;p&gt;Djangowy korzysta z w&#322;asnego &lt;span class="caps"&gt;ORM&lt;/span&gt; (mapera relacyjno-obiektowego) Pylons korzysta z SQLObject. Oba &lt;span class="caps"&gt;ORM&lt;/span&gt;&amp;#8217;y s&#261; podobne, ale mnie si&#281; bardziej podoba ten, co ma Django. Moim zdaniem ma bardziej eleganck&#261; sk&#322;adni&#281;. Ma tak&#380;e lepsz&#261; dokumentacje. Troch&#281; to dziwne, bo SQLObject nie jest wcale nowym projektem. Mogliby si&#281; postara&#263; o   lepsz&#261; dokumentacj&#281;, bo ta co jest, jest fatalna.&lt;/p&gt;


	&lt;h4&gt;Panel admina.&lt;/h4&gt;


	&lt;p&gt;To jest wizyt&#243;wka Django. O ile nie potrzebujemy bardzo specyficznego jego dzia&#322;ania, to jest bardzo pomocny. To nie jest &#380;aden &amp;#8220;scaffolding&amp;#8221; z Rails&#243;w. To dopracowana aplikacja ko&#324;cowa.&lt;/p&gt;


	&lt;h4&gt;Generic views&lt;/h4&gt;


	&lt;p&gt;To kolejna wizyt&#243;wka Django. Za pomoc&#261; konfiguracji adres&#243;w (w pliku urls.py) i generic views mo&#380;na budowa&#263; ca&#322;e serwisy bez tworzenia ani jednego kontrolera. W ten spos&#243;b dzia&#322;a ca&#322;a &lt;a href="http://djangoproject.com"&gt;strona domowa&lt;/a&gt; Django. Osobi&#347;cie g&#322;&#281;boko nie wchodzi&#322;em w dzia&#322;anie tych mechanizm&#243;w, ale wygl&#261;daj&#261; bardzo interesuj&#261;co i mog&#261; da&#263;o gromne przy&#347;pieszenie w budowaniu stron www.&lt;/p&gt;


	&lt;h4&gt;Szersze wdro&#380;enia i silniejsze wsparcie komercyjne.&lt;/h4&gt;


	&lt;p&gt;Django mo&#380;e si&#281; poszczyci&#263; niez&#322;a list&#261; powa&#380;nych wdro&#380;e&#324;. Skala z&#322;ozono&#347;ci portal&#243;w zbudowanych w Django przewy&#380;sza to, czym si&#281; chwali strona domowa Rails&#243;w. Je&#347;li chodzi o Pylons, to wdro&#380;e&#324; jest bardzo ma&#322;o. Mo&#380;e brakuje im troch&#281; zmys&#322;u marketingowego jaki maj&#261; tw&#243;rcy Rails&#243;w i Turbogears? Na pewno brakuje lepszej, obszerniejszej dokumentacji wraz z wi&#281;ksz&#261; ilo&#347;ci&#261; przyk&#322;ad&#243;w.&lt;/p&gt;


	&lt;p&gt;Na bazie Django oferowany jest tak&#380;e odp&#322;atnie, komercyjny &lt;span class="caps"&gt;CMS&lt;/span&gt; (system zarz&#261;dania tre&#347;ci&#261;) &amp;#8211; &lt;a href="http://www.ellingtoncms.com/"&gt;Ellington&lt;/a&gt;. Specjalizowany jest do wi&#281;kszych serwis&#243;w, gazet itp. Firmy ceni&#261;ce sobie wsparcie komercyjne, nie musz&#261; si&#281; wi&#281;c obawia&#263;, &#380;e Django to jaki&#347; projekt paru zapale&#324;c&#243;w.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Django w rzeczy samej, jest projektem kt&#243;ry zosta&#322; wyekstraktowany z komercyjnego projektu &lt;a href="http://www.ellingtoncms.com/"&gt;Ellington&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;No i na koniec, &lt;em&gt;last but not least&lt;/em&gt;, tw&#243;rcom Django uda&#322;o si&#281; pozyska&#263; sympati&#281; samego tw&#243;rcy j&#281;zyka Pythona &amp;#8211; Guido van Rossum&amp;#8217;a. Na &lt;a href="http://python.org"&gt;stronie g&#322;&#243;wnej&lt;/a&gt;. Pythona w sekcji Web programming, obok Zope widzimy Django i Turbogears&amp;#8230;&lt;/p&gt;


	&lt;h3&gt;Podsumowanie.&lt;/h3&gt;


	&lt;p&gt;Django ma swoje zalety, ale nie jest wolny od wszelkich wad. Jednak&#380;e, og&#243;lnie rzecz bior&#261;c, to dobry framework, kt&#243;ry raczej nie powinien mie&#263; trudno&#347;ci w zdominowaniu dziedziby budowania aplikacji internetowych w Pythonie.&lt;/p&gt;


	&lt;p&gt;Jednak tam, gdzie liczy si&#281; wi&#281;ksza elastyczno&#347;&#263; i gdzie monolityczno&#347;&#263; Django jest nie do zaakceptowania, g&#322;&#243;wnym moim faworytem jest &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt;. To jedyna realna alternatywa dla Django&lt;sup&gt;&lt;a href="#fn5"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;del&gt;-&lt;/del&gt;&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Megaframework &amp;#8211; &#347;rodowisko zbudowane z gotowych, innych rozwi&#261;za&#324;. Turbogears korzysta m.in. z frameworku CherryPy, szablon&#243;w Kid, SQLObject jako &lt;span class="caps"&gt;ORM&lt;/span&gt; (mapera relacyjno obiektowego).&lt;/p&gt;


	&lt;p id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; Developerzy Django s&#261; przyciskani do muru &#380;&#261;daniami aby wprowadzi&#263; jaki&#347; mechanizm zast&#281;puj&#261;cy r&#281;czne wpisywanie adres&#243;w, i nie wykluczaj&#261;, &#380;e u&#380;yj&#261; Routes jako alternatywnego resolvera &lt;span class="caps"&gt;URL&lt;/span&gt;. Ale nie wiadomo kiedy i czy w og&#243;le to zrobi&#261;.&lt;/p&gt;


	&lt;p id="fn3"&gt;&lt;sup&gt;3&lt;/sup&gt;  Nie wiem dlaczego nie chca u&#380;y&#263; gotowych bibliotek jakie ju&#380; u&#380;ywa Pylons. Po co odkrywa&#263; na nowo ko&#322;o?&lt;/p&gt;


	&lt;p id="fn4"&gt;&lt;sup&gt;4&lt;/sup&gt; Dziedziczenie dzia&#322;a troch&#281; inaczej ni&#380; w Django i &lt;a href="http://cheetahtemplate.org"&gt;Cheetah&lt;/a&gt;. Np. nie ma tu, tak wygodnych &amp;#8220;blok&#243;w&amp;#8221; do przeci&#261;&#380;ania. Ale jest za to co&#347;, co przypomina &amp;#8220;akwizycj&#281;&amp;#8221; znan&#261; z &lt;a href="http://zope.org"&gt;Zope&lt;/a&gt;. Tzn. w Myghty mo&#380;na wrzuci&#263; do folderu z szablonami plik &amp;#8220;autohandler&amp;#8221; i automatycznie staje si&#281; szablonem bazowym dla wszystkich szablon&#243;w (bez dotykania ich zawarto&#347;ci!) To pozwala na wygodne zarz&#261;dzanie ca&#322;ymi grupami szablon&#243;w.&lt;/p&gt;


	&lt;p id="fn5"&gt;&lt;sup&gt;5&lt;/sup&gt; Poza oczywi&#347;cie Zope czy Plone, ale to jest troch&#281; inna bajka i temat na oddzielne rozwa&#380;ania. :)&lt;/p&gt;</description>
      <pubDate>Wed, 21 Jun 2006 17:18:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:d8ae9ac4-ed22-4de6-abae-f6338bec50f8</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/06/21/django-i-jego-konkurenci</link>
      <category>Pylons</category>
      <category>Django</category>
      <category>django</category>
      <category>pylons</category>
      <category>turbogears</category>
    </item>
  </channel>
</rss>
