<?xml version="1.0" encoding="iso-8859-15" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" >
 <channel rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/WebRss">
  <title>TWiki Blog (combined)</title>
  <link>http://wiki.pld-freebsd.org/bin/view/Blog</link>
  <description>Blogi deweloperów PLD/FreeBSD</description>
<image rdf:resource="http://wiki.pld-freebsd.org/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif" />
  <dc:language>en-us</dc:language>
  <dc:rights>Copyright &#169; 2008</dc:rights>
  <dc:publisher>TWiki Administrator [trojan@pld-freebsd.org]</dc:publisher>
  <dc:creator>TWiki Administrator [trojan@pld-freebsd.org]</dc:creator>
  <dc:source>TWiki</dc:source>
  <items>
    <rdf:Seq>
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry8" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment8" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment7" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry7" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry6" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry5" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry4" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment6" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment5" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment4" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment3" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment2" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment1" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry3" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry2" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment0" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry1" />
  <rdf:li rdf:resource="http://wiki.pld-freebsd.org/bin/view/Blog/BlogAbout" />
    </rdf:Seq>
  </items>
</channel>
<image rdf:about="http://wiki.pld-freebsd.org/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif">
  <title>TWiki/NatSkin</title>
  <link>http://wiki.pld-freebsd.org/bin/view/Blog</link>
  <url>http://wiki.pld-freebsd.org/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif</url>
