<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.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: Pylons - czyli si&#322;a Myghty i wygoda RubyonRails</title>
    <link>http://blog.zabiello.com/articles/2006/03/04/pylons-czyli-si%C5%82a-myghty-i-wygoda-rubyonrails</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Pylons - czyli si&#322;a Myghty i wygoda RubyonRails</title>
      <description>&lt;p&gt;Coraz bardziej ciekawie rozwija sie pythonowy framework do szybkiego budowania aplikacji internetowych: &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt;. W przeciwie&#324;stwie do &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt; Pylons jest zbudowany na bazie &lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; a nie &lt;a href="http://cherrypy.org"&gt;CherryPy&lt;/a&gt;. Myghty jest &lt;strong&gt;bardzo szybkim&lt;/strong&gt;, stabilnym i dobrze napisanym frameworkiem. Pracuje jako cgi, mod_python, wielow&#261;tkowo lub wieloforkowo, dzi&#281;ki &lt;a href="http://www.saddi.com/software/flup/"&gt;&lt;span class="caps"&gt;WSGI&lt;/span&gt;&lt;/a&gt;. Posiada doskona&#322;y, elastyczny cache, obs&#322;ug&#281; &lt;span class="caps"&gt;AJAX&lt;/span&gt;&amp;#8217;a, s&#322;owem prawie wszystko co trzeba dla wsp&#243;&#322;czesnej aplikacji internetowej. Jednak posiada za du&#380;o cech kt&#243;re w bran&#380;y pythonowej okre&#347;la si&#281; jaki &amp;#8220;perlish&amp;#8221; (&lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; by&#322; wzorowany na perlowym &lt;a href="http://masonhq.com"&gt;Masonie&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;I tu z pomoc&#261; przychodzi &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt;. Jest on czym&#347; w rodzaju &lt;strong&gt;megaframeworku&lt;/strong&gt;, czyli frameworku zbudowanym &lt;em&gt;na bazie&lt;/em&gt; innego frameworku, w tym wypadku: &lt;a href="http://myghyt.org"&gt;Myghty&lt;/a&gt;. (Na podobnej zasadzie &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt;  jest megaframeworkiem opartym na &lt;a href="http://cherrypy.org"&gt;CherryPy&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://pylonsqh.com"&gt;Pylons&lt;/a&gt; r&#243;&#380;ni si&#281; jednak tym od &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt; &#380;e jest oparty na frameworku znacznie bardziej solidnym i znacznie lepiej na&#347;laduje framework bed&#261;cy natchnieniem dla wi&#281;kszo&#347;ci innych, czyli &lt;a href="http://rubyonrails.com"&gt;Ruby on Rails&lt;/a&gt;. &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; czerpie pe&#322;nymi gar&#347;ciami z najlepszych pomys&#322;&#243;w  Rails&#243;w dodaj&#261;c do tego wi&#281;ksz&#261; wydajno&#347;&#263; Pythona, elastyczno&#347;&#263; i prostot&#281; sk&#322;adni oraz si&#322;&#281; jego bibliotek (np. Python ma doskonale zaimplementowan&#261; obs&#322;ug&#281; Unicode, co jest w Ruby potraktowane troch&#281; po macoszemu, a w &lt;span class="caps"&gt;PHP&lt;/span&gt; to w og&#243;le tragedia)&lt;/p&gt;


	&lt;p&gt;Zobaczmy przyk&#322;adowo, co nam daje Pylons. Np. rozwi&#261;zywanie adres&#243;w. Adresy &lt;span class="caps"&gt;URL&lt;/span&gt; s&#261; rozwi&#261;zywane za pomoca bardzo ciekawej biblioteki &lt;a href="http://routes.groovie.org/"&gt;Routes&lt;/a&gt; w spos&#243;b podobny do Rails&#243;w. Np. za&#322;&#243;&#380;my &#380;e bie&#380;&#261;cy request zwraca nast&#281;puj&#261;cy s&#322;ownik: {&amp;#8216;controller&amp;#8217;: &amp;#8216;blog&amp;#8217;, &amp;#8216;action&amp;#8217;: &amp;#8216;view&amp;#8217;, &amp;#8216;id&amp;#8217;: 2 (gdzie rozwi&#261;zywanie adres&#243;w url odbywa si&#281; wg definicji podobnej do Rails&#243;w: &amp;#8217;:controller/:action/:id&amp;#8217;). 
Uzyskamy nast&#281;puj&#261;ce wyniki:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="number"&gt;4&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;                    &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/blog/view/4&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt;
&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;/admin&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;     &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/admin&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt;
&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;admin&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;      &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/admin/index/4&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;edit&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;           &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/blog/post/4&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt;
&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;='&lt;/span&gt;&lt;span class="string"&gt;list&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="constant"&gt;None&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;  &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/blog/list&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Pylons &amp;#8220;przeportowa&#322; do Pythona&amp;#8221; ca&#322;&#261; mas&#281; u&#380;ytecznych helper&#243;w znanych w Rails. Zajmuje si&#281; tym biblioteka &lt;a href="http://pylonshq.com/RailsHelpers/"&gt;RailsHelpers&lt;/a&gt;. Przyk&#322;adowo wygl&#261;da to tak:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;link_to&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Delete this page&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;url&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;destroy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="number"&gt;4&lt;/span&gt;&lt;span class="punct"&gt;),&lt;/span&gt; &lt;span class="ident"&gt;confirm&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Are you sure?&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="ident"&gt;link_to&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Help&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;url&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;help&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;),&lt;/span&gt; &lt;span class="ident"&gt;popup&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="constant"&gt;True&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
&lt;span class="ident"&gt;link_to&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Busy loop&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;url&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;busy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;),&lt;/span&gt; &lt;span class="ident"&gt;popup&lt;/span&gt;&lt;span class="punct"&gt;=['&lt;/span&gt;&lt;span class="string"&gt;new_window&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;height=300,width=600&lt;/span&gt;&lt;span class="punct"&gt;'])&lt;/span&gt;
&lt;span class="ident"&gt;link_to&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Destroy account&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;url&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;destroy&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;),&lt;/span&gt; &lt;span class="ident"&gt;confirm&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Are you sure?&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;True&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Jak&#261; to daje nam korzy&#347;&#263;? Ogromn&#261;! Wyobra&#378;my sobie &#380;e chcemy zmienic spos&#243;b rozwi&#261;zywania adres&#243;w url. Co z milionami stron, kt&#243;re mia&#322;y linki do r&#243;&#380;nych wewn&#281;trznych cz&#281;&#347;ci naszego serwisu? Koszmar! Trzeba r&#281;cznie je poprawia&#263;. Dzi&#281;ki Pylon, nie musimy bezpo&#347;rednio wklepywa&#263; adres url, ale u&#380;ywamy do tego helper&#243;w. Zmiana zasad rozwi&#261;zywania adres&#243;w &lt;strong&gt;automatycznie&lt;/strong&gt; poprawi adresy we wszystkich miejscach. Korzy&#347;&#263; jest niewymierna!&lt;/p&gt;


	&lt;p&gt;RailsHelpers zawiera tak&#380;e wi&#281;cej helper&#243;w. Np. mo&#380;na na nie zrzuci&#263; &lt;a href="http://pylonshq.com/RailsHelpers/module-railshelpers.helpers.form_tag.html"&gt;budow&#281; formularzy&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Mo&#380;na te&#380; uzyska&#263; &lt;a href="http://pylonshq.com/RailsHelpers/module-railshelpers.helpers.scriptaculous.html"&gt;efekty specjalne&lt;/a&gt; po&#322;&#261;czone z &lt;span class="caps"&gt;AJAX&lt;/span&gt;&amp;#8217;em w identyczny spos&#243;b jak w Railsach. Pylons bowiem impelmentuje w Pythonie t&#261; sam&#261;, znakomit&#261; bibliotek&#281; JavaScript: &lt;a href="http://script.aculo.us/"&gt;scriptaculous&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Nie spos&#243;b nie wspomnie&#263; tak&#380;e o &lt;strong&gt;interaktywnym debuggerze&lt;/strong&gt;. To poprostu jest &lt;a href="http://pylonshq.com/docs/0.8/interactive_debugger.html"&gt;nowa jako&#347;&#263;&lt;/a&gt;. Mo&#380;na &lt;a href="http://pythonpaste.org/screencasts/evalerror-screencast.html"&gt;interaktywnie&lt;/a&gt; prze&#347;ledzi&#263; stan obiekt&#243;w aplikacji internetowej. &#346;wietny pomys&#322;.&lt;/p&gt;


	&lt;p&gt;Jak dla mnie, &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; staje si&#281; g&#322;&#243;wnym rywalem &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt; do tytu&#322;u najlepszego frameworka dla j&#281;zyka Python. Jest znacznie bardziej elastyczny, posiada wysok&#261; wydajno&#347;&#263; i mo&#380;liwo&#347;ci &lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; oraz w &#322;atwiejszy spos&#243;b rozwi&#261;zuje adresy url i ma wygodniejsze helpery, bo wzorowane na &lt;a href="http://rubyonrails.com"&gt;Ruby on Rails&lt;/a&gt;. Wi&#281;cej na temat &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; mo&#380;na &#347;ledzi&#263; tak&#380;e na stronie &lt;a href="http://groovie.org/"&gt;http://groovie.org/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 04 Mar 2006 00:51:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:836615e3-4601-4761-9777-8455fe318463</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/03/04/pylons-czyli-si%C5%82a-myghty-i-wygoda-rubyonrails</link>
      <category>Pylons</category>
      <category>Python</category>
      <category>pylons</category>
      <category>rails</category>
    </item>
    <item>
      <title>"Pylons - czyli si&#322;a Myghty i wygoda RubyonRails" by Alex</title>
      <description>&lt;p&gt;wszystko to &#322;adne i pi&#281;kne &amp;#8230;&lt;/p&gt;


	&lt;p&gt;ale do RoR-a jest coraz wi&#281;cej
ksi&#261;&#380;ek i wszelakiej dokumentacji&lt;/p&gt;


	&lt;p&gt;a do tego typu wynalazk&#243;w &amp;#8230;&lt;/p&gt;


	&lt;p&gt;co z tego &#380;e co&#347; jest mo&#380;e i lepsze
ni&#380; RoR &amp;#8211; zero pomocy, brak
dokumentacji ( np. Nitro &amp;#8230;
po padzie strony )&lt;/p&gt;


	&lt;p&gt;Pozdrawiam&lt;/p&gt;</description>
      <pubDate>Fri, 07 Jul 2006 05:36:03 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:9eb49903-abd7-4f1f-923e-f0156282402b</guid>
      <link>http://blog.zabiello.com/articles/2006/03/04/pylons-czyli-si%C5%82a-myghty-i-wygoda-rubyonrails#comment-156</link>
    </item>
    <item>
      <title>"Pylons - czyli si&#322;a Myghty i wygoda RubyonRails" by MySZ</title>
      <description>&lt;p&gt;Ja tylko w kwestii formalnej (normalnie si&#281; nie czepiam ort&#243;w), i dlatego &#380;e na newsach te&#380; robisz ten jeden b&#322;&#261;d: &lt;a href="http://sjp.pwn.pl/haslo.php?id=4549" rel="nofollow"&gt;http://sjp.pwn.pl/haslo.php?id=4549&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Poza tym dzi&#281;ki za info o pylons &amp;#8211; musz&#281; si&#281; nim zainteresowa&#263; na powa&#380;niej :)&lt;/p&gt;</description>
      <pubDate>Sat, 04 Mar 2006 03:18:16 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ee569885-6d15-435a-84f1-746fed2461e7</guid>
      <link>http://blog.zabiello.com/articles/2006/03/04/pylons-czyli-si%C5%82a-myghty-i-wygoda-rubyonrails#comment-43</link>
    </item>
  </channel>
</rss>