</image>
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry8">
 <title>Eppur si muove&#8230;</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry8</link>
 <description> &#60;p /&#62;Niniejszym mog&#38;#281; z ca&#38;#322;ym spokojem og&#38;#322;osi&#38;#263; oficjalne wydanie pierwszego j&#38;#261;dra PLD/FreeBSD, kernel posiada numerek &#60;a href&#61;&#34;ftp://ftp.pld-freebsd.org/pub/PLD-FreeBSD/kernel/v6/kernel-6.3.0.0.tar.bz2&#34; target&#61;&#34;&#95;top&#34;&#62;6.3.0.0&#60;/a&#62; i zamyka pewien etap tego projektu. Z wydaniem tego j&#38;#261;dra wi&#38;#261;&#38;#380;e si&#38;#281; bowiem to, &#38;#380;e do przebudowania ca&#38;#322;o&#38;#347;ci nie bedzie ju&#38;#380; nigdy potrzebny FreeBSD (na którym do tej pory by&#38;#322;o produkowane j&#38;#261;dro dla PLD/FreeBSD). &#60;p /&#62; Z ciekawostek, jako &#38;#380;e nikt mi nigdy nie powiedzia&#38;#322;, &#38;#380;e do budowania j&#38;#261;dra nie da si&#38;#281; zaprz&#38;#261;c autoconfa i automake&#39;a. I z drugiej strony, z braku pomys&#38;#322;u na szybkie w implementacji narz&#38;#281;dzie do budowania tego&#38;#380;, spróbowa&#38;#322;em u&#38;#380;y&#38;#263; do tego celu w&#38;#322;a&#38;#347;nie autotoolsy&#8230; I uda&#38;#322;o si&#38;#281;. Pomijam, &#38;#380;e regeneracja plików configure i wszystkich Makefile&#39;ów trwa d&#38;#322;uzej ni&#38;#380; samo budowanie kernela, kto by sie tym przejmowa&#38;#322;. &#60;p /&#62; Teraz, kolejny du&#38;#380;y krok to b&#38;#281;dzie instalator&#8230; ale kiedy? &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2008-01-27T19:11:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment8">
 <title>TomaszTrojanowski replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment8</link>
 <description> &#60;p /&#62;Posypa&#38;#322; si&#38;#281; RAID, a ja niestety nie mam czasu &#38;#380;eby przywróci&#38;#263; go z backupów. azazel wróci jak tylko ukradn&#38;#281; z czego&#38;#347; troch&#38;#281; czasu. </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-07-13T10:37:15Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment7">
 <title>spider replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment7</link>
 <description> &#60;p /&#62;azazel did not response </description>
 <dc:creator> spider</dc:creator>
 <dc:date>2007-07-13T08:32:56Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/PiotrSkwarna">
 <rdf:value>PiotrSkwarna</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry7">
 <title>Winowajca odnaleziony</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry7</link>
 <description> &#60;p /&#62;Znalaz&#38;#322;em &#60;a class&#61;&#34;natExternalLink&#34; target&#61;&#34;&#95;blank&#34; href&#61;&#34;http://lists.pld-linux.org/mailman/pipermail/pld-devel-pl/2002-May/051320.html&#34;&#62;winnego&#60;/a&#62;. By&#38;#322;em prawie pewien, &#38;#380;e to by&#38;#322; aniou, ale wydawa&#38;#322;o mi si&#38;#281; &#38;#380;e to by&#38;#322;o rok albo dwa wcze&#38;#347;niej. W ka&#38;#380;dym razie taka jest geneza PLD/FreeBSD. </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-04-24T07:10:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry6">
 <title>New look and feel</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry6</link>
 <description> &#60;p /&#62;Tak si&#38;#281; z&#38;#322;o&#38;#380;y&#38;#322;o, &#38;#380;e dysponuj&#38;#261;c chwil&#38;#261; wolnego czasu zabra&#38;#322;em si&#38;#281; do realizacji od dawna odk&#38;#322;adanych zada&#38;#324;. Skutkiem czego wiki (a zatem i blog) doczeka&#38;#322;o si&#38;#281; w ko&#38;#324;cu nowego, lepszego wygl&#38;#261;du. Stare skórki s&#38;#261; (dla ciekawych) nadal dost&#38;#281;pne, np. &#60;a href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry6?skin&#61;pattern&#34; target&#61;&#34;&#95;top&#34;&#62;http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry6?skin&#61;pattern&#60;/a&#62; &#60;p /&#62; &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-04-19T12:52:00Z</dc:date>
 <dc:subject>BlogDev</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry5">
 <title>PLD/FreeBSD Preview 1</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry5</link>
 <description> &#60;p /&#62;Poniewa&#38;#380; zg&#38;#322;osi&#38;#322;o si&#38;#281; do mnie ju&#38;#380; kilka osób z pytaniem jak mo&#38;#380;na zainstalowa&#38;#263; PLD/FreeBSD postanowi&#38;#322;em co&#38;#347; z tym zrobi&#38;#263;. Na pocz&#38;#261;tek PLD/FreeBSD Preview 1 w postaci spakowanej maszyny wirtualnej do VMWare Workstation. Do pobrania &#60;a href&#61;&#34;ftp://ftp.pld-freebsd.org/pub/PLD-FreeBSD/preview/pld-freebsd-preview1.tar.bz2&#34; target&#61;&#34;&#95;top&#34;&#62;tutaj&#60;/a&#62; (41.5 MB). System minimalny jak tylko si&#38;#281; da&#38;#322;o, wi&#38;#281;c mo&#38;#380;na sobie popoldkowa&#38;#263;. &#60;p /&#62; Po uruchomieniu maszyny i zalogowaniu si&#38;#281; na &#60;code&#62;roota&#60;/code&#62; (has&#38;#322;o puste) trzeba skonfigurowa&#38;#263; sie&#38;#263;: &#60;pre&#62; ifconfig lnc0 192.168.1.2 route add default 192.168.1.1 echo &#38;#34;nameserver 192.168.1.1&#38;#34; &#38;#62; /etc/resolv.conf &#60;/pre&#62; albo wyedytowa&#38;#263; znane z PLD pliki odpowiedzialne za powy&#38;#380;sze i zrestartowa&#38;#263; us&#38;#322;ug&#38;#281; &#60;code&#62;network&#60;/code&#62; &#60;pre&#62; /etc/rc.d/init.d/network restart &#60;/pre&#62; I ju&#38;#380; mo&#38;#380;na dzia&#38;#322;a&#38;#263;. Nie polecam instalowania pakietu &#60;code&#62;kernel&#60;/code&#62; i &#60;code&#62;loader&#60;/code&#62; bo te które s&#38;#261; na FTPie mog&#38;#261; kompletnie rozwali&#38;#263; system. &#60;p /&#62; Zainteresowanym &#38;#380;ycz&#38;#281; mi&#38;#322;ej zabawy. &#60;p /&#62; Jak tylko znajd&#38;#281; chwil&#38;#281; czasu postaram si&#38;#281; opisa&#38;#263; jak zainstalowa&#38;#263; PLD/FreeBSD na fizycznej maszynie przy pomocy p&#38;#322;yty instalacyjnej FreeBSD. &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-03-07T08:51:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry4">
 <title>Do builderów podejscie trzecie</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry4</link>
 <description> &#60;p /&#62;Po raz trzeci zabra&#38;#322;em si&#38;#281; za pisanie builderów dla PLD/FreeBSD. Efekt jest taki, &#38;#380;e podstawowe funkcjonalno&#38;#347;ci s&#38;#261; ju&#38;#380; gotowe, a w czasie kiedy na nowych builderach testowo przebudowywane s&#38;#261; wszystkie pakiety sp&#38;#322;odzi&#38;#322;em krótki tekst opisujacy ich dzia&#38;#322;anie. Zainteresowanych zapraszam do &#60;a href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Main/JakDzialajaBuilder&#34; target&#61;&#34;&#95;top&#34;&#62;lektury&#60;/a&#62;. </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-03-05T15:04:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment6">
 <title>TomaszTrojanowski replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment6</link>
 <description> &#60;p /&#62;Nie jestem do ko&#38;#324;ca przekonany, czy b&#38;#281;dzie szybsze. Nawet je&#38;#380;eli tak, to najprawdopodobniej &#60;pre&#62; SELECT DISTINCT id&#38;#95;process AS p1 FROM task   WHERE status &#38;#61; &#38;#39;completed&#38;#39; AND   NOT EXISTS (SELECT &#38;#42; FROM task WHERE status &#38;#60;&#38;#62; &#38;#39;completed&#38;#39;  AND id&#38;#95;process &#38;#61; p1); &#60;/pre&#62; b&#38;#281;dzie jeszcze szybsze. Ale to nie o to chodzi. &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-02-16T21:11:06Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment5">
 <title>MarcinGajda replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment5</link>
 <description>&lt;b&gt;Wszystkie...&lt;/b&gt; &#60;p /&#62;No tak &#8211; maj&#38;#261; by&#38;#263; wszystkie. Wobec tego bij&#38;#281; si&#38;#281; w piersi, rzeczywi&#38;#347;cie moje zapytanie nie daje poprawnego wyniku. &#60;p /&#62; Mimo wszystko napisa&#38;#322;bym to inaczej: &#60;p /&#62; &#60;pre&#62; SELECT id&#95;process   FROM task   WHERE status &#61; &#39;completed&#39;   GROUP BY id&#95;process EXCEPT SELECT id&#95;process   FROM task   WHERE status &#60;&#62; &#39;completed&#39;   GROUP BY id&#95;process &#60;/pre&#62; &#60;p /&#62; To zapytanie wci&#38;#261;&#38;#380; b&#38;#281;dzie szybsze w planie wykonania od Twojego. &#60;p /&#62; </description>
 <dc:creator>MarcinGajda</dc:creator>
 <dc:date>2007-02-16T10:07:37Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/MarcinGajda">
 <rdf:value>MarcinGajda</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment4">
 <title>TomaszTrojanowski replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment4</link>
 <description> &#60;p /&#62;Przecie&#38;#380; &#60;code&#62;SELECT id&#95;process FROM task WHERE status &#61; &#39;completed&#39; GROUP BY id&#95;process;&#60;/code&#62; zwróci liste procesów które maj&#38;#261; przynajmniej jedno zadanie zako&#38;#324;czone, a nie liste procesów, w których wszystkie zadania zosta&#38;#322;y zako&#38;#324;czone. Nie widzisz tego? &#60;p /&#62; Ca&#38;#322;y problem le&#38;#380;y w tym, &#38;#380;eby uzyska&#38;#263; list&#38;#281; procesów, w których wszystkie zadania si&#38;#281; zako&#38;#324;czy&#38;#322;y, u&#38;#380;ycie &#60;code&#62;WHERE&#60;/code&#62; w tym przypadku nic nie da, bo przed wykonaniem funkcji &#60;code&#62;COUNT&#60;/code&#62; ograniczy zbiór poczatkowy do zada&#38;#324; które si&#38;#281; nie zako&#38;#324;czy&#38;#322;y (w przypadku &#60;code&#62;WHERE status &#38;lt;&#38;gt; &#39;completed&#39;&#61;) albo do zada&#38;#324; które si&#38;#281; zako&#38;#324;czy&#38;#322;y w przypadku &#61;WHERE status &#61; &#39;completed&#39;&#61;). Czyli u&#38;#380;ywaj&#38;#261;c &#61;WHERE status &#61; &#39;completed&#39;&#60;/code&#62; nie wiemy czy s&#38;#261; w tak ograniczonej tabeli rekordy z status &#38;lt;&#38;gt; &#39;completed&#39; &#60;p /&#62; Na przyk&#38;#322;adzie b&#38;#281;dzie pro&#38;#347;ciej. Przyjmijmy, &#38;#380;e w tabela &#34;task&#34; wygl&#38;#261;da tak (pomin&#38;#261;&#38;#322;em pierwsze pole bo jest nieistotne w tym wypadki): &#60;table  cellspacing&#61;&#34;0&#34; cellpadding&#61;&#34;0&#34; class&#61;&#34;twikiTable&#34; border&#61;&#34;1&#34;&#62;&#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34; maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;0;table&#61;1;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;id&#95;process&#60;/a&#62; &#60;/th&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;1;table&#61;1;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;status&#60;/a&#62; &#60;/th&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableOdd&#34;&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 1 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34; &#62; none &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 1 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34; &#62; running &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableOdd&#34;&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 2 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34; &#62; completed &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 2 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34; &#62; completed &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableOdd&#34;&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 3 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34; &#62; completed &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol twikiLast&#34;&#62; 3 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiLast&#34;&#62; running &#60;/td&#62;&#60;/tr&#62; &#60;/table&#62; Moje &#60;pre&#62; SELECT id&#38;#95;process, COUNT(status !&#38;#61; &#38;#39;completed&#38;#39; OR NULL) AS count FROM task GROUP BY id&#38;#95;process HAVING count &#38;#61; 0; &#60;/pre&#62; zwróci: &#60;table  cellspacing&#61;&#34;0&#34; cellpadding&#61;&#34;0&#34; class&#61;&#34;twikiTable&#34; border&#61;&#34;1&#34;&#62;&#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34; maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;0;table&#61;2;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;id&#95;process&#60;/a&#62; &#60;/th&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;1;table&#61;2;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;count&#60;/a&#62; &#60;/th&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableOdd&#34;&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol twikiLast&#34;&#62; 2 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiLast&#34;&#62; 0 &#60;/td&#62;&#60;/tr&#62; &#60;/table&#62; Twoje &#60;pre&#62; SELECT id&#38;#95;process, COUNT(&#38;#42;) AS count FROM task WHERE status &#38;#61; &#38;#39;completed&#38;#39; GROUP BY id&#38;#95;process; &#60;/pre&#62; zwróci &#60;table  cellspacing&#61;&#34;0&#34; cellpadding&#61;&#34;0&#34; class&#61;&#34;twikiTable&#34; border&#61;&#34;1&#34;&#62;&#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34; maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;0;table&#61;3;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;id&#95;process&#60;/a&#62; &#60;/th&#62;&#60;th bgcolor&#61;&#34;#6b7f93&#34; align&#61;&#34;center&#34; valign&#61;&#34;top&#34;  maxcols&#61;&#34;0&#34;&#62; &#60;a rel&#61;&#34;nofollow&#34; href&#61;&#34;http://wiki.pld-freebsd.org/bin/view/Blog/WebRssCombined?sortcol&#61;1;table&#61;3;up&#61;0#sorted&#95;table&#34;  title&#61;&#34;Sort by this column&#34;&#62;count&#60;/a&#62; &#60;/th&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableOdd&#34;&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol&#34;&#62; 2 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#ffffff&#34; valign&#61;&#34;top&#34; &#62; 2 &#60;/td&#62;&#60;/tr&#62; &#60;tr class&#61;&#34;twikiTableEven&#34;&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiFirstCol twikiLast&#34;&#62; 3 &#60;/td&#62;&#60;td bgcolor&#61;&#34;#edf4f9&#34; valign&#61;&#34;top&#34;  class&#61;&#34;twikiLast&#34;&#62; 1 &#60;/td&#62;&#60;/tr&#62; &#60;/table&#62; Oczywiscie &#60;code&#62;count&#60;/code&#62; jest nieistotne, ale te zapytania zwracaja zupe&#38;#322;nie ró&#38;#380;n&#38;#261; liste procesów. &#60;p /&#62; Rozumiesz juz o co chodzi czy mam t&#38;#322;umaczy&#38;#263; dalej. </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-02-16T09:28:14Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment3">
 <title>MarcinGajda replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment3</link>
 <description>&lt;b&gt;Ale&#380;...&lt;/b&gt; &#60;p /&#62;SELECT id&#95;process   FROM task   WHERE status &#61; &#39;completed&#39;   GROUP BY id&#95;process; &#60;p /&#62; Co&#38;#347; mi si&#38;#281; wydaje, &#38;#380;e owracasz jednak kota ogonem, zupe&#38;#322;nie niepotrzebnie. Przeczytaj o WHERE, zanim zaczniej kombinowa&#38;#263; po górk&#38;#281;. &#60;p /&#62; Dobrze by&#38;#322;oby, gdyby&#38;#347; te&#38;#380; obejrza&#38;#322; plan dla Twojego i mojego zapytania. Mo&#38;#380;e wtedy by&#38;#263; zrozumia&#38;#322;, dlaczego Twoje podej&#38;#347;cie jest co najmniej niew&#38;#322;a&#38;#347;ciwe. </description>
 <dc:creator>MarcinGajda</dc:creator>
 <dc:date>2007-02-16T08:25:07Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/MarcinGajda">
 <rdf:value>MarcinGajda</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment2">
 <title>TomaszTrojanowski replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment2</link>
 <description> &#60;p /&#62;Fakt, b&#38;#322;edem by&#38;#322;o nie napisanie bezpo&#38;#347;rednio do czego mi to pos&#38;#322;u&#38;#380;y. Wi&#38;#281;c naprawiam ten b&#38;#322;&#38;#261;d, bo widz&#38;#281; czytanie ze zrozumieniem to rzadka sztuka. &#60;p /&#62; U&#38;#380;ywaj&#38;#261;c tej swojej klauzuli &#60;code&#62;WHERE&#60;/code&#62; wylistuj wszystkie takie procesy, dla których wszystkie zadania (z tabeli &#34;task&#34;) maj&#38;#261; status &#39;completed&#39;. Bo ja to zrobi&#38;#281; tak: &#60;pre&#62; SELECT id&#38;#95;process, COUNT(status !&#38;#61; &#38;#39;completed&#38;#39; OR NULL) AS count FROM task GROUP BY id&#38;#95;process HAVING count &#38;#61; 0; &#60;/pre&#62; &#60;p /&#62; Tylko &#38;#380;eby Ci&#38;#281; &#38;#380;o&#38;#322;&#38;#261;dek nie rozbola&#38;#322;, jak b&#38;#281;dziesz si&#38;#281; gimnastykowa&#38;#322;. &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-02-15T14:46:54Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment1">
 <title>Marcin Gajda  replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment1</link>
 <description>&lt;b&gt;Tak...&lt;/b&gt; &#60;p /&#62;&#38;#346;liczne? Prymitywne, hack taki, &#38;#380;e a&#38;#380; &#38;#380;o&#38;#322;&#38;#261;dek boli. Wygl&#38;#261;da na to, &#38;#380;e nie doszed&#38;#322;e&#38;#347; jeszcze w nauce SQL do klauzuli WHERE&#8230; &#60;p /&#62; SELECT id&#95;process, COUNT(&#42;)   FROM task   WHERE status &#38;lt;&#38;gt; &#39;completed&#39;   GROUP BY id&#95;process; &#60;p /&#62; Móg&#38;#322;by&#38;#347; te&#38;#380; pomy&#38;#347;le&#38;#263; o przesiadce na baz&#38;#281; danych (np. PostgreSQL), a nie korzysta&#38;#263; z &#38;#380;a&#38;#322;osnej imitacji. </description>
 <dc:creator>Marcin Gajda </dc:creator>
 <dc:date>2007-02-15T13:07:55Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/MarcinGajda">
 <rdf:value>MarcinGajda</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry3">
 <title>Ciekawa w&#322;asno&#347;&#263; NULLa</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry3</link>
 <description> &#60;p /&#62;W bólach implementacji swoich builderów natkn&#38;#261;&#38;#322;em si&#38;#281; na ciekaw&#38;#261; w&#38;#322;asno&#38;#347;&#38;#263; NULLa w MySQL. Nie wiem czy pojawia sie ona równie&#38;#380; innych SQLach. &#60;p /&#62; Najpro&#38;#347;ciej bedzie na przykladzie. Za&#38;#322;ózmy, &#38;#380;e mamy dwie tabele &#34;process&#34; i &#34;task&#34;. Tabela &#34;process&#34; zawiera list&#38;#281; procesów wykonywanych przez pewien abstrakcyjny procesor, na ka&#38;#380;dy proces sk&#38;#322;ada si&#38;#281; pewna ilo&#38;#347;&#38;#263; zada&#38;#324;, przy czym ka&#38;#380;de zadanie mo&#38;#380;e nale&#38;#380;e&#38;#263; tylko do jednego procesu; czyli prosta relacja jeden do wielu. Dodatkowo ka&#38;#380;de zadanie posiada w&#38;#322;a&#38;#347;ciwo&#38;#347;&#38;#263; &#34;status&#34; okre&#38;#347;laj&#38;#261;ca stan tego zadania. Dla ustalenia uwagi niech pole &#34;status&#34; mo&#38;#380;e przyjmowa&#38;#263; trzy warto&#38;#347;ci: &#34;none&#34;, &#34;running&#34; lub &#34;completed&#34;. Definicja tych tabel mo&#38;#380;e wygl&#38;#261;dac tak: &#60;pre&#62; CREATE TABLE process (     id INT UNSIGNED PRIMARY KEY NOT NULL auto&#38;#95;increment,     name VARCHAR); CREATE TABLE task (     id INT UNSIGNED PRIMARY KEY NOT NULL auto&#38;#95;increment,     id&#38;#95;process INT UNSIGNED NOT NULL,     status ENUM(&#38;#39;none&#38;#39;, &#38;#39;running&#38;#39;, &#38;#39;completed&#38;#39;) NOT NULL); &#60;/pre&#62; &#60;p /&#62; Zapytanie które zwróci nam identyfikator procesu wraz z ilo&#38;#347;ci&#38;#261; zada&#38;#324; przyporzadkowanych do tego procesu jest oczywi&#38;#347;cie trywialne i wyglada tak: &#60;pre&#62; SELECT id&#38;#95;process, COUNT(&#38;#42;) FROM task GROUP BY id&#38;#95;process; &#60;/pre&#62; &#60;p /&#62; Problemem natomiast jest zapytanie zwracajace identyfikator procesu wraz z ilo&#38;#347;ci&#38;#261; zada&#38;#324; przyporzadkowanych do tego procesu, ale takich które nie zosta&#38;#322;y jeszcze zako&#38;#324;czone, czyli maj&#38;#261; status ró&#38;#380;ny od &#39;completed&#39;. Proste: &#60;pre&#62; SELECT id&#38;#95;process, COUNT(status !&#38;#61; &#38;#39;completed&#38;#39;) FROM task GROUP BY id&#38;#95;process; &#60;/pre&#62; nie wystarcza poniewa&#38;#380; &#60;code&#62;COUNT&#60;/code&#62; zlicza zgrupowane warto&#38;#347;ci bez wzgledu na ich warto&#38;#347;&#38;#263;. W tym przypadku zarówno &#60;code&#62;TRUE&#60;/code&#62; jak i &#60;code&#62;FALSE&#60;/code&#62; jest traktowane jako element to zliczenia. Zatem powy&#38;#380;sze zapytanie zwraca to samo co poprzednie, czyli identyfikator procesu wraz z ilo&#38;#347;ci&#38;#261; zada&#38;#324; przyporzadkowanych do tego procesu. &#60;p /&#62; Mo&#38;#380;naby oczywi&#38;#347;cie uzy&#38;#263; funkcji &#60;code&#62;SUM&#60;/code&#62; i &#60;code&#62;IF&#60;/code&#62; w nast&#38;#281;puj&#38;#261;cy sposób: &#60;pre&#62; SELECT id&#38;#95;process, SUM(IF(status !&#38;#61; &#38;#39;completed), 1, 0) FROM task GROUP BY id&#38;#95;process; &#60;/pre&#62; Ale to nie do&#38;#347;&#38;#263;, &#38;#380;e niezgodne z zasadami sztuki, to jeszcze ma&#38;#322;o czytelne i pewnie ma&#38;#322;o wydajne. &#60;p /&#62; Aby w prosty sposób uzyska&#38;#263; oczekiwany wynik wystarczy wykorzysta&#38;#263; to &#38;#380;e warto&#38;#347;ci &#60;code&#62;NULL&#60;/code&#62; s&#38;#261; &#60;strong&#62;niepoliczalne&#60;/strong&#62; dla funkcji &#60;code&#62;COUNT&#60;/code&#62;. Je&#38;#380;eli zgrupujemy rekordy które w zadanym polu maja cztery warto&#38;#347;ci z czego dwie s&#38;#261; równe &#60;code&#62;NULL&#60;/code&#62; to funkcja &#60;code&#62;COUNT&#60;/code&#62; na tym polu zwróci nam &#60;code&#62;2&#60;/code&#62;, a nie &#60;code&#62;4&#60;/code&#62;. &#60;p /&#62; Wystarczy zatem doprowadzi&#38;#263; ostatnie zapytanie wykorzystuj&#38;#261;ce funkcj&#38;#281; &#60;code&#62;COUNT&#60;/code&#62; do takiej postaci, w której warto&#38;#347;&#38;#263; argumentu jest policzalna gdy pole &#34;status&#34; jest inne ni&#38;#380; &#39;completed&#39;, a niepoliczalna (czyli równa &#61;NULL&#61;) w przeciwnym wypadku. Wyra&#38;#380;enie &#60;pre&#62; status !&#38;#61; &#38;#39;completed&#38;#39; OR NULL &#60;/pre&#62; spe&#38;#322;nia te za&#38;#322;o&#38;#380;enia poniewa&#38;#380; przyjmuje jedn&#38;#261; z dwóch warto&#38;#347;ci: &#60;code&#62;TRUE&#60;/code&#62; dla pola &#34;status&#34; ró&#38;#380;nego od &#39;completed&#39;, albo &#60;code&#62;NULL&#60;/code&#62; w przeciwnym wypadku. &#60;p /&#62; Ostatecznie zapytanie zwracajace identyfikator procesu wraz z ilo&#38;#347;ci&#38;#261; zada&#38;#324; przyporzadkowanych do tego procesu, takich które nie zosta&#38;#322;y jeszcze zako&#38;#324;czone wygl&#38;#261;da tak: &#60;pre&#62; SELECT id&#38;#95;process, COUNT(status !&#38;#61; &#38;#39;completed&#38;#39; OR NULL) FROM task GROUP BY id&#38;#95;process; &#60;/pre&#62; &#60;p /&#62; &#38;#346;liczne, prawda? &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-02-14T22:08:00Z</dc:date>
 <dc:subject>MySQL</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry2">
 <title>Dlaczego CVS ssie&#8230;</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry2</link>
 <description> &#60;p /&#62;W gruncie rzeczy tekst ma by&#38;#263; o tym dlaczego SVN jest lepszym wyborem w przypadku repozytorium pakietów. Swoje przemy&#38;#347;lenia opieram na bez ma&#38;#322;a trzy i pó&#38;#322; rocznym do&#38;#347;wiadczeniu z repozytorium &#60;a class&#61;&#34;natExternalLink&#34; target&#61;&#34;&#95;blank&#34; href&#61;&#34;http://svn.pld-freebsd.org/svn/packages&#34;&#62;http://svn.pld-freebsd.org/svn/packages&#60;/a&#62;, dostepnym równiez przez ViewCVS: &#60;a class&#61;&#34;natExternalLink&#34; target&#61;&#34;&#95;blank&#34; href&#61;&#34;http://svn.pld-freebsd.org/cgi-bin/viewsvn/&#34;&#62;http://svn.pld-freebsd.org/cgi-bin/viewsvn/&#60;/a&#62;. &#60;p /&#62; Struktura repozytorium ró&#38;#380;ni sie znacz&#38;#261;co od p&#38;#322;askiego modelu repozytorium stosowanego w PLD. W du&#38;#380;ym uproszczeniu wygl&#38;#261;da ona tak: &#60;p /&#62; &#60;pre&#62; packages  +- trunk  &#38;#124;    +- db  &#38;#124;    &#38;#124;    +- SOURCES  &#38;#124;    &#38;#124;    &#38;#124;    +- patch1.patch  &#38;#124;    &#38;#124;    &#38;#124;    +- patch2.patch  &#38;#124;    &#38;#124;    +- SPECS  &#38;#124;    &#38;#124;         +- db.spec  &#38;#124;    +- rpm  &#38;#124;         +- SOURCES  &#38;#124;         &#38;#124;    +- patch1.patch  &#38;#124;         &#38;#124;    +- patch2.patch  &#38;#124;         +- SPECS  &#38;#124;              +- rpm.spec  +- branches  &#38;#124;    +- rpm-4.1.1  &#38;#124;    &#38;#124;    +- db  &#38;#124;    &#38;#124;    &#38;#124;    +- SOURCES  &#38;#124;    &#38;#124;    &#38;#124;    &#38;#124;    +- patch1.patch  &#38;#124;    &#38;#124;    &#38;#124;    &#38;#124;    +- patch2.patch  &#38;#124;    &#38;#124;    &#38;#124;    +- SPECS  &#38;#124;    &#38;#124;    &#38;#124;         +- db.spec  &#38;#124;    &#38;#124;    +- rpm  &#38;#124;    &#38;#124;         +- SOURCES  &#38;#124;    &#38;#124;         &#38;#124;    +- patch1.patch  &#38;#124;    &#38;#124;         &#38;#124;    +- patch2.patch  &#38;#124;    &#38;#124;         +- SPECS  &#38;#124;    &#38;#124;              +- rpm.spec  &#38;#124;    +- rpm-4.4.1  &#38;#124;         +- db  &#38;#124;         &#38;#124;    +- SOURCES  &#38;#124;         &#38;#124;    &#38;#124;    +- patch1.patch  &#38;#124;         &#38;#124;    &#38;#124;    +- patch2.patch  &#38;#124;         &#38;#124;    +- SPECS  &#38;#124;         &#38;#124;         +- rpm.spec  &#38;#124;         +- rpm  &#38;#124;              +- SOURCES  &#38;#124;              &#38;#124;    +- patch1.patch  &#38;#124;              &#38;#124;    +- patch2.patch  &#38;#124;              +- SPECS  &#38;#124;                   +- rpm.spec  +- tags       +- Ac-rpm-4.4.1-2            +- db            &#38;#124;    +- SOURCES            &#38;#124;    &#38;#124;    +- patch1.patch            &#38;#124;    &#38;#124;    +- patch2.patch            &#38;#124;    +- SPECS            &#38;#124;         +- rpm.spec            +- rpm                 +- SOURCES                 &#38;#124;    +- patch1.patch                 &#38;#124;    +- patch2.patch                 +- SPECS                      +- rpm.spec &#60;/pre&#62; &#60;p /&#62; Jak wida&#38;#263; na powy&#38;#380;szym schemacie dla ka&#38;#380;dego pakietu zosta&#38;#322;a wydzielona osobna ga&#38;#322;&#38;#261;&#38;#378; w drzewie repozytorium. Taki zabieg, poza uporzadkowaniem i separacj&#38;#261; sk&#38;#322;adników poszczególnych pakietów, pozwala na rozdzielenie przestrzeni nazw plików w pakietach. A co za tym idzie, powoduje &#38;#380;e np. nazwa patcha mo&#38;#380;e by&#38;#263; dowolna dla zadanego pakietu i nie istnieje konieczno&#38;#347;&#38;#263; pilnowania &#38;#380;eby nazwy &#38;#322;atek dla ró&#38;#380;nych pakietów nie kolidowa&#38;#322;y ze sob&#38;#261;. W szczególno&#38;#347;ci, nie ma potrzeby narzucania nazewnictwa tych &#38;#322;atek do postaci &#60;code&#62;nazwa&#95;pakietu-nazwa&#95;&#38;#322;atki.patch&#60;/code&#62; jak ma to miejsce w PLD. &#60;p /&#62; &#38;#346;ciagni&#38;#281;cie ca&#38;#322;ego drzewa &#60;code&#62;trunk&#60;/code&#62; mo&#38;#380;e wygl&#38;#261;da nastepuj&#38;#261;co: &#60;pre&#62; svn checkout http://svn.pld-freebsd.org/svn/packages/trunk packages &#60;/pre&#62; Natomiast &#38;#347;ciagniecie i kompilacja pakietu db z takiego repozytorium wygl&#38;#261;da tak: &#60;pre&#62; $ cd ~/packages $ svn checkout http://svn.pld-freebsd.org/svn/packages/trunk/db $ cd db/SPECS $ rpmbuild -ba --define &#38;#34;&#38;#95;topdir ~/packages/db&#38;#34; db.spec &#60;/pre&#62; Powy&#38;#380;szy przyk&#38;#322;ad nie uwzgl&#38;#281;dnia oczywi&#38;#347;cie &#38;#347;ciagni&#38;#281;cia ewentualnych tarballi z distfiles. &#60;p /&#62; Drzewiastej strukturze repozytorium mo&#38;#380;na zarzuca&#38;#263; niemozliwo&#38;#347;&#38;#263; &#34;przegrepowania&#34; wszystkich specy, albo wprowadzania masowych zmian w specach. Wad&#38;#281; t&#38;#261; mo&#38;#380;na wyeliminowa&#38;#263; u&#38;#380;ywaj&#38;#261;c polecenia &#60;code&#62;find&#60;/code&#62;. I tak odpowiednikiem &#60;code&#62;grep jakisstring &#42;&#60;/code&#62; w katalogu SPECS jest  &#60;pre&#62; find . -name &#38;#34;&#38;#42;.spec&#38;#34; -exec grep -H jakisstring {} \; &#60;/pre&#62;  w katalogu packages/trunk. &#60;p /&#62; Praca z takim repozytorium nie jest du&#38;#380;o bardziej skomplikowana, ni&#38;#380; z p&#38;#322;askim repozytorium CVSowym. A prawie zupe&#38;#322;nie nie ró&#38;#380;ni si&#38;#281; gdy u&#38;#380;yjemy odpowiednio zmodyfikowanego skryptu &#60;a class&#61;&#34;natExternalLink&#34; target&#61;&#34;&#95;blank&#34; href&#61;&#34;http://svn.pld-freebsd.org/svn/admin/devel-scripts/trunk/builder&#34;&#62;builder&#60;/a&#62;. &#60;p /&#62; Kolejn&#38;#261; przewag&#38;#261; nad CVSem s&#38;#261; &#34;atomowe&#34; commity. Polega to na tym, &#38;#380;e po wprowadzeniu zmian z pakiecie, zmiany s&#38;#261; przekazywane do repozytorium jednym poleceniem, np. &#60;pre&#62; $ cd ~/packages $ svn commit -m &#38;#34;- updated to 4.5\n- updated patch1 patch&#38;#34; db &#60;/pre&#62; Co najwa&#38;#380;niejsze, takie dokonanie zmiany jest traktowane w repozytorium jako integralna ca&#38;#322;o&#38;#347;&#38;#263; identyfikowana numerem rewizji w repozytorium, a nie jest z&#38;#322;o&#38;#380;eniem zmian w poszczególnych plikach. Co za tym idzie mo&#38;#380;emy &#38;#322;atwo odszuka&#38;#263;, &#38;#380;e np. update db do wersji 4.5 poci&#38;#261;gne&#38;#322;o za sob&#38;#261; usuniecie pliku SOURCES/patch1.patch. W CVSie, niestety, ka&#38;#380;da tego typu zmiana jest w repozytorium traktowana osobno, dlatego du&#38;#380;o wiecej pracy kosztuje odnalezienie jak zmieni&#38;#322;y si&#38;#281; pozosta&#38;#322;e pliki pakietu, podczas okre&#38;#347;lonej zmiany pliku spec. Takie zachowanie CVSa jest dla mnie szczególnie uci&#38;#261;&#38;#380;liwe, poniewa&#38;#380; w swojej pracy intensywnie &#38;#347;ledz&#38;#281; zmiany w repozytorium PLD w celu nanoszenia niektórych z nich w PLD/FreeBSD. &#60;p /&#62; Atomowo&#38;#347;&#38;#263; commitów w repozytorium pociaga za sob&#38;#261; równie&#38;#380; zwiekszenie przejrzysto&#38;#347;ci commitlogów, dzi&#38;#281;ki temu s&#38;#261; one generowane jako pojedynczy mail, a nie dwa osobne maile zawierajace zmiany odpowiednio, w module SPECS i w module SOURCES. &#60;p /&#62; Kolejna przewag&#38;#261; Subversion jest mo&#38;#380;liwo&#38;#347;&#38;#263; przenoszenia plików (z zachowaniem historii zmian) z poziomu u&#38;#380;ytkownika. W CVSie taka operacja wymaga zaanga&#38;#380;owania administratora repozytorium, który musi dokona&#38;#263; takiej zmiany po stronie serwera. &#60;p /&#62; Dla niektórych kolejn&#38;#261; wad&#38;#261; SVNa mo&#38;#380;e by&#38;#263; niemo&#38;#380;liwo&#38;#347;&#38;#263; generowania sekcji &#60;code&#62;&#37;changelog&#60;/code&#62;, tak jak ma to miejsce w chwili obecnej w PLD. Wed&#38;#322;ug mnie u&#38;#380;ywanie &#60;code&#62;$Log$&#60;/code&#62; do generowania loga to &#38;#347;rednio dobry pomys&#38;#322;, tym bardziej, &#38;#380;e taki log nie jest tworzony w formacie przyjmowanym przez RPMa. S&#38;#322;uszniej by&#38;#322;oby gdyby &#60;code&#62;&#37;changelog&#60;/code&#62; by&#38;#322; generowany z loga SVNa na source-builderach w formacie natywnym dla RPMa. &#60;p /&#62; Na koniec wypada jeszcze wspomnie&#38;#263; o &#38;#322;atwo&#38;#347;ci instalacji serwera Subversion. Po raz pierwszy zaje&#38;#322;o mi to kilkana&#38;#347;cie minut, podczas gdy na instalacj&#38;#281; serwera CVSu straci&#38;#322;em kilka(na&#38;#347;cie) godzin. &#60;p /&#62; </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-02-06T14:11:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment0">
 <title>JohnDoe replies on ""</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment0</link>
 <description> &#60;p /&#62;Tylko test </description>
 <dc:creator>JohnDoe</dc:creator>
 <dc:date>2007-01-31T21:24:25Z</dc:date>
 <dc:subject></dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/JohnDoe">
 <rdf:value>JohnDoe</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> 
<item rdf:about="http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry1">
 <title>In the Beginning&#8230; umar&#322; blog, niech &#380;yje blog</title>
 <link>http://wiki.pld-freebsd.org/bin/view/Blog/BlogEntry1</link>
 <description> &#60;p /&#62;Poprzedni blog umar&#38;#322; &#38;#347;merci&#38;#261; naturaln&#38;#261;. Nie &#38;#380;a&#38;#322;uj&#38;#281;. Z pocz&#38;#261;tku NewsBruiser nawet mi si&#38;#281; podoba&#38;#322;, zapewne dlatego &#38;#380;e pierwsze wra&#38;#380;enie pochodzi&#38;#322;o ze sfery u&#38;#380;ytkownika. Pó&#38;#378;niej zacz&#38;#281;&#38;#322;y si&#38;#281; problemy, a to jaka&#38;#347; ikona si&#38;#281; nie wy&#38;#347;wietla, a to nie mam kontroli nad layoutem. Dlaczego? Nie wiem, i nawet nie chce mi si&#38;#281; tego analizowa&#38;#263;. Po prostu organicznie nie cierpi&#38;#281; Pythona. &#60;p /&#62; Tak si&#38;#281; z&#38;#322;o&#38;#380;y&#38;#322;o &#38;#380;e powzi&#38;#261;&#38;#322;em noworoczne postanowienie, &#38;#380;e w ko&#38;#324;cu zaczn&#38;#281; pracowa&#38;#263; nad serwisem WWW dla PLD/FreeBSD. Niech &#38;#347;wiat si&#38;#281; dowie &#38;#380;e istnieje co&#38;#347; takiego jak PLD/FreeBSD, a nu&#38;#380; kto&#38;#347; sie zlituje i pomo&#38;#380;e, albo jeszcze lepiej przekona, &#38;#380;e to nie ma sensu. Jak to z postanowieniami bywa, zacz&#38;#261;&#38;#322;em je realizowa&#38;#263; z &#34;niewielkim&#34; opó&#38;#378;nieniem. &#60;p /&#62; Poniewa&#38;#380; wszelkiego rodzaju Wiki s&#38;#261; obecnie na topie (czyt. trendi, albo dzezi, albo je&#38;#347;li kto&#38;#347; woli kaczi), tam te&#38;#380; postanowi&#38;#322;em szuka&#38;#263; silnika do serwisu. Drugim wa&#38;#380;nym kryterium jakie powinien spe&#38;#322;nia&#38;#263; silnik by&#38;#322;o to &#38;#380;e musia&#38;#322; by&#38;#263; napisany w Jedynym S&#38;#322;usznym J&#38;#281;zyku Skryptowym(TM) czyli perlu. W&#38;#347;ród tak ograniczajacych kryteriów jedynym godnym uwagi silnikiem okaza&#38;#322; sie TWiki. I tak zosta&#38;#322;o. &#60;p /&#62; Przy okazji przewalania dokumentacji TWiki okaza&#38;#322;o si&#38;#281;, &#38;#380;e posiada od rozbudowany system wtyczek, w&#38;#347;ród których jest jedna zmieniaj&#38;#261;ca dzia&#38;#322; TWiki w do&#38;#347;&#38;#263; zaawansowany system blogowy. Po drobnych problemach z instalacj&#38;#261;, system stan&#38;#261;&#38;#322; i zapad&#38;#322;a decyzja o wskrzeszeniu bloga. I oto jest. &#60;p /&#62; Do mojego prywatnego TODO pow&#38;#281;drowa&#38;#322;y dodatkowo: spolszczenie systemu do u&#38;#380;ywalnej postaci i stworzenie jakiego&#38;#347; &#38;#347;licznego layoutu. Do tego drugiego zatrudni&#38;#322;bym którego&#38;#347; ze znajomych web-grafików. Zobaczymy. </description>
 <dc:creator>TomaszTrojanowski</dc:creator>
 <dc:date>2007-01-31T14:19:00Z</dc:date>
 <dc:subject>PLDFreeBSD</dc:subject> <dc:contributor>
 <rdf:Description link="http://wiki.pld-freebsd.org/bin/view/Main/TomaszTrojanowski">
 <rdf:value>TomaszTrojanowski</rdf:value>
 </rdf:Description>
 </dc:contributor>
 </item> </rdf:RDF>