<?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-6836763300070903809</id><updated>2012-02-07T15:28:22.044-08:00</updated><category term='Tails'/><category term='pydev'/><category term='Visual Studio'/><category term='IVONA'/><category term='chromium os'/><category term='postanowienie'/><category term='web2py.'/><category term='selenium'/><category term='Open XML'/><category term='bobo'/><category term='bottle'/><category term='programowanie'/><category term='pycon'/><category term='drupal8'/><category term='chrome'/><category term='ASP.NET'/><category term='www'/><category term='powershell'/><category term='git'/><category term='artykuły'/><category term='nginx'/><category term='phantomjs'/><category term='rails'/><category term='turbogears'/><category term='makefile'/><category term='nosql'/><category term='freebsd'/><category term='hg'/><category term='tlug'/><category term='drupal7'/><category term='geany'/><category term='java'/><category term='font-face'/><category term='arch'/><category term='Javascript'/><category term='__new__'/><category term='Opera'/><category term='music player'/><category term='form alchemy'/><category term='przeglądarki'/><category term='django'/><category term='wordpress'/><category term='intercity'/><category term='enkapsulacja'/><category term='slots'/><category term='OpenSolaris'/><category term='Opera Unite'/><category term='socket'/><category term='Agile'/><category term='pyramid'/><category term='drupal6'/><category term='RedCar'/><category term='CMS'/><category term='OOP'/><category term='mp3'/><category term='IIS7'/><category term='fontforge'/><category term='ubuntu'/><category term='V8'/><category term='7digital'/><category term='przeciążanie'/><category term='google'/><category term='kodowanie'/><category term='go-lang'/><category term='ja'/><category term='sphinx'/><category term='gry przygodowe'/><category term='tir'/><category term='hermetyzacja'/><category term='Chrome frame'/><category term='gadget'/><category term='słuchawki'/><category term='gitolite'/><category term='merb'/><category term='dotpay'/><category term='lua'/><category term='WHATWG'/><category term='mplayer'/><category term='continouse integration'/><category term='Scala'/><category term='coffee script'/><category term='webkit'/><category term='nokia'/><category term='plugin'/><category term='shell'/><category term='wsgi'/><category term='zodb'/><category term='inżynieria oprogramowania'/><category term='overloading'/><category term='IRC'/><category term='sproutcore'/><category term='sieć'/><category term='przemyślenia'/><category term='usability'/><category term='expressjs'/><category term='noop'/><category term='Książki'/><category term='extensions'/><category term='Lift'/><category term='lastfm'/><category term='WebForms2'/><category term='weechat'/><category term='C++0x'/><category term='scm'/><category term='ppcg'/><category term='gtk'/><category term='polimorfizm'/><category term='PyS60'/><category term='microframework'/><category term='netbeans'/><category term='edytor'/><category term='PHP'/><category term='wireless'/><category term='CSS3'/><category term='Ruby'/><category term='netrc'/><category term='gcc'/><category term='film'/><category term='jruby'/><category term='starcraft2'/><category term='gmail'/><category term='ftp'/><category term='machinarium'/><category term='koncert'/><category term='winzip'/><category term='lighttpd'/><category term='OJP'/><category term='javasript'/><category term='clojure'/><category term='serwery'/><category term='IE9'/><category term='operatory'/><category term='magisterka'/><category term='kino'/><category term='starcraft'/><category term='firefox'/><category term='base64'/><category term='fabric'/><category term='exaile'/><category term='haskell'/><category term='administracja'/><category term='favicon'/><category term='polyglot persistence'/><category term='dpkg'/><category term='vim'/><category term='eclipse'/><category term='funkcje'/><category term='zdjęcia'/><category term='WinAPI'/><category term='czcionki'/><category term='laptop'/><category term='virtualbox'/><category term='Pismo Święte'/><category term='dziedziczenie'/><category term='fastcgi'/><category term='wbk'/><category term='MySQL'/><category term='ODF'/><category term='grafika'/><category term='konsola'/><category term='czas'/><category term='IPSO'/><category term='UML'/><category term='walt disney'/><category term='utf-8'/><category term='pkp'/><category term='rvm'/><category term='bash'/><category term='swt'/><category term='pilot'/><category term='Open Office'/><category term='kolej'/><category term='napisy'/><category term='XHTML2'/><category term='butterfly effect'/><category term='chromeos'/><category term='werkzeug'/><category term='sinatra'/><category term='screenpresso'/><category term='amarok'/><category term='jython'/><category term='w3c'/><category term='vista'/><category term='midnight commander'/><category term='parametry'/><category term='node.js'/><category term='gallery'/><category term='MVC'/><category term='grub'/><category term='XP'/><category term='redis'/><category term='look and feel'/><category term='podróż'/><category term='AJAX'/><category term='progamy'/><category term='skype'/><category term='wielki post'/><category term='debugowanie'/><category term='memcache'/><category term='C++'/><category term='bank'/><category term='łowcy smoków'/><category term='python'/><category term='wiersz'/><category term='windows'/><category term='glboard'/><category term='odt'/><category term='HTML5'/><category term='vps'/><category term='klasy'/><category term='linux'/><category term='apache'/><category term='mongrel2'/><category term='suexec'/><category term='Microsoft Office'/><category term='Internet'/><category term='internet explorer'/><category term='frameworki'/><category term='cauchdb'/><category term='sqlalchemy'/><category term='pks'/><category term='htc'/><category term='irssi'/><category term='webhosting.pl'/><category term='VB'/><category term='font'/><category term='blog'/><category term='kompresja'/><category term='mongodb'/><category term='pylons'/><category term='C#'/><category term='bluetooth'/><category term='isapi-wsgi'/><category term='powłoka'/><category term='blogger'/><category term='web2.0'/><category term='matrix'/><category term='wordpad'/><category term='prawo'/><category term='play'/><category term='książką'/><category term='drupal'/><category term='chromium'/><category term='windows7'/><category term='buildy'/><category term='mbank'/><category term='SVN'/><category term='capistrano'/><category term='mercurial'/><category term='LaTeX'/><category term='zip'/><title type='text'>Homoinformaticus Live</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default?start-index=101&amp;max-results=100'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>234</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8660244428149770571</id><published>2011-11-19T03:44:00.000-08:00</published><updated>2011-11-19T23:39:03.818-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Scala - scratch the surface</title><content type='html'>&lt;div style="text-align: justify;"&gt;Nareszcie! Trafiłem na naprawdę fajne wprowadzenie do języka Scala, które ostatecznie dało mi posmak tego języka, zobligowało do &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;za instalowania&lt;/span&gt; &lt;a href="http://www.scala-ide.org/"&gt;Scala IDE&lt;/a&gt; na komputerze i napisania kilku prostych klas, oraz fragmentu kodu.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Mowa oczywiście o &lt;a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees"&gt;Scala for Java &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Refugees&lt;/span&gt;&lt;/a&gt; &lt;a href="http://twitter.com/#!/djspiewak"&gt;Daniela Śpiewaka&lt;/a&gt;, żałuję tylko, że nie trafiłem na to trzy lata temu (wpisy są z 2008 roku), ale może to była też kwestia dojrzewania do tego języka? Nie wiem. Wiem jedno, że język jest naprawdę fajny, chociaż w przeciwieństwie do &lt;a href="http://www.ruby-lang.org/"&gt;Rubego&lt;/a&gt; - to co napiszę zdarza się nie działać.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Język jest ogromny i jego poznawanie może mieć wyłącznie charakter stopniowy. Jest tego po prostu za dużo. Zresztą, każdy język programowania ma obszary, których nigdy nie potrzebowałeś, nie używałeś - &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; ma ich po prostu więcej.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Na razie jednak zaczynam pisać projekt w Rails-ach, a w świecie JVM przygotowuję się do Certyfikatu wydawanego kiedyś przez Sun, a teraz Oracle, dla programistów Java. Tak więc "mieszanie" sobie Scali z Javą może być niebezpieczne na tym etapie. Do następnego razu.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8660244428149770571?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8660244428149770571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8660244428149770571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8660244428149770571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8660244428149770571'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/11/scala-scratch-surface.html' title='Scala - scratch the surface'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7396859236404540302</id><published>2011-11-17T12:25:00.000-08:00</published><updated>2011-11-17T12:56:01.122-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='phantomjs'/><category scheme='http://www.blogger.com/atom/ns#' term='RedCar'/><title type='text'>PhantomJS i Ruby - czyli przygody małe i duże</title><content type='html'>No więc stało się. Jestem programistą Javy. I co z tego? A no trzeba w domu jakoś odreagować.&lt;div&gt;Na pierwszy ogień poszedł &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; i to nie byle jaki jak &lt;b&gt;1.9.3-p0&lt;/b&gt;. Windowsowa paczuszka ściągnięta wprost z &lt;a href="http://rubyinstaller.org/"&gt;RubyInstaller&lt;/a&gt; ślicznie zadomowiła się w moim systemie operacyjnym, dając mi nawet w trakcie instalacji dodać poleceni &lt;i&gt;ruby&lt;/i&gt; do ścieżki systemowej.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No ale nie o Rube-go chodzi tylko o chęć napisania jakiegoś drobiazgu z meta-programowaniem. No więc potrzebny jest edytor. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;gem install redcar&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;redcar install&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;redcar&lt;/span&gt;&lt;/blockquote&gt;I moim pięknym oczom ukazał się turbo edytor &lt;a href="http://redcareditor.com/"&gt;RedCar&lt;/a&gt; - i od razu zrezygnowałem nawet z myśli o płaceniu za &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; na Mac-u. Napisałem sobie bardzo prosty program, który pozwolę sobie dumnie nazwać klient "REST". Tak naprawdę to prawie na jedno by wyszło jakby podziedziczył po Net::HTTP, ale że miało być "meta-programowanie" to wyszło tak:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;require 'net/http'&lt;br /&gt;require 'uri'&lt;br /&gt;&lt;br /&gt;class REST&lt;br /&gt;def self.method_missing(m, *args, &amp;amp;block)&lt;br /&gt;uri = URI(args[0])&lt;br /&gt;Net::HTTP.start(uri.host, uri.port) do |http|&lt;br /&gt;puts "Calling #{m} REST call."&lt;br /&gt;return http.send(m.downcase.to_sym, uri.path)&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;res = REST.GET("http://www.google.pl/")&lt;br /&gt;puts res.body&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;Nikt, nie mówił, że jest się czym chwalić, ale coś mnie tchnęło, żeby pobrać (a co) zawartość wyżej wymienionej strony w &lt;a href="http://www.phantomjs.org/"&gt;PhantomJS&lt;/a&gt;. Trwa to wieki i gdyby tak działała przeglądarka to pewnie zrezygnowałbym z Internetu, albo kazał, za korzystanie z niego, sobie płacić, ale ... na szczęście &lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt; ładuje &lt;a href="http://www.webkit.org/"&gt;WebKit&lt;/a&gt; raz a nie za każdym razem gdy otwieram zakładkę - więc da się żyć. Na &lt;a href="http://code.google.com/p/phantomjs/"&gt;stronie projektu&lt;/a&gt;, gdy napisałem już skrypt w JavaScript zauważyłem, że mogę też podawać skrypty w &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt; pominę więc moje wypociny w JS i podam odrazu wersję Coffee, a jak interesuje Cię co napisałem w JS to wklej sobie poniższą zawartość na stronie &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;Try CoffeeScript&lt;/a&gt; i będziesz wiedział.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;blackqoute&gt;page = new WebPage()&lt;br /&gt;&lt;br /&gt;if phantom.args.length == 0&lt;br /&gt;console.log 'Usage: google.coffee some-url'&lt;br /&gt;phantom.exit()&lt;br /&gt;else&lt;br /&gt;t = Date.now()&lt;br /&gt;address = phantom.args[0]&lt;br /&gt;page.open address, (status) -&amp;gt;&lt;br /&gt;  if status != 'success'&lt;br /&gt;      console.log 'FAIL to load the address'&lt;br /&gt;  else&lt;br /&gt;      t = Date.now() - t&lt;br /&gt;      console.log 'Loading time ' + t + ' msec'&lt;br /&gt;      console.log 'Page content is \n' + page.evaluate () -&amp;gt;&lt;br /&gt;          document.documentElement.innerHTML&lt;br /&gt;  phantom.exit()&lt;/blackqoute&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Edytor kodu na &lt;a href="http://www.blogger.com/home"&gt;Blogger&lt;/a&gt; jak zwykle daje ciała nie wspierając wstawek kodu źródłowego, ale co tam. Najgorsze, że &lt;a href="http://www.blogger.com/redcareditor.com"&gt;RedCar&lt;/a&gt; nie ma wsparcia dla &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt;, ale może się dorobi jak skończy być Alphą. No nic, czas kończyć. Na dziś starczy już tego dobrego wracamy do &lt;a href="http://www.mindview.net/Books/TIJ/"&gt;Thinking in Java&lt;/a&gt;, którego autor i tak co 100 zdanień kończy stwierdzeniem w stylu &lt;i&gt;"Java to ogromny krok na drodze postępu w tej dziedzinie, ale Python i tak robi to lepiej."&lt;/i&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;P.S. Moim ogromnym odkryciem w Ruby było odkrycie, że każdy operator to metoda. Kiedyś nie mogłem znaleźć w dokumentacji co dokładnie robi ~= (czy tam =~) bo szukałem jakiegoś działu dokumentacji &lt;a href="http://ruby-doc.org/"&gt;Ruby-Doc&lt;/a&gt;, który definiowałby operatory zamiast sprawdzić metodę =~ &lt;a href="http://ruby-doc.org/core-1.9.3/String.html"&gt;klasy String&lt;/a&gt; albo &lt;a href="http://ruby-doc.org/core-1.9.3/Regexp.html"&gt;RegExp&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/6836763300070903809-7396859236404540302?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7396859236404540302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7396859236404540302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7396859236404540302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7396859236404540302'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/11/wieczor-peen-przygod.html' title='PhantomJS i Ruby - czyli przygody małe i duże'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4653911715851332922</id><published>2011-09-16T22:56:00.000-07:00</published><updated>2011-09-18T09:10:10.635-07:00</updated><title type='text'>Sposób na zrywane sesje SSH</title><content type='html'>&lt;div style="text-align: justify;"&gt;Nie wiem dlaczego, ale albo mój router, albo mój dostawca (UPC) wciąż zrywa nieaktywne sesje SSH. Nie ma mowy o zostawieniu &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;Puttego&lt;/a&gt; w tle choćby na kwadrans. Po kilku minutach okno informuje mnie iż połączenie zostało zerwane i muszę wracać do mojej pracy ponownie. Frustrujące.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jest na to sposób. Zostawienie otwartego w konsoli &lt;a href="http://www.gnu.org/s/screen/"&gt;Screena&lt;/a&gt;, który na dolnym pasku wyświetla godzinę. Tak więc wpis:&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;caption always "%`$USER%`@%H: %{kg} %L=%-Lw%45&amp;gt;%{yk}%n%f* %t%{-}%+Lw%-0&amp;lt; %= %{yk}%c%{kg} load:%l"&lt;/span&gt;&lt;/blockquote&gt;w pliku &lt;b&gt;~/.screenrc&lt;/b&gt;&amp;nbsp;właściwie załatwia sprawę. Kwestia startowania sesji podczas każdego logowania. Można to załawić dodając na końcu pliku &lt;b&gt;~/.bashrc&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# Start or resume screen&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;if [[ -n "`screen -ls | egrep '\.default(.*)(Detached)'`" ]]; then&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; screen -r default&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;elif [[ -n "`screen -ls | egrep '\.default(.*)(Attached)'`" ]]; then&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; false&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; screen -S default&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;fi&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4653911715851332922?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4653911715851332922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4653911715851332922' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4653911715851332922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4653911715851332922'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/09/sposob-na-zrywane-sesje-ssh.html' title='Sposób na zrywane sesje SSH'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5212451889007482061</id><published>2011-09-12T11:28:00.000-07:00</published><updated>2011-09-12T11:28:41.728-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='htc'/><category scheme='http://www.blogger.com/atom/ns#' term='play'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Internet i MMSy w Play na HTC Dream</title><content type='html'>Teoretycznie skonfigurowanie telefonu w play to wysłanie SMSa o treści "play" na numer 9999. Jeżeli posiadasz HTC nie jest to tak proste. Na moim HTC Dream wymagało to podjęcia następujących kroków:&lt;br /&gt;&lt;i&gt;Menu &amp;gt; Ustawienia &amp;gt; Opcje bezprzewodowe &amp;gt; Sieci komórkowe &amp;gt; &amp;nbsp;Punkty Dostępowe &amp;gt; Menu &amp;gt; Nowa nazwa APN&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Internet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nazwa: &lt;b&gt;Internet&lt;/b&gt;&lt;/li&gt;&lt;li&gt;APN: &lt;b&gt;internet&lt;/b&gt;&lt;/li&gt;&lt;li&gt;MCC: &lt;b&gt;260&lt;/b&gt;&lt;/li&gt;&lt;li&gt;MNC: &lt;b&gt;06&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Typ APN: &lt;b&gt;default&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;MMS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nazwa: &lt;b&gt;MMS&lt;/b&gt;&lt;/li&gt;&lt;li&gt;APN: &lt;b&gt;mms&lt;/b&gt;&lt;/li&gt;&lt;li&gt;MMSC: &lt;b&gt;http://10.10.28.164/mms/wapenc&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Proxy dla wiadomości MMS: &lt;b&gt;10.10.25.5&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Port MMS: &lt;b&gt;8080&lt;/b&gt;&lt;/li&gt;&lt;li&gt;MCC:&lt;b&gt;260&lt;/b&gt;&lt;/li&gt;&lt;li&gt;MNC: &lt;b&gt;06&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Typ APN: &lt;b&gt;mms&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Po zapisaniu uruchom ponownie telefon.&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5212451889007482061?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5212451889007482061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5212451889007482061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5212451889007482061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5212451889007482061'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/09/internet-i-mmsy-w-play-na-htc-dream.html' title='Internet i MMSy w Play na HTC Dream'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4554632660542532991</id><published>2011-09-03T00:26:00.000-07:00</published><updated>2011-09-03T02:27:25.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><category scheme='http://www.blogger.com/atom/ns#' term='rvm'/><title type='text'>Ruby On Rails 3.1 - dzień pierwszy</title><content type='html'>&lt;div style="text-align: justify;"&gt;Zawsze uważałem, że najlepszy poradnik, to zbiór wskazówek pisanych przez początkującego, nie koniecznie zaś zapełniane przez mądrego człowieka annały, które jak na początek, mogą być za mądre. Równocześnie, najlepiej aby początkujący miał już doświadczenie z innymi podobnymi zagadnieniami &amp;nbsp;jednak w danej technologii był początkujący. Taki układ daje duże szanse, że poradnik będzie profesjonalny, pisany prostym językiem i zrozumiały dla maluczkich, którzy oczekują prowadzenia krok po kroku. Mam nadzieję, że moje wpisy o Ruby On Rails 3.1 takie właśnie będą.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Dlaczego?&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Mam za sobą już, od jakiegoś czasu, &lt;a href="http://railsforzombies.org/"&gt;Rails for Zombies&lt;/a&gt;, czytałem o &lt;a href="http://rubyonrails.pl/"&gt;Ruby On Rails&lt;/a&gt;&amp;nbsp;i jeszcze nigdy nie spotkałem się z osobą, która zaczęłaby kurs Railsów od &lt;a href="https://rvm.beginrescueend.com/"&gt;RVM&lt;/a&gt;. Podstawy podstaw - jak na mój gust.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Gdy piszesz jakikolwiek program, aplikację musisz zdecydować się na dwie rzeczy: wersję języka programowania i wersję pozostałych bibliotek, które używasz. U mnie to wygląda tak: zaglądam na stronę języka programowania (w tym przypadku języka &lt;a href="http://www.ruby-lang.org/pl/"&gt;Ruby&lt;/a&gt;), zaglądam na stronę biblioteki (w tym przypadku &lt;a href="http://rubyonrails.pl/"&gt;Railsów&lt;/a&gt;) i nakręcam się na napisanie aplikacji w najnowszej wersji, która wprowadza najświeższe udogodnienia, nowości, nowatorskie technologie i wszystko co sprawia, że bycie geekiem jest piękne i pełne wrażeń jak przejażdżka górską kolejką w parku "&lt;span class="Apple-style-span" style="background-color: #f9f9f9; line-height: 19px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Six Flags Great Adventure"&lt;/span&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Później przychodzi faza druga, która nazywa się "sprawdźmy co jest na serwerze" i ta przynosi znacznie więcej rozczarowań, niż radości dopóki nie używasz &lt;a href="http://www.archlinux.org/"&gt;ArchLinux&lt;/a&gt;&amp;nbsp;lub nie jesteś twórcą biblioteki, której właśnie zamierzasz użyć. Wtedy klniesz pod nosem, że "przecież administrator mógł przejść na &lt;a href="http://www.debian.org/releases/sid/"&gt;sida&lt;/a&gt;" i jakbyś tylko miał uprawnienia użytkownika &lt;i&gt;root&lt;/i&gt;!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I tutaj właśnie objawia się piękno&amp;nbsp;&lt;a href="https://rvm.beginrescueend.com/"&gt;RVM&lt;/a&gt;. Pozwala ono bowiem &lt;b&gt;bez uprawnienia&amp;nbsp;super-użytkownika&lt;/b&gt;&amp;nbsp;zainstalować dowolne wersje języka&amp;nbsp;&lt;a href="http://www.ruby-lang.org/pl/"&gt;Ruby&lt;/a&gt;, w locie podmieniać interpreter oraz wersje używanych bibliotek, które w wielu różnych kombinacjach mogą koegzystować w wirtualnych środowiskach zwanych &lt;i&gt;gemsetami&lt;/i&gt;. Wszystko bez wychodzenia poza katalog domowy.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://rvm.beginrescueend.com/"&gt;Ruby Version Manager&lt;/a&gt;&amp;nbsp;to nic innego jak współcześnie bardzo ważna tendencja do "usamodzielniania" środowiska developerskiego od bibliotek leżących w systemie. W czasach kiedy powierzchnia dyskowa tanieje, wszędzie &lt;a href="http://www.google.com/enterprise/cloud/appengine/pricing.html"&gt;poza Google App Engine&lt;/a&gt;,&amp;nbsp;trzymanie kolejnej kopii interpretera języka Ruby czy kilkunastu wersji&amp;nbsp;&lt;a href="http://rubyonrails.pl/"&gt;Railsów&lt;/a&gt;&amp;nbsp;aż tak bardzo nie boli, a niesie ze sobą wiele korzyści. Po pierwsze: nie jesteśmy uzależnienie od tego jaka wersja biblioteki jest w systemie. Możemy używać aplikacji dokładnie w takich wersjach w jakich są nam potrzebne. Raczej nie nam, tylko projektowi. Po drugie: bez względu na aktualizacje systemu operacyjnego i znajdujących się w nim paczek możemy zostać przy starszej wersji. To bardzo użyteczne, szczególnie dla administratorów, którym widok wersji Rubego 1.9 przychodzącej wraz z najnowszym &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;apt-get update &amp;amp;&amp;amp; apt-get upgrade&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;nie podnosi ciśnienia na myśl o niekończącym się horrorze zgłaszających się falami użytkowników, którym "strona nie działa". Jak widać korzyści są obopólne - nawet&amp;nbsp;&lt;/span&gt;portfel&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;wygląda jakby przeszedł na dietę.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Jak?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Instalacja&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Instalacja i włączenie &amp;nbsp;&lt;a href="https://rvm.beginrescueend.com/"&gt;RVM&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;to wykonanie polecenia&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Courier New', Courier, monospace; line-height: 22px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;bash &amp;lt; &amp;lt;(curl -s https://rvm.beginrescueend.com/install/rvm)&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="line-height: 22px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;i wrzucenie do &lt;i&gt;.bashrc&lt;/i&gt; startowania naszego środowiska&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small; line-height: 22px; white-space: pre;"&gt;echo '[[ -s "/home/user/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; source "/home/user/.rvm/scripts/rvm"  # This loads RVM into a shell session.' &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/blockquote&gt;Ascezą byłoby nie skorzystanie z uzupełniania składni w shellu, więc czeka nas jeszcze komenda:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;echo '&lt;span class="Apple-style-span" style="background-color: white; line-height: 22px; white-space: pre;"&gt;[[ -r $rvm_path/scripts/completion ]] &amp;amp;&amp;amp; . $rvm_path/scripts/completion' &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&amp;nbsp;Teraz możesz się&amp;nbsp;prze logować lub&amp;nbsp;pójść do Zoo albo odpalić komendę dla leniwych:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;. ~/.bashrc&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;i cieszyć się zainstalowanym &amp;nbsp;&lt;a href="https://rvm.beginrescueend.com/"&gt;Ruby Version Manager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Instalacja języka Ruby w RVM&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Na początek zainstalujemy, któryś z dostępnych&amp;nbsp;interpreterów&amp;nbsp;języka Ruby. Zobaczmy co ma nam do zaoferowania nasze nowe narzędzie:&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm list known&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Jak widać jest tego dużo. Możemy liczyć na dostęp do wielu niecodziennych implementacji&amp;nbsp;&lt;a href="http://www.ruby-lang.org/pl/"&gt;Rubyego&lt;/a&gt;&amp;nbsp;jak: &lt;a href="http://www.macruby.org/"&gt;MacRuby&lt;/a&gt;, &lt;a href="http://ruby.gemstone.com/"&gt;MagLev&lt;/a&gt;, &lt;a href="http://ironruby.net/"&gt;IronRuby&lt;/a&gt;, &lt;a href="http://jruby.org/"&gt;jRuby&lt;/a&gt;&amp;nbsp;czy &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;. Nas interesuje najnowsza, stabilna wersja natywnego intepretera języka, czyli na tą chwilę&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;[ruby-]1.9.2[-p290].&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Instalujemy nasze cacko i ustawiamy je jako domyślny interpreter:&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm install 1.9.2&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Tworzenie gemsetu dla projektu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://beginrescueend.com/rvm/best-practices/"&gt;RVM Best Practicies&lt;/a&gt;&amp;nbsp;zaleca tworzenie konfiguracji/pudełka, zwanego &lt;i&gt;gemset&lt;/i&gt;,&amp;nbsp;dla każdego projektu z osobna. Dlatego zanim zainstalujemy &amp;nbsp;&lt;/span&gt;&lt;a href="http://rubyonrails.pl/"&gt;Railsy&lt;/a&gt;&amp;nbsp;włączymy konfigurację per-projekt:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;echo "&lt;span class="Apple-style-span" style="background-color: white; line-height: 22px; white-space: pre;"&gt;rvm_project_rvmrc=1" &amp;gt;&amp;gt; ~/.rvmrc&amp;amp;&amp;amp; source ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"&gt;Tworzymy folder, w którym będzie trzymali bebechy naszej aplikacji i włączamy w niej magię&amp;nbsp;&lt;/span&gt;&lt;a href="https://rvm.beginrescueend.com/"&gt;RVM&lt;/a&gt;a&lt;span class="Apple-style-span"&gt;. Moja będzie nosiła imię &lt;a href="http://disney.wikia.com/wiki/Flit"&gt;kolibra z&amp;nbsp;Pocahontas&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;mkdir -p ~/projects/flit&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;cd ~/projects/flit&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm --rvmrc --create ruby-1.9.2@flit&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;W nomenklaturze używanego narzędzia przyjęło się iż &lt;i&gt;gemsety&lt;/i&gt;&amp;nbsp;(pudełka, w którym trzymane są biblioteki, zwane w Rubym gemami) nazywa się &lt;i&gt;wersja-rubego@nazwa-projektu&lt;/i&gt;. Ostatnia linijka stworzyła w folderze &lt;i&gt;flit&lt;/i&gt;&amp;nbsp;plik &lt;i&gt;.rvmrc&lt;/i&gt;&amp;nbsp;oraz nowy &lt;i&gt;gemset&lt;/i&gt;, który zobaczymy po wykonaniu polecenia &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm list gemsets&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm gemsets&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;ruby-1.9.2-p290@global [ x86_64 ]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;ruby-1.9.2-p290 [ x86_64 ]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;=&amp;gt; ruby-1.9.2-p290@flit [ x86_64 ]&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Dzięki plikowi &lt;i&gt;.rvmrc&lt;/i&gt;&amp;nbsp;za każdym razem po wejściu do folderu projektu &lt;i&gt;flit&lt;/i&gt;&amp;nbsp;omawiane narzędzie auto-magicznie przełączy wersję języka Ruby i zestaw, za pierwszym razem informując o próbie wykonania skryptu, który należy wykonać potwierdzając literką &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;y&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Do you wish to trust this .rvmrc file? (/home/johny/projects/flit/.rvmrc)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;y[es], n[o], v[iew], c[ancel]&amp;gt; y&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Instalacja Railsów&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Teraz można w spokoju zainstalować nasz framework:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;cd ~/projects/flit&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rvm gemset install rails&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;Podsumowanie&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Zainstalowaliśmy&amp;nbsp;&lt;/span&gt;&lt;a href="http://rubyonrails.pl/"&gt;Railsy&lt;/a&gt;, jednak nie sam fakt jest najważniejszy, ale metoda. Zainstalowaliśmy je w katalogu domowym, w wybranej przez nas wersji języka Ruby odizolowując wersje wybranych gemów w tak zwanym &lt;i&gt;gemsetcie&lt;/i&gt;. Dzięki temu jesteśmy niezależni od wszelkich zmian w systemie operacyjnym czy nawet "niebezpieczeństwa" rozpoczęcia, tuż obok, projektu z użyciem starszej wersji, która w zwykłej sytuacji kolidowałaby z "trójką". Możemy tworzyć wiele projektów opartych o &lt;a href="http://rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; nie martwiąc się o mnogość i różnorodność wersji potrzebnych bibliotek.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4554632660542532991?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4554632660542532991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4554632660542532991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4554632660542532991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4554632660542532991'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/09/ruby-on-rails-31-dzien-pierwszy.html' title='Ruby On Rails 3.1 - dzień pierwszy'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7132809105020577557</id><published>2011-08-26T06:02:00.000-07:00</published><updated>2011-08-27T00:10:41.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='hg'/><title type='text'>Jak korporacje dobierają narzędzia</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ten post jest próbą wyrzucenia z siebie drzemiącej głęboko frustracji dotyczącej fatalnego podejścia do doboru narzędzi, w korporacjach, z którymi się zetknąłem.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Trawestując znanego survival-owca oraz Naczelnika Skautów Wielkiej Brytanii "Narzędzia są po to aby wykonywały pracę za Ciebie - nie na odwrót.". Choć zdanie to dotyczyło konserwacji i ostrzenia piły, noża czy siekierki, to pasuje również do naszej, jakże przepełnionej narzędziami, informatycznej rzeczywistości.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Rozpoczynając pracę musisz wybrać narzędzia. Jednak samo ich posiadanie nie rozwiązuje problemu - musi nastąpić etap selekcji. Selekcji, która w dużych firmach podejmowana jest raz i nieodwołalnie, często kilka, anawet kilkanaście lat przed rozpoczęciem projektu, któremu przyjdzie z nich korzystać.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Innymi słowy, narzędzia wybierane są globalnie w skali całej firmy i w tej samej firmie ich używanie jest egzekwowane bez względu na charakter i rodzaj przedsięwzięcia. Zdarza się iż używany jest system kontroli wersji, którego początki pamiętają roku 1992, którego założenia koncepcyjne są na tle nowoczesnych systemów kontroli wersji z gruntu złe. Ogromna ilość pieniędzy, stworzona infrastruktura, ilość znanych rozwiązań problemów oraz doświadczenie tworzą pozorną wartość przekładającą się na równie pozorną łatwość w użyciu tak dobrze "sprawdzonego" i "sprawdzającego się" narzędzia w kolejnym projekcie.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jednak wszystko to jest iluzoryczne. Przyzwyczajenia ludzi nie świadczą o jakości narzędzia, ani o sprawności jego używania gdyż nawet większa nieudolność, w wykorzystywaniu nowego oprogramowania na początku, może być błyskawicznie zniwelowana sumą zwiększonej prędkości jego działania oraz dobrze przygotowanym programem szkoleń dla osób początkujących, posuniętego nawet do algorytmów postępowania.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Równie fałszywe jest wrażenie "problemów, z którymi przyjdzie nam się zmierzyć". Często zakładamy, że skoro oprogramowanie zaproponowane przez firmę sprawiło nam wiele kłopotów, to wraz z wprowadzeniem nowego narzędzia pojawią się nowe. Nikt jednak, bardzo często, nie zauważa, że znaczna część tych problemów wynika z wieku narzędzia i architektury oraz koncepcji, które bardzo często nie przystawały do współczesnych realiów. Realiów, w których zostało stworzone nowe narzędzie, dzięki któremu będziemy mogli zminimalizować portfolio "dobrze znanych rozwiązań, dobrze znanych problemów" nawet o 90%.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;W epoce kamienia łupanego ludzie do krojenia używali ostrych kamieni. Używali ich ponieważ sprawdzały się, a w pobliżu nie było nic bardziej dostosowanego do krojenia. Dzisiaj jednak używamy noży, toporów, siekier, pił i scyzoryków. Używamy ich na drodze prostej ewolucji, w której narzędzia mniej przydatne przestawały być używane, odchodziły w niepamięć, a zastępowały je lepsze, bardziej użyteczne odpowiedniki. O tym czy narzędzie i jego wykorzystywanie przetrwało do naszych czasów czy nie decydowała jego efektywność.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Kiedy się temu przyjrzymy, wydaje się to rzeczą naturalną. Można wręcz powiedzieć iż stwierdzenie przybliżone w poprzednim akapicie trąci truizmem. Truizm ten nie jest niestety oczywisty w korporacjach, w których w kółko i na okrągło wykorzystuje się stare, zakupione dekadę, albo dwie temu programy. Pomimo dziesiątek problemów i dawno stwierdzonych wad są używane w kolejnych projektach.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jednak nie tylko wykorzystywanie archaicznych rozwiązań, na dużą skalę, może być błędem. &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; to niewątpliwie fantastyczny system kontroli wersji. Pomyli się jednak ten, kto użyje go do projektu &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions"&gt;Visual Studio 2010&lt;/a&gt;, w środowisku opartym o kontroler domeny Windows. Wystarczy bowiem przyjrzeć się &lt;a href="http://mercurial.selenic.com/"&gt;Mercurialowi&lt;/a&gt; aby dostrzec zalety w formie: natywnego wsparcia dla okienek, świetnej integracji z &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions"&gt;Visual Studio 2010&lt;/a&gt; dzięki wtyczce &lt;a href="http://visualhg.codeplex.com/"&gt;VisualHG&lt;/a&gt; (znacznie lepszej niż jakakolwiek integracja &lt;a href="http://git-scm.com/"&gt;Gita&lt;/a&gt; z &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions"&gt;Visualem&lt;/a&gt;), czy wsparcia dla Single Sign On w postaci &lt;a href="http://mercurial.selenic.com/wiki/KerberosExtension"&gt;HGKerberos&lt;/a&gt;, która działa z SPNEGO.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Na tym przykładzie widać, że narzędzia można dobrać lepiej lub gorzej, albo po prostu źle. Moim zdaniem idealnym rozwiązaniem jest tworzenie architektury "per-projekt", w których używane narzędzia będą symbolem "epoki", w której projekt startował. Doskonale rozumiałbym używanie tak archaicznego systemu kontroli wersji jak &lt;a href="http://savannah.nongnu.org/projects/cvs"&gt;CVS&lt;/a&gt; w projekcie z lat 90siątych, tak jak używanie &lt;a href="http://subversion.apache.org/"&gt;Subversion&lt;/a&gt; w narzędziu, którego początki są datowane na 2000 rok. Konsekwentnie, dobierając nowoczesne rozwiązania do projektów, które powstały na przestrzeni kilku ostatnich lat.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7132809105020577557?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7132809105020577557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7132809105020577557' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7132809105020577557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7132809105020577557'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/08/jak-korporacje-dobieraja-narzedzia.html' title='Jak korporacje dobierają narzędzia'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3315603269092545038</id><published>2011-08-20T02:31:00.000-07:00</published><updated>2011-08-20T03:36:41.071-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screenpresso'/><title type='text'>Świetny program do robienia screenów pod Windows</title><content type='html'>&lt;div style="text-align: justify;"&gt;Zawsze zachwycały mnie screeny prezentowane w sieci przez użytkowników komputerów Mac. I nie chodzi mi o cukierkowy interfejs OS X, ale o ładnie opisane, zaznaczone, wskazane przejrzystymi strzałeczkami elementy.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Zacząłem szukać oprogramowania pod Windows, nawet płatnego, który pozwoliłoby tworzyć równie schludne obrazy, pozwalając na nanoszenie strzałek czy napisów.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Początkowo, wraz z wydaniem Windows 7, zwrócił moją uwagę program "Narzędzie Wycinanie" dostępny wraz z systemem operacyjnym. Był to pierwszy raz kiedy do robienia zrzutu ekranu nie używało się guzika Print Screen, a wykorzystywanym programem wcale nie był Paint.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pomimo znacznie podwyższonej wygody korzystania możliwości "Narzędzie wycinanie" nie zachwycały. Kilka miesięcy później trafiłem na &lt;a href="http://www.screenpresso.com/"&gt;Screenpresso&lt;/a&gt;. O kupnie programu myślałem już nie raz jednak żadna z dostępny po zapłacie opcji nie jest mi do szczęścia potrzebna i darmowa wersja w stu procentach spełnia moje potrzeby i oczekiwania.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Po zainstalowaniu program podpina się pod klawisz PrintScreen przyciemniając ekran i dając nam możliwość wyboru obszaru, który chcemy umieścić na zrzucie. Już na tym etapie otrzymujemy dwa udogodnienia: małą lupkę w prawym dolnym rogu ekranu, która pozwala nam dzięki powiększeniu precyzyjnie dobrać współrzędne prostokąta oraz szalenie użyteczny detektor kontrolek Windows, który po najechaniu zaznacza jej obszar sugerując nam wykonanie screenshotu tego konkretnego okna, pola, przycisku czy obszaru.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Chwilę później możemy już skopiować zawartość zrzutu [CTRL]+[SHIFT]+[C], plik ze zrzutem [CTRL]+[C], zmienić nazwę pliku [F2] czy usunąć nasze dzieło [DEL]. Najciekawszą opcją jest otworzenie zrzutu w wewnętrznym edytorze [ALT]+[E].&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Opcji dostępnych w otworzonym przed chwilą oknie nie powstydzi się nawet użytkownik MacOSX. Program pozwala nam:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;nanosić strzałki&lt;/li&gt;&lt;li&gt;tekst&lt;/li&gt;&lt;li&gt;zaznaczać eliptyczne lub prostokątne obszary&lt;/li&gt;&lt;li&gt;dodawać dymki i ikony&lt;/li&gt;&lt;li&gt;numerować punkty&lt;/li&gt;&lt;li&gt;podświetlać lub zamazywać fragmenty obrazu&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wszystkie elementy wyglądają szalenie elegancko i schludnie a efekt końcowy naprawdę cieszy oko.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jeżeli nie wystarcza nam zaznaczanie obszaru &lt;a href="http://www.screenpresso.com/"&gt;ScreenPresso&lt;/a&gt; oferuje wykonanie screenshotu poprzednio użytego regionu, całego ekranu lub wykonanie zrzutu tuż po puszczeniu paska przewijania jednego z okien.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Edit&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify; "&gt;W myśl dewizy "zarabiam - płacę" zakupiłem wspomniany program w celu odblokowania opcji kręcenia filmików dłuższych niż, dostępnych w wersji darmowej, 15 sekund.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;To co mile zaskakuje - nie musimy ujmować na filmie całego ekranu - możemy wyznaczyć obszar, który zostanie ujęty na filmiku. Niestety, to wszystko co oferuje obecnie w tej materii &lt;a href="http://www.screenpresso.com/"&gt;ScreenPresso&lt;/a&gt;. Nie znajdziemy tu żadnych zaawansowanych efektów, możliwości podświetlania i zaznaczania, przejść czy podążania za kursorem - mam jednak nadzieję, że to czasowe :)&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Po nakręceniu filmiku jest on zapisywany w formacie zrozumiały wyłącznie dla wewnętrznego edytora. Aby udostępnić pozostałym nasze dzieło musimy korzystać z opcji konwersji. Tutaj nie możemy narzekać na brak możliwości: MP4, &lt;a href="http://www.webmproject.org/"&gt;WebM&lt;/a&gt;, &lt;a href="http://www.xiph.org/ogg/"&gt;OGV&lt;/a&gt;, WMV czy witryna HTML5. Podążanie za trendami twórców oprogramowania aż zaskakuje.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Każdemu kto tworzy wiele instrukcji i szuka dobrego programu do ubogacania jej zrzutami serdecznie polecam!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3315603269092545038?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3315603269092545038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3315603269092545038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3315603269092545038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3315603269092545038'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/08/swietny-program-do-robienia-screenow.html' title='Świetny program do robienia screenów pod Windows'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1290070109378021289</id><published>2011-06-18T12:41:00.001-07:00</published><updated>2011-06-18T13:00:48.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sproutcore'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='expressjs'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee script'/><category scheme='http://www.blogger.com/atom/ns#' term='javasript'/><title type='text'>Języki ponad-maszynowe</title><content type='html'>&lt;div style="text-align: justify;"&gt;Odnośnie poprzedniego wpisu, moim zdaniem świat programistyczny powinien zainwestować więcej uwagi w kierunek jaki obrał chociażby &lt;a href="http://pypy.org/"&gt;PyPy&lt;/a&gt; czy &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;. Implementacje języków programowania, które są niezależne od maszyny wirtualnej, z której przyjdzie nam korzystać.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pewne uniwersalna rodzina dialektów, które możemy wybierać do potrzeb danego zagadnienia nie zastanawiając się czy nasza aplikacja będzie działała na Androidzie, Linuksie, czy MacOS X. To jest moim zdaniem przyszłość.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jeżeli o maszyny wirtualne chodzi - można zaobserwować ciekawe zjawisko. Pewien szczególny rodzaj maszyny wirtualnej, dostępnej &lt;i&gt;wszędzie&lt;/i&gt; wytworzył się "przypadkiem". O dziwo jest nią przeglądarka internetowa. Połączony z tym rozwój takich standardów jak HTML5, CSS3 i projektów z nimi powiązanymi, problemy z technologią Flash na platformach mobilnych sprawiły, że dzisiaj przeglądarka internetowa/sieć jest najczęściej wybieraną &lt;i&gt;platformą&lt;/i&gt; do tworzenia oprogramowania. Jeżeli już dziś chcemy napisać oprogramowanie, która za 20 lat będzie działało na kaczuszce do kąpieli naszego dziecka - zaimplementujmy to w JavaScript. Dzięki &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt;, &lt;a href="http://www.sproutcore.com/"&gt;SprouteCore&lt;/a&gt;, &lt;a href="http://expressjs.com/"&gt;ExpressJS&lt;/a&gt;, &lt;a href="http://nodejs.org/"&gt;NodeJS&lt;/a&gt; JavaScript przychodzi pod strzechy. Za nią zaś stoją niewyobrażalnie zoptymalizowane maszyny wirtualne, które są od lat tuningowane i wystawiane do prezentowania swoich możliwości na torze zwanym Internet. Tutaj nie ma miejsca na pozorne rozwiązania - współzawodnictwo jest zacięte, a konkurencja nie śpi.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Może się wydać to nietypowe. Każdy język programowania posiada jedną maszynę wirtualną, stworzoną dla niego - JavaScript posiada ich aż kilka. Gdyby nie CoffeeScript - to z jej ohydną składnią i obleśną semantyką ociekającą toną &lt;a href="http://wtfjs.com/"&gt;wtfjs&lt;/a&gt; byłaby jak rozprzestrzeniające się na ogromną skalę trucizna. Na szczęście ludzie zaczęli ją oswajać i powoli uczą się ją wykorzystywać do tworzenia leków, znaleźli już wiele ciekawych zastosować.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Rodzi się pytanie - czy i jak JavaScript będzie można sprzedać? Język programowania, wykorzystywany do tej pory "dla bajeru", przez domorosłych informatyków, używany do pisania małych fragmentów, wstawek kodu staje się kompletnym rozwiązaniem z armią, przez lata optymalizowanych w wyścigu "zbrojeń" maszyn wirtualnych w drugim szeregu.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Język, w którym nie jest znana mi żadna metoda dająca zaczepienie oprogramowaniu "closed-source", gdzie jedyną metodą "chronienia" kodu jest jedynie jego zaciemnianie. Czyżby polimorfizm znany z pierwszych lat tworzenia wirusów?  Zobaczymy.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1290070109378021289?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1290070109378021289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1290070109378021289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1290070109378021289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1290070109378021289'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/06/jezyki-ponad-maszynowe.html' title='Języki ponad-maszynowe'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7229853364989602583</id><published>2011-06-18T09:58:00.000-07:00</published><updated>2011-06-18T10:53:01.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='noop'/><category scheme='http://www.blogger.com/atom/ns#' term='jruby'/><category scheme='http://www.blogger.com/atom/ns#' term='jython'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>Java w nowych projektach i racja jej bytu.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Czas języków programowania dawno minął - nastał czas &lt;i&gt;dialektów maszyn wirtualnych&lt;/i&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Od kilku dni w firmie zatrudniani są programiści języka &lt;a href="http://www.java.com/"&gt;Java&lt;/a&gt;. Po rozmowie z zatrudniającymi managerami załamałem się - bo niby dlaczego Java?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pisząc aplikację dla platformy &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt;, czy rozwijając &lt;a href="https://jazz.net/projects/rational-team-concert/"&gt;Rational Team Concert&lt;/a&gt; to czego potrzebujesz to - plik wynikowy, zrozumiały dla JVM, napisany w konkretnej konwencji, używający konkretnych bibliotek a &lt;b&gt;nie Java!&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jakie miejsce powinni zajmować dziś programiści &lt;a href="http://www.cplusplus.com/"&gt;C++&lt;/a&gt; czy Java? Rozwijać dalej istniejące, dobrze napisane, oprogramowanie.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;W dzisiejszych czasach możemy mówić o &lt;i&gt;dialektach maszyn wirtualnych&lt;/i&gt;. Ślepe wybieranie &lt;i&gt;dialektu języka Java&lt;/i&gt; do pisania oprogramowania dla JVM to po prostu zaściankowość i ciemnota.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wiele innych: &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt;, &lt;a href="http://www.jruby.org/"&gt;jRuby&lt;/a&gt;, &lt;a href="http://www.jython.org/"&gt;Jython&lt;/a&gt;, &lt;a href="http://code.google.com/p/noop/"&gt;Noop&lt;/a&gt; czy chociażby &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; - mogą w danym zastosowaniu znacznie skrócić czas kodowania, podwyższyć jakość oprogramowania, obniżyć stopę występowania błędów, znacznie zwiększyć jakość kodu. W skrócie: skoro może być szybciej i lepiej to po co trzymać się języka Java? Trawestując &lt;a href="http://martin.kleppmann.com/2009/09/18/the-python-paradox-is-now-the-scala-paradox.html"&gt;Martina Klepmann&lt;/a&gt;  : &lt;i&gt;"Modern language programming is good 'quality filter' for people."&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Oczywiście: nadal istnieje wiele powodów, dla których utkniemy z kolejnym projektem w języku Java. Brak developerów danego języka na rynku to podstawowa przyczyna - choć może być ich więcej. Moim zdaniem należy jednak próbować, podejmować wyzwania i ryzykować bycie innowacyjnym - to się opłaci.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7229853364989602583?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7229853364989602583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7229853364989602583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7229853364989602583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7229853364989602583'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/06/java-w-nowych-projektach-i-racja-jej.html' title='Java w nowych projektach i racja jej bytu.'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7462466055367095361</id><published>2011-05-27T13:01:00.000-07:00</published><updated>2011-05-27T13:21:22.339-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='buildy'/><category scheme='http://www.blogger.com/atom/ns#' term='continouse integration'/><title type='text'>Continous integration i Python?</title><content type='html'>&lt;div style="text-align: justify;"&gt;Czy ktoś widział może kiedyś budowanie projektu pisanego w Pythonie?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Może nie jestem czegoś świadom, albo myślę zbyt szablonowo ale: &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;continous-integration&lt;/a&gt; jest dobrze zdefiniowane dla projektów, które trzeba kompilować. Wiadomo. Developer nie kompiluje kodu sam. System CI sam sprawdza za niego czy kod pozytywnie przechodzi etap kompilacji i wysyła powiadomienia.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ale jak odnieść się do tego w świetle Pythona. No dobra, wyciągamy kod źródłowy z repozytorium - i co? Przecież go nie skompiluję. Wszystko, na stać moją wyobraźnię na dzień dzisiejszy, to hmm... scan &lt;a href="http://www.logilab.org/857"&gt;pylint&lt;/a&gt;, &lt;a href="http://pychecker.sourceforge.net/"&gt;pychecker&lt;/a&gt;, &lt;a href="http://pypi.python.org/pypi/pep8"&gt;pep8&lt;/a&gt;, odpalanie metody &lt;i&gt;.compile()&lt;/i&gt; na każdym module? Jeżeli już zdecydujemy się na skany: to jak zachować się w przypadku jakiś komunikatów. Kod nie musi być źle napisany, zresztą zakładamy, że przeszedł review, ale wtedy co? Sfailować build tylko dlatego, że kod Pythona programisty nie odpowiada pylint. To niczego nie udowadnia.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Piszę ten post w związku z sytuacją jaka miała miejsce kilka dni temu. Rozumiem, żeby w trakcie budowania projektu Pythonowego odpalać testy w ramach. W moim przypadku nie mam nawet czasu aby je pisać więc nie ma co odpalać. Przyjmuję argument, że to co wychodzi na produkcję powinno być numerowane. To bardzo pomocne i użyteczne. Jednak w &lt;a href="http://python.org/"&gt;Python&lt;/a&gt; 2 wszystko co sobie wyobrażam to otagowywanie kolejnych wersji w repozytorium. Podmienianie egga, który wywala serwer &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt; ponieważ przestają mu się zgadzać sumy kontrolne - to jakaś porażka. To nie wiem co innego mógłbym robić? Dodawać komentarz z numerem buildu w jakimś umówionym pliku? Dodam jeszcze, że to aplikacja internetowa pisana w &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jeżeli ktoś jest w temacie to jestem bardzo zainteresowany wymianą doświadczeń w tym temacie.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7462466055367095361?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7462466055367095361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7462466055367095361' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7462466055367095361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7462466055367095361'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/05/continous-integration-i-python.html' title='Continous integration i Python?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3201521143667374038</id><published>2011-05-27T11:07:00.002-07:00</published><updated>2011-05-27T13:01:22.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gitolite'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='glboard'/><category scheme='http://www.blogger.com/atom/ns#' term='phantomjs'/><title type='text'>Webdevelopment i unit testy</title><content type='html'>&lt;div style="text-align: justify;"&gt;Kilka tygodni temu zacząłem developować webowy frontend dla projektu &lt;a href="https://github.com/sitaramc/gitolite"&gt;gitolite&lt;/a&gt; o nazwie &lt;a href="https://github.com/jankoprowski/glboard"&gt;glboard&lt;/a&gt;. Gitolite to warstwa abstrakcji pozwalająca na kontrolę dostępu do repozytoriów systemu &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; podczas dostępu do serwera przez ssh.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Glboard od samego początku pisany był z myślą o testach, dlatego wraz z kodem publikowane były unit testy do udowadniania poprawności metod, klasy, która stanowi trzon funkcjonalności.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Podczas oglądania prelekcji &lt;a href="http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-state-of-pylons-turbogears-2-repoze-bfg-4896763"&gt;"State of Pylons/Turbo Gears2/repoze.bfg"&lt;/a&gt;, moją uwagę przykuły zarzuty postawione unit testom w web-developmencie.&lt;span class="Apple-style-span" style="border-collapse: collapse; color: rgb(34, 34, 34); font-family: 'Helvetica Neue', Arial, Helvetica; font-size: 13px; font-weight: bold; line-height: 17px; "&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;W tym okresie spędziłem sporo czasu, w glboard, na poprawianiu unit testów. Jeżeli padłem ofiarą zbyt wczesnego testowania - to jaki sens ma &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt;?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Podczas zmieniania głównej klasy, obsługującej operacje na repozytorium gita, uzyskałem pewien ciekawy efekt - witryna działała i mogłem dzięki niej wykonać wszystkie operacje - natomiast testy failowały. Wszystkie. Powód był prosty: klasa przyjmowała teraz nowy argument w metodzie &lt;i&gt;__init__&lt;/i&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wspomniana prelekcja uświadomiła mi jedną rzecz. Jeżeli nie wystawiasz czegoś na zewnątrz, nie wystawiasz API lub biblioteki, nie będziesz zobligowany do zachowywania wstecznej kompatybilności z jakimś stworzonym przez siebie interfejsem, które kiedyś udostępniłeś, tylko dlatego, że używają go klienci - nie używaj unit testów. Pisanie unit testów do elementów, które zostają w twoim projekcie i nie wychodzą w żaden sposób na zewnątrz - to strzelanie sobie w stopę.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Moim zdaniem pisząc aplikację we frameworku webowym to co powinno się testować - to działanie przez przeglądarce. &lt;a href="http://en.wikipedia.org/wiki/Functional_testing"&gt;Testy funkcjonalne&lt;/a&gt; wydają się wystarczające. Może są troszkę bardziej kosztowne niż unit testy, ale w gruncie rzeczy, dobrze napisane, testują dokładnie to co powinny. Nie skupiają się na API konkretnej klasy, funkcji, metody, ale na tym czy witryna działa - nie ważne jest jak.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Odnosząc się do narzekań na &lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt; i długiego czasu trwania testów w nim napisanych: myślę, że możemy spodziewać się rewolucji w świecie testów web-aplikacji dzięki &lt;a href="http://www.phantomjs.org/"&gt;PhantomJS&lt;/a&gt;. Nie znam jego wydajności, ale funkcjonalność jest w tej dziedzinie bardzo obiecująca i daje znacznie więcej możliwości niż zwykłe funkcyjne testy. Równocześnie nie używa całego niepotrzebne osprzętu jakie ładuje przeglądarka.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wszystko co w tej chwili mi pozostaje to usunąć unit testy z glboard i napisać functional testy :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3201521143667374038?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3201521143667374038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3201521143667374038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3201521143667374038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3201521143667374038'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/05/webdevelopment-i-unit-testy.html' title='Webdevelopment i unit testy'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1535708549259520323</id><published>2011-02-26T01:25:00.000-08:00</published><updated>2011-02-26T05:04:29.633-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='Lift'/><category scheme='http://www.blogger.com/atom/ns#' term='C++0x'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='tir'/><category scheme='http://www.blogger.com/atom/ns#' term='go-lang'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='mongrel2'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='lua'/><title type='text'>Co w językach programowania i web developmencie piszczy</title><content type='html'>&lt;div style="text-align: justify;"&gt;  Od czasów, kiedy skończyłem studia bardzo interesowałem się rozwojem języka C++. Na początku bibliotkę &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt;, w której ląduje co ciekawsze pomysły, które mają w przyszłości zagościć w języku a potem wersją &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x"&gt;C++0x&lt;/a&gt;. Dzisiaj spojrzałem na &lt;a href="http://gcc.gnu.org/gcc-4.6/cxx0x_status.html"&gt;wsparcie dla składni C++0x w gcc-4.6&lt;/a&gt; i powiem szczerze, że nie mogę się doczekać kiedy Ubuntu i Debian zostaną skompilowane na tym właśnie kompilatorze. Na razie nie jest dostępny na żadnej dystrybucji - niestety brak go również w paczkach &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; 11.04, ale użycie tego kompilatora będzie szalenie ekscytujące.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  Lista wszystkich zaimplementowanych nowinek jest dostępna tutaj: &lt;a href="http://gcc.gnu.org/gcc-4.6/cxx0x_status.html"&gt;http://gcc.gnu.org/gcc-4.6/cxx0x_status.html&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  Mnie cieszą dwie: składnia dla for znana z python - gdzie iteruje się po elementach, nie po indeksach oraz lambdy - czyli funkcje nienazwane, które można przekazywać jako parametry.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  W sumie powiem szczerze, że mam szaloną chęć napisać coś w C++ :) na przykład stronkę - jest framework &lt;a href="http://www.webtoolkit.eu/"&gt;Web Toolkit&lt;/a&gt; więc czemu by nie spróbować :]  Jak się patrzy na &lt;a href="http://www.webtoolkit.eu/wt/features"&gt;listę możliwości&lt;/a&gt; to pojawia się UTF-8 i 16, HTML 5 native, async I/O, VML, SVG, PDF, PNG/GIF, SSL, TLS właściwie wszystko czego dusza zapragnie, a czym nie chwalą się żadnej inne frameworki należące do języków skryptowych, które borykają się z różnymi problemami w tej dziedzinie (ostatnio szczególnie frameworki Pythonowe). Można deployować przez &lt;a href="http://www.fastcgi.com/"&gt;FastCGI&lt;/a&gt;, postawić na dedykowanym serwerze dostarczonym z frameworkiem albo podpiąć do &lt;a href="http://www.iis.net/"&gt;IIS&lt;/a&gt;. Brzmi super :)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  C++ staje się naprawdę fajnym językiem, może mniej fajnym niż &lt;a href="http://golang.org/"&gt;Go&lt;/a&gt; (z frameworkiem &lt;a href="http://www.getwebgo.com/"&gt;web.go&lt;/a&gt;) :) ale naprawdę wartym uwagi. Pozostaje czekać tylko czym będzie język &lt;a href="http://code.google.com/p/noop/"&gt;Noop&lt;/a&gt; i cieszyć się z tego co przyniosą najbliższe lata :)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jeżeli zaś ktoś chciałby popróbować development na wirtualnej maszynie to przychodzą mi na myśl wyłącznie &lt;a href="http://liftweb.net/"&gt;Lift&lt;/a&gt; z języka &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; i z troszkę innej beczki :) &lt;a href="http://expressjs.com/"&gt;ExpressJS&lt;/a&gt; dla języka &lt;a href="http://nodejs.org/"&gt;Node.JS&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jako ciekawostkę dodam, że jeżeli ktoś chce się nauczyć, w jakimś subiektywnym aspekcie języka "idealnego" to istnieje świetny kurs do języka &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; pod tytułem &lt;a href="http://learnyouahaskell.com/"&gt;"Learn You a Haskell for Geate Good!"&lt;/a&gt; . Web Development też jest wtedy możliwy - dzięki frameworkowi &lt;a href="http://snapframework.com/"&gt;Snap&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O zapomniałbym. Ostatnio (no już trochę czasu minęło) &lt;a href="http://zedshaw.com/"&gt;Zed Shaw&lt;/a&gt; stworzył (ten gość chyba się po prostu nudzi) &lt;a href="http://tir.mongrel2.org/home"&gt;Tir&lt;/a&gt; - framework do web developmentu w języku skryptowym &lt;a href="http://www.lua.org/"&gt;Lua&lt;/a&gt;. Co więcej wszystko w ramach projektu &lt;a href="http://mongrel2.org/"&gt;Mongrel2&lt;/a&gt;, który jest jeszcze bardziej imponującą kontynuacją znanego developerom &lt;a href="http://rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; serwera Mongrel - tym razem, w drugiej wersji wspiera chyba każdy język programowania.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Przy okazji - dla tych, którzy siedzą wciąż w świecie &lt;a href="http://rubyonrails.org/"&gt;Python&lt;/a&gt; i &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;. Jeżeli szukacie jakiegoś hiper wydajnego frameworka to nie tylko najnowszym i najnowocześniejszym w architekturze, ale również ewidentnie najszybszym jest &lt;a href="http://docs.pylonsproject.org/"&gt;Pyramid&lt;/a&gt; - jeżeli wierzyć wynikom z artykułu &lt;a href="http://blog.curiasolutions.com/2010/11/the-great-web-technology-shootout-%E2%80%93-round-4-pyramid-vs-django-vs-tg-vs-rails-2-3/"&gt;"The great web technology shootout – Round 4: Pyramid vs Django vs TG vs Rails 2 &amp;amp; 3"&lt;/a&gt; - bije na głowę dosłownie wszystko. Jednak jest to framework stricte w filozofii i podejściu wykorzystywanym w Pylons - i jego sukcesorem. Co miłe jest to "najszybciej wydany" framework w dziejach macro-frameworków jakie w życiu widziałem bo development zaczął się w Grudniu 2010 a pod koniec Stycznia 2011 wyszła stabilna wersja 1.0 - chociaż to troszkę naciągane bo projekt nie startował od zera ale był adaptacją już wcześniej wydanego &lt;a href="http://bfg.repoze.org/"&gt;Repoze BFG&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Zdradzę jeszcze, że dowiedziałem się iż na &lt;a href="http://us.pycon.org"&gt;PyCon 2011 US,&lt;/a&gt; który odbywa się w Marcu odbywają się sprinty, które mają na celu portowanie Pyramid na Python 3 tak więc możemy mieć pierwszy framework działający na Py 3k :) Czy to nie ekscytujące?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1535708549259520323?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1535708549259520323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1535708549259520323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1535708549259520323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1535708549259520323'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/02/webdevelopment-w-c-i-c0x.html' title='Co w językach programowania i web developmencie piszczy'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7032247429339943176</id><published>2011-01-22T01:03:00.000-08:00</published><updated>2011-01-22T01:37:16.655-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ppcg'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='tlug'/><title type='text'>Co w ostatnich tygodniach.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Dawno nie pisałem na blogu. Gdy jeszcze dzieliłem czas na studia i pracę starczało mi czasu na wszystko. Obecnie obcowaniem z komputerem staram się ograniczać do siedzenia przed nim w pracy, a wieczory i weekendy spędzać w inny sposób.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ćwiczę Angielski. Umiałem go świetnie przed maturą, jednak studia inżynierskie skutecznie uwsteczniły mnie w tej materii. Jakiś już czas temu, bo w zeszłym roku, mój manager widząc braki, zorganizował spotkania z lektorką dzięki czemu wtorki i czwartki zaczynam lektoratem z języka angielskiego :) co skutecznie poprawia mi humor na pozostałą część tygodnia.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Co do języków programowania - wciąż używam Pytona, ze względu na jego znajomość zostałem zatrudniony i przez ostatnie 1,5 roku zostawiłem po sobie na tyle skryptów i aplikacji zapisanych w tym dialekcie, że ciężko codziennie się z nim nie stykać. Jednak moje marzenia i pasje kierują się w stronę &lt;a href="http://nodejs.org/"&gt;Node.JS&lt;/a&gt; oraz wciąż zagadkowego dla mnie języka &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://nodejs.org/"&gt;Node.JS&lt;/a&gt; chciałem rozpocząć od przebrnięcia przez fantastyczny podręcznik do JavaScript &lt;a href="http://eloquentjavascript.net/"&gt;"Eloquent JavaScript"&lt;/a&gt;. Niestety, silnie funkcyjne podejście autora do sprawy skutecznie utrudnia mi przyswojenie lektury, a problemy zaczęły się już w rozdziale 4.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Co do &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; jest lepiej. Wiele zawdzięczam prelekcji &lt;b&gt;Mikołaja Sochackiego&lt;/b&gt; &lt;a href="http://zimowisko.linux.gda.pl/2011/#"&gt;Aplikacje webowe w Scala i Lift&lt;/a&gt; wygłoszonej na Zimowisku &lt;a href="http://linux.gda.pl/tlug/"&gt;TLUG&lt;/a&gt;u. Sama prezentacja, jak i późniejsza wymiana doświadczeń w prywatnej rozmowie z prelegentem, pozwoliły mi dojść do wniosku, że trzeba przestać przejmować się, że "czegoś" nie rozumiem i opanować Scalę na miarę swoich możliwości - z czasem poznając ją może po prostu lepiej.&lt;span class="Apple-style-span" style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: small; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Tak też narodził się pomysł na prostego bloga, z przykładowymi aplikacjami w języku &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, które skupiałyby się na konkretach i w prosty sposób pozwoliły na zapoznanie się z językiem. Co z tego wyjdzie - zobaczymy. Obecnie robię rozeznanie w silnikach, na których warto byłoby taki "blog" postawić. Z dotychczasowych poszukiwań wszystko wskazuje na &lt;a href="http://jogger.pl/"&gt;Joggera&lt;/a&gt; - chyba, że znajdą się jakieś fundusze na zakup i utrzymanie domeny - wtedy będzie to &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt;. Przy okazji trafiłem na &lt;a href="http://scala.net.pl/"&gt;Polski Portal Scala&lt;/a&gt;, na którym już w tej chwili można zapoznać się z niemałym zbiorem &lt;a href="http://scala.net.pl/wstepniak/przyklady/"&gt;przykładów kodu&lt;/a&gt; w tym języku.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jednak pierwszeństwo przed projektem Scalowym ma stworzenie Planety Pythona, którego podjąłem się niedawno w ramach mojej działalności w &lt;a href="http://pl.python.org/"&gt;Polish Python Coders Group&lt;/a&gt; - wszak na koszulkę jakoś trzeba sobie zasłużyć :). Twarzą w twarz poznałem większość ekipy dopiero na &lt;a href="http://pl.pycon.org/2010/"&gt;PyCon.pl 2010&lt;/a&gt; i co tu dużo gadać - są genialni. Kocham tych chłopaków za kawał dobrej roboty jaki odwalają, szczególnie na &lt;a href="http://pl.python.org/irc.html"&gt;IRCu&lt;/a&gt; i &lt;a href="http://pl.python.org/forum/"&gt;Forum&lt;/a&gt; - uważam, że mamy fantastyczną scenę Pythonową w Polsce jakiej można tylko pozazdrościć i każdy kto chce zacząć przygodę z tym językiem nie mógłby sobie wymarzyć lepszej społeczności niż obecna.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wracając do &lt;a href="http://zimowisko.linux.gda.pl/2011/"&gt;Zimowiska Linuksowego TLUG&lt;/a&gt; - było naprawdę fajnie. Dzięki zakwaterowaniu w &lt;a href="http://www.hompuck.org/"&gt;Puckim HOMie&lt;/a&gt; czułem się jak na wczasach, do tego urok małego miasteczka jakim jest &lt;a href="http://www.miasto.puck.pl/"&gt;Puck&lt;/a&gt; - genialnie. Prelekcje były zróżnicowane, poziom wielu z nich naprawdę wysoki i profesjonalny. Szczególnie dało się to odczuć w prezentacjach &lt;a href="http://macuk.pl/"&gt;Piotra Macuk&lt;/a&gt;, Tomasza Torcz (wiem, że gdzieś prowadzi bloga, ale nie mam adresu), Roberta Jaroszuk, Grzegorza Borowiak oraz Dariusza Puchalak. Subiektywnie jednak bardziej interesują mnie technologie webowe i ten charakter konferencji, która moim zdaniem była zaadresowana głównie do administratorów systemu Unix, nie przypadł mi specjalnie do gustu.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Co do spędzania czasu po pracy zagospodarowuję go w znacznej mierze treningami Aikido w &lt;a href="http://www.shoshin.pl/"&gt;Shoshin&lt;/a&gt; Dojo. I grubsza tyle z nowinek - wracam chorować :] &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7032247429339943176?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7032247429339943176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7032247429339943176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7032247429339943176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7032247429339943176'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2011/01/co-w-ostatnich-tygodniach.html' title='Co w ostatnich tygodniach.'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7984938438335714703</id><published>2010-11-07T09:07:00.000-08:00</published><updated>2010-11-07T09:41:06.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyramid'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><title type='text'>Pyramid - następca Pylons</title><content type='html'>&lt;div style="text-align: justify;"&gt;Kilka dni temu Kevin J. Smith napisał na grupie dyskusyjnej &lt;span style="font-weight:bold;"&gt;pylons-discuss&lt;/span&gt;, że jako użytkownik Pylons, czuje się troszkę zmieszany ponieważ pierwszy raz trafia na &lt;a href="http://docs.pylonshq.com/"&gt;informacje o Pyramid&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Szybko okazało się, że developerzy Pylons zaczęli pracować już nad następcą Pylons - jednak nie ogłosili tego światu. Tak oto &lt;span style="font-style:italic;"&gt;przypadkiem&lt;/span&gt; świat dowiedział się o &lt;a href="http://docs.pylonshq.com/faq/pyramid.html"&gt;Pyramid&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O kierunkach jakie przyjmie Pylons 2.0 można było przeczytać już kilka tygodni temu na blogu Bena Bangerta we wpisie &lt;a href="http://be.groovie.org/post/1347858988/why-extending-through-subclassing-a-frameworks"&gt;Why Extending Through Subclassing (a framework’s classes) is a Bad Idea&lt;/a&gt;. Było to preludium do kierunku jakim podąży Pylons 2.0 - a właściwie powinienem powiedzieć &lt;span style="font-weight:bold;"&gt;Pyramid&lt;/span&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pierwsze - Pyramid "połączyło się" z zespołem &lt;a href="http://bfg.repoze.org/"&gt;repoze.bfg&lt;/a&gt;. Połączyło się, a raczej stwierdziło, że dotychczasowy model tworzenia kolejny aplikacji (poprzez tworzenie podklas WSGIController) jest ślepym zaułkiem - przed czym zostali ostrzeżeni przez sławę CherryPy Boba Brewera. Aby nie wymyślać koła na nowo obecnie Pylons tworzony jako adaptacja &lt;a href="http://bfg.repoze.org/"&gt;repoze.bfg&lt;/a&gt;. Tak zostało wydane ogłoszenie iż obecnie repoze.bfg staje się projektem Pyramid i będzie wydawane pod tą nazwą. Dwa fantastyczne zespoły połaczyły siły aby na bazie już dobrze ukształtowanego repoze.bfg oraz posiadającego swoich fanów &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt; powstał jeszcze lepszy framework dla języka Python.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dzięki temu połączeniu, oraz faktowi iż kod &lt;a href="http://docs.pylonshq.com/faq/pyramid.html"&gt;Pyramid&lt;/a&gt; posiada dobrze ugruntowaną bazę w postaci kodu &lt;a href="http://bfg.repoze.org/"&gt;repoze.bfg&lt;/a&gt; już dziś możemy cieszyć się &lt;a href="http://pypi.python.org/pypi/pyramid/1.0a1"&gt;Pyramid 1.0a&lt;/a&gt; dostępnym przez &lt;a href="http://pypi.python.org/"&gt;Python Package Index&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Te informacje napawają optymizmem. Wszystko wskazuje na to, że następca Pylons wyjdzie szybciej niż ktokolwiek by się spodziewał i będzie to naprawdę fantastyczny framework. Oby w parze z postępami w kodzie pojawiały się artykuły, a dokumentacja rosła :) Nic tylko czekać na Pyramid Book :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7984938438335714703?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7984938438335714703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7984938438335714703' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7984938438335714703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7984938438335714703'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/11/pyramid-nastepca-pylons.html' title='Pyramid - następca Pylons'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3053023708686552140</id><published>2010-10-17T09:49:00.000-07:00</published><updated>2010-10-17T09:59:30.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pycon'/><title type='text'>PyCons</title><content type='html'>Tydzień po powrocie z polskiego PyCona zacząłem oglądać konferencje z konferencji pythonowych, które odbyły się w innych częściach świata. Fantastyczną nowiną jest fakt iż większość z nich zamieszcza nagrania wideo prelekcji (nie tylko slajdy) więc można po prostu wysłuchać i zobaczyć prelekcję - taką jaka była - w zaciszu własnego domu.&lt;br /&gt;&lt;br /&gt;Tematy poruszane w różnych zakątkach świata są bardzo różne :) i dobrze. Można się naprawdę wiele nauczyć i wybrać sobie te tematy, które odpowiednio pasują do naszego obecnego poziomu lub po prostu zainteresował nas temat. Tutaj pierwsza uwaga.&lt;br /&gt;&lt;br /&gt;Temat konferencji czasami kompletnie nic nie mówi o jej treści. To smutne, ale widzisz temat i nie wiesz - warto to w ogóle odpalać, czy lepiej odpuścić sobie. Bo co na przykład mówi tytuł "Dude, Where's My Database?". Na szczęście są (przy większości tematów) opisy mówiące o treści konferencji. Bezcenne.&lt;br /&gt;&lt;br /&gt;Druga rzecz - jakość materiałów. Chyba najlepiej zorganizowane są na stronie PyCon Atlanta. Naprawdę super. Łatwy dostęp do wszystkiego. Natomiast materiały wideo z UK czy Europy są tragiczne. Co z tego, że mają nagranie wideo skoro ani nie słychać na nim prowadzącego wykład ani nie widać wyraźnie slajdów. Po prostu ... bezużyteczne.&lt;br /&gt;&lt;br /&gt;Osobiście czytanie dokumentacji ze zrozumieniem przychodzi mi z trudnością i nigdy nie mogę wyłapać w niej niuansów i szczegółów implementacyjnych. Takie prelekcje są dla mnie jak znalazł. Głównie dlatego, że ludzie w nich skupiają się na tym co jest ważne, dają przykłady i pokazują "big picture", który czasem ciężko samemu dostrzec. Te trzy aspekty sprawiają, że takie konferencje to dla mnie kopania wiedzy :) Polecam każdemu!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3053023708686552140?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3053023708686552140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3053023708686552140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3053023708686552140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3053023708686552140'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/10/pycons.html' title='PyCons'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-678857409244872529</id><published>2010-10-11T23:01:00.000-07:00</published><updated>2010-10-11T23:13:54.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IRC'/><title type='text'>Jak kupiłem mIRCa</title><content type='html'>Tak. Wczoraj zakupiłem mIRCa. Zapłaciłem $24 - te $4 to podatek z Polski. Dlaczego?&lt;br /&gt;Na IRCu wiele nie siedzę. Natomiast zamierzam trochę więcej niż wcześniej aby wesprzeć społeczność PPCG choćby odpowiadając na pytania początkujących.&lt;br /&gt;&lt;br /&gt;To nie jest tak, że nigdy wcześniej nie używałem IRCa. Jak byłem chyba jeszcze w podstawówce to pamiętam moją siostrę, która siedziała na jakiś kanałach i opowiadała o jakiś ludziach, którzy też tam siedzą - totalny bezsens. IRC - narzędzie dla zakompleksionych, dla których jedyną drogą przetrwania stała się akceptacja przez wirtualną społeczność. Tak to wtedy postrzegałem.&lt;br /&gt;&lt;br /&gt;Potem trafiłem na książkę "Dziennik Hakera" albo coś podobnego gdzie było napisane, że Hakerzy też używają IRCa. No tak - też odludki - to sobie siedzą. Potem była jakaś era wchodzenia na czaty Onetu i wszelkiej różne inne, zakładanie własnych czatów przez jakieś skrypty i tak jakoś to bez refleksyjnie obok mnie przeszło.&lt;br /&gt;&lt;br /&gt;Dla mnie IRC stał się czymś wartościowym kiedy odkryłem freenode - czyli sieć gdzie są wartościowe kanały dotyczące języków programowania, w których koduję. Wejść na kanał, zapytać o coś, dowiedzieć się więcej, wziąć udział w jakiejś dyskusji. Wtedy IRC stał się dla mnie czymś użytecznym.&lt;br /&gt;&lt;br /&gt;Dlaczego mIRC? Chłopaki z PPCG rzucali setkami pomysłów, ale żaden nie wpadł na pomysł aby kupić mIRCa. Jest to jedyny klient, który mi się podoba. Naprawdę. Wiem, że jest Quassel i IRSSI i dużo innych klientów, ale żaden darmowy mi nie podpasował. mIRC to jedyne co mi się naprawdę spodobało.&lt;br /&gt;&lt;br /&gt;Mam nadzieję, że kupno mIRCa będzie inwestycją, nie wyrzuconymi pieniędzmi w błoto :] Zobaczymy - czas pokaże.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-678857409244872529?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/678857409244872529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=678857409244872529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/678857409244872529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/678857409244872529'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/10/jak-kupiem-mirca.html' title='Jak kupiłem mIRCa'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2564879998411277290</id><published>2010-10-06T12:50:00.000-07:00</published><updated>2010-10-06T12:56:16.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='gallery'/><title type='text'>I mamy Gallery 3</title><content type='html'>W końcu, po wielu latach ciężkiego developmentu doczekaliśmy się &lt;a href="http://gallery.menalto.com/gallery_3.0_released"&gt;Gallery 3&lt;/a&gt;. Skrypt w wersji drugiej był niesamowicie wolny i nie poddawał się w niemal żaden sposób żadnym zabiegom optymalizacyjnym. Mapowanie każdego pliku graficznego na skrypt PHP przez regułkę .htaccess w celu sprawdzenia uprawnień było najwęższym gardłem całego narzędzia.&lt;br /&gt;&lt;br /&gt;Na ten dzień czekałem kilka miesięcy codziennie zaglądając na tracka projektu i badając ilość bugów pozostałych do releasu. W końcu nadszedł: nowa, bezpieczna, szybka, nowoczesna wersja jedynego w swoim rodzaju skryptu do obsługi galerii. Cieszy fakt, że jeden z twórców czerpał wiele inspiracji ze swojej fascynacji mistrzostwem z jakim został zaprojektowany Drupal. Tym bardziej jestem przekonany o jakości ostatecznego rozwiązania.&lt;br /&gt;&lt;br /&gt;Pozostaje tylko się cieszyć i szykować na upgrade ZHRowej multigalerii :] Zachęcam wszystkich do pobrania :]&lt;br /&gt;&lt;br /&gt;P.S. Skórek o dziwo nie brakuje :) jest już kilka do wyboru - niektóre naprawdę fajne :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2564879998411277290?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2564879998411277290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2564879998411277290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2564879998411277290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2564879998411277290'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/10/i-mamy-gallery-3.html' title='I mamy Gallery 3'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8888208431140362201</id><published>2010-10-02T03:20:00.000-07:00</published><updated>2010-10-02T03:30:33.634-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arch'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Jednak Arch Linux</title><content type='html'>Po kilku latach powrót do &lt;a href="http://www.archlinux.org/"&gt;Arch Linux&lt;/a&gt; to strzał w dziesiątkę. Szczególnie w moim przypadku gdy w gruncie rzeczy na co dzień używam Windows 7 a Linuksa tylko do webdevelopmentu.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pierwszy plus - dużo grzebania. W Archu konfigurację z grubsza trzeba grzebnąć ręcznie - miła odmiana po "wszystko robiącym" Windows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Po drugie - lekkość. &lt;a href="http://slim.berlios.de/"&gt;SLiM&lt;/a&gt; i &lt;a href="http://www.enlightenment.org/"&gt;E17&lt;/a&gt; po prostu.... miód na mojego biednego &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;-a, który umierał pod jarzmem &lt;a href="http://www.ubuntu.pl/"&gt;Ubuntu&lt;/a&gt;. Teraz rozwinął skrzydła.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Po trzecie - dokumentacja. Wszystko działa, krok po kroku opisane, właściwie nie miałem problemu ze znalezienim czegokolwiek. Opisane jest po prostu wszystko, w łatwym języku. Jakość instrkcji stuprocentowo wynagradza fakt iż często trzeba jakieś pliki systemowe zmienić manualnie.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Po czwarte - filozofia systemu. Taki sposób uczy Cię jak działa system a przez to rozwija.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Po piąte - model wydawniczy. Nowe wersje systemu to nic innego jak zwykły upgrade paczek &lt;b&gt;pacman -Su&lt;/b&gt; raz na jakiś czas i nie muszę nic przeinstalowywać, pamiętać o oddzielnej partycji HOME, martwić się ustawieniami z HOMEDIR pochodzących z poprzedniej wersji systemu - nic. Niemal czysty bleeding edge w paczkach :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8888208431140362201?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8888208431140362201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8888208431140362201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8888208431140362201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8888208431140362201'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/10/jednak-arch-linux.html' title='Jednak Arch Linux'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2496038181248734349</id><published>2010-09-30T23:41:00.001-07:00</published><updated>2010-09-30T23:54:15.500-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='chromeos'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu - to już dla mnie zbyt wiele</title><content type='html'>&lt;div style="text-align: justify;"&gt;Moje używanie linuksa to najświeższe Ubuntu na beztrosko uruchomionym &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; pod kontrolą radośnie działającego Windows 7 :) Dlaczego? Wygoda - nie muszę restartować komputera gdy zmieniam system, pełna kompatybilność sprzętowa - sprzęt nadal obsługuje Windows, który ma do niego dedykowane sterowniki nie zaś Linuks, który ich nie posiada i przez to nie mogłem np. wyłączyć głośników w Laptopie. Te dwa powody skłaniają mnie do korzystania z VirtualBox, ale co z dystrybucją?&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ubuntu zmienia się z roku na rok. Dzisiaj przeczytałem listę zmian &lt;a href="http://www.dobreprogramy.pl/Canonical-wydal-Ubuntu-10.10-RC,Aktualnosc,20663.html"&gt;Ubuntu 10.10 RC&lt;/a&gt;. Powiem krótko - nie interesuje mnie większość z nich. Oczywiście - nie uważam, że są złe. Moje użytkowanie Linuksa to ostatnio czysta deweloperka: Google Chrome, Vim, SSH, SCP, Ruby, Python, PHP - koniec. Najczęściej uruchamianym przeze mnie programem jest Terminal, w drugiej kolejności Google Chrome.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wszystko co dla mnie jest fajne w nowej wersji systemu to nowe wersje programu. Wiem, że &lt;a href="http://www.canonical.com/"&gt;Canonical&lt;/a&gt; od dawna pracuje nad user-friendly systemu i dobrze im to wychodzi jednak dla mnie zmiany zachodzą w miejscach systemu, których w ogóle nie używam. Co rzutuje na moją pracę?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Chyba największą zmiana dla mnie jest nowa wersja oprogramowania, z mniejszą ilością bugów i nowymi featurami. Gdyby więc mieć tylko system, który cały ewoluuje na zasadzie &lt;b&gt;apt-get update &amp;amp;&amp;amp; apt-get upgrade&lt;/b&gt; to dla mnie to rozwiązanie byłoby idealne.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Minimalna dystrybucja - to był mój pierwszy pomysł. Debian w wersji base z doinstalowanymi paczkami, których wymagam. Z drugiej strony kiedyś już tak żyłem i Ubuntu okazało się o tyle lepsze, że gdy potrzebowałem czegoś "nagle" nieprzewidzianie to w Ubuntu już to miałem - w Debianie musiałem czekać aż się zainstaluje. Tak więc odchudzona wersja Ubuntu byłaby super. Na tyle obszerna aby miała już wiele rzeczy zainstalowanych, na tyle lekka aby nie przycinała VirtualBoxa. Jednak w międzyczasie wpadł mi do głowy inny pomysł - &lt;a href="http://www.chromium.org/chromium-os"&gt;ChromeOS&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;ChromeOS może okazać się "świętym gralem" dla osoby z moimi wymaganiami. Jest Google Chrome, jest konsola - cóż więcej mi trzeba? Oczywiście pod warunkiem, że będzie działał na VirtualBox - co się wkrótce okaże. Na pewno spróbuję tego systemu i przekonam się czy spełni moje oczekiwania. Do tego czasu pomyślę nad jakąś lżejszą dystrybucją Linuxa, która odciąży trochę moje zasoby VirtualBoxowe :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2496038181248734349?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2496038181248734349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2496038181248734349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2496038181248734349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2496038181248734349'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/09/ubuntu-to-juz-dla-mnie-zbyt-wiele.html' title='Ubuntu - to już dla mnie zbyt wiele'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8457504856686417586</id><published>2010-09-19T03:05:00.001-07:00</published><updated>2010-10-02T07:46:21.010-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='polyglot persistence'/><title type='text'>Nie tylko relacyjne bazy danych</title><content type='html'>&lt;a href="http://blog.heroku.com/archives/2010/7/20/nosql"&gt;Artykuł&lt;/a&gt;, na który ostatnio się natknąłem uświadomił mnie, że w projektach, które ostatnio tworzę wcale nie wykorzystuję relacyjnych baz danych. Wręcz przeciwnie. Do wyszukiwarki &lt;a href="http://1procent.zhr.pl/"&gt;1procent.zhr.pl&lt;/a&gt; wykorzystałem &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;. W ankiecie do głosowania &lt;a href="http://zodb.org/"&gt;ZODB&lt;/a&gt;, w mod_spam'ie, do którego nawet ręki nie przyłożyłem co prawda, chodzi o implementację &lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt; albo &lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt;.&lt;div&gt;Kolejnym odkryciem było dla mnie: "Przecież &lt;a href="http://www.reviewboard.org/"&gt;Review Board&lt;/a&gt; poza &lt;a href="http://pl.wikipedia.org/wiki/RDBMS"&gt;RDBMS&lt;/a&gt; używa &lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt;!". Nie musiałem więc daleko szukać realnego zastosowania &lt;a href="http://www.slideshare.net/jwoodslideshare/polyglot-persistence-two-great-tastes-that-taste-great-together-4625004"&gt;polyglot persistence&lt;/a&gt; w projekcie, z którym ostatnio mam dużo styczności.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cieszy fakt, że istnieje wiele prostych w użyciu, szybkich do przyswojenia dedykowanych narzędzi, które można wykorzystać w swoich aplikacjach. Czasy kiedy pisało się aplikację z użyciem wyłącznie &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; w moim życiu mijają. Czuję, że częściej będzie to coś znacznie bardziej dedykowanego, a w przypadku większych projektów na relacyjnej bazie danych się nie skończy - a silników przechowywania informacji będzie więcej niż dwa (a na pewno jeden).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8457504856686417586?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8457504856686417586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8457504856686417586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8457504856686417586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8457504856686417586'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/09/nie-tylko-relacyjne-bazy-danych.html' title='Nie tylko relacyjne bazy danych'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2501262665345355306</id><published>2010-09-19T00:44:00.000-07:00</published><updated>2010-09-19T00:57:54.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><title type='text'>Flask - Nie tylko Bottle</title><content type='html'>W poprzednim wpisie pisałem o &lt;a href="http://bottle.paws.de"&gt;Bottle&lt;/a&gt; jako fajnym microframeworku dla Pythona. Jeszcze wczoraj zupełnie przypadkiem trafiłem na &lt;a href="http://flask.pocoo.org/"&gt;Flaska&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Na pierwszy rzut oka zniechęca mnie fakt, że zbudowany jest na &lt;a href="http://werkzeug.pocoo.org/"&gt;WerkZeug&lt;/a&gt;. W drugim rzucie &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; wymaga ciut więcej kodu niż &lt;a href="http://bottle.paws.de/"&gt;Bottle&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;from flask import Flask&lt;br /&gt;app = Flask(__name__)&lt;br /&gt;&lt;br /&gt;@app.route("/")&lt;br /&gt;def hello():&lt;br /&gt;    return "Hello World!"&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    app.run()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Jednak później jest już tylko lepiej. Dostępna funkcja &lt;span style="font-weight:bold;"&gt;url_for&lt;/span&gt; do budowania poprawnych linków - to strzał w dziesiątkę. Dokładnie to czego brakowało mi w &lt;a href="http://bottle.paws.de/"&gt;Bottle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Renderowanie szablonów odbywa się tutaj bardziej w stylu &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt;. Domyślnym mechanizmem jest &lt;a href="http://jinja.pocoo.org/2/"&gt;Jinja2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dokumentacja &lt;a href="http://flask.pocoo.org/"&gt;Flaska&lt;/a&gt; wypada o niebo lepiej aniżeli konkurenta. W dokumentacji &lt;a href="http://bottle.paws.de/"&gt;Bottle&lt;/a&gt; zdażają się działy mające status &lt;span style="font-style:italic;"&gt;todo&lt;/span&gt;. Tutaj nie znajdziemy nic podobnego.&lt;br /&gt;&lt;br /&gt;Na koniec dwie rzeczy, które pozytywnie mnie zaskoczyły we &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt;. Wsparcie dla &lt;a href="http://flask.pocoo.org/docs/quickstart/#message-flashing"&gt;Flash Messages&lt;/a&gt; oraz &lt;a href="http://flask.pocoo.org/docs/quickstart/#logging"&gt;wbudowane loggery aplikacji&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2501262665345355306?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2501262665345355306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2501262665345355306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2501262665345355306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2501262665345355306'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/09/flask-nie-tylko-bottle.html' title='Flask - Nie tylko Bottle'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4158794951398697492</id><published>2010-09-14T03:42:00.000-07:00</published><updated>2010-09-19T00:58:53.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bottle'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='zodb'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><title type='text'>Bottle i ZODB w jednym stali domu ...</title><content type='html'>&lt;div&gt;... o swojej genialności nie mówiąc nikomu.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Wybory w &lt;a href="http://matrix.zhr.pl/blog/"&gt;Kręgu Harcerstwa Starszego Matrix&lt;/a&gt; - napisanie prostej ankiety. W końcu okazja, aby przećwiczyć coś nowego. Tym razem &lt;a href="http://www.zodb.org/"&gt;ZODB&lt;/a&gt; i &lt;a href="http://bottle.paws.de/"&gt;Bottle&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bottle wydaje się nadal rozwijany oraz w jakiś sposób subiektywnie "lepszy" niż &lt;a href="http://bobo.digicool.com/"&gt;Bobo&lt;/a&gt;. Posiada prosty wbudowany system szablonów. Bazuje on na założeniu, że szablony znajdują się w katalogu "views" dzięki czemu unikamy potrzeby konfiguracji (jak w Rails - convention over configuration).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;W obu frameworkach brakuje mi jakiejś funkcji, która generowałaby poprawne linki - chociaż niby co to za problem zrobić sobie jednolinijkową funkcję do tego. Może tyle na temat micro-frameworków. Czas o ZODB.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O ZODB usłyszałem od mojego przyjaciela, który pracuje od jakiegoś już czasu w &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt; i jest tym CM/F/S em zafascynowany. Kiedyś wracając z kina powiedział "No przypisujesz sobie jak chcesz atrybuty/klucze do obiektu i jest". Brzmiało obiecująco jednak nie okazało się tak piękne.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Plone robi bardzo dużo za nas. Pierwsze - nie wystarczy przypisać. ZODB jest bazą transakcyjną i nasze działania wymagają commitowania. Najprostsza sytuacja wygląda tak:&lt;/div&gt;&lt;blockquote&gt;import transaction&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Tutaj sobie zmieniasz&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;transaction.commit()&lt;br /&gt;&lt;/blockquote&gt;Kolejna sprawa, dojście do której zajęło mi sporo czasu - ZODB wychwytuje zmiany tylko elementów korzenia. Tak więc:&lt;br /&gt;&lt;blockquote&gt;# W bazie danych mamy taką strukturę:&lt;br /&gt;# root.osoby = [{'id': 1, 'imie': 'Jan'}, {'id': 2, 'imie': 'Katarzyna'}]&lt;br /&gt;&lt;br /&gt;# Łączysz się z bazą danych&lt;br /&gt;&lt;br /&gt;root.osoby[1]['imie'] = 'Kasia'&lt;br /&gt;transaction.commit()&lt;br /&gt;&lt;/blockquote&gt;Nie zadziała ponieważ ZODB nie przeczesuje w głąb struktur danych w celu poszukiwania zmian. Musimy więc zrobić na przykład:&lt;br /&gt;&lt;blockquote&gt;osoby = root.osoby&lt;br /&gt;osoby[1]['imie'] = 'Kasia'&lt;br /&gt;root.osoby = osoby&lt;br /&gt;transaction.commit()&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Co odniesie skutek. Jak więc widać ZODB jest znacznie fajniejszy w Plone niż poza nim choć nadal jest fajny :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4158794951398697492?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4158794951398697492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4158794951398697492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4158794951398697492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4158794951398697492'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/09/bottle-i-zodb-w-jednym-stali-domu.html' title='Bottle i ZODB w jednym stali domu ...'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3325282742665550807</id><published>2010-09-05T00:46:00.000-07:00</published><updated>2010-09-05T01:11:25.309-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal8'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal7'/><title type='text'>Metoda małych zwycięstw a Drupal 7</title><content type='html'>&lt;div style="text-align: justify;"&gt;Od kilku miesięcy skrupulatnie obserwuję dział &lt;b&gt;Critical Issues (D7)&lt;/b&gt; i powiem szczerze, że osobiście jestem przygnębiony.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Każdy kto choć odrobinę zajmował się metodologiami Agile czytał o potrzebie małych zwycięstw, które motywowałyby i podnosiły wydajność zespołu. To co dzieje się w critical issues jest dokładnym anty-przykładem.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jak każdy wie &lt;a href="http://drupal.org/"&gt;Drupal 7&lt;/a&gt; w wersji beta wyjdzie gdy ilość krytycznych błędów spadnie do zera. Wszystko pięknie jednak śledząc każdego dnia spadki i wzrosty oraz pobieżnie przeglądając statusy poszczególnych zgłoszeń jestem załamany.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Generalnie ilość zgłoszeń utrzymuje się na poziomie trzydziestu kilku. Bywają okresy, po których liczba ta spadała do dwudziestu lub nawet kilkunastu jednak był to raczej efekt mechanizmu, który po 14 dniach braku aktywności uznaje zgłoszenie za rozwiązane aniżeli faktyczne zakończenie rozwiązywania problemu.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Oczywiście mechanizm ten ma sens i zgłoszenia tak zamykane zawierały szereg łatek będących propozycjami rozwiązania problemu. Odnoszę jednak wrażenie, że proces recenzji trwa w nieskończoność i brak jakiegoś &lt;a href="http://en.wikipedia.org/wiki/Benevolent_Dictator_For_Life"&gt;BDFL&lt;/a&gt; w tym całym zamieszaniu.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wracając do małych sukcesów. Wiele projektów przyjmuje bardzo prostą i moim zdaniem słuszną zasadę - skupiamy się w danej wersji na zaimplementowaniu kilku - dwóch, trzech rzeczy i koniec. Cel jest niedaleki, do osiągnięcia w niedługim czasie i bardzo dobrze określony. W Drupalu brakuje mi dobrze określonego celu. Metoda &lt;a href="http://www.time-management-guide.com/goal-setting-guidelines.html"&gt;SMART&lt;/a&gt; byłaby tutaj nieoceniona i znacznie przyspieszyłaby wydanie stabilne. Jednak już sam fakt braku "małych kroków" sprawia iż nie widać końca a utrzymująca się liczba bugów nie cieszy, brak jest małych sukcesów, które podniosłyby morale.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dobrą drogą dla projektów OpenSource jest stawianie sobie malutkich celów. Dobrze widać to w przypadku &lt;a href="http://www.google.com/chrome/"&gt;Google Chrome&lt;/a&gt;. Niemal od samego początku wiadomo jakie nowe funkcje pojawią się w nowej wersji, każda kolejna wersja stabilna cieszy i przynosi kolejne usprawnienia. Wszystko dzięki po mistrzowsku zaprojektowanemu procesowi (Review process, continous integration, tests), używaniu nowoczesnych narzędzi (Buildbot, Review Board, coś na wzór ANT ale dla typowe dla GNOME) i jasno określonym zasadom. Drupal mógłby się tu wiele nauczyć.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Moim zdaniem po wydaniu Drupala 7 społeczność powinna przestawić się na wydania drupala 7.1, 7.2,7.3 z kolejnymi elementami przygotowywanymi przez społeczność. Projekt rozwijałby się na bieżąco, nadążał za obecnie panującymi trendami, był innowacyjny i nowoczesny. Wydanie wielkiego Drupala 8 za kolejne kilka lat pozostawiłoby ponownie siódemkę w tyle i sprawiło, że strony na niej oparte trącą myszką.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Życzę zespołowi Drupala 8 lepszego określania celów, stosowania metody małych sukcesów, małych wydań przynoszących cieszące użytkowników zmiany i rychłego wydania ósemki :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3325282742665550807?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3325282742665550807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3325282742665550807' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3325282742665550807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3325282742665550807'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/09/metoda-maych-zwyciestw-drupal-7.html' title='Metoda małych zwycięstw a Drupal 7'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1466799343631835679</id><published>2010-08-01T01:17:00.001-07:00</published><updated>2010-08-01T01:45:15.651-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Maszyna integracyjna dla Drupala</title><content type='html'>&lt;div style="text-align: justify;"&gt;Od kilku miesięcy śledzę spadającą i rosnącą momentami liczbę krytycznych bugów zgłoszonych na drupal.org. Zwane beta-blockers, ponieważ są to błędy nie pozwalające wydać wersji beta, to pojawiają się to giną. Dzisiaj przyjrzałem się treściom i komentarzom do zgłoszonych problemów.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Z grubsza wygląda to tak. Jest zgłoszony bug i w pierwszych trzech komentarzach zaraz opublikowana łatka. Potem następuje seria odpowiedzi w stylu "działa", "nie działa", " a u mnie zgłasza błąd ABC", "ja dostaję Exception takie" itd... W międzyczasie ktoś jeszcze opublikuje unit test, który ma sprawdzać poprawność rozwiązania. Dlaczego o tym piszę?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Wychodzi na to, że zgłoszony problem może wydawać się naprawiony do czasu kiedy jakaś osoba stwierdzi, że u niej nie działa i nie pojawi się znowu na liście beta-blockerów. Najgorsze w tym wszystkim, że to może trwać tygodniami. Zanim ktoś odpisze, odpali u siebie testy, zgłosi swój komentarz. Architektur może być wiele i problemy mogą wynikać z różnych przyczyn. Dramat.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O ile szybciej Drupal rozwiązywałby takie problemy gdyby posiadać maszynę integracyjną, na której wszystkie testy byłyby odpalane i testowane w znanym,wspieranym środowisku? Na przykład mieć na VirtulBox kilkanaście konfiguracji z różnymi systemami, wersjami MySQL/PHP i odpalać na nich testy proponowanych łatek. Polegać na wynikach tych testów pochodzących z maszyn integracyjnych a nie temu co mówi społeczność.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Łatwo zauważyć, że w prosty sposób wydanie projektu może być sabotowane przez zgłaszanie fikcyjnego problemu. Może, nie zablokowałoby to wydania w ogóle ale na pewno je opóźniło. Bardzo pod tym względem podoba mi się rozwijanie Google Chrome gdzie infrastrukturę - choć skromną - zapewnia Google. Testy automatyczne są i działa to wszystko - powoli, ale sprawnie.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nie wiem z czego wynika brak zdefiniowanego procesu w Drupalu - braku infrastruktury czy doświadczenia głównych członków stojących za projektem. Moim zdaniem można byłoby się pokusić o rozproszony system testów - coś na zasadzie &lt;a href="http://setiathome.berkeley.edu/"&gt;SETI@HOME&lt;/a&gt;. Ja osobiście chętnie udostępniłbym po sieci jakiegoś VirtualBoxa nocami. Zobaczymy.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;@EDIT&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Najpierw strzelam potem pytam. Istnieje rozproszony system testów przebudowywany obecnie. Można o nim poczytać na: &lt;a href="http://qa.drupal.org/"&gt;http://qa.drupal.org/&lt;/a&gt; oraz &lt;a href="http://groups.drupal.org/drupal-org-testing-infrastructure"&gt;http://groups.drupal.org/drupal-org-testing-infrastructure&lt;/a&gt;. Jest też wtyczka do review o nazwie &lt;a href="http://drupal.org/project/coder"&gt;Coder&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/6836763300070903809-1466799343631835679?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1466799343631835679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1466799343631835679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1466799343631835679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1466799343631835679'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/08/maszyna-integracyjna-dla-drupala.html' title='Maszyna integracyjna dla Drupala'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4299134756912297484</id><published>2010-07-26T07:40:00.000-07:00</published><updated>2010-07-26T07:52:09.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='bobo'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='sinatra'/><category scheme='http://www.blogger.com/atom/ns#' term='microframework'/><title type='text'>Umarł król niech żyje król</title><content type='html'>Pisałem swojego czasu o tym jak zauroczyła mnie swoją prostotą &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt; o &lt;a href="http://werkzeug.pocoo.org/"&gt;Werkzeug&lt;/a&gt; jako analogicznym rozwiązaniu dla Pythona. Dzisiaj przyszło mi wrócić do pewnego skryptu WSGI i zacząć mocno go przerabiać. Jedna metoda wystawiona na zewnątrz z użyciem Werkzeug z wykorzystaniem kilku funkcji pomocniczych.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Dzisiaj, kiedy przyszło mi dopisać do tego kilka dodatkowych metod znajdujących się pod innymi adresami i wysłanie formularza nie wytrzymałem. Werkzeug wymagała ode mnie wklepania masy kodu do mapowania URLi, potem napisania obsługi w application, do tego dokumentacja nie odpowiedziała mi na pytanie jak wystawić metodę tylko jako GET :| Poddałem się. Ta sytuacja skłoniła mnie do poszukiwań nowej Sinatry dla Pythona.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tak trafiłem na framework &lt;a href="http://bobo.digicool.com/"&gt;Bobo&lt;/a&gt;. Jestem po prostu zauroczony! Banalne, proste dekoratory (jak w Sinatra) - kilka metod, nic wyszukanego. Gdyby ktoś był ciekaw jak podpiąć do mod_wsgi polecam artykuł na blogu Grahama Dumpletona &lt;a href="http://blog.dscpl.com.au/2009/08/using-bobo-on-top-of-modwsgi.html"&gt;"Using bobo on top of mod_wsgi"&lt;/a&gt;. Krótko mówiąc - umarł król niech żyje król.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Werkzeug stał się w moich oczach krową i wyleciał z sektora, w którym miał być najlepszym. Teraz to takie Django w wydaniu zrób to sam. Czyli moim zdaniem - bez sensu. Bobo jest troszkę magiczne, ale ten rodzaj magii w Pythonie jest dla mnie nie tylko akceptowalny, ale nawet pożądany. Polecam wszystkim, którzy szukają wygodnego micro frameworka dla Pythona.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4299134756912297484?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4299134756912297484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4299134756912297484' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4299134756912297484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4299134756912297484'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/07/umar-krol-niech-zyje-krol.html' title='Umarł król niech żyje król'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-307865744637573429</id><published>2010-07-04T12:15:00.000-07:00</published><updated>2010-07-04T12:26:07.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal6'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal7'/><title type='text'>Architektura typu plugin</title><content type='html'>Tworzyłem już naprawdę &lt;b&gt;wiele&lt;/b&gt; stron wykorzystując frameworki MVC. Klocuszek po klocuszku, trybik po trybiku konstruowałem żmudnie kolejne mechanizmy, bloki, elementy, funkcje, klasy, obiekty, widoki, modele, kontrolery.&lt;div&gt;Jednak czy znasz to uczucie kiedy trafiasz na aplikację, która ... jest tym czego dokładnie szukałeś. Nie? Ja też nie ponieważ często trafiam na aplikację, która &lt;b&gt;prawie&lt;/b&gt; jest tym czego dokładnie szukałem. Czasami widzisz program, który robi to co chcesz tylko, z grubsza zmieniłbyś w nim kilka drobiazgów. Co pozostaje zrobić w takim przypadku?&lt;/div&gt;&lt;div&gt;Można napisać bardzo podobny program od zera, jednak szlak Cię trafia że wynajdujesz koło na nowo tylko dla kilku detali.&lt;/div&gt;&lt;div&gt;Można spróbować przerobić toola, ale utrzymywanie swojego forka to wciąż uciążliwe i czasochłonne zadanie.&lt;/div&gt;&lt;div&gt;Rzadko istnieje trzecia opcja - możesz napisać plugin, który przekształci produkt pod Twoje potrzeby.&lt;/div&gt;&lt;div&gt;Na &lt;a href="http://phpcon.pl/2010/"&gt;PHPCon 2010&lt;/a&gt; dużym zainteresowaniem cieszyła się prezentacja &lt;a href="http://www.slideshare.net/phpprog/wprowadzenie-do-implementacji-architektur-plugin-w-php-4418977"&gt;"Wprowadzenie do Implementacji Archietktury typu plug-in"&lt;/a&gt;. Emocje z nim związane były różne jednak mam wrażenie, że Ci, którzy nie do końca byli zadowoleni przeoczyli fakt iż moja prezentacja o Drupalu była właśnie o architekturze typu plug-in.&lt;/div&gt;&lt;div&gt;Drupal pozwala Ci zupełnie z zewnątrz, z poziomu własnego pluginu, zaingerować w najgłębsze mechanizmy. Wszystko dzięki dziesiątkom hooków, które udostępnia na różnych poziomach abstrakcji.&lt;/div&gt;&lt;div&gt;Jeżeli masz pomysł na przerobienie Drupala prawdopodobnie wystarczy, że napiszesz swój własny plugin i wszystko uda Ci się uzyskać w żaden sposób nie ingerując w oryginalny kod Drupala. Do tego nie będziesz musiał budować podstawowych mechanizmów, takich jak: użytkownicy, newsy, kategorie, menu, treści od nowa. Po prostu skorzystasz z istniejących, a miejsca, w których Ci nie odpowiadają - zmodyfikujesz.&lt;/div&gt;&lt;div&gt;Unikniesz w ten sposób wynajdowania koła na nowo. Polecam każdemu, kto zastanawia się czy skorzystać z gotowego CMSa czy wybrać framework, spróbować Drupala (jako frameworka programistycznego of course :))&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-307865744637573429?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/307865744637573429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=307865744637573429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/307865744637573429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/307865744637573429'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/07/architektura-typu-plugin.html' title='Architektura typu plugin'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-696583030337004811</id><published>2010-07-04T07:17:00.000-07:00</published><updated>2010-07-04T07:45:35.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='przemyślenia'/><title type='text'>W Polsce nigdy nie było lepiej</title><content type='html'>W minioną sobotę miałem przyjemność odbyć bardzo sympatyczną rozmowę w przedziale pociągu TLK relacji Gdańsk Wrzeszcz - Włocławek.  Rozmawiałem z ludźmi myślę, że koło sześćdziesiątki. Wspomniałem o tym, że kilkanaście dni temu obroniłem dyplom, cieszę się, że już mam pracę, odczuwam jednak dyskomfort związany z widmem brania kredyty na całe życie w celu kupienia mieszkania. Słowo mieszkanie przy realiach cen w Gdańsku sprowadza się do kawalerka.&lt;div&gt;Dyskusja zboczyła na inne tory i mogłem dowiedzieć się jak było &lt;b&gt;kiedyś&lt;/b&gt;. Przytoczę informacje, które pozyskałem w trakcie tej rozmowy. No więc &lt;b&gt;kiedyś&lt;/b&gt; nie było  problemu z dostaniem pracy. Możliwość zatrudnienia uzyskiwała już osoba w wieku lat szesnastu - otrzymywała wtedy opiekuna w zakładzie, który za nią odpowiadała. Kończenie studiów nie było powszechne. Już technik otrzymywał lepsze stanowisko w pracy zaś osoba z wykształceniem wyższym nie musiała się w ogóle martwić o zatrudnienie - była niemal natychmiast rozchwytywana na rynku pracy. Osób takich było stosunkowo niewiele ponieważ już do samego liceum szły osoby, które chciały iść dalej na studia. Reszta wybierała zawodówki i technika. Magister, czy inżynier był chętnie zatrudniany gdyż jako członek kadry zakładowej podnosił prestiż przedsiębiorstwa. Na uczelniach dostępne były stypendia różnych zakładów pracy, które spłacało się kilku letnim stażem odbytym w danym przedsiębiorstwie po ukończeniu studiów.  Pracodawcy "bili się" o ludzi z wykształceniem wyższym, których była bardzo konkretna, ograniczona ilość.&lt;/div&gt;&lt;div&gt;Jeżeli ktoś chciał i był zdolny - a pracował - zakład chętnie wysyłał go na uczelnię, umożliwiał sześciogodzinny tryb pracy, dawał urlopy uczelniane na czas sesji oraz udzielał wszelkiego wsparcia w ukończeniu studiów. Tak było &lt;b&gt;kiedyś&lt;/b&gt;. Kiedy zapytałem o to tajemnicze &lt;b&gt;kiedyś&lt;/b&gt; - okazało się, że ten idylliczny obrazek to nic innego jak czasy socjalizmu w Polsce. Czasy, w których Polska zaciągnęła ogromny dług i żyła na kredyt, czasy, w którym produkowane dobra były natychmiast wywożone na tereny ZSRR a pułki w sklepach świeciły pustką. Czasy, w którym cała Polska żyła na krechę.&lt;/div&gt;&lt;div&gt;Pojawiło się jednak w mojej głowie pytanie. &lt;b&gt;A jak wyglądało jakieś inne kiedyś?&lt;/b&gt; No więc &lt;b&gt;kiedyś &lt;/b&gt;(wcześniej - przed okresem terroru socjalistycznego) była II Wojna Światowa, która jest złym przykładem szukania jak kiedyś w Polsce było. Dużo wcześniej &lt;b&gt;kiedyś&lt;/b&gt; była I Wojna Światowa a jeszcze wcześniej &lt;b&gt;kiedyś&lt;/b&gt; był rozbiór, po którym Polska pojawiała się na mapie dopiero po I Wojnie Światowej. Tak więc to już nie czasy współczesne, a więc odpada. Więc co tu dużo mówić - pozostało XX-lecie międzywojenne.&lt;/div&gt;&lt;div&gt;Skąd to pytanie? Skoro dzisiaj narzekamy często, że w Polsce nie jest dobrze to ... kiedy w Polsce było dobrze? I czy to było bardzo dawno temu? Jak wtedy było w Polsce? A może dałoby się czegoś nauczyć, wyciągnąć lekcję na dzisiejsze czasy.&lt;/div&gt;&lt;div&gt;Więc Mamy nasze XX-lecie między wojenne. Kiedy pytałem dziadków jak ten okres wyglądał... Cóż. Trudno szukać w tym okresie jakiś wzorców na dni dzisiejsze. Małżeństwa dążące do połączenia majątków, mezalianse, ludzie podzieleni na kasty, wszechobecne rzemiosło.&lt;/div&gt;&lt;div&gt;Od Okrągłego Stołu minęło 21 lat. Tyle co od końca I do początku II Wojny Światowej. Nasza elity były przez lata eksterminowane: I Wojna Światowa, II Wojna Światowa, okres socjalizmu. W Kwietniu nastąpiła do tego katastrofa w Smoleńsku.&lt;/div&gt;&lt;div&gt;Ten punkt widzenia uświadomił mnie, że nikt tak naprawdę w Polsce nie wie jak powinna wyglądać, bo Polska tak długo nie istniała na mapie, że nikt kto mógłby to wiedzieć - nie przeżył. Jesteśmy jak dziecko, które uczy się chodzić na nowo, raczkuje, wywraca się, potyka i wstaje znowu. Robimy kroczek za kroczkiem i raczkujemy i nie ma w tym nic czego należałoby się wstydzić. &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-696583030337004811?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/696583030337004811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=696583030337004811' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/696583030337004811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/696583030337004811'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/07/w-polsce-nigdy-nie-byo-lepiej.html' title='W Polsce nigdy nie było lepiej'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3108462460639115594</id><published>2010-06-17T01:52:00.000-07:00</published><updated>2010-06-17T02:06:57.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pkp'/><category scheme='http://www.blogger.com/atom/ns#' term='intercity'/><title type='text'>Profesjonalne PKP Intercity</title><content type='html'>28 Maja tego roku złożyłem zapytanie związane z pewną kłopotliwą dla mnie sytuacją, która spotkała mnie na Dworcu PKP w Kielcach w kasie Intercity. Dzisiaj, to jest 17 Czerwca 2010 otrzymałem bardzo satysfakcjonującą mnie odpowiedź. Jestem naprawdę zadowolony z uzyskanego efektu :) Przytaczam zarówno swój e-mail jak i odpowiedź InterCity.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Moje zapytanie&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Witam Państwa!&lt;br /&gt;&lt;br /&gt;Ostatnio powracając z południa Polski Państwa Kolejami bardzo niemiło zaskoczyła mnie następująca sytuacja: kasjerka poproszona o wystawienie biletu poprosiła mnie o dokładne informacje dotyczące przesiadek oraz numerów pociągów. Mówiąc iż nie posiadam takich informacji została mi wręczona karteczka z numerem telefonu Infolinii. Przy kasach nie było kolejek, a w obszarze budynku dworca nie dostrzegłem żadnego punktu informacyjnego. W takiej sytuacji spodziewałbym się udzielenia przez kasjerkę informacji o możliwych połączeniach, ich koszcie oraz możliwości kontynuowania podróży. Poczęstowany karteczką z numerem telefonu, którego koszt wynosi 1,28/minutę poczułem się najzwyczajniej w świecie zbyty. Moje pierwsze pytanie brzmi: jakie w tym zakresie obowiązki ma kasjer sprzedający bilety? Czy ma obowiązek udzielenia mi informacji o dalszym połączeniu oraz udzieleniu pomocy w rozpoczęciu lub&lt;br /&gt;kontynuowaniu podróży?&lt;br /&gt;&lt;br /&gt;Później sytuacja się skomplikowała. System nie pozwalał wystawić miejscówki na klasę drugą pociągu, którym miałem przebyć odcinek Kraków - Gdańsk. Kasjerka twierdziła iż zwracany przez system błąd nie wskazuje na brak miejscówek. Poprosiłem więc o wypełnienie biletu ręcznie - otrzymałem odpowiedź, że to niemożliwe. Poprosiłem więc o poświadczenie z kasy zwalniające mnie z opłat pobieranych przez konduktora w przypadku kupna biletu w pociągu - i  ponownie otrzymałem odpowiedź, że to niemożliwe. Czy kasjer może wystawić bilet ręcznie w przypadku wystąpienia problemów z systemem? Czy kasjer może wystawić miejscówkę ręcznie w przypadku wystąpienia problemów z systemem? Czy kasjer może wydać poświadczenie zwalniające z pobierania opłaty u konduktora, w sytuacji, w której z obiektywnych przyczyn leżących po stronie pracownika InterCity nie udało się wystawić biletu w kasie?&lt;br /&gt;&lt;br /&gt;Zakłopotany klient&lt;br /&gt;--&lt;br /&gt;&gt;&lt;&gt; Jan Koprowski&lt;/blockquote&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Odpowiedź Intercity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;„PKP Intercity” S.A. uprzejmie dziękuje za uwagi zawarte w skierowanym e-mail.&lt;br /&gt;Wszelkie uwagi naszych klientów są ważnym  źródłem informacji o jakości świadczonych przez nas usług oraz pozwalają nam na wyeliminowanie&lt;br /&gt;nieprawidłowości, których niestety czasami nie udaje nam się uniknąć.&lt;br /&gt;Chcielibyśmy podkreślić,  że wszystkie uwagi i spostrzeżenia zarówno z podróży naszymi pociągami, jak również podczas  świadczenia usług przez Spółkę „PKP Intercity”, są przez nas dokładnie analizowane. Dążąc do stałej poprawy jakości oferowanych przez nas usług, w przypadkach uzasadnionych podejmowane są odpowiednie działania korygujące, mające na celu wyeliminowanie powstałych nieprawidłowości. Z tego względu opinie naszych podróżnych oraz wytworzony poprzez skargi i reklamacje dialog, bardzo sobie cenimy, gdyż daje nam możliwość doskonalenia poziomu obsługi podróżnych.&lt;br /&gt;Rzetelność w obsłudze podróżnych jest podstawowym obowiązkiem pracowników naszej Spółki jak również pracowników, którzy w naszym imieniu reprezentują Spółkę „PKP Intercity”.&lt;br /&gt;Uprzejmie informujemy, iż pracownik kasy biletowej powinien Panu udzielić stosownych informacji, tym bardziej, iż jak Pan twierdzi nie było kolejki podróżnych nabywających bilety na przejazd. Nadmieniamy, iz na Dworcu w Krakowie Głównym informacja znajduje się w holu głównym Dworca - okienko kasowe nr 13. &lt;br /&gt;W kwestii wystawienia dokumentów na przejazd, kasjer biletowy nie może wystawić ich ręcznie, może natomiast wydać poświadczenie zwalniające z pobierania opłaty dodatkowej u konduktora. &lt;br /&gt;Ponadto uprzejmie informujemy,  że na okoliczności poprawy jakości  świadczonych usług przez Spółkę „PKP Intercity”, treść złożonej przez Pana skargi przedstawiono do wiadomości wszystkim zainteresowanym pracownikom, aby podobne sytuacje nie miały miejsca. &lt;br /&gt;Za nieprofesjonalne zachowanie pracownika kasy biletowej uprzejmie przepraszamy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3108462460639115594?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3108462460639115594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3108462460639115594' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3108462460639115594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3108462460639115594'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/profesjonalne-pkp-intercity.html' title='Profesjonalne PKP Intercity'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5107226897964120442</id><published>2010-06-16T10:43:00.001-07:00</published><updated>2010-06-16T10:49:09.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><title type='text'>Przeglądarka na telefon</title><content type='html'>Wyobraźmy sobie świat, w którym nie istnieją przeglądarki dla telefonów komórkowych. Pewnego pięknego dnia przeglądając stare szpargały przypadkowo ocierasz starą lampę. Wychodzi z niej dżin i mówi, że uczyni dla Ciebie możliwym korzystanie z jednej z desktopowych przeglądarek na Twoim telefonie. Którą byś wybrał? Moje myślenie byłoby takie.&lt;div&gt;Internet Explorer? Nieee. Jest przecież za wolna i wszyscy piszą na nią w kółko wirusy. Po za tym są lepsze, bardziej zgodne ze standardami. Może Firefox? Ale kto chciałby czekać tyle czasu i zamulać telefon Firefoxem? Hmm Safari. Co Safari ma takiego czego nie ma konkurencja, poza tym - to dla maniaków Apple i iPodowców - nie dla mnie. No to co?&lt;/div&gt;&lt;div&gt;W moim przypadku na polu walki zostaje Opera i Chrome. Obie są szybkie, innowacyjne, tworzone z dużym przykładaniem się do look &amp;amp; feel klienta.&lt;/div&gt;&lt;div&gt;Obecnie Opera jest często najrozsądniejszym wyborem w przypadku przeglądarek internetowych na telefon. Jednak nawet gdyby istniała równie mocno rozwinięta konkurencja i tak byłaby w moim przypadku na drugim miejscu :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5107226897964120442?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5107226897964120442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5107226897964120442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5107226897964120442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5107226897964120442'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/przegladarka-na-telefon.html' title='Przeglądarka na telefon'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2764153556942313614</id><published>2010-06-05T11:48:00.000-07:00</published><updated>2010-06-05T11:56:33.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows code refactoring</title><content type='html'>Zastanawialiście się dlaczego Windows często wydaje sie tak ociężały? Jestem obecnie w trakcie pisania pracy magisterskiej. Extreme Programming i Alistair Cockburn ciąsają kołki na głowie wciąż mówiąc o wadze refaktoryzacji. Zastanawialiście się jak to jest z kodem źródłowym systemów operacyjnych? Wiadomo, że ciągła refaktoryzacja jest podstawą rozwoju, wzrostu wydajności, utrzymania elastyczności projektu. W jądrze systemu Linuks co kilka godzin (a może minut) jakiś maniak poprawia coś co zostało już obecnie zrobione wciąż usprawniające mechanizmy. Również architektura jest na bieżąco dostosowywana do zmieniających się potrzeb, warunków oraz rozmiarów projektu. Czy ktoś z was zastanawiał się kiedyś jak jest z systemem Windows? Ile razy dostajesz Windowsa? Raz. Ile razy dostajesz łatki? Średnio co miesiąc, ale czego one dotyczą? Kodu źródłowego systemu? Wątpię. Poprawiają znalezione błędy, łatają dziury. Czy kod systemu Windows jest w ogóle refaktoryzowany? Czy co kilka lat tworzony od nowa? Chciałbym kiedyś usłyszeć odpowiedź eksperta czy jego zdaniem taki kod ma w ogóle szansę być refaktoryzowanym. Zgodnie z zasadą rosnącego długu technicznego (czy ktoś go w Windows w ogóle spłaca?!) tańszym wydaje się napisanie Windows co 10 lat na nowo aniżeli refaktoryzacja starego kodu. I pewnie różnica między 9x, NT i Vistą na tym właśnie polega. Nie wiem jak to jest naprawdę i ktoś może uznać mój wpis za FUD, ale pomyślcie chwilę i powiedzcie czy to tak nie wygląda?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2764153556942313614?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2764153556942313614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2764153556942313614' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2764153556942313614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2764153556942313614'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/windows-code-refactoring.html' title='Windows code refactoring'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5735212433749107797</id><published>2010-06-02T01:02:00.000-07:00</published><updated>2010-06-02T01:12:05.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='IE9'/><title type='text'>IE9 postawiło na ilość zdanych testów</title><content type='html'>Dzisiaj dzięki stronie &lt;a href="http://css3.pl/"&gt;css3.pl&lt;/a&gt; trafiłem na zestawienie &lt;a href="http://samples.msdn.microsoft.com/ietestcenter/"&gt;IE9 Testing Center&lt;/a&gt;. Jak widać twórcy przeglądarki postawili na ilość zdanych poprawnie testów. Nie oznacza to, że IE9 posiada więcej zaimplementowanych nowinek. Tablica &lt;a href="http://www.findmebyip.com/litmus/#target-selector"&gt;Web Designer's Checklist&lt;/a&gt; wskazuje na to iż w ilości obsługiwanych nowinek przoduje Google Chrome oraz Safari. Jednak to, że coś "działa" nie oznacza, że przechodzi testy i na odwrót. Już kilka lat temu Microsoft broniąc IE8 mówił iż zdanie testów ACID3 wcale nie oznacza zgodności ze standardami. W skrócie - można napisać przeglądarkę, która zdaje ACID3 na 100% i nadal źle wyświetla strony. Przemilczało jednak, że w drugą stronę już to nie działa.&lt;br /&gt;Postawienie na zdawalność testów to na pewno dobry krok z punktu widzenia refactoringu kodu oraz późniejszego utrzymywania kodu. TDD zawsze to ułatwiało. Tutaj jest to prostsze bo testów nie trzeba opracowywać samemu (chociaż pewnie Microsoft posiada ich sporo). Nie jest to jednak ruch marketingowy. Wszak przeciętny świadomy, surfer ocenia czy jakiś selektor CSS3 czy nowość HTML5 mu działa, albo nie - nie patrzy czy działa zgodnie z warunkami testowymi. Dlatego przeglądarki takie jak Firefox, które często wprowadzają nowe funkcji działające w zły sposób będą cieszyły się lepszą renomą niż IE, które będzie wprowdzało nowości powoli acz konsekwentnie i rzetelnie. Aż nie chce mi się wierzyć, że piszę to o produkcie MS. Trzeba jenak przyznać, że podejście zepołu IE9 jest w końcu tym właściwym - zgodność ze standardami i zapewnienie wstecznej kompatybilności.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5735212433749107797?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5735212433749107797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5735212433749107797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5735212433749107797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5735212433749107797'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/ie9-postawio-na-ilosc-zdanych-testow.html' title='IE9 postawiło na ilość zdanych testów'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3963348112810966422</id><published>2010-06-02T00:57:00.000-07:00</published><updated>2010-06-02T01:00:26.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>Miłe zaskoczenie - css3.pl</title><content type='html'>Dzisiaj chciałem sprawdzić jak ma się domena &lt;a href="http://css3.pl"&gt;css3.pl&lt;/a&gt;. Patrzę - zajęta. Myślę "pewnie znowu jakiś baran kupił i trzyma nic na niej nie publikując". Byłem bardzo mile zaskoczony kiedy na witrynie znalazłem zestaw informacji o CSS3 :) w rodzimym narzeczu! Strona nie porywa wyglądem. Niewątpliwie jednak stanowi dobre źródło wiedzy o CSS3 i sporo podstawowych informacji o tej technologii. Brawo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3963348112810966422?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3963348112810966422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3963348112810966422' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3963348112810966422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3963348112810966422'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/mie-zaskoczenie-css3pl.html' title='Miłe zaskoczenie - css3.pl'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1162463637904774385</id><published>2010-06-01T23:39:00.000-07:00</published><updated>2010-06-01T23:48:01.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='werkzeug'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><title type='text'>Pylons 1.0 :) już jest!</title><content type='html'>Post może ciut spóźniony, ale 28 Maja wyszło &lt;a href="http://pylonshq.com/articles/archives/2010/5/pylons_10_released"&gt;Pylons w wersji 1.0&lt;/a&gt;. Jeszcze kilka dni temu z niecierpliwością czekałem na ten dzień :]&lt;div&gt;Moim zaniem numerek 1.0 zmieni bardzo wiele. Ludzie często mają wrażenie, że taka wersja to oznaka stabilności. Ci, którzy nie używali Pylons bo uważali je za niewykończone w końcu będą mogli spróbować.&lt;/div&gt;&lt;div&gt;Jeden z twórców frameworka ludzi, którzy uważają Pylons za niestabilny z powodu braku wersji 1.0 określił:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;i&gt;That's a shame for your friends..&lt;/i&gt;&lt;/blockquote&gt;Moim zdaniem jednak coś w tym jest. To co najbardziej mnie denerwuje w Pylons to wkład pracy jaki trzeba było włożyć, aby przejść z wersji 0.9.n na 0.9.n+1. Mam cichutką nadzieję, że ekipa Pylons utrzyma wersję 1.0.x kompatybilną a kolejne "zmiany" będą wprowadzać dopiero do 1.x.0.&lt;/div&gt;&lt;div&gt;Wczoraj również przyjrzałem się WerkZeugowi. Dorobił się własnych routsów i jakiegoś systemu szablonów. Z jednej strony nikomu to nie szkodzi, z drugiej wystarczyło użyć Routes, Bakery czy Mako. Ale jak to bywa w świeci informatycznym, trzeba było wymyślić koło na nowo. Ot cała filozofia.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1162463637904774385?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1162463637904774385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1162463637904774385' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1162463637904774385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1162463637904774385'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/06/pylons-10-juz-jest.html' title='Pylons 1.0 :) już jest!'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7453769731874086113</id><published>2010-05-28T09:57:00.000-07:00</published><updated>2010-05-28T10:10:34.169-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='koncert'/><title type='text'>Magiczny Koncert Walt Disnay - uwagi</title><content type='html'>Właśnie wróciłem z &lt;a href="http://www.magicznekoncerty.pl/"&gt;Magicznego Koncertu Walt Disnay&lt;/a&gt;, który odbył się w Gdyńskiej Hali. Zabawa była przednia! Na spektakl przyszło znaczne grono rodziców wraz z pociechami, które beztrosko szalały tańcząc i skacząc po płycie Gdyńskiego Ośrodka Sportowego w takt disnayowskiej muzyki.&lt;div&gt;Tak jak się spodziewałem nie był to zwykły koncert, ale fantastyczne widowisko. Połączono tutaj światło, muzykę i obraz. Efekt był oszałamiający. Byłem pod ogromnym wrażeniem dyrygenta, który fantastycznie nawiązywał kontakt z najtrudniejszą publicznością - dziećmi, oraz dwoma reklamami, które zapoczątkowały spektakl: bajkowej - aby uspokoić dzieci :) i motorycznej aby uspokoić Panów :] (duże dzieci) :]&lt;/div&gt;&lt;div&gt;Widowisko charakteryzowało fantastycznie dobrane zmienne tępo, które nie pozwalało się nudzić nawet najmłodszym.&lt;/div&gt;&lt;div&gt;Osobiście, z szacunku do orkiestry, oraz z tego powodu, że rzadko mam okazję ubrać się elegancko, a tym razem miałem, założyłem garnitur. Panowały generalnie koszule i nieoficjalne marynarki. Tutaj poczułem pewien zgrzyt. Hala Sportowa rzeczywiście nie narzuca swoim stylem jakiegoś wieczorowego wyglądu, z drugiej strony wydarzenie, muzyka - owszem. Ten dysonans dał się odczuć dwojako. Dla mnie - ponieważ nie wiedziałem czy ubrać się pod koncert czy pod miejsce, dla orkiestry tym, że, nie zaczekano nawet aż zejdzie ze sceny - ludzie po prostu zaczęli wychodzić.&lt;/div&gt;&lt;div&gt;Osobiście zrobiłbym dwa koncerty. Hala była świetnym rozwiązaniem dla dzieci, które tańczyły, biegały i skakały radośnie wyrażając całym swoim ciałem radość :) w filharmonii dzieciaki by się wynudziły. Mi osobiście brakowało tej atmosfery uroczystości - więc sam poszedłbym chętniej na koncert do filharmonii. Tak czy owak :] było świetnie i chętnie wybiorę się na ten koncert ponownie :] Może z moimi pociechami? :) Jak Bóg da :]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7453769731874086113?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7453769731874086113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7453769731874086113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7453769731874086113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7453769731874086113'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/magiczny-koncert-walt-disnay-uwagi.html' title='Magiczny Koncert Walt Disnay - uwagi'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8927524373089238011</id><published>2010-05-27T23:58:00.001-07:00</published><updated>2010-05-28T00:17:26.446-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>Czy ogarniemy HTML5?</title><content type='html'>Dzisiaj przeglądając webhosting.pl trafiłem na artykuł &lt;a href="http://webhosting.pl/HTML5.czy.wiecie.o.czym.mowicie"&gt;"HTML5: czy wiecie co mówicie?"&lt;/a&gt;. Ktoś się zżyma, że HTML 5 oznacza dzisiaj już wszystko a przez to równocześnie nic. Po zajrzeniu na stronę wiki zrozumiałem dlaczego. Wiele znaczników ma podpięte API do JavaScript (np. canvas, audio, video) i tylko w użyciu z tym API &lt;a href="http://webhosting.pl/Znacznik.%3Caudio%3E.przyniesie.rewolucje.w.edycji.muzyki"&gt;potrafią coś więcej&lt;/a&gt;, do tego wiele rzeczy wiąże się z DOM. Wszystkie elementy obejmujące JavaScript wchodzą w specyfikacji HTML5 tylko dlatego, że brak wolontariuszy, którzy zajęliby się ich rozwojem w oddzielnym projekcie. HTML5 to jest &lt;b&gt;w rzeczywistości&lt;/b&gt; wszystko bo choć poszczególne technologie posiadają własne nazwy wchodzą pod szyldem piątki. Przytaczanie przykładu pracodawcy to po prostu śmiech na sali bo każdy wie, że marketingowcy są gotowi wszystko pokręcić byle by tylko wyjść na nowoczesnych - też mi autorytety. Autor wpis&lt;span&gt;&lt;span&gt;u - Michaela Mullany - ewidentnie pomylił dwóch adresatów: klientów i developerów. Bez odróżnienia tych dwóch grup i tego co dla każdej z nich znaczy HTML5 nie ma sensu w ogóle o nim mówić.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); line-height: 19px; font-family:Helvetica, Arial, Verdana, sans-serif;font-size:14px;"&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;HTML5 obecnie wydaje mi się tak wielki, że jest moim zdaniem technologią do wszystkie. Wierzę, że już nie długo będziemy widzieć specjalistów dziedzinowych HTML5. HTML5 - inżynier wideo, HTML5 - inżynier WebGL, HTML5 - inżynier 2D, HTML 5 - inżynier baz danych itd... Chyba ciężko będzie ogarnąć wszystko na bardzo wysokim poziomie. Będziemy iść ogólnikami, tworzenie stron HTML5 będzie podobne do tych z 4, ale dedykowane aplikacje webowe będą tworzyć już specjaliści w konkretnej dziedzinie.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8927524373089238011?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8927524373089238011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8927524373089238011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8927524373089238011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8927524373089238011'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/czy-poznamy.html' title='Czy ogarniemy HTML5?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5831266218922384196</id><published>2010-05-25T13:22:00.000-07:00</published><updated>2010-05-25T21:56:06.888-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>MVC retro</title><content type='html'>Po powrocie z &lt;a href="http://www.phpcon.pl/"&gt;PHPCon&lt;/a&gt; nie mam już wątpliwości. Dla mnie MVC odeszło w zapomnienie. Przygotowana przez mnie prezentacja "Drupal Application Framework - metoda na aplikację sieciową" nie pozostawiła mi żadnych złudzeń - MVC jest dobre, ale moduł wtyczkowy jest genialny. Nigdy więcej standardowej witryny pisanej we frameworku - hook module rulez.&lt;div&gt;Już jakiś czas temu przeczuwałem, że model w jakim rozwija się wtyczki w Drupalu zrewolucjonizuje mój sposób patrzenia na development w PHP. Nie spodziewałem się jednak, że moje podejście zmieni się aż tak radykalnie. Dzięki "Wprowadzenie do implementacji architektur plug-in w PHP" Damiana Tylczyńskiego utwierdziłem się w przekonaniu, że MVC to za mało, a pisanie we frameworkach jest dobry wyłącznie dla bardzo customowych rozwiązań.&lt;/div&gt;&lt;div&gt;Wszystkim więc z tego miejsca polecam swoją &lt;a href="http://webhosting.pl/Szkola.deweloperow.Drupala.Czesc.I.tworzenie.zrebu.modulu"&gt;Szkołę Developerów Drupala&lt;/a&gt; i zapoznanie się z korzyściami płynącymi z takiego modelu tworzenia oprogramowania!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5831266218922384196?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5831266218922384196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5831266218922384196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5831266218922384196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5831266218922384196'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/mvc-retro.html' title='MVC retro'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1701042634184008216</id><published>2010-05-16T00:35:00.000-07:00</published><updated>2010-05-16T00:47:09.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='fabric'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='capistrano'/><title type='text'>Fabric - Pythonowe Capistrano</title><content type='html'>Wczoraj trafiłem na &lt;a href="http://fabfile.org/"&gt;Fabric&lt;/a&gt; - Pythonowy odpowiednik &lt;a href="http://www.capify.org/"&gt;Capistrano&lt;/a&gt;. Już czuję, że je polubię :] Zapowiada się naprawdę świetnie! Na znalezisko natknąłem się buszując po Rubo-wych narzędziach do pracy z kodem równocześnie porównując z Jarkiem Zabiłłą Ruby Python. Ruby: &lt;a href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt;, Python: &lt;a href="http://wsgi.org/"&gt;WSGI&lt;/a&gt;, Ruby: &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt;, Python: &lt;a href="http://werkzeug.pocoo.org/"&gt;WerkZeug&lt;/a&gt;, Ruby: &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;(wyszła wersja 1.0), Python: &lt;a href="http://codespeak.net/pypy/"&gt;PyPy&lt;/a&gt;, Ruby: &lt;a href="http://www.merbivore.com/"&gt;Merb&lt;/a&gt;(byłem w szoku, że nadal jest rozwijany), Python: &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt;(jest wersja 1.0 beta 1!), Ruby: Capistrano ... Python? Tak jest Fabric!&lt;div&gt;Narzędzie jest bardzo młode (takiego wrażenie sprawia) i nie trafiłem w nim na żadne opcje związane z konkretnym systemem wersjonowania (jak w Capistrano), ale to nic :) bo może być to kwestią czasu a jeżeli nie to konwencji - wszak można użyć poleceń systemowych :]&lt;/div&gt;&lt;div&gt;Co do kolejności  - tutaj było różnie. Rack powstał bo Rubowcy pozazdrościli Pythonowi WSGI, Fabric bo nie było odpowiednika Capistrano w Pythonie. Nie ma to jednak większego znaczenia :) Dobrze, że oba języki programowania dobrze radzą sobie w szerokim spektrum zagadnień i udostępniają wygodne narzędzia :] Ja się cieszę.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1701042634184008216?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1701042634184008216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1701042634184008216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1701042634184008216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1701042634184008216'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/fabric-pythonowe-capistrano.html' title='Fabric - Pythonowe Capistrano'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2400784656883018569</id><published>2010-05-16T00:32:00.000-07:00</published><updated>2010-05-16T00:35:49.132-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chromium'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='chromium os'/><title type='text'>Moje życie z Google Chrome</title><content type='html'>Dzisiaj zainstalowałem na VirtualBox Ubuntu 10.04. Pierwsze po zainstalowaniu Guest Additions było wyszukanie jakiegoś Google Chrome. Na początku trafiłem na wiekowe Chromium w repozytorium. Potem w jakiś komentarzach trafiłem na informację, że można ściągnąć paczuszkę ze strony Google.&lt;div&gt;Fajnie to zrobili bo dodaje się do systemu repozytorium z którego pobierane są aktualizacje.&lt;/div&gt;&lt;div&gt;Właściwie uświadomiłem sobie, że o ile na codzień pracuję na Windows 7 to Ubuntu było mi potrzebne tylko po to aby zainstalować sobie Google Chrome i to było wszystko co mi do szczęścia było potrzebne. Doświadczenia związane z korzystaniem z Google Chrome są dla mnie tak pozytywne że wręcz chciałbym aby stało się dla mnie podstawowym środowiskiem pracy.&lt;/div&gt;&lt;div&gt;To wygląda tak, jakby Chromium OS było dla mnie idealnym systemem. Ciekawe czy tak rzeczywiście będzie.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2400784656883018569?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2400784656883018569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2400784656883018569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2400784656883018569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2400784656883018569'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/moje-zycie-z-google-chrome.html' title='Moje życie z Google Chrome'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2018934971124313923</id><published>2010-05-14T12:59:00.000-07:00</published><updated>2010-09-19T01:14:57.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='WebForms2'/><category scheme='http://www.blogger.com/atom/ns#' term='fontforge'/><category scheme='http://www.blogger.com/atom/ns#' term='font'/><category scheme='http://www.blogger.com/atom/ns#' term='font-face'/><category scheme='http://www.blogger.com/atom/ns#' term='czcionki'/><title type='text'>Kiedy technologia Microsoftu jest włączana do CSS3</title><content type='html'>Ile razy czytam o nowych standardach webowych tylko wciąż na mojej twarzy pojawia się grymas gdy zadaję sobie pytanie "Czy to będzie działać w IE" albo "Jak to będzie działać w IE". Dzisiaj trafiłem na chlubny wyjątek, który potwierdza regułę.&lt;div&gt;Ostatnio jestem na etapie próby skonstruowania czcionki i użycia jej na stronie. Jest taki fajny programik &lt;a href="http://fontforge.sourceforge.net/"&gt;FontForge&lt;/a&gt;, któremu można używając opcji import zassać kształty z jakiś plików grafiki wektorowej i sobie z tego zrobić czcionkę. W CSS3 pojawiła się fajna opcja &lt;a href="http://www.css3.info/preview/web-fonts-with-font-face/"&gt;@font-face&lt;/a&gt;, która pozwala używać na stronie czcionki, zuplodowanej wcześniej na serwer, czyli każdej :] Fajne szalenie.&lt;/div&gt;&lt;div&gt;Jaki byłem zszokowany, gdy okazało się, że&lt;a href="http://www.webfonts.info/wiki/index.php?title=@font-face_browser_support"&gt; Internet Explorer obsługuje to od wersji 4&lt;/a&gt;. Po prostu 110% szoku. To już kolejny raz kiedy doznaję czegoś równie wstrząsającego! Pierwszy raz nie mogłem uwierzyć, że &lt;a href="http://www.whatwg.org/specs/web-forms/current-work/"&gt;Webforms2&lt;/a&gt; działają w IE6, a w wielu innych przeglądarkach trzeba sobie &lt;a href="http://code.google.com/p/webforms2/"&gt;oszukiwać specjalną biblioteką&lt;/a&gt; napisaną w Javascripcie. Po prostu szok.&lt;/div&gt;&lt;div&gt;Jak to więc jest kiedy to technologia, wcześniej zaimplementowana w przeglądarce Microsoftu zostaje włączona do portfolio nowoczesnych przeglądarek? Fajnie :) Miło :) i szalenie sympatycznie, gdy człowiek czuje się tak MIŁO ZASKOCZONY. Wystarczy, że fani darmowych przeglądarek używają ich w najnowszych wersjach i możemy spokojnie bez obaw używać sobie dowolnych czcionek na stronach :] Czad!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2018934971124313923?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2018934971124313923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2018934971124313923' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2018934971124313923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2018934971124313923'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/kiedy-technologia-microsoftu-jest.html' title='Kiedy technologia Microsoftu jest włączana do CSS3'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6605620807800744316</id><published>2010-05-14T12:33:00.000-07:00</published><updated>2010-05-14T12:59:46.718-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='memcache'/><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='cauchdb'/><category scheme='http://www.blogger.com/atom/ns#' term='redis'/><category scheme='http://www.blogger.com/atom/ns#' term='mongodb'/><category scheme='http://www.blogger.com/atom/ns#' term='sphinx'/><title type='text'>NOnsenSQL i  zalety MongoDB</title><content type='html'>W serii wpisów dotyczącej pisanej przeze mnie wyszukiwarki chciałem podzielić się jeszcze swoimi wrażeniami z wyborem silnika baz danych. Realizując projekt tak nietypowy, ciekawy, fajny starałem się uczynić go okazją do poznania nowych ciekawych narzędzi na każdym szczeblu. Jednym z nich był wybór silnika baz danych.&lt;div&gt;Miałem do skatalogowania bardzo proste informacje. Listę tysiąca czterystu nazw, do każdej przypisany kod numeryczny. Banał. Najpierw przyszedł mi do głowy &lt;a href="http://memcached.org/"&gt;memcache&lt;/a&gt;, ale kiedyś gadałem z kolegą (dzięki Viciu), który opowiedział mi o tym, że istnieje coś tak fajnego jak &lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt;, który, w porzeciwieństwie do memcache, w którym traci się wszystko jak zamknie się serwer (restart/pad serwera), potrafi przy zamykaniu zrzucić dane do pliku i załadować je przy kolejnym starcie. To było fajne. Do tego pisane przez ludzi pracujących w Ruby więc generalnie :) w tym deseniu, w którym projektowałem aplikacje - jak znalazł. W Redis fajnie się projektuje listy, kolejki, stos, ale nie fajnie się wyszukuje. Można błyskawicznie pobrać wartość przypisaną do jakiegoś klucza, ale nie ma opcji "pobierz wszystkie dane, które zawierają w sobie wyraz &lt;b&gt;Włocławska&lt;/b&gt;" no i kiszka. Kolega, do którego dzwoniłem nakierował mnie &lt;a href="http://couchdb.apache.org/"&gt;CauchDB&lt;/a&gt;. Jednak i tam nie znalazłem w dokumentacji nic o tego rodzaju zapytaniu do "bazy" (mówię, że nie znalazłem, nie znaczy, że nie ma). Swoją drogą dokumentacja do CauchDB to jakiś koszmar. Dawno nie widziałem czegoś tak ... nieintuicyjnego i .... ehh ... szkoda słów.&lt;/div&gt;&lt;div&gt;Po drodze wpadłem sobie na pomysł - a może B-drzewo. Na temat b-drzew w Redis nic nie znalazłem a to na co trafiłem w ramach narzędzia &lt;a href="http://1978th.net/tokyocabinet/"&gt;Tokyo Cabinet&lt;/a&gt; było jeszcze cięższe niż dokumentacja CauchDB. Poza tym nie byłem przekonany do b-drzewa w tym przypadku. To byłby bardziej workaround niż dobre rozwiązanie.&lt;/div&gt;&lt;div&gt;Te poszukiwania uświadomiły mi, że chociaż istnieje cały ruch &lt;a href="http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_database_movement_gains_steam_"&gt;NOSQL&lt;/a&gt;, który w niektórych wypowiedziach tak bardzo zdaje się krytykować SQL to nic nie mówi o tym, że "ich" bazy danych możesz zapytać o jedną wartość (albo ich listę), ale nie ma mowy o zapytaniach. Generalnie jak chcesz zrobić coś ala "LIKE %nazwa%" to w bazie danych NOSQL to jest ... niespotykane.&lt;/div&gt;&lt;div&gt;Jarek Zabiełło (wielkie dzięki) pokazał mi w końcu &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; (i odradził &lt;a href="http://sphinxsearch.com/"&gt;Sphinx&lt;/a&gt;a, który byłby wytaczaniem armaty na muchę). To brakujące ogniwo w tej całej przepaści, które z jednej strony trzyma dane jak CauchDB - w postaci hierarchicznych dokumentów, używa składni JSONowej obiektów i jest fajne :] a z drugiej posiada funkcję &lt;b&gt;find&lt;/b&gt;, która może przyjąć wyrażenie regularne, jako parametr do odfiltrowania danych. Ba - posiada nawet indeksy :] Kurcze, to było to. Obiektowo, hierarchiczne, JSONowo, nie SQLowo, ale z możliwością robienia zapytań - miodzio. Biblioteka do Rubego była, podpięcie do sinatry banał - działa super :] Naprawdę!&lt;/div&gt;&lt;div&gt;Generalnie cała ta kampania NOSQL to jest mydlenie oczu bo co innego jak chcesz trzymać dane i nie musisz robić do nich skomplikowanych zapytań - a co innego jak jesteś do tego zmuszony. Jasne. Wiele aplikacji sieciowy jak &lt;a href="http://webhosting.pl/Digg.porzuca.MySQL.na.rzecz.Cassandry.nierelacyjnego.magazynu.danych"&gt;Digg&lt;/a&gt;, który wyświetla "wszystko" albo "nic" może sobie na to spokojnie pozwolić, ale generalnie SQL to nie jest jakieś zło jak niektórzy przedstawiają ruch NOSQL, tylko czasem aplikacja ma taki model użycia danych, że istnieją lepsze rozwiązania niż *SQL. To wszystko :) Tak było z moją wyszukiwarką.&lt;/div&gt;&lt;div&gt;Generalnie było fajnie :] Wsio.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6605620807800744316?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6605620807800744316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6605620807800744316' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6605620807800744316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6605620807800744316'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/nonsensql-i-zalety-mongodb.html' title='NOnsenSQL i  zalety MongoDB'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7180988453466032026</id><published>2010-05-14T12:24:00.000-07:00</published><updated>2010-05-14T12:33:50.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Przetwarzanie u klienta a requesty do serwera</title><content type='html'>Dwa dni temu trafiłem na ciekawe zagadnienie. Mam około 166 KB danych w postaci wartość: klucz i mam taką listę odfiltrowywać w &lt;a href="http://jqueryui.com/demos/autocomplete/#remote"&gt;jquery ui autocomplete&lt;/a&gt;. Początkowo bardzo chciałem uniknąć ciągłego odpytywania serwera więc napisałem filtrowanie pełnej listy w jQuery mniej więcej tak:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;source: function(request, response) {&lt;br /&gt;         if (cache.length &gt; 1) {&lt;br /&gt;           matched = jQuery.grep(cache, function(element, index) {&lt;br /&gt;                 return element.name.search(request.term) != -1;&lt;br /&gt;           });&lt;br /&gt;           return response(matched);&lt;br /&gt;         }&lt;br /&gt;         $.getJSON("/javascript/data.json", function(data) {&lt;br /&gt;           cache = data;&lt;br /&gt;           response(data);&lt;br /&gt;         });&lt;br /&gt;       },&lt;/blockquote&gt;Byłem szalenie zaskoczony gdy to rozwiązanie okazało się wolne! Wciąż słyszę tylko, że JavaScript jest wciąż przyspieszana, że któryś z silników prześcignął inny i potem znowu, że ktoś znowu bije rekordy szybkości JS... a tutaj takie zaskoczenie.&lt;/div&gt;&lt;div&gt;Generalnie pierwsze wpisanie litery pobierało wszystkie dane, które po pierwszym pobraniu, które trwało naprawdę długo potem zaczynały już szybciej się filtrować, ale nadal to było toporne. Testowałem to w Chrome 4 i powiem szczerze. To nie działało jakoś super szybko. W ogóle się tego nie spodziewałem. Jak jeszcze pomyślałem, że &gt; 50% użytkowników wyszukiwarki to IEowcy... nie, to nie miało szans powodzenia. Nawet kiedy Chrome działało tak sobie.&lt;/div&gt;&lt;div&gt;Generalnie szybko zakodowałem standardową wersję z bazą danych, odpytywanie serwera przy każdej literce. Zaczęło działać naprawdę dobrze. Plusem było na pewno to, że można było ograniczyć zapytanie do 10 wyników, a nie pakowało się 166KB danych. Tego mi w sumie zabrało w jQuery, żeby był parametr do funkcji grep, który mówi po ilu elementach przerwać - może wtedy byłoby szybciej.&lt;/div&gt;&lt;div&gt;Podsumowując: jeżeli masz do wyboru pobrać dużo danych do JS i filtrować je u klienta, a zrobić standardowo filtrowanie po stronie serwera i odpytywać o wyniki serwer - wybierz drugie, chyba, że znasz sprytniejszy sposób zrobienia tego co ja próbowałem po stronie JS.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7180988453466032026?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7180988453466032026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7180988453466032026' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7180988453466032026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7180988453466032026'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/przetwarzanie-u-klienta-requesty-do.html' title='Przetwarzanie u klienta a requesty do serwera'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4364599369352768725</id><published>2010-05-13T09:30:00.000-07:00</published><updated>2010-05-13T10:01:16.849-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='werkzeug'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='merb'/><title type='text'>Przygoda z Merbem i jak przeszedłem na Sinatrę</title><content type='html'>Dzisiejszej nocy nadszedł czas, gdy miałem okazję zmierzyć się wreszcie z Merbem. Znany mi świat frameworków to raczej rozwiązania typowe dla Pythona. Byłem bardzo mile zaskoczony poznając świat frameworków Ruby.&lt;div&gt;Do tej pory nie było żadnego małego projektu, od którego można byłoby zacząć naukę. Stworzenie wyszukiwarki dla kampani 1% dla ZHR.pl było fantastyczną okazją do liźnięcia Merba.&lt;/div&gt;&lt;div&gt;Pierwszym rozczarowaniem, była walka z samym Merbem. Zainstalowałem nowe gemy Merba 1.1.0. Pamiętał, że jest coś takiego jak wersja flat aplikacji. Bardzo zależało mi na tym właśnie modelu. Już na samym początku trafiłem na bug Merba &lt;a href="https://merb.lighthouseapp.com/projects/7433/tickets/712-merb-gen-should-generate-haml-views-instead-of-erb-if-haml-gem-is-detected"&gt;#712&lt;/a&gt;. To było niestety bardzo bolesne spotkanie z rzeczywistością, które pozostawiło mnie bez złudzeń - Merb nie jest już rozwijany.&lt;/div&gt;&lt;div&gt;Kolejną niemiłą niespodzianką było odpalenie mongrela. Na szczęście tutaj pomogło dodanie &lt;b&gt;require 'mongrel'&lt;/b&gt; do skryptu &lt;b&gt;merb&lt;/b&gt;  w katalogu bin projektu i skorzystanie z tak zmodyfikowanej binarki. Co gorsza, wcześniej straciłem kilkadziesiąt minut na odpalaniu &lt;b&gt;webricka&lt;/b&gt;, który w ogóle nie łykał urlsów.&lt;/div&gt;&lt;div&gt;Skoro już jesteśmy przy dodatkowym sofcie. Najnowsza wersja Haml 3.0.2 nie radzi sobie z renderowaniem SASS, który kończy się błędem jak w issue &lt;a href="http://github.com/nex3/haml/issuesearch?state=open&amp;amp;q=merb#issue/163"&gt;#163&lt;/a&gt;. Wszystko działa natomiast bez problemu z najnowszą wersją Haml z gałęzi 2. Aha. Najlepsze jest to, że istnieje masa nieaktualnej dokumentacji. Szczególnie bolesne gdy chodzi o włączenie SASS. Nawet &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html"&gt;dokumentacja SASS&lt;/a&gt; podaje jakieś lewe informacje. Dopiero &lt;a href="http://henrik.nyh.se/2008/11/sass-merb"&gt;ten wpis&lt;/a&gt; pozwolił mi prze konwertować SASS do CSS.&lt;/div&gt;&lt;div&gt;Takie przygody to chleb powszedni, jeżeli oprogramowanie nie jest rozwijane od ponad roku. Nie ma się co dziwić. Najgorsze jest dla mnie to, że w Rails 3 nie ma czegoś takiego jak &lt;b&gt;merb-gen flat&lt;/b&gt; czy &lt;b&gt;merb-gen very_flat&lt;/b&gt;.  Można obciąć to co generuje Rails 3 ale to wciąż nie jest minimalna aplikacja z własną konfiguracją. Trochę pocieszyła mnie &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt;. Kiedy w niej kodowałem to przypomniał mi się Pythonowy &lt;a href="http://werkzeug.pocoo.org/"&gt;WerkZeug&lt;/a&gt;, z tym, że w przeciwieństwie do tego drugiego Sinatra działa :P Ciekawe, że Sinatra to DSL :) co daje bardzo miłe wrażenie kodowania w zetknięciu z nią :]&lt;/div&gt;&lt;div&gt;Kiedy przenosiłem aplikację z Merba na Sinatrę to właściwie jedyne co musiałem zrobić poza przekopiowaniem plików statycznych i widoków to zmienić rozszerzenie widoków HAML. Reszta sama poszła. Bardzo spodobał mi się minimalizm Sinatry, który w przypadku wyszukiwarki jaką piszę był w dziesiątkę! Niestety to nie to samo co modularny Merb, który jak trzeba było to poza wygenerowanie małej aplikacji potrafił i kapcie przynieść i kawę zaparzyć. Rails nie posiada tak rozwiniętej modularności w stopniu w jakim została stworzona w Merbie - a szkoda.&lt;/div&gt;&lt;div&gt;Jeżeli miałbym porównać świat  frameworków Pythonowych i Rubowych to tutaj jest jak z językiem - Python prosto, Ruby z dużo bogatszym wachlarzem możliwości. Mam wrażenie, że deweloperzy Pythona skupili się na prostocie jako celu, gdzie w Rubym widać dążenie do niej ale przez wszystkie etapy ogólności, które widać w wielu narzędziach.&lt;/div&gt;&lt;div&gt;Na tle tych przygód jest jeszcze gdzieś Scala, która wydaje mi się tak zaawansowana, że aż nie widzę dla niej zastosowania w projektach, które tworzę. To jest chyba jakiś target &lt;b&gt;heavy enterprise&lt;/b&gt; a ja jeszcze w tych kategoriach nie myślę. Szalenie podoba mi się tutaj Merb, w którym możesz zacząć sobie dewelopować aplikację od jednoplikowej wersji &lt;b&gt;very_flat&lt;/b&gt; po typowo railsowym bufoniastym systemie układu katalogów skończywszy. Szkoda, że Rails 3 nie daje takiego wyboru. Na szczęście jest Sinatra :) jednak jak już pisałem, Merb był gdzieś pomiędzy i szkoda, że go już nie ma.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4364599369352768725?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4364599369352768725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4364599369352768725' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4364599369352768725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4364599369352768725'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/05/przygoda-z-merbem-i-jak-przeszedem-na.html' title='Przygoda z Merbem i jak przeszedłem na Sinatrę'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-999369376993962469</id><published>2010-03-25T03:36:00.001-07:00</published><updated>2010-05-13T10:04:57.793-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><title type='text'>Dlaczego liczy się jakość implementacji?</title><content type='html'>Programowałem już w kilku frameworkach. Jeszcze kilka przede mną.Czy zgodzicie się, że wszystkie frameworki są takie same? Nie - wszak różnią się między sobą... To inaczej. Czy zgodzicie się, że robią to samo? Inaczej, że próbują osiągnąć ten sam cel? Moim zdaniem każdy framework (wszak nazywa się frameworkiem) ma za zadanie:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;stworzyć środowisko pracy charakterystyczne dla prac webdeveloperskich&lt;/li&gt;&lt;li&gt;zapewnić bezpieczeństwo aplikacji charakterystyczne dla webserwisów&lt;/li&gt;&lt;li&gt;ułatwić utrzymywanie projektu poprzez separację - na przykład z użyciem wzorców projektowych&lt;/li&gt;&lt;/ul&gt;Każdy framework realizuje te cele na swój własny sposób. Jest jakaś warstwa obsługi bazy danych, tworzony jest jakiś wzorzec do udostępniania funkcji klientowi (MVC, REST, EDA), proponowany jest system wprowadzenia nieinwazyjnie logiki do warstwy HTML (szablony, widoki). Realizacja tych celów mogłaby stanowić pewną definicję frameworka.&lt;/div&gt;&lt;div&gt;W tym świetle frameworki nie różnią się od siebie. Wszystkie realizują swoje cele. Django czy Pylons, Rails, CakePHP, Symfony, Kohana albo Web2Py, Lift - wszystkie z definicji realizują te cele. Którego użyć do prostego projektu, który da się zrealizować w każdym z nich?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wielu może dziwić, drażnić postawa często prezentowana przez Jarka Zabiełłę - zachwytu nad perfekcją programistów tworzących konkretny framework. Technologiczną doskonałością Merba, geniuszem z jakim zakodowany jest Lift. U mnie ta postawa znalazła w końcu grunt.&lt;/div&gt;&lt;div&gt;Lepsza jakość kodu i restrykcyjne coding standard (np. w Merb) oznacza wiele dobra: prostsza refaktoryzacja, mniejsza ilość potencjalnych błędów, znacznie zwiększone bezpieczeństwo, posunięty performance. Taki jest właśnie Merb.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ponawiam pytanie: "Jaki framework wybrać do prostego projektu, który można stworzyć w każdym z nich?" odpowiedź - najdoskonalszy technologicznie. Jaki framework wybrać aby mieć pewność największego bezpieczeństwa? Najdoskonalszy technologicznie? Jaki framework wybrać aby moja aplikacja była możliwie najszybsza? Najdoskonalszy technologicznie.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tak. Frameworki różnią się między sobą: dostępnymi wtyczkami, architekturą, możliwościami, językiem programowania. Do momentu, w którym którykolwiek z tych składników odgrywa rolę - walka między frameworkami nie jest równa i w konkretnych przypadkach wybór jednych przeważa nad drugimi. Jednak dla prostych projektów, gdy nie masz bariery poznania nowego języka programowania tylko doskonałość technologiczna może przeważyć nad użyciem jednego ponad drugim.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mam nadzieję, że udało mi się oddać moje ostatnie przemyślenia, na których znalazło grunt podejście Jarka Zabiełły, który często rozwodzi się nad doskonałością techniczną pewnych rozwiązań :) Wszak dla najlepszych przestaje być ważne, że potrafią coś zrobić, a zaczyna być ważniejsze jak to zostało wykonane.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Skoro coś można zrobić na wiele sposobów to czemu nie ma budzić uznania i szacunku i być przez nas wybieraną technologia, która została zrobiona w sposób genialny i najlepszy?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-999369376993962469?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/999369376993962469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=999369376993962469' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/999369376993962469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/999369376993962469'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/03/dlaczego-liczy-sie-jakos-implementacji.html' title='Dlaczego liczy się jakość implementacji?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-652104975328359736</id><published>2010-03-21T02:56:00.001-07:00</published><updated>2010-03-21T03:18:00.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><title type='text'>Co wkurza mnie w ludziach, którzy wielbią Railsy</title><content type='html'>Tytuł jest troszkę kontrowersyjny i powinien brzmieć "co wkurza mnie w ludziach, którzy wielbią jeden - jedynie słuszny - framework" bo o to mi naprawdę chodzi. Celowo jednak napisałem, że o Rails mi chodzi ponieważ wszyscy, którzy rażą mnie swoim podejściem wśród moich znajomych to właśnie Railsowcy.&lt;br /&gt;&lt;br /&gt;  Nie jestem uczulony na każdego kto broni jakiegoś frameworka. Tak na przykład bardzo lubię argumentację Jarka Zabiełły, który dałby się dosłownie poszatkować za Lifta, skoczyć w ogień za Merbem czy odtańczyć taniec radości przez Web2Py. Nie widzę nic złego w posiadaniu swojego ulubionego frameworka. Co więc mnie denerwuje?&lt;br /&gt;&lt;br /&gt;  Niepowetowanie rozdrażniają mnie osoby, które programowały tylko w jednym (nie ważne jakim) frameworku i mając takie doświadczenie opowiadają o nim jak o wybawieniu. Po prostu krew mnie zalewa. Ktoś programował sobie w PHP (na sucho): echo do HTML, include $_GET do ładowania stron, mysql_query do robienia zapytań i nagle [... tu wstaw nazwę jakiegoś frameworka, który stał się religią dla Twoich znajomych]! Po prostu objawienie! Ścieżka światła otworzyła się przed biednym, pogrążonym programistą i doznał olśnienia! I od tamtej pory nie rozstaje się ze swoją cudowną technologią, genialnym wybawicielem! Po prostu ... śmiechu warte. Tyle powiem.&lt;br /&gt;  Nie mogę znieść braku chłodnego dystansu do technologii, której się używa. Pewnej podejrzliwości i niepokoju: A może istnieje jeszcze inna, może lepsza technologia? Może to nie jest szczyt wszystkiego? Może w innych językach programowania istnieją inne równie dobre a może nawet lepsze frameworki? Taka właśnie postawa budzi we mnie szacunek do adwersarza i otwiera na jego argumenty.&lt;br /&gt;  Rozumiem jak najbardziej - użyciem frameworka jest ogromnym postępem i tak! zgadzam się w 100%! jest często niesamowitym, ekscytującym, powalającym na kolana odkryciem. Szczególnie w świetle czasu jaki zyskujemy - tworząc aplikację. Jednak zdrowe moim zdaniem jest gdy ów zachwyt pcha programistę do przodu, nie daje mu spokoju, każe poznawać nowe frameworki, lepsze technologie, doskonalesz rozwiązania. Nie mogę znieść gdy widzę, że ktoś po prostu na tym zachwycie - spoczął na laurach. Jego poglądy zaczynają wtedy dla mnie przypominać religię, a argumentacja staje się "nawracaniem" na moją stronę.&lt;br /&gt;&lt;br /&gt;  Mało kto będzie krytycznie i obiektywnie podchodził do frameworków jeżeli nie pozna na wstępie kilku. Poznanie wyłącznie jednego i zatrzymanie się na nim - w 99% skazuje człowieka na brak obiektywizmu. Nie jest wtedy ani dobrym adwersarzem do dyskusji bo jedyne co może powiedzieć, że to czego używa jest dobre (a często mówi, że najlepsze) - jednak co znaczą jego słowa kiedy nie ma porównania.&lt;br /&gt;  Dużo bardziej wiarygodną wypowiedzią jest dla mnie zdanie programisty, który nigdy nie programował we frameworku, o którym mowa, ale dużo o nim czytał i tworzył oprogramowanie w kilku innych pochodzących z różnych języków programowania niż opinia osoby, która poznała swój pierwszy framework i tak się nim zachwyciła, że nie pozwala jej to iść dalej.&lt;br /&gt;  Na koniec może troszkę powiewu optymizmu. Trzeba cieszyć się z każdej osoby, która zacznie używać frameworków. Nawet takiej, która uczyni z tego religię. Niech programuje w nim nawet nieświadomie i źle, ale zawsze będzie oznaczało to więcej lepszej jakości kodu aniżeli ta sama aplikacja miałby być pisana na sucho.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-652104975328359736?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/652104975328359736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=652104975328359736' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/652104975328359736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/652104975328359736'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/03/co-wkurza-mnie-w-ludziach-ktorzy.html' title='Co wkurza mnie w ludziach, którzy wielbią Railsy'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-594669437145397411</id><published>2010-03-02T10:47:00.001-08:00</published><updated>2010-03-05T00:12:53.354-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='Lift'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Gdyby pieniądze Microsoftu ...</title><content type='html'>Ostatnio kolega podesłał mi ciekawy artykuł &lt;a href="http://kurtgrandis.com/blog/2010/02/24/python-django-vs-c-asp-net-productivity-showdown/"&gt;Python + Django vs. C# + ASP.NET: Productivity Showdown&lt;/a&gt;. Złożyło się to z rozmową z jednym z moich współlokatorów o doświadczeniu pisania w .NET aplikacji webowych.&lt;br /&gt;&lt;br /&gt;Przytoczny artykuł pokazuje w skrócie, że kilku niedoświadczonych programistów zaczynających swoją przygodę z Django może pobić wydajnością większą grupę doświadczonych C# piszących ten sam projekt w ASP.NET. To pokrywa się z moimi doświadczeniami z pracy. Jednak w tym wpisie chciałem zwrócić uwagę na coś innego.&lt;br /&gt;&lt;br /&gt;Model MVC - &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#History"&gt;pierwszy raz opisany w 1797&lt;/a&gt; został zastosowany we wszystkich znanych mi frameworkach i okazał się dobrym rozwiązaniem. Microsoft dopiero w 2009 r. &lt;a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework#Release_history"&gt;wypuścił stabilną wersję MVC.NET&lt;/a&gt;. Iron Python i IronRuby to próba nadgonienia przepaści pomiędzy ASP.NET a światem rozwiązań Open Source, w końcu umożliwienie wchłonięcia dobrodziejstw wszystkich projektów typu Django czy Ruby On Rails.&lt;br /&gt;&lt;br /&gt;Ilość pieniędzy wpakowana w ASP zapewne jest ogromna. Zastanawiam się w jakim miejscu bylibyśmy dzisiaj gdyby te same środki przeznaczyć na rozwój takich projektów jak Ruby On Rails, Django, Pylons, Web2Py, Lift ,Merb czy chociażby Drupal.&lt;br /&gt;&lt;br /&gt;Są to projekty o skromnych funduszach lub powstające niemalże wyłącznie dzięki dobrej woli wolontariuszy. Niemniej łamią stereotypy, wyznaczają nowe trendy w tworzeniu aplikacji sieciowych, są ponadczasowe a rozwiązania w nich zastosowane wyprzedzają swoją epokę. Gdzie byłby dzisiaj świat gdyby przeznaczyć na tego rodzaju projekty pieniądze jakie Microsoft zainwestował w ASP?&lt;br /&gt;&lt;br /&gt;Odpowiedź na to pytanie istnieje. Masz ją nawet "przed oczami" lub na stronie startowej twojej przeglądarki. Tak jest! Zgadłeś! Odpowiedzią jest - Google.&lt;br /&gt;Google jest jedyną znaną mi firmą, która powszechnie na dużą skalę korzystała z dobrodziejstw rozwiązań Open Source i inwestowała w nie pieniądze. Adaptacja jądra Linuksa w projekcie Android, własne patche do MySQL czy zmodyfikowany Python to tylko niektóre przypadki sukcesu Google w wykorzystywaniu tego co już zrobiono i udostępniono za darmo.&lt;br /&gt;&lt;br /&gt;Wiele firm z powodzeniem korzysta z całych środowisk, ekosystemów udostępnianych przez Microsoft: serwery, usługi, fora, wiki, blogi, platformy  multimedialne, narzędzia do pracy zdalnej i grupowej, aplikacje biurowe. Przykładów można byłoby mnożyć i mnożyć. Wtedy tworząc narzędzie dla firmy jesteś "zmuszony" tworzyć go w .NET. Być może nie jesteś zmuszony wprost ale jednak aplikacje pod produkty Microsoft pisze się najlepiej właśnie z użyciem tych technologii. Ba! Wyobraź sobie reakcje wyższego managementu na zażądanie Apache 2 i Python bo chcesz pisać coś w Django - kiedy oni wydali setki tysięcy dolarów na produkty firmy Microsoft. A Ty chcesz im powiedzieć, że niepotrzebnie - bo użyjesz sobie darmowego softu? Zbrodnia!&lt;br /&gt;&lt;br /&gt;Może troszkę udemonizowałem scenariusz w poprzednim akapicie, ale to wyjaskrawienie jest moim zdaniem potrzebne. Google jest jedynym przedsiębiorstwem, w którym nie widać wszechobecności technologii Microsoftu. Z mojego punktu widzenia wygląda to tak, że Google chce wciąż mieć wybór w tym czego i jak używają. Czuć się dzięki temu wolnym i nieskrępowanym co czyni z nich niesamowicie elastyczną i innowacyjną firmę.&lt;br /&gt;&lt;br /&gt;Mam wrażenie, że języki programowania znane ze świata Open Source ukierunkowują "na zewnątrz" zaś języki Microsoft "do wewnątrz". Python, Ruby czy Scala nie są związane z żadną konkretną technologią i dlatego powstające na ich bazie rozwiązania ukierunkowane są na nowe cele wyznaczające nowe kierunki. Tak robi Google i wiele innych firm kiedy tworzy coś nowego: Gmail, Google Docs, Youtube, Facebook, Twitter.&lt;br /&gt;Platformy programistyczne Microsoft wymagają zawsze włożenia gro wysiłku w opracowaniu ich "pod systemu Microsoftu". Są więc ukierunkowane "do systemów Microsoft" działania z nimi, stworzenia API i do tego najlepiej się nadają - tworzenia własnych narzędzi dobrze zintegrowanych z ekosystemem ze stajni Billa Gatesa.&lt;br /&gt;&lt;br /&gt;Myślę, że właśnie to "przywiązanie", to "zaplecze" jakie musi posiadać każda nowo powstała technologia wytwarzania oprogramowania z Microsoft sprawia, że nie starcza już tym technologiom "pary" aby stać się technologią, w której powstanie coś ponad epokowego i łamiące współczesne standardy.&lt;br /&gt;&lt;br /&gt;Jak już wspominałem przywiązaniu temu nie podlega Google, wybierające do realizacji projektów technologie, które pozwalają rozwinąć skrzydła programisto i stworzyć coś - co jeszcze nie istnieje. Nie ograniczając ich ale dodatkowo dając wsparcie ich innowacyjnym pomysłom w stosowanej technologii.&lt;br /&gt;&lt;br /&gt;Co więc byłoby gdyby Microsoft wkładał swoje pieniądze w rozwój Ruby On Rails, Django czy innych projektów Open Sourcowych? Mielibyśmy Google świata Open Source :] Czyż nie byłoby to piękne?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-594669437145397411?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/594669437145397411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=594669437145397411' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/594669437145397411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/594669437145397411'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/03/gdyby-pieniadze-microsoftu.html' title='Gdyby pieniądze Microsoftu ...'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3424416340560502019</id><published>2010-02-23T23:51:00.000-08:00</published><updated>2010-02-24T00:22:09.189-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><category scheme='http://www.blogger.com/atom/ns#' term='gallery'/><title type='text'>Rok 2010 rokiem przełomów w aplikacjach sieciowych</title><content type='html'>To wręcz niesamowite jak wiele dzieje się w tym roku w dziedzinie aplikacji sieciowych. Być może to tylko wrażenie, jakie można mieć co roku ale moim zdaniem jest to rok przełomowy.&lt;br /&gt;&lt;br /&gt;Dzisiaj po 2 w nocy wyszła wersja Release Candidate 1 &lt;a href="http://gallery.menalto.com/gallery_3.0_rc1_released"&gt;Gallery 3&lt;/a&gt;. Jest to ogromny krok w dziedzinie aplikacji do przetrzymywania zdjęć. Większość dostępnych w sieci skryptów zakłada, że istnieje jeden właściciel galerii, który publikuje w niej zdjęcia. Gallery to jedyny znany mi do tej pory system pozwalający w ramach jednej galerii tworzenie wielu albumów i przydzielania uprawnień do nich wielu użytkownikom.&lt;br /&gt;&lt;br /&gt;Gallery posiada pewne bardzo proste - acz daleko idące w skutkach założenie - jeżeli nie masz dostępu do zdjęcia - nie masz do niego dostępu wogóle, nawet poprzez bezpośredni link. Gallery w wersji 2 realizowało to poprzez przetrzymywanie obrazków poza folderami dostępnymi przez Apache zaś każde żądanie pliku PNG, JPG czy innego było tłumaczone przez mod_rewrite na wywołanie skryptu PHP, który sprawdzał uprawnienia do pliku i ewentualnie zezwalał na jego wyświetlenie.&lt;br /&gt;&lt;br /&gt;Niestety - przy galeriach dużych rozmiarów całość znacznie rzutowała na wydajność, wygodę i szybkość korzystania.&lt;br /&gt;&lt;br /&gt;Gallery 3 to krok milowy w każdej tych dziedzin. Dzięki modelowaniu uprawnień na poziomie plików .htaccess udało się otrzymać wydajny i szybki mechanizm bezpieczeństwa. Celem stało się utrzymanie aplikacji sprawną, lekką i wydajną. Dołożono do tego interfejs oparty o jQuery. Całość zaś oparto na fantastycznym frameworku Kohana.&lt;br /&gt;&lt;br /&gt;Kolejne zaskoczenie to milowe w dzidzinie od lat zgłaszanych braków &lt;a href="http://djangoadvent.com/"&gt;Django 1.2&lt;/a&gt;. W końcu poprawki w dziedzinie modeli, obsługa wielu baz danych, zamknięcie wielu ticketów, które od lat straszą na Djangowym bug tracku. Django w końcu przełamuje barierę "argumentu za użyciem Pylons" jakim był brak możliwości obsługi wielu baz danych co czyni go znacznie bliższym zastosowań enterprise.&lt;br /&gt;&lt;br /&gt;Skoro już przy Pylons jesteśmy. Nigdy nie wierzyłem, że dożyję dnia kiedy zostanie wydana publicznie wersja &lt;a href="http://pylonshq.com/articles/archives/2010/2/pylons_010_and_10_beta_1_released"&gt;Pylons 1.0 beta&lt;/a&gt;. Jednak stało się. Pylons pretenduje do wersji stabilnej z niezmiennym API i w końcu może zacząć być używany w projektach gdzie liczy się stałość i ciągłość wersji w aktualizacji 3rd party components.&lt;br /&gt;&lt;br /&gt;Nie można też pominąć &lt;a href="http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release/"&gt;Rails 3&lt;/a&gt; - chociaż tutaj nie chcę się wypowiadać to z oglądanych przeze mnie prelekcji, wypowiedzi Yehudy Katz oraz wpisów na blogach Polskich Rubystów widać, że Rails 3 jest krokiem milowym w jakości tego frameworka ku doskonałości.&lt;br /&gt;&lt;br /&gt;Wszystko wskazuje na to, że również &lt;a href="http://drupal.org/drupal-7.0-alpha2"&gt;Drupal 7&lt;/a&gt; pojawi się w tym roku. Dwa dni temu została wypuszczona wersja Alpha 2 - co oczywiście w przypadku Drupala &lt;span style="font-weight:bold;"&gt;kompletnie&lt;/span&gt; o niczym nie świadczy - ale zawsze to jakiś krok do przodu. Oby prace poszły szybko - bo zapowiada się naprawdę fantastyczny framework.&lt;br /&gt;&lt;br /&gt;Prawdopodobnie jeszcze wiele zaskoczeń czeka nas w dziedzinie aplikacji sieciowych - jednak Luty i Marzec to prawdziwy wysyp. Dzisiejszy dzień to jeden z tych, w których nie mogę uwierzyć, że jest aż tak dobrze. Oby więcej takich postępów i dobrze wykonanej pracy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3424416340560502019?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3424416340560502019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3424416340560502019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3424416340560502019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3424416340560502019'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/02/rok-2010-rokiem-przeomow-w-aplikacjach.html' title='Rok 2010 rokiem przełomów w aplikacjach sieciowych'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2519486189241579135</id><published>2010-02-11T11:20:00.000-08:00</published><updated>2010-02-11T11:50:00.746-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magisterka'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>MA starcie pierwsze - LaTeX</title><content type='html'>Zastanawiam się i nie mogę pojąć. Dlaczego LaTeXa uczono nas na pierwszym semestrze studiów kiedy faktycznie potrzebny jest dopiero teraz - na dziewiątym? Nie wiem. Może dlatego, żeby spłatać nam figla. A może dlatego, żeby sprawdzić czy istnieją jakieś genialne jednostki, które będą pamiętały jak się z tego jeszcze korzystało. Tak czy owak nadeszła ta chwila.&lt;br /&gt;Do zainstalowania w Ubuntu 9.10 LaTeXa wystarczyło mi wybranie w Synapticu dwóch paczek. &lt;span style="font-weight:bold;"&gt;texlive&lt;/span&gt; oraz &lt;span style="font-weight:bold;"&gt;texlive-full&lt;/span&gt;. Później chodziło już tylko o znalezienia wygodnego edytora. Chociaż napisany w Qt - bardzo do gustu przypadł mi Texmaker.&lt;br /&gt;&lt;br /&gt;Pierwszą rzeczą, którą zmieniłem w Texmakerze było ustawienie opcji &lt;span style="font-style:italic;"&gt;Quick Build&lt;/span&gt; na pdflatex + pdf view. Generowanie plików PDF pozwoliło mi na zamieszczanie w dokumencie plików jpg przy użyciu paczki &lt;span style="font-weight:bold;"&gt;graphicx&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Chyba najbardziej dumny byłem z modelu paczek, który sobie wypracowałem. A wygląda to u mnie wstępnie mniej więcej następująco.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;\usepackage{magisterka} % kilka ustawień TeX dla magisterki&lt;br /&gt;\usepackage[MeX]{polski} % używamy platex do łamania&lt;br /&gt;\usepackage[utf8]{inputenc} % kodowanie znaków&lt;br /&gt;\usepackage[T1]{fontenc}  % ustawianie dzielenia wyrazów typowe dla europy&lt;br /&gt;\usepackage{graphicx} % rysunki&lt;br /&gt;\usepackage{indentfirst} % wcinaj pierwszy paragraf&lt;br /&gt;\usepackage{listings} % zalaczanie kodu zrodlowego&lt;br /&gt;\usepackage{multicol} % tworzenie fragmentow lamanych na kolumny&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Wielu rzeczy brakuje, ale jest to co dla mniej najważniejsze czyli łamanie wyrazów zgodnie z zasadami polskiej gramatyki, wcinanie pierwszego akapitu w rozdziale, listingi języków programowania i możliwość tworzenia układów wielokolumnowych :] Myślę, że ta sekcja będzie rozstała się w trakcie dodawania kolejnych rozdziałów.&lt;br /&gt;&lt;br /&gt;Poza właśnie takimi automatami jak przenoszenie wyrazów - co LaTeX robi świetnie - bardzo ucieszyło mnie odkrycie instrukcji &lt;span style="font-style:italic;"&gt;\import&lt;/span&gt; pozwalającej wręcz wstawiać zawartość innych plików do treści mojej pracy. Dzięki temu każdy rozdział magisterki mam w oddzielonym pliku, mam nawet specjalnie wydzielony plik na paczki :] Taki podział sprawia, że wszystko jest bardzo czytelne a modularność rozwiązania pozwala wszystkim łatwo zarządzać.&lt;br /&gt;&lt;br /&gt;Skoro już o listingach wspomnieliśmy. Szalenie użytecznym jest rozpoznawanie języków programowania w nich używanych. LaTeX wspiera ogromną ich ilość i po swojemu "koloruje" składnię to znaczy, pochyla komentarze, pogrubia słowa kluczowe itd... Ponieważ języka &lt;a href="http://go-lang.org/"&gt;Go&lt;/a&gt; jeszcze nikt specjalnie w LaTeXu nie uwzględniłem napisałem swoją własną TeXową łatkę do pliku. Wystarczy ściągnąć najświerzą wersję paczki &lt;a href="http://www.ctan.org/tex-archive/macros/latex/contrib/listings/"&gt;listings&lt;/a&gt; spachować plik &lt;span style="font-style:italic;"&gt;lstdrvrs.dtx&lt;/span&gt; patchem o poniższej treści:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1615a1616,1648&lt;br /&gt;&gt; % \subsection{Go}&lt;br /&gt;&gt; %&lt;br /&gt;&gt; %&lt;br /&gt;&gt; %&lt;br /&gt;&gt; % \begingroup&lt;br /&gt;&gt; %    \begin{macrocode}&lt;br /&gt;&gt; %&lt;*lang2&gt;&lt;br /&gt;&gt; %%&lt;br /&gt;&gt; %% Go language definition (c) Google&lt;br /&gt;&gt; %%&lt;br /&gt;&gt; \lst@definelanguage{Go}%&lt;br /&gt;&gt;  {morekeywords={break,default,func,interface,select,%&lt;br /&gt;&gt;      case,defer,go,map,struct,%&lt;br /&gt;&gt;      chan,else,goto,package,switch,%&lt;br /&gt;&gt;      const,fallthrough,if,range,type,%&lt;br /&gt;&gt;      continue,for,import,return,var},%&lt;br /&gt;&gt;  moredirectives={bool,byte,float32,float64,int8,int16,int32,int64,%&lt;br /&gt;&gt;      string,uint8,uint16,uint32,uint64,%&lt;br /&gt;&gt;      float,int,uint,uintptr,%&lt;br /&gt;&gt;      true,false,iota,%&lt;br /&gt;&gt;      nil,%&lt;br /&gt;&gt;      cap,close,closed,copy,len,make,new,panic,panicln,print,println},%&lt;br /&gt;&gt;  sensitive,%&lt;br /&gt;&gt;  morecomment=[l]//,%&lt;br /&gt;&gt;  morecomment=[s]{/*}{*/},%&lt;br /&gt;&gt;  morestring=[b]",%&lt;br /&gt;&gt;  morestring=[b]`,%&lt;br /&gt;&gt;  }[keywords,comments,strings,directives]%&lt;br /&gt;&gt; %&lt;/lang2&gt;&lt;br /&gt;&gt; %    \end{macrocode}&lt;br /&gt;&gt; % \endgroup&lt;br /&gt;&gt; %&lt;br /&gt;&gt; %&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://jan.koprowski.zhr.pl/tex/lstdrvrs-go.patch"&gt;http://jan.koprowski.zhr.pl/tex/lstdrvrs-go.patch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Skompilować komendą &lt;span style="font-weight:bold;"&gt;make&lt;/span&gt; i przekopiować powstałe pliki *.sty do katalogu &lt;span style="font-style:italic;"&gt;/usr/share/texmf-texlive/tex/latex/listings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I tyle :] Język Go jest już wspierany przez LaTeXa :]&lt;br /&gt;&lt;br /&gt;Ostatnim osiągnięciem, którym chcę się pochwalić jest zrobienie pliku &lt;span style="font-weight:bold;"&gt;magisterka.sty&lt;/span&gt;, który ma za założenie konfigurację niestandardowych dla LaTeXa rzeczy. Na razie znajduje się tam tylko kod dodający kropki za numerami rozdziałów:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;%&lt;br /&gt;% Dodawanie kropki po numerze sekcji&lt;br /&gt;%&lt;br /&gt;\def\@seccntformat#1{\csname the#1\endcsname.\space}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;LaTeX to rzeczywiście system, godny pisania w nim Pracy Magisterskiej!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2519486189241579135?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2519486189241579135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2519486189241579135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2519486189241579135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2519486189241579135'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/02/ma-starcie-pierwsze-latex.html' title='MA starcie pierwsze - LaTeX'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1794798111741371892</id><published>2010-02-07T23:51:00.000-08:00</published><updated>2010-02-08T09:14:56.626-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='go-lang'/><category scheme='http://www.blogger.com/atom/ns#' term='makefile'/><title type='text'>Makefile w języku Go</title><content type='html'>Go jest chyba pierwszym językiem, który wspiera tworzenie Makefile czyniąc je banalnie prostym:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;include $(GOROOT)/src/Make.$(GOARCH)&lt;br /&gt;&lt;br /&gt;TARG=calc&lt;br /&gt;GOFILES=\&lt;br /&gt;&amp;nbsp;&amp;nbsp; calc.go\&lt;br /&gt;&lt;br /&gt;include $(GOROOT)/src/Make.cmd&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1794798111741371892?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1794798111741371892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1794798111741371892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1794798111741371892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1794798111741371892'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/02/makefile-w-jezyku-go.html' title='Makefile w języku Go'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3754466493485620952</id><published>2010-02-07T07:27:00.001-08:00</published><updated>2010-02-11T11:51:10.358-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magisterka'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Praca magisterska make your knowledge out of date</title><content type='html'>Pisanie pracy magisterskiej uświadomiło mi jak wiele do życzenia pozostawia aktualność wiedzy zdobytej w trakcie studiów. Zderzenie ze światem Internetu, metodologii będących na topie, praktyk oraz kierunku w jakim poszły języki programowania - zwaliły mnie z nóg. Kiedy zaczynam czytać artykułu w języku angielskim nagle moja wiedza nie tylko przestaje być aktualna, ale wręcz mam wrażenie że "polski internet" stanął w miejscu kilka lat temu. Czuję się bardzo zacofany względem osób na bieżąco dokształcających się z dziedzin dotyczących trendów we współcześnie powstałych języka programowania. Wiadomo - student uczy się sam i tylko od niego zależy co potrafi. Gdy jednak uświadomię sobie na jak "zacofane" technologie musiałem tracić całe godziny wykładów, laboratoriów, prac zaliczeniowych, projektów - gdy tym czasem świat gnał do przodu... To przerażające. Część mojej wiedzy ze studiów można byłoby streścić na jednym wykładzie pod tytułem "historia informatyki" zaś czas marnotrawiony na wkładanie do głów rzeczy nieaktualnych poświęcić za pokazaniem rzeczywistych kierunków zmian w jakim idzie informatyka.&lt;br /&gt;&lt;br /&gt;Mam nadzieję, że dożyję czasów kiedy Władze Uczelni przejrzą na oczy i zamiast dodawać swoim pracownikom dodatkowej papierkowej roboty i obowiązków nijak związanych z pracą naukową zostawią wykładowców w spokoju i pozwolą im stawać się coraz lepszymi ekspertami dziedzinowymi, którzy będą w stanie przekazywać studentom naprawdę najświeższą wiedzę. Będąc świadomym ogromu obowiązków kładzionych na wielu pracowników naukowych nie dziwię się, że kolejny raz wykład jest prowadzony z tych samych pożółkłych folii pamiętających czasy przewodu doktorskiego Pana Profesora. Niemniej nikt na tym nie korzysta a student wychodzi z uczelnią na funkcjonujący w obecnie obowiązujących realiach rynek pracy - z wiedzą, która była aktualna dekadę temu.&lt;br /&gt;&lt;br /&gt;Szczególnie wielkim wyzwaniem jest tutaj informatyka (oraz prawo) ponieważ te dwa mają najwyższy współczynnik dezaktualizacji w czasie. Wymagają więc ciągłego wysiłku i nieustannej pracy w "bycie na bieżąco".&lt;br /&gt;&lt;br /&gt;P.S. Za zacofane technologie nie uważam bynajmniej tak elementarnej wiedzy jak szlify w programowaniu w C czy C++ tudzież sędziwych językach programowania, które po prostu są powszechnie wykorzystywane na rynku z racji na już powstałe i mające się dobrze od dziesięcioleci projekty - patrz choćby jądro Linuksa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3754466493485620952?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3754466493485620952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3754466493485620952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3754466493485620952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3754466493485620952'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/02/praca-magisterska-make-your-knowledge.html' title='Praca magisterska make your knowledge out of date'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8303308288725835313</id><published>2010-01-31T05:53:00.000-08:00</published><updated>2010-01-31T06:09:46.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prawo'/><title type='text'>"Wychowawczy" aspekt wlepiania mandatów</title><content type='html'>Bardzo często z mojego roztrzepania dostaję mandat. Już się przyzwyczaiłem. &lt;span style="font-weight:bold;"&gt;Insipiens lex sed lex.&lt;/span&gt; Jednak najbardziej szokuje mnie podejście wszystkich, którzy wlepiają mi mandaty.&lt;br /&gt;Za każdy razem, gdy jeden z funkcjonariuszy zajmuje się formalnościami drugi udziela mi pouczenia. Ostatnio jechałem bez świateł rowerem. Był wieczór. No i zgadzam się - słusznie dostaję mandat. Trwało to z 7 minut... ale czemu przez te 7 minut muszę słuchać gadki w stylu "popełnił Pan przestępstwo, jest Pan winien przekroczenia artykułu ble ble ble ..." i tylko słyszę jaki to ja jestem zły, szkodliwy niedobry. Gość produkuje się już od 5 minut ... a ja nadal nie wiem jakie powinienem mieć oświetlenie na rowerze, żeby nie dostać kolejnego mandatu! To jest gadka! Nie dość, że tobie ubywa kilkadziesiąt złotych z kieszeni to jeszcze dostajesz 7 minutowe bombardowanie negatywnymi informacjami, które wpędzają Cię w przygnębienie. Nie wiem czemu to ma służyć. Na mnie to działa jak "czuj się jak zły bandzior bo przekroczyłeś prawo". I gdzie ta resocjalizacja w Polsce?! Chyba w bardzo głębokim więzieniu bo na ulicach to wystawiający mandaty produkując "po kawałku" z dobrych ludzi - bandziorów - częstując ich swoimi tyradami.&lt;br /&gt;&lt;br /&gt;Inna sytuacja. Instynkt, który wyrobiło we mnie harcerstwo, odjeżdża SKMka, widzę, że mężczyźnie zamknęły się drzwi przed nosem, to automatycznie, bez myślenia otwieram je metodą awaryjną, żeby facet zdołał wsiąść. No i znowu czułem się potraktowany jak ostatni bandzior przez sokistów, którzy swoją gadką spokojnie, gdyby trwała choć chwilę dłużej, mogliby wzbudzić we mnie szczerą chęć łamania prawa na złość im lub bycia bandziorem bo takie emocje we mnie produkowały ich słowa. Czułem się traktowany jak przestępca. Ja, instruktor ZHR, człowiek, który postąpił według automatów, które programuje w człowieku społeczeństwo poprzez pożądane przecież w Państwie postawy społeczne wpajane w Harcerstwie. Czułem, że Harcerstwo wykształciło we mnie dobro, za które teraz płacę karę, za które jestem potraktowany jak człowiek wyjęty spod prawa, jak bandyta.&lt;br /&gt;&lt;br /&gt;Harcerstwo nauczyło mnie również karności i posłuszeństwa. Dlatego mandat przyjmę zawsze bez słowa, ale drodzy funkcjonariusze mówcie jak powinno być, a nie jakim złym jestem człowiekiem kiedy dostaję mandat! Pozytywy jeszcze nikomu nie zaszkodziły.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8303308288725835313?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8303308288725835313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8303308288725835313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8303308288725835313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8303308288725835313'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/01/wychowawczy-aspekt-wlepiania-mandatow.html' title='&quot;Wychowawczy&quot; aspekt wlepiania mandatów'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-329718942357303849</id><published>2010-01-26T11:45:00.001-08:00</published><updated>2010-01-26T11:46:21.284-08:00</updated><title type='text'>Instalowanie GuestAdditions na Debianie</title><content type='html'>Prosta instrukcja:&lt;br /&gt;&lt;br /&gt;1. Login as root;&lt;br /&gt;2. Update your APT database with apt-get update;&lt;br /&gt;3. Install the latest security updates with apt-get upgrade;&lt;br /&gt;4. Install required packages with apt-get install build-essential module-assistant;&lt;br /&gt;5. Configure your system for building kernel modules by running m-a prepare;&lt;br /&gt;6. Click on Install Guest Additions… from the Devices menu, then run mount /media/cdrom.&lt;br /&gt;7. Run sh /media/cdrom/VBoxLinuxAdditions.run, and follow the instructions on screen.&lt;br /&gt;&lt;br /&gt;źródło: &lt;a href="http://virtualbox.wordpress.com/doc/installing-guest-additions-on-debian/"&gt;http://virtualbox.wordpress.com/doc/installing-guest-additions-on-debian/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-329718942357303849?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/329718942357303849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=329718942357303849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/329718942357303849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/329718942357303849'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/01/instalowanie-guestadditions-na-debianie.html' title='Instalowanie GuestAdditions na Debianie'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3879599037431888010</id><published>2010-01-16T07:02:00.000-08:00</published><updated>2010-01-16T07:05:54.741-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='starcraft'/><title type='text'>Sposób na StarCraft-a w Windows 7</title><content type='html'>Po odpaleniu StarCrafta w nowej wersji Windows kolorystyka jest szalenie pstrokata, brakuje wiele kolorów, a w ich miejscu pojawia się turkusowe tło.&lt;br /&gt;Rozwiązaniem problemu jest wyłączenie pliku explorer.exe (czyli pulpitu) na czas gry. Można to zrobić poniższym skryptem.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;taskkill /f /IM explorer.exe&lt;br /&gt;"C:\Program Files\Starcraft\StarCraft.exe"&lt;br /&gt;pause&lt;br /&gt;start explorer.exe&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Zmodyfikowanym o ścieżkę do StarCraft.exe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3879599037431888010?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3879599037431888010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3879599037431888010' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3879599037431888010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3879599037431888010'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/01/sposob-na-starcraft-w-windows-7.html' title='Sposób na StarCraft-a w Windows 7'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4793439535423244777</id><published>2010-01-12T00:10:00.000-08:00</published><updated>2010-01-12T00:13:32.983-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Rada na brak sterowników do Windows 7</title><content type='html'>Na moim laptopie od bardzo niedawna gości Windows 7. Niestety Fujitsu-Siemens nie wypuściło sterowników do Amilo Pro V3525 dla tego systemu zaś instalowanie sterowników Windows Vista poza powodowaniem dziesiątek komunikatów o niezgodności lub błędach nie dawało efektu.&lt;br /&gt;Ratunkiem okazało się przed uruchomieniem magicznego setup.exe ustawienie we właściwościach wstecznej kompatybilności z Windows Vista SP2. Sterowniki instalowały się jak marzenie  (bez mrugnięcia okiem) i wszystko zaczynało po prostu działać :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4793439535423244777?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4793439535423244777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4793439535423244777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4793439535423244777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4793439535423244777'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2010/01/rada-na-brak-sterownikow-do-windows-7.html' title='Rada na brak sterowników do Windows 7'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6834028013759837464</id><published>2009-12-16T01:14:00.000-08:00</published><updated>2009-12-16T01:20:52.049-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='machinarium'/><category scheme='http://www.blogger.com/atom/ns#' term='gry przygodowe'/><title type='text'>Gra gra i po grze</title><content type='html'>Dzisiaj około godziny 5 rano zmagania z Machinarium zakończyły się sukcesem. Mogłem pójść spać.&lt;br /&gt;&lt;br /&gt;Gra jest niesamowicie przygotowana:) Naprawdę robi wrażenie. Po pierwsze nie jest to gra przygodowa w stylu "chuchnij dwa razy, otwórz okno, przejrzyj się w lusterku a otworzą się drzwi". Wszystkie zagadki (może poza ptakiem na kablach i ostatnią sceną) zostały bardzo dokładnie przygotowane. Nawet jeżeli nie wiemy co robić, możemy uzyskać pomoc i zobaczyć "co autor miał na myśli", a nawet wtedy wykonanie zadania stanowi wyzwanie, a rozwiązanie nie jest oczywiste.&lt;br /&gt;&lt;br /&gt;Gra zaskoczyła mnie rosnącym poziomem trudności. Lokacje stają się stopniowo coraz bardziej złożone, początkowo zaś wszystko musimy wykonać w "jednym pomieszczeniu". To moim zdaniem ogromna zaleta. Gdy interakcje i relacje stają się coraz bardziej złożone zaczynają pomagać genialne miniaturki przedmiotów. Dzięki wyeksponowanym ważnym elementom (np. jak zobaczyłem radio odrazu wiedziałem co z nim zrobić) wiadomo czego szukać. Wygląd przedmiotu bardzo często sugeruje nam jakiś punkt zaczepienia. Brawo!&lt;br /&gt;&lt;br /&gt;Gra bardzo przyjemna, na pewno przejdę ją jeszcze nie raz:] Polecam każdemu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6834028013759837464?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6834028013759837464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6834028013759837464' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6834028013759837464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6834028013759837464'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/gra-gra-i-po-grze.html' title='Gra gra i po grze'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8399172526610222331</id><published>2009-12-15T09:37:00.000-08:00</published><updated>2009-12-16T01:21:09.078-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='machinarium'/><category scheme='http://www.blogger.com/atom/ns#' term='gry przygodowe'/><title type='text'>Machinarium</title><content type='html'>Dzisiaj kupiłem fantastyczną grę pod tytułem: &lt;a href="machinarium.net/"&gt;Machinarium&lt;/a&gt;. Już od dawna miałem chęć zmierzyć się z jakąś grą przygodową. Demo tej gry mnie wręcz urzekło. Nie wytrzymałem i kupiłem! Kosztować mnie to będzie około 72zł. Nie mało jednak najbardziej zadowolił mnie charakter zakupu. Po podaniu numeru karty i autoryzowaniu jej po prostu dostałem na maila linki z adresami skąd mogę pobrać grę. Fantastyczne! Nie muszę czekać na przesyłkę, martwić się czy dojdzie. Po prostu płacę i to kiedy dotrze gra zależy już tylko od mojego łącza! :) Oby więcej takich produkcji!&lt;br /&gt;&lt;br /&gt;Notatnik obserwatora zjawisk legalnych:&lt;br /&gt;Od dziecka (kiedy pamiętam) lubiłem gry przygodowe. Jednak każdą przechodziłem z solucją. Powiem wam, że pierwszy raz głupio mi jest przejść z solucją grę. Grę za którą się zapłaciło (aby mieć z niej zabawę a nie ją przejść). Jak widać kupowanie gier bardzo zmienia do nich podejście.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8399172526610222331?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8399172526610222331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8399172526610222331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8399172526610222331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8399172526610222331'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/machinarium.html' title='Machinarium'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1587060532005081306</id><published>2009-12-13T03:01:00.000-08:00</published><updated>2009-12-13T03:36:25.598-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pks'/><category scheme='http://www.blogger.com/atom/ns#' term='kolej'/><category scheme='http://www.blogger.com/atom/ns#' term='pkp'/><title type='text'>Korzystanie z kolei stało się zmorą</title><content type='html'>Czasy gdy szło się do okienka i prosiło "studencki do Gdańska Oliwy" minęły bezpowrotnie. Dzisiaj widać efekty Państwowego rozdzielenia ostatnich taborów pomiędzy Marszałków Województw i spółkę Intercity.&lt;br /&gt;Nadszedł czas kolei ekskluzywnej bo drogiej. Ci, którzy chcą pojechać gdzieś w Polskę muszą przedzierać się przez dziesiątki promocji, planować podróż znacznie wcześniej, kupować bilety przez internet.&lt;br /&gt;Najbardziej współczuje studentom, którzy lubili często jeździć do domu. Oni odczują te zmiany najbardziej. Nie wystarczy już po prostu kupić biletu. Każda podróż będzie loterią pomiędzy "im wcześniej tym taniej" a "last minute ticket". Wielką strategiczną grą wyboru pomiędzy nastoma ofertami spółki InterCity a przesiadkami z wykorzystaniem połączeń InterRegio.&lt;br /&gt;Ja chyba przerzucę się na PKSy. Bo to chyba jedyna ostoja "kupuję bilet i jadę". Swoją drogą uważam, że przeżyją renesans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1587060532005081306?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1587060532005081306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1587060532005081306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1587060532005081306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1587060532005081306'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/korzystanie-z-kolei-stao-sie-zmora.html' title='Korzystanie z kolei stało się zmorą'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2611608677723549562</id><published>2009-12-13T01:35:00.001-08:00</published><updated>2009-12-13T01:42:48.653-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='starcraft2'/><title type='text'>Czy Starcraft II będzie idealny?</title><content type='html'>Od tygodnia oglądam wszystkie battle reporty z SC II jakie tylko się nawiną. SC2 jeszcze nie wyszedł ale rozegrano już w nim naprawdę wiele rozgrywek.&lt;br /&gt;Rodzi się pytanie. Czy SC2 będzie grą idealną? Dlaczego? Podczas projektowania SC domyślam się, że nie było możliwości uzyskania takiego odzewu graczy jak tutaj. Gra i plansze mogą być na bieżąco równoważone i poprawiane pod dyktando mistrzów rozgrywek światowych w tej dziedzinie. Jest więc szansa, że SC II długo nie będzie wymagało patchy balansujących grę i szanse wszystkich ras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2611608677723549562?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2611608677723549562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2611608677723549562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2611608677723549562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2611608677723549562'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/czy-starcraft-ii-bedzie-idealny.html' title='Czy Starcraft II będzie idealny?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8594142693048056288</id><published>2009-12-05T22:59:00.000-08:00</published><updated>2009-12-05T23:36:13.174-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal6'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal7'/><title type='text'>Drupal 7 w cieniu Buzzr</title><content type='html'>Wczoraj natrafiłem na genialną prezentację projektu o nazwie &lt;a href="http://www.buzzr.com/"&gt;Buzzr&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/g5UV+fpXiqF3" type="application/x-shockwave-flash" width="400" height="230" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Zrobiła na mnie ogromne wrażenie. Buzzr to frontend zbudowany na Drupalu 6. Szalenie podoba mi się jego "Wordpressowość". W końcu coś przyjaznego, z ikonkami. Dzięki silnemu wykorzystaniu Drag&amp;amp;Drop oraz podzieleniu wszystkiego na kroki można naprawdę w genialnie prosty sposób konfigurować witrynę. Pomysły chłopaków z Lullabot uważam wręcz za rewelacyjne a wykonanie za naprawdę dobre.&lt;br /&gt;&lt;br /&gt;Drupal 7 koncentruje siły developerów głównie na poprawianiu i porządkowaniu.&lt;br /&gt;Dużo pracy zostało włożone w usunięcie pewnych niewygodnych funkcji obsługi plików. Wiele hooków posiada swoje bardziej wyspecjalizowane wersje. Niektóre ogólne zostały podzielone na kilka miejszych (tak np. hook_node_api czy hook_form_alter) inne zaczęły żyć własnym życiem (weźmy choćby hook_schema).&lt;br /&gt;Drupal 7 korzysta już z PDO więc developerzy nie muszą się już martwić o implementowanie driverów do baz danych - będą obsługiwać ich tyle ile PDO obsłuży. API bazodanowe w ogóle zostało znacznie usprawnione. W końcu można w Drupalu korzystać z transakcji a nawet tabele w bazie MySQL tworzą się jako InnoDB.&lt;br /&gt;&lt;br /&gt;To wszystko pięknie, ale odczują to raczej developerzy modułów (ja odczułem i muszę powiedzieć, że wprowadzone zmiany są naprawdę fantastyczne), ale nie zwykli użytkownicy (obecnie D7 i tak jest wolniejszy od D6). Właśnie tutaj zastanawiam się co jest grane.&lt;br /&gt;Buzzr to ewidentna rewolucja. I moim zdaniem genialna rewolucja. Rozumiem, że D7 woli iść drogą ewolucji. Wiele funkcjonalności zewnętrznych modułów zostało wessane do samego Drupala. Na pewno pozwoli to lepiej je zintegrować, zrobić większy porządek.&lt;br /&gt;Tak jak Drupal 6 ukierunkowywał się na nody tak Drupal 7 ukierunkowuje się na pola. Wygląda to jakby D7 miał wbudowane CCK i jest w tym dużo prawdy bo D7 znaczną część CCK wciągnął do siebie.&lt;br /&gt;&lt;br /&gt;Nowinki znowu idą w stronę zaawansowanych technologii i performance. Bo kto dzisiaj wykorzysta wsparcie Drupala dla RDF poza naprawdę świadomymi firmami (choć moim zdaniem to świadczy o Drupalu jako poważnym graczu na rynku Business i Enterprise) czy chociażby możliwość w końcu przyśpieszenia Drupala Varnishem, który przez nieprzemyślaną metodę obsługi ciasteczek w D6 nie mógł praktycznie nic cachować?&lt;br /&gt;&lt;br /&gt;A czemu skoro pojawił się już pasek u góry to nie tak fajny, ładny i przyjazny jak ten z Buzzr? Dlaczego nikt nie wpadł na pomysł nowego procesu instalacyjnego (takiego jak ten z Buzzr) czy uproszczenia do bólu tak podstawowych akcji jak zmiana podstawowych elementów strony (jak ten w Buzzr).&lt;br /&gt;Do tej pory dzieliłem CMSy nad banalnie prostego Wordpress-a i zaawansowanego Drupala. Chłopaki z Lullabot pokazali, że można genialnie pogodzić ogień z wodą. Buzzr moim zdaniem swoją prostotą bije na głowę Wordpressa równocześnie posiadając wszystkie aspekty potęgi jaką dysponuje Drupal.&lt;br /&gt;&lt;br /&gt;Mam nadzieję, że Drupal wiele nauczy się od Buzzr i postawi w końcu na "look and feel", które w Drupalu wciąż boleje i jest toporne.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Top 3 look &amp;amp; feel &amp;amp; simple usability &amp;amp; user friendly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Buzzr&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wordpress&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Drupal&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Geniusz developerów Drupala i ich kunszt w pisaniu bijącego swoją epokę kodu w PHP oraz prostata bijąca na głowę Wordpressa... Lepiej nikt nie mógł tego wymyśleć.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8594142693048056288?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8594142693048056288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8594142693048056288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8594142693048056288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8594142693048056288'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/drupal-7-w-cieniu-buzzr.html' title='Drupal 7 w cieniu Buzzr'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8608406122278205625</id><published>2009-12-04T07:02:00.001-08:00</published><updated>2009-12-04T07:06:45.158-08:00</updated><title type='text'>Radość z programowania</title><content type='html'>Dzisiaj uświadomiłem sobie, że największą radość z programowania czerpię pisząc w C. Sam nie wiem dlaczego. Początkowo myślałem, że może największą radość czerpie się z programowania w języku, który jako pierwszy się poznało, jednak, w moim przypadku wcześniej był Pascal. Więc to nie to.&lt;br /&gt;C było językiem, który miałem wprowadzony na początku studiów, wiele rzeczy się w nim pisało: obsługa MPI i MPI2, współbiegi, poznawanie C++ ... same miłe wspomnienia związane z fascynacją nowymi technologiami i technikami. Może stąd sentyment.&lt;br /&gt;Programowanie w C czy C++ uważam za swojego rodzaju kunszt, Python czy Ruby służą mi raczej jako narzędzia do wykonania jakiś prostych zadań.&lt;br /&gt;Dlatego, choć może to wydać się dziwne, książką, którą kupię w najbliższym czasie będzie pewnie właśnie książka o programowaniu w gołym C i chyba właśnie Jej wertowanie sprawi mi szaloną radość :) Brakuje mi do tego jeszcze pasji C++ grębosza i Stroustrupa :) i voila!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8608406122278205625?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8608406122278205625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8608406122278205625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8608406122278205625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8608406122278205625'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/12/radosc-z-programowania.html' title='Radość z programowania'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7090183852506033032</id><published>2009-11-27T03:22:00.000-08:00</published><updated>2009-11-27T03:38:29.246-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHPize 5.3.1 i --prefix=""</title><content type='html'>Od kilku dni tworzę high-end webstack dla pewnego rozwiązania działającego na systemie opensolaris. W związku z tym musiałem skompilować ręcznie również PHP i modułów do niego.&lt;br /&gt;W trakcie zacząłem dostawać różne dziwne błędy. Zacząłem szukać po forach, bugtrackach, forach dyskusyjnych... Problem objawiał się komunikatami błedu "sed-a" podczas uruchamiania skryptu phpize dla XCache. Wyglądało to mniej więcej tak:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;PHP Api Version:         20090626&lt;br /&gt;Zend Module Api No:      20090626&lt;br /&gt;Zend Extension Api No:   220090626&lt;br /&gt;First RE may not be null&lt;br /&gt;autoheader: error: AC_CONFIG_HEADERS not found in configure.in&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Problem okazała się trywialny. Podczas kompilacji podałem przełącznik &lt;span style="font-weight:bold;"&gt;--prefix=""&lt;/span&gt;. Z jakiś przyczyn PHP zamiast wstawić do skryptu phpize prefix pusty to w ogóle stwierdziło, że go nie potrzebuje i nie stworzyło takiej zmiennej w bashu przez co wyrażenie regularne podane jako parametr seda było puste i reszta już sama ładnie się sypała. Teraz, po podaniu wartości prefix, wszystko zdaje się ładnie działać:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7090183852506033032?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7090183852506033032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7090183852506033032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7090183852506033032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7090183852506033032'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/11/phpize-531-i-prefix.html' title='PHPize 5.3.1 i --prefix=&quot;&quot;'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3511216212749749352</id><published>2009-11-24T01:18:00.001-08:00</published><updated>2009-11-24T01:28:27.094-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='V8'/><title type='text'>Ruby on V8, Python on V8? Koniec ery JavaScript?</title><content type='html'>To nieźle zabiło mi klina. Od tygodnia trafiam na linki związane z odpaleniem jakieś skryptu napisanego w Pythonie czy Ruby na V8.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://macournoyer.wordpress.com/2008/09/02/ruby-on-v8/"&gt;Ruby on V8&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cananian.livejournal.com/48301.html"&gt;Binding Python to V8&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.advogato.org/article/985.html"&gt;PyV8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Projekty wyglądają raczej na próby i eksperymenty niż realnie zarysowującą się perspektywę wykorzenienia JavaScript. To jednak dobry znak. Wiadomo - V8 pisane jest z myślą o zwiększeniu wydajności JS i jakby "pod JS" dlatego inne języki mogą sobie radzić na tej wirtualnej maszynie różnie, raz znacznie lepiej innym razem gorzej, jednak sam fakt istnienia wirtualnej maszyny w przeglądarce, uświadomienie sobie tego i próby odpalenia tam współczesnych dzisiejszemu światu języków programowania daje nadzieję na przyszłość.&lt;br /&gt;&lt;br /&gt;Nie potrafię opisać emocji jakimi napawa mnie myśl wykorzystywania pQuery albo rQuery :) w kombinacji z genialną składnią Pythona czy klasami Rubego. Może dla naszych dzieci&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;script src="script.rb" type="text/ruby"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="script.py" type="text/python"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;będzie już czymś normalnym:) Pożyjemy zobaczymy! Trzymam kciuki za eksperymenty i żywię głęboką nadzieję na prezentowany w tym wpisie obrót spraw!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3511216212749749352?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3511216212749749352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3511216212749749352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3511216212749749352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3511216212749749352'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/11/ruby-on-v8-python-on-v8-koniec-ery.html' title='Ruby on V8, Python on V8? Koniec ery JavaScript?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8791749577324979154</id><published>2009-11-19T12:11:00.000-08:00</published><updated>2009-11-19T13:40:31.837-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Wrażenia ze spotkania "Wprowadzenie do języka Scala"</title><content type='html'>Właśnie wróciłem z Uniwersytetu Gdańskiego gdzie uczestniczyłem w spotkaniu Trójmiejskiego Java User Group. Prelegentem był Łukasz Kuczera.&lt;br /&gt;&lt;br /&gt;Idąc na spotkania miałem wobec niego ogromne oczekiwania. Liczyłem na to, że "ktoś nauczy mnie w końcu Scali" i "nie będę musiał się przedzierać przez 'Programming in Scala'". Jeszcze przed wejściem byłem mile zaskoczony gdy na korytarzu przed audytorium zobaczyłem osobą wertującą ową książkę.&lt;br /&gt;&lt;br /&gt;Na samym początku w kilku słowach została omówiona historia języka, jego twórców oraz to jak ich doświadczenie z Javą wpłynęło na kształt oraz możliwości Scali. Po tym wstępie autor zaprezentował hierarchię klas w Scali oraz dostępne ad hoc metody i funkcje. Pokaz możliwości języka rozpoczął się od przykładowej implementacji klasy Rational. Prelegent skupił się na: używaniu metod klasy jak operatorów, wykorzystaniu funkcji require oraz stworzeniu konwertera intToRational. W między czasie przewijał się wątek funkcyjności Scali - chociaż pokazana została typowo od strony obiektowej.&lt;br /&gt;W dalszej kolejności zostały zaimplementowane kolejki - z wykorzystaniem klas abstrakcyjnych, a zaraz po nich przyszła kolej na traitsy, z pokazaniem możliwości ich sekwencyjnego wywoływania. Nie zabrakło też przykładu implementacji Aktorów.&lt;br /&gt;&lt;br /&gt;Konferencja była poprowadzona bardzo chaotycznie. Było to chyba winą tego iż "starano się przedstawić wszystko", zamiast skupić się omówić kilka interesujących fragmentów. Sprawozdawca wciąż skakał z tematu na temat, miotając się, jakby nie mogąc zdecydować o czym opowiedzieć (a o czym nie (sic!)).&lt;br /&gt;&lt;br /&gt;Ponieważ spotkanie było dla członków JUGu, co krok ktoś (czy to prowadzący,czy ktoś z audytorium) próbował odnieść się do Javy. Porównania były czasem mniej, czasem bardziej trafne.&lt;br /&gt;&lt;br /&gt;To co najbardziej mnie zaciekawiło to doświadczenia prelegenta z użyciem Scali w środowisku produkcyjnym. Przepisując na Scalę projekt, napisany wcześniej w Java, otrzymał on 5 MB (tak dokładnie - megabajtowy) Applet! Rozmiar pliku był zdeterminowany zawarciem w nim - poza kodem - również całego środowiska Scala :) (wszak przeciętnie użytkownik ma po swojej stronie tylko Javę). Po odnalezieniu metody minimalizacji jego rozmiaru (zmalał do 300 KB - mniejszy niż w przypadku Java) okazało się, że metoda zawodzi w przypadku używania Server Pages (jednak nie jestem do końca pewien czy dokładnie o tą technologię chodziło). Po obejściu problemu zaczęto dopisywać fragmenty kodu z użyciem Swinga. Tutaj jednak projekt został zawieszony. Nie udało się zmusić Scali do rysowania po elemencie canvas. Całość została przepisana ponownie do Javy. Jak wspomina sprawozdawca mogła to być wina po stronie teamu - jednak nie było czasu szukać rozwiązania i przyczyn problemu.&lt;br /&gt;&lt;br /&gt;Ostatecznie spotkanie zakończyło się chwilę przed 19:30. Osobiście oceniam je jako bardzo owocne:) Po prelekcji miałem okazję zamienić kilka słów z autorem wykładu:) Bardzo ucieszyła mnie ogromna pasja i optymistyczne nastawienie do Scali;) Zostałem nawet podwieziony do domu:] Osobiście zastanawiam się czy samemu nie przygotować serii wykładów na ten temat - zobaczymy:)&lt;br /&gt;&lt;br /&gt;P.S. Pomimo krytycznej oceny autor wpisu zna realia mieszanki adrenaliny i audytorium liczącego kilkadziesiąt osób i wie z jak wielkim stresem wiąże się stanie "po drugiej stronie". Dodatkowo prelegent poinformował o swoim nie najlepszym samopoczuciu - i przeprosił za ewentualne, wynikające z tego, komplikacje.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8791749577324979154?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8791749577324979154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8791749577324979154' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8791749577324979154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8791749577324979154'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/11/wrazenia-ze-spotkania-wprowadzenie-do.html' title='Wrażenia ze spotkania &quot;Wprowadzenie do języka Scala&quot;'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8324621674413124701</id><published>2009-11-13T06:45:00.000-08:00</published><updated>2009-11-13T06:56:07.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Scala - język ok, ale kto wykorzysta jej potencjał?</title><content type='html'>Z każdym dniem lepiej poznając Scalę dochodzę do wniosku, że to język programowania o fantastycznym potencjale i możliwościach. Jednak wraz z kolejnymi mechanizmami tego języka programowania zastanawiam się kto dziś (a jeżeli nie dziś to kiedy) wykorzystam ten kolosalny, drzemiący w języku potencjał?&lt;br /&gt;&lt;br /&gt;O ile C, C++ czy inne języki programowania odbieram jako odpowiedź na rosnące potrzeby programistów o tyle scala jest dla mnie czymś "zadanym". Rozumiem, że PHP było odpowiedzią na braki w językach do tworzenia witryn internetowych, a C++ popularyzacją obiektowego stylu projektowania, jednak na co odpowiedzią jest Scala?&lt;br /&gt;&lt;br /&gt;Ilość usprawnień i wprowadzonych w niej koncepcji mnie osobiście, jako programistę, przerasta. Ogromny potencjał jakim emanuje sprawia, że zamiast skupiać się na problemie i jego rozwiązaniu (z użyciem języka programowania) zastanawiam się jak tego języka programowania użyć wymiernie do jego możliwości. Scala po prostu obecnie mnie przerasta. Jest dla mnie trochę jak objawienie - nie rozwiązanie problemów z obecnymi językami programowania (poza ułomną lambdą Python w 100% mi wystarcza).&lt;br /&gt;&lt;br /&gt;Jestem pełen podziwu i szacunku wobec geniuszu twórców tego języka i zastosowanych w nim rozwiązań:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8324621674413124701?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8324621674413124701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8324621674413124701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8324621674413124701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8324621674413124701'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/11/scala-jezyk-ok-ale-kto-wykorzysta-jej.html' title='Scala - język ok, ale kto wykorzysta jej potencjał?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4306063182948912299</id><published>2009-10-28T00:18:00.000-07:00</published><updated>2009-10-28T00:33:41.854-07:00</updated><title type='text'>Scala - znak równości a wartość zwracana przez funkcję</title><content type='html'>Przeczytałem dziś o ciekawej własności, może raczej pewnym niuansie, związanym z typem zwracanym przez funkcje w Scali. Deklarując funkcję podajemy zwykle na końcu zwracany przez nią typ.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;def pokaz(a: Int): Unit = {&lt;br /&gt;  println(a)&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To co mnie zdziwiło to typ &lt;span style="font-weight:bold;"&gt;Unit&lt;/span&gt;. Używamy go gdy zadaniem funkcji, którą tworzymy nie jest zwrócenie nowej wartości, ale jej efekt uboczny. Efekt uboczny rozumiany jako "funkcja powinna zwrócić wartość, ale jeżeli tego nie robi to znaczy, że wszystko co robi jest jej efekt ubocznym". W tym przypadku efektem ubocznym funkcji (która z natury powinna coś zwrócić) jest wyświetlenie parametru na ekranie.&lt;br /&gt;&lt;br /&gt;Tak więc gdy gdy typem zwracanym przez funkcję jest Unit wiemy, że celem funkcji nie jest zwrócenie nam jakiejś wartości, ale wykonanie innych zadań. To co mnie zaciekawiło to fakt iż pominięcie znaku równości przy deklarowaniu funkcji oznacza domyślnie "zwracam &lt;span style="font-weight:bold;"&gt;Unit&lt;/span&gt;. Powstaję tylko dla moich efektów ubocznych" zaś jego podanie oznacza "zwracam jakąś wartość".Co łatwo zobaczyć :)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;scala&gt; &lt;span style="font-weight:bold;"&gt;def funkcja() = { "String" }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;funkcja: ()java.lang.String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;scala&gt; &lt;span style="font-weight:bold;"&gt;def funkcja() { "String" }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;funkcja: ()Unit&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Podoba mi się takie rozróżnienie :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4306063182948912299?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4306063182948912299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4306063182948912299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4306063182948912299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4306063182948912299'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/10/scala-znak-rownosci-wartosc-zwracana.html' title='Scala - znak równości a wartość zwracana przez funkcję'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1536723839715183755</id><published>2009-10-22T12:37:00.001-07:00</published><updated>2009-10-22T12:38:39.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSolaris'/><title type='text'>OpenSolaris - zmiana powłoki użytkownika</title><content type='html'>Niestety w OpenSolaris nie zaznamy polecenia &lt;span style="font-weight:bold;"&gt;chsh&lt;/span&gt;. Możemy jednak pomóc sobie:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;usermod -s /ścieżka/do/powłoki nazwa_użytkownika&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1536723839715183755?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1536723839715183755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1536723839715183755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1536723839715183755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1536723839715183755'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/10/opensolaris-zmiana-powoki-uzytkownika.html' title='OpenSolaris - zmiana powłoki użytkownika'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-911767063240272736</id><published>2009-10-22T12:28:00.000-07:00</published><updated>2009-10-22T12:30:08.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSolaris'/><title type='text'>OpenSolaris - rozpakowywanie tar.gz</title><content type='html'>Od niedawna mam styczność z systemem OpenSolaris. Od czasu do czasu będę publikował jak coś w nim zrobić.&lt;br /&gt;Dzisiaj zastanawiałem się jak rozpakować w nim plik tar.gz Oto metoda dla ciekawskich.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;gunzip &lt; plik.tar.gz | tar xvf -&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-911767063240272736?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/911767063240272736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=911767063240272736' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/911767063240272736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/911767063240272736'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/10/opensolaris-rozpakowywanie-targz.html' title='OpenSolaris - rozpakowywanie tar.gz'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7775523256285412616</id><published>2009-10-19T23:48:00.000-07:00</published><updated>2009-10-20T02:55:44.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Trendy polskie a praca na świeci</title><content type='html'>Nie wiem co mnie dziś tknęło ale postanowiłem sprawdzić pewną rzecz.&lt;div&gt;Przeczesując zasoby polskiej sieci, w poszukiwaniu informacji na temat tworzenia witryn internetowych, trafiamy głównie na kursy &lt;a href="http://www.djangoproject.com/"&gt;Ruby On Rails&lt;/a&gt; albo &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;. Dzisiaj postanowiłem zobaczyć jak sprawa się ma jeżeli chodzi o "jobtrends" na świecie. Wyniki z serwisu &lt;a href="http://www.indeed.com/jobtrends"&gt;Indeed.com/jobtrends&lt;/a&gt; poniżej.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.indeed.com/trendgraph/jobgraph.png?q=Drupal,+Django,+Rails"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 540px; height: 300px;" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Drupal,+Django,+Rails" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;O ile popularność Railsów mnie nie zszokowała (może co najwyżej jej skala) o tyle fakt iż Drupal stoi znacznie wyżej niż dziesiątki razy opisywany w polskiej sieci Django - mocno mnie zdziwiło. Czyżby Django przegrywało w świecie biznesu z Drupalem? Może to jakaś wskazówka? Szczególnie, jeżeli planujemy naszą przyszłość w perspektywie pracy programisty. I jak sytuacja ta ma się do polskich warunków pracy? Pytania pozostawiam bez odpowiedzi.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7775523256285412616?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7775523256285412616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7775523256285412616' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7775523256285412616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7775523256285412616'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/10/trendy-polskie-zarobki-na-swieci.html' title='Trendy polskie a praca na świeci'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1664799287807821866</id><published>2009-10-08T21:07:00.000-07:00</published><updated>2009-10-08T21:28:38.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome frame'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Trywialny błąd we wtyczce Chrome Frame</title><content type='html'>Właśnie przygotowuję wykłady na Politechnikę i chciałem dzisiaj pokazać Chrome Frame. Zawiodłem się gdy wtyczka zamiast pokazać ramkę z propozycją instalacji dodatku zawiesiła na moment Internet Explorer a po chwili wyrzuciła błąd. Ostatecznie problem okazał się banalny:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;W skrypcie CFInstall.js linia 173 wyglądała:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;var installUrl = '//www.google.com/chromeframe';&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;zamiast&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;var installUrl = 'http://www.google.com/chromeframe';&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Po zmianie tego odnośnika :) zaczęło działać :) Mam nadzieję, że komuś się przyda.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1664799287807821866?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1664799287807821866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1664799287807821866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1664799287807821866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1664799287807821866'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/10/trywialny-bad-we-wtyczce-chrome-frame.html' title='Trywialny błąd we wtyczce Chrome Frame'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2805223753884776508</id><published>2009-09-28T14:41:00.001-07:00</published><updated>2009-09-28T14:48:09.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuły'/><title type='text'>Jakość a czas pisania artykułów</title><content type='html'>Poczyniłem dzisiaj refleksję dotyczącą jakości a czasu pisania artykułów.&lt;div&gt;Miło mi, kiedy gro osób jest zniecierpliwionych i oczekuje kolejnej części kursu, serii artykułów. Jednak równocześnie presja skłania ku pośpiechowi. A na tym cierpi jakość. Być może są ludzie zdolni, którzy piszą artykuł od razu w formie w jakiej chcą go zobaczyć. W moim przypadku mam wizję, ale aby ją osiągnąć muszę najpierw napisać to co chcę zawrzeć. Później trwa przeredagowywanie. I ten właśnie proces jest długotrwały. Pozmieniam szyk zdań, część informacji wyjmę z tekstu i ujmę w formie tabelki, wzmiankę o innych pominę. Następnie potrzebuję tygodnia, w którym myślę jak poprawić ten tekst dalej, co jeszcze jest w nim zbyt skomplikowane ...&lt;/div&gt;&lt;div&gt;Po tygodniu siadam i wprowadzam kolejne poprawki itd... Czasami dobry tekst powstaje dwa miesiące. Oczywiście - napisany jest w 2 dni, ale gotowy dopiero po 60-70.&lt;/div&gt;&lt;div&gt;Takie życie:) Staram się jak mogę. Jak widać wrodzonego talentu nie mam. Chociaż zdarza mi się, że jakiś temat jest "na fali". W takim sensie, że mnie obecnie pasjonuje i pochłania. Wtedy artykuły, prawie w finalnej formie, wychodzą jak z rękawa. Ale wtedy jest kilka dni nie odchodzenia od komputera i czasochłonnego spisywania myśli - na co często nie mogę sobie już pozwolić (studia, praca). No i tyle :]&lt;/div&gt;&lt;div&gt;Pozdrawiam!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2805223753884776508?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2805223753884776508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2805223753884776508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2805223753884776508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2805223753884776508'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/09/jakosc-czas-pisania-artykuow.html' title='Jakość a czas pisania artykułów'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7150509001018259052</id><published>2009-09-04T02:13:00.001-07:00</published><updated>2009-09-29T11:18:48.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>I(IS)nwazja (aktualizacja)</title><content type='html'>Dzisiaj grzecznie od rana chcę siąść do kolejne częściu kursu developerów Drupala. Odpalam sobie Chrome i wchodzę na witrynę &lt;a href="http://localhost/drupal7/admin/structure/modules"&gt;http://localhost/drupal7/admin/structure/modules&lt;/a&gt; a tu nagle&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/SqDa9wxgb6I/AAAAAAAABRI/DyzFVBDovFo/s1600-h/iis7_inwazja1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/SqDa9wxgb6I/AAAAAAAABRI/DyzFVBDovFo/s400/iis7_inwazja1.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5377538709679796130" /&gt;&lt;/a&gt;&lt;br /&gt;Szybkie spojrzenie na localhost&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/SqDbIr7auvI/AAAAAAAABRQ/PZoPRGAeAyo/s1600-h/iis7_inwazja2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 204px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/SqDbIr7auvI/AAAAAAAABRQ/PZoPRGAeAyo/s400/iis7_inwazja2.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5377538897357748978" /&gt;&lt;/a&gt;&lt;br /&gt;I wszystko jasne. Mój Apache został brutalnie skazany przez upgrady Windows na banicję. Szkoda tylko, że nikt mnie o tym nie poinformował. To jeden z tych przypadków "przecież wczoraj działało" i z jakiś przyczyn nagle moja Vista stwierdziła, że w sumie to nie ważne, że postawiłem sobie na porcie 80tym serwer Apache bo przecież ona wie lepiej co jest dla mnie lepsze i po cichu w upgradach uszczęśliwi mnie IIS7.&lt;div&gt;To jest tylko serwerek domowy, developerski. Nie ma więc o co płakać, ale jeżeli ktoś miałby taki am myk w środowisku produkcyjnym - to byłaby to masakra. Zaraz spróbuję wyłączyć dziada i wrócić do pracy, ale MS nie zapłaci mi za stracony czas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Problem powodowały upgrady "Apple Software Update" (które przyszły wraz z Bonjour) nie mechanizmy Microsoftu.&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7150509001018259052?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7150509001018259052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7150509001018259052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7150509001018259052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7150509001018259052'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/09/iisnwazja.html' title='I(IS)nwazja (aktualizacja)'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_iATZVSQqOgg/SqDa9wxgb6I/AAAAAAAABRI/DyzFVBDovFo/s72-c/iis7_inwazja1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8443454493988185361</id><published>2009-08-27T13:15:00.000-07:00</published><updated>2009-08-27T13:20:52.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal7'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Drupal 7 zaczął maleć</title><content type='html'>Przez ostatnie kilka tygodni Drupal 7 rósł. Dosłownie Od około 1,54 MB wzrósł do 1,95 MB. Wszystko posuwało się do przodu. Aż do "teraz". Jakiś czas temu zauważyłem spadek, który na dzień dzisiejszy zatrzymał się na poziomie 1,91 MB. Czyżby przyszedł czas na usunięcie starych funkcji, przeczyszczenie niekompatybilnego kodu i "refactoring size"? Ciekawe. Obserwując ten, jakże świeży trend, można wnioskować, że został ukończony pewien duży etap. Pytanie, czy to już koniec? Drupal 7 ma zostać wstępnie wydany najpierw "dla firm", dopiero później usłyszy o nim świat. Kto wie, czy za kuluarami nie nastał już właśnie ten moment? Z jednej strony ilość ticketów w bugtrackerze sugeruje iż przed developerami jeszcze długa droga. Nikt jednak nie wie nic "na pewno" a niejasna i niezgłębiona myśl releaserów Drupala nie pozwala przeniknąć się i odkryć etapu, na którym znajduje się projekt. Ciekawe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8443454493988185361?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8443454493988185361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8443454493988185361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8443454493988185361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8443454493988185361'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/08/drupal-7-zacza-malec.html' title='Drupal 7 zaczął maleć'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6733188056256872245</id><published>2009-08-24T02:52:00.000-07:00</published><updated>2009-08-24T02:56:50.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='look and feel'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Myśl na dziś - konsola i GUI</title><content type='html'>Instalując Linuksa spędzasz trzy dni na dostosowaniu środowiska graficznego do swoich upodobań.&lt;br /&gt;Instalując Windowsa spędzasz trzy dni na dostosowaniu linii poleceń do swoich upodobań.&lt;br /&gt;&lt;br /&gt;P.S. Przy czym w pierwszym konsola działa odrazu tak jak chcesz a w drugim akceptujesz środowisko graficzne takie jakim jest.&lt;br /&gt;&lt;br /&gt;Autor zdaje sobie sprawę, że stwierdzenia są bardzo ogólne i nie odnoszą się do większości użytkowników systemu są to tylko subiektywne odczucia spowodowane dzisiejszym dniem w pracy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6733188056256872245?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6733188056256872245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6733188056256872245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6733188056256872245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6733188056256872245'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/08/mysl-na-dzis-konsola-i-gui.html' title='Myśl na dziś - konsola i GUI'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1634639448463496146</id><published>2009-07-29T11:25:00.000-07:00</published><updated>2009-07-29T12:09:23.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Python i Ruby w jednym stali domu ...</title><content type='html'>... o ASP.NET C# nie mówiąc nikomu.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Bolączki początkującego w ASP.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Może to bolączki początkującego programisty a może rozpieszczenie. Nie wiem. Wiem jedno - ASP.NET to "pain in the ass". Ale od początku.&lt;br /&gt; Interfejs stworzył kolega. Tyle wiem o tym jak to się robi. Mu się udało. Ja miałem zacząć wypakowywać go treścią z bazy danych. To co oferuje C# w tym zakresie jakoś nie zachwyca. Zacząłem od tworzenia zapytań w "stringu" i podpinania pod kontrolkę. No i działało... Kiedy już byłem zadowolny ... przypomniałem sobie o SQLInjection :/ Oczywiście funkcji do escapowania nie zaświadczysz w tak &lt;span style="font-style:italic;"&gt;nowoczesnym&lt;/span&gt; języku jak C#.&lt;br /&gt; Zaświtała mi myśl, aby zobaczyć czy może nie warto (póki czas) przerzucić się na MVC. Składnia SQLowata wbudowana w język programowania fajna, ale totalnie biedna. Bez joinów nie pakuję się w tą zabawę.&lt;br /&gt; Wróciłem więc do zwykłego ASP.NET. Skoro już muszę w tym programować to może stworzę sobie fajną abstrakcję dla bazy danych. Zleciała mi na tym większość dnia. Niestety wybrałem ślepą uliczkę. Tylko dlaczego tak cudowne środowisko jak Visual Studio nie powiedziało mi, że wybierając na target SqlDataReader nie uda mi się go podpiąć jako DataSource do GridView z paginowanie. Nie wiem. A może po prostu nie wiedziało. Tak więc w cudowny sposób stanąłem z gotową, ładną acz kompletnie nieużyteczną klasą do obsługi bazy danych i straconymi 10 godzinami roboczo godzin. Dobrze, że chociaż mi za nie zapłacą.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Maszyna czasu - wskazówka cofa się&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Mój dzisiejszy dzień i w ogóle całe programowanie w ASP.NET przypominają mi młodość. Czasy, w których nie wiedziałem co to framework. Czas, w którym wymyślało się koło na nowo. Czas, w którym tworzyło się mnóstwo autorskich rozwiązań.&lt;br /&gt;  W ASP.NET to nieunikonione. Nie jeżeli choć troszkę próbujemy dorównać wygodzie oferowanej przez takie technologie jak Django, Pylons, Symfony czy "Drupal Framework". A chyba nie umiem już zaakceptować faktu, że "coś jest źle zrobione".&lt;br /&gt;Pomimo braku wygodnych i dobrze przemyślanych mechanizmów nie natrafiłem na jakiś wysyp "gotowców", które ułatwią Ci życie w sieci. A szkoda. Klasa do porządnej obsługi bazy danych by się przydała. Obecnie - wygląda to dziwnie.&lt;br /&gt;  Przyglądając się technologiom stosowanym w ASP.NET mam wrażenie, że tym co tam się znalazło rządziła "burza mózgów". 30 pomysłów, które po prostu zaimplementowano a potem zaczęto się zastanawiać jak to ma razem działać. I coś tam "sklecono". Szalenie niewygodne, nieelastyczne i dziwnie niskopoziomowe.&lt;br /&gt;  &lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Pokolenie RuPy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Możemy kłócić się całymi latami o wyższość jednej technologii nad drugą. Idealizować Scalę, krytykować Pythona za niekonsekwencję, Rubego za "abstrakcję". Jednak po dzisiejszym dniu mam to po raz kolejny w nosie. W każdym z tych języków tworzenie witryn to bajka. Żal mi całych mas ludzi, którzy myślą, że ASP.NET to szczyt możliwości. Zarazem zaczynam z każdą chwilą doceniać każdy kolejny projekt, który przyjdzie mi tworzyć z użyciem, którejkolwiek z tych technologii.&lt;br /&gt;Wszystkim, którzy cierpią na bezsenność z powodu wymyślania argumentów na korzyść/niekorzyść jakiegoś języka programowania - daję receptę. Zaprojektujcie w ASP.NET system newsów z komentarzami i bazą użytkowników. Spróbujcie zabezpieczyć aplikację przed XSS, CSRF, SQLInjection z użyciem C# i zróbcie to równie ładnie jak w Python'ie czy Ruby'm. Efekt - gwarantowany: "No more tears".&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Podsumowanie&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Część artykułów robiących wielkie halo wokół Iron Ruby i Iron Python to mydlenie oczu. Odniosłem kiedyś wrażenie, że Microsoft "robi łaskę", że implementuje te dwa świetny języki na swojej platformie. Może być tylko inaczej. MS idzie po najniższej linii oporu. Stara się zapewnić, godne porządnego, szanującego się programisty, (sic!) środowisko. Środowisko, które zacznie zbliżać się możliwościami do obecnych trendów. Jednak moim zdaniem jeszcze daleko do tego. Oczywiście. Elastyczność Ruby'go i Python'a będzie biła na głowę C# w każdym miejscu i usprawni tworzenie witryn o 150%. Jednak dopiero zastosowanie frameworków znanych ze świata CPython'a czy CRube'go sprawi, że będzie to opcja do rozważenia.&lt;br /&gt;&lt;br /&gt;  Prawda jest taka, że Microsoft ma problem. Ten problem nazywa się IIS. Jak widać doszli do wniosku, że jedynym wyjściem z niego to zrobić działające z nim implementacje tego co dobre. Oby tylko nie "ulepszyli" całości po swojemu robiąc z genialnych technologii kolejną, której nie da się używać.&lt;br /&gt;&lt;br /&gt;P.S. Autor podkreśla na koniec, że w ASP.NET programuje bardzo krótko i negatywne zdanie o technologii może wynikać ze słabej znajomości języka.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1634639448463496146?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1634639448463496146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1634639448463496146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1634639448463496146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1634639448463496146'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/python-i-ruby-w-jednym-stali-domu.html' title='Python i Ruby w jednym stali domu ...'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6112565315398296242</id><published>2009-07-22T09:53:00.001-07:00</published><updated>2009-07-22T10:03:30.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Dlaczego istnieje ASP.NET MVC ?</title><content type='html'>Od wczoraj jestem "szczęśliwcem". Szczęśliwcem ponieważ mam możliwość (a dokładniej nie mam wyboru) programować w ASP.NET 3.5 w VS 2008.&lt;br /&gt;Szczerze mówiąc - pogubiłem się. Chodzi o to, że niby ASP.NET jest jedno a jednak mówi się o ASP.NET Server-Side, ASP.NET AJAH, ASP.NET AJAX, ASP.NET AJAX + jQuery i nie wiem czy jest coś jeszcze ... ah tak ! Mówi się o ASP.NET MVC ... i to wszystko razem ! powoduje, że się totalnie gubię.&lt;br /&gt;&lt;br /&gt;Chciałbym zacząć tworzyć stronę w czymś nowym... nowoczesnym, w czymś co jest obecnie na topie. Jednak obecnie już nie wiem co jest na topie i w co warto inwestować swoje zasoby. Który z tych wszystkich ASP przetrwa próbę czasu. &lt;br /&gt;&lt;br /&gt;Wiem jak działa ASP.NET jako taki. Pisanie eventów do elementów witryny przeciągniętych z toolbox-ów. To było to udoskonalenie pozwalające oddzielić warstwę logiki od prezentacji. No i wszystko pięknie ... do momentu gdy nie spotkałem się z informacją, że istnieje ASP.NET MVC... Dlaczego?! zapytałem sam siebie. Czyżby innowacyjna na skalę całej sieci architektura tworzenia witryn internetowych Microsoftu miała okazać się ostatecznie źle zaprojektowaną ? Po co komu kontrolery i modele skoro wszystko można robić na elementach świetnie integrującymi się z bazami danych?&lt;br /&gt;&lt;br /&gt;Szczerze mówiąc tak jak od 2 dni próbuję ogarnąć ten chaos tak mogę powiedzieć jedno. Na początku byłem pod ogromnym wrażeniem, że taktyka znana mi z VB 6: przeciągnij, kliknij dwa razy, zaprogramuj - działa również w wypadku witryn internetowych. Szybko, miło przyjemnie - syfiaście od strony źródła witryny, ale trudno.&lt;br /&gt;I teraz nagle (na to wygląda) okazuje się, że (zgaduję - ale przecież z jakiś przyczyn powstało ASP.NET MVC) taka metoda tworzenia witryn jednak nie jest taka świetna ? Wprowadza się MVC ?&lt;br /&gt;&lt;br /&gt;Obecnie wymaganie mam jedno: chciałbym stworzyć 99.99 AJAXową aplikację internetową w ASP.NET korzystając z maximum bajerów, które tam napchali. Jeżeli ktoś wie które ze wszystkich wybrać - byłbym wdzięczny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6112565315398296242?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6112565315398296242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6112565315398296242' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6112565315398296242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6112565315398296242'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/dlaczego-istnieje-aspnet-mvc.html' title='Dlaczego istnieje ASP.NET MVC ?'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1018122160859603905</id><published>2009-07-16T12:50:00.001-07:00</published><updated>2009-07-16T13:34:23.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='film'/><category scheme='http://www.blogger.com/atom/ns#' term='butterfly effect'/><title type='text'>Obwiniajcie reżyserów - filmy są niewinne</title><content type='html'>Często wybierając się na jakiś film do kina lub chociaż chcąc wybrać repertuar na "filmowy wieczór" z przyjaciółmi zbieram opinie od znajomych. Jakie filmy im się podobały, co warto obejrzeć. Niektórzy wciąż wygłaszają subiektywne opinie, inni - rzetelniejsi - starają mi się w skrócie opisać klimat i wątek aby możliwie obiektywnie opisać mi jakiego kina mam się spodziewać. Ocenę pozostawiają mi. Jest też kilka osób, które zna mnie już na tyle dobrze, że mówią często "spodobałoby Ci się", albo "jak podobało Ci się to obejrzyj też to - trochę straszne - ale zobaczysz, że warto się pobać. W Twoich klimatach." Czasami trafiają, czasami nie, ale generalnie znają mnie już trochę i doradzają mi najlepiej jak potrafią.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Opinie o filmach&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Opinie jakie czytam pod recenzjami filmów ... hmm ... Ujmę to tak. Nie rzucają mi się w oczy opinie obiektywne. Czyli fakty. Raczej krzykliwe "pierwsza część była lepsza", albo "super", czy coś w stylu "po co w ogóle kręcili coś jeszcze", "idźcie koniecznie, genialny film". Nic nie mówiące komentarze, przez które trzeba się przedzierać.&lt;br /&gt;&lt;br /&gt;Pośród fal takich i podobnych uwag można czasem znaleźć perełki. "Jestem wrażliwą osobom i moim zdaniem w filmie jest za dużo krwi.", "Mój ośmioletni syn bawił się świetnie, ale jego starszy brat, lat 17, wynudził na śmierć.", albo "Mam 28 lat, jestem matką dwójki bliźniaków - lat 13. Moim zdaniem film jest zbyt brutalny jak na 13latków. Za dużo w nim przemocy."&lt;br /&gt;&lt;br /&gt;Takie opinie, które wnoszą coś do ogólnego opisu filmu, to rzadkość. Chwała tym ludziom, że są ! Najczęściej spotyka się je w komentarzach pod bajkami dla dzieci. W innych często takich zimnokrwistych, naszpikowanych faktami ocen brak.&lt;br /&gt;&lt;br /&gt;100 punktów i sławę wróżę portalowi, który wprowadzi do systemu komentarzy guziczek "odsiej subiektywne".&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Dlaczego winicie niewinne filmy?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chciałem skupić się na opiniach w stylu: "ten film jest do du**" albo "po co robiliście kolejną część? To chłam w porównaniu z pierwszą."&lt;br /&gt;Weźmy na start Trylogię Tolkiena. Jest nakręcona i wyreżyserowana dość jednolicie - nieprawdaż ? Nie ma jakiś szczególnych różnic pomiędzy nimi. Styl, kostiumy, Świat są na mojego oko spójne. Nic dziwnego skoro całość wyreżyserował ten sam gość Peter Jackson. To jest nasz wzór. Teraz czas na odejścia od reguły.&lt;br /&gt;&lt;br /&gt;Ktoś pamięta "Krótkie spięcie" ? Czy komuś podobała się bardziej druga część od pierwszej ? Mi osobiście nie i myślę, że istnieje znaczna rzesza osób, która podziela moje zdanie. Może to przez to, że pierwszą część wyreżyserował John Badham a drugą już Kenneth Johnson. No ale nic może to przypadek. Idźmy dalej.&lt;br /&gt;&lt;br /&gt;Wracając, z kina po "Harry Potter i więzień Azkabanu" miałem dziwny niedosyt. Coś mi nie grało. Nie miałem nic filmowi konkretnie do zarzucenia, po prostu... takie dziwne uczucie, że coś było nie tak, źle, że nie na taki film się wybierałem. Tym bardziej dziwne, że dwie poprzednie części były super. Po powrocie sprawdziłem reżysera. Nie był to Chris Columbus ale Alfonso Cuarón. No cóż życie.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Butterfly Effect&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jestem obecnie na świeżo po obejrzeniu trzeciej części Efektu Motyla. Drugiej nie widziałem wcale. Pierwsza szalenie mi się podobała. O każdej kolejnej opinie były różne (te subiektywne). Część pisała, że jest super, inny, że beznadzieja.&lt;br /&gt;Z pierwszą częścią nie miało to za bardzo nic wspólnego. Tam ktoś miał pomysł i ten pomysł było widać w filmie. On urzekł tych, którzy okrzyknęli ten film genialnym.&lt;br /&gt;&lt;br /&gt;Po obejrzeniu trzeciej części znowu sprawdziłem reżysera. Zmienił się. Gość zrobił film o zabijaniu. Film, opinie o którym zaczęli wygłaszać nie specjaliści od "Butterfly Effect", ale specjaliści od filmów w stylu "Piła" a w tej kategorii (domyślam się bo nie jestem fanem) BFE 3 jest myślę fatalny. Z jakiś przyczyn reżyser wepchnął film do szuflady innej kategorii, kategorii gdzie nie ma szans, kategorii, w której opinie przestały dotyczyć tytułowego motywu a zaczęły "historii zabijania", kategorii gdzie głos zaczęli zabierać wielbiciele gore i innych - pokrewnych.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Przez różową szybkę&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jakie są z tego wnioski. Moim zdaniem idąc na film należałoby patrzeć nie na tytuł, ale na tytuł i na reżysera - a często już ten drugi wiele nam powie. Można szybko i bez problemu sprawdzić jego portfolio. Być może sprawdzenie w tworzeniu jakich filmów ma doświadczenie da nam wystarczający pogląd o tym czego możemy w kinie się spodziewać.&lt;br /&gt;&lt;br /&gt;Jeżeli trzecia część HP była IMHO gorsza niż dwie poprzednie, a BFE 3 to "Time-machine Saw-killer" a nie Butter Fly Effect to może czas oceniać filmy po reżyserach i to ich karcić za to co nam się podobało a co nie? Warto też odnosić się do tego co podobało nam się w pierwszej części. Ta sama opinia względem "którejś części" i bez podobnego porównania zmienia wszystko.&lt;br /&gt;&lt;br /&gt;Chiny serwisowi, który wprowadzi w komentarzach opcję "Za najlepszą z poprzednich części uważam: (o) pierwszą, ( ) drugą, ( ) trzecią".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1018122160859603905?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1018122160859603905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1018122160859603905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1018122160859603905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1018122160859603905'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/obwiniajcie-rezyserow-filmy-sa-niewinne.html' title='Obwiniajcie reżyserów - filmy są niewinne'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3649453032279244025</id><published>2009-07-11T04:34:00.000-07:00</published><updated>2009-07-13T11:56:39.816-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML2'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='WHATWG'/><title type='text'>Roi est mort, vive le Roi! *</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;* Umarł Król niech żyje król !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.youtube.com/watch?v=NLlGopyXT_g"&gt;Machine using us&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Od obrazu do telewizji&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Współczesny świat mediów to głównie przekaz obrazu - telewizja. To co kiedyś było malowidłami na ścianach jaskiń i grobowców, później obrazami na płótnach wyewolułowało w zdjęcia aby ostatecznie przyjąć znaną nam po dziś dzień formę telewizji. Połączenie obrazu i dźwięku. Pełne dynamiki pozwalające prezentować nie tylko to co ruchome ale również swoich statycznych przodków. Połączenie bazujące na dwóch tylko zmysłach: wzroku i słuchu, dające ogromne możliwości.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Medialny chaos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wraz z rozwojem techniki telewizor stał się &lt;span style="font-weight:bold;"&gt;globalnym śmietnikiem&lt;/span&gt;. Możemy znaleźć tam niemal wszystko. Anonimowi ludzie proponują nam co dzień 24 godziny treści. Przemnożone przez ilość dostępnych kanałów tworzą globalną sieć informacji. Próbuje ją porządkować znany nam dobrze program telewizyjny lub jego nowocześniejszy potomek: gazeta telewizyjna.&lt;br /&gt;Spoglądając z boku widzimy ogromną ilość programujących ludzi przekazów: reklam, haseł, poglądów, słów i gestów. Słowem - idealne medium do sprzedawania w atrakcyjny sposób wszelkich treści i zarabiania na tym bałaganie. Piąta władza w ręku możnych tego świata. Nigdy jednak nie stała się &lt;span style="font-style:italic;"&gt;głosem ludu&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Medium społeczności&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Internet. Najbardziej wolne z do tej pory istniejących mediów. Telewizja, w której zatrzymał się czas. Najnowocześniejsze z do tej pory istniejących metod przekazu informacji. Tutaj popularność zyskują Ci, którzy przypadają do gustu milionom. Bez promocji, kampanii reklamowych, marketingu. Prości, zwykli ludzie. Kiedyś źródło zawierające setki prostych dokumentów, dziś - naszpikowana najróżniejszymi technologiami i mediami sieć.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Z czego zbudowałbyś swój świat?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Medialne HTML5. Wprowadza w świat internetu technologie czyniące go bardziej telewizyjnym niż kiedykolwiek. Wrzuca do jednego worka wiele rożnych unowocześnień i jak &lt;a href="http://xhtml.com/en/future/conversation-with-x-html-5-team/"&gt;sami twórcy przyznają &lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"HTML is a mess!" and "rather than being designed, HTML just grew, by different people just adding stuff to it".&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Z drugiej strony stoi martwy XHTML 2: dobrze przemyślany, zaprojektowany jednak za późno aby zaistnieć na rynku przy szumnie reklamowanym HTML 5.&lt;br /&gt;&lt;br /&gt;Z czego Ty zbudowałbyś swój świat? Z HTML 5, który przypomina duże kolorowe klocki &lt;a href="http://en.wikipedia.org/wiki/Duplo"&gt;Duplo&lt;/a&gt;. Jest ich naprawdę sporo, wszystkie siedzą w jednym pudle. Pozwalają budować pstrokate budowle, duże, zwracające na siebie uwagę twory.&lt;br /&gt;A może zdecydowałbyś się na dużo bardziej skomplikowane &lt;a href="http://en.wikipedia.org/wiki/Lego_Technic"&gt;Lego Technic&lt;/a&gt;: wymagające więcej wysiłku - pozwalające jednak tworzyć zaprojektowane z inżynierską precyzją machiny.&lt;br /&gt;&lt;br /&gt;Tworząc standardy, nadając im charakter a następnie wprowadzając je do użytku -wyznaczamy kierunek, w którym zmierza sieć i formę w jaką się przekształca. Globalna telewizja, pełna medialnych haseł, krzykliwych reklamówek i serwisów telewizyjnych? A może system świetnie zaprojektowanych, semantycznych aplikacji sieciowych? Wybór należy do nas.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Duże trudniej uzgodnić&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nie uważam, że HTML 5 jest zły. Uważam tylko, że jego wdrożenie i forma są kompletnie nieprzemyślane. Kolejny standard, który za rok będzie trzeba poprawiać. Po co? Skoro można zaprojektować go od razu dobrze? Odnoszę silne wrażenie, że ktoś pcha go do sieci na siłę, oby szybciej - jakby miał zbić na tym nie lada interes. Niestety kosztem jego jakości a na tym stracą wszyscy. Rewolucja zawsze niosła za sobą ofiary. Moim zdaniem tak będzie i w tym przypadku. Standard, choć stworzony w słusznej sprawie sprzeciwu wobec opieszałości W3C, idzie do sieci po trupach.&lt;br /&gt;&lt;br /&gt;Pierwsze ułomności już widać. Wystarczy przeczytać &lt;a href="http://webhosting.pl/W3C.porzuca.obsluge.audio.i.wideo.w.HTML.5"&gt;W3C porzuca standaryzację kodeków audio i wideo w HTML 5&lt;/a&gt;. Przy istniejącej ilości graczy, od których zależy kształt sieci, ciężko jest "coś ustalić". XHTML 2 nie mieszał się tam gdzie go nie proszono. Skupiał się na podstawach tworzenia opisu dokumentu. HTML 5,  stara się być "teorią wszystkiego". Tak więc jaka każda teoria wszystkiego będzie borykał się z podobnymi problemami jeszcze nie raz.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Podział jest dobry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Moim zdaniem wystarczyłoby usiąść nad tym co wymyślono w obydwu standardach i jeszcze raz wybrać to co z nich najlepsze. Jednak - tak jak w przypaku XHTML 2 - rozdzielić zadania pomiędzy technologie. Standardy zaś zaprojektować tak aby łatwo się je łączyło. To właśnie urzekło mnie w XHTML 2. Był mały i skupiał się dobrze na celach, do realizacji, których był przeznaczony. Tam gdzie trzeba było - zakładał korzystanie z koleżeńskich technologii.&lt;br /&gt;&lt;br /&gt;Dlaczego moim zdaniem tak jest lepiej ?&lt;br /&gt;Rozwój sieci oparty o wiele wspierających się standardów będzie znacznie szybszy i prostszy. Prostsze dokonywanie zmian, szybsze podejmowanie decyzji charakterystyczne dla mniejszych grup zadaniowych, jasno wyznaczony kierunek i cel. Atomizacja zawsze służyła elastyczności - duże rozwiązania są jej pozbawione i trudniejsze do ogarnięcia.&lt;br /&gt;&lt;br /&gt;Stworzenie osobnego standardu dla opisu mediów oszczędziłoby nam już jednego problemu. SVG tylko na tym skorzystało. MathML czy RDF to kolejne przykłady "standardów-wtyczek" (o ile można byłoby je tak nazwać). O ile trudniejsze byłoby i dłużej trwało rozwijanie ich w ciele istniejących metajęzyków ? Tym czasem do HTML 5 próbuje się "na wczoraj" wrzucić technologie, których asymilacja jak widać sprawia nie lada problemy. A wystarczyłoby rozwiązać i rozwinąć temat w swoim czasie, z użyciem odrębnego standardu. Może MediaML ?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Ślepa uliczka&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bałagan stworzyć jest łatwo - jednak tymi, którzy będą się z nim borykali jesteśmy my: webmasterzy. Nawet najnowocześniejsze techniki modernizacji sieci - źle zaprojektowane - przyniosą nam więcej problemów niż korzyści.&lt;br /&gt;Tworząc nowe standardy: jeden duży czy 5 małych, możemy jasno wyznaczać kierunek w jakim będzie zdążała sieć: większego bałaganu czy nowocześniejszych technologii. Nie można obejść się tutaj bez podejścia inżynierskiego, bez którego, konstrukcja zacznie się za jakiś czas walić.&lt;br /&gt;&lt;br /&gt;Bez względu na to jak dobrze zaprojektowane zostaną technologie pozostaje jeszcze jeden problem. Ilość standardów rośnie: RDF, MathML, HTML 5, WebForms, SVG. Rośnie także ich objętość a wraz z nią czas jaki poświęcamy na tworzenie witryn. Witryn, które aby były tworzone szybko wymagałyby nowoczesnych narzędzi pozwalających natychmiastowo skorzystać z najnowszych osiągnięć i uzyskać oczekiwany efekt. Narzędzi, których W3C nam nie da.&lt;br /&gt;&lt;br /&gt;HTML 5 posiada te same wady co Ruby względem Python czy PHP względem swoich poprzedników: można w nim napisać coś strasznie niepoprawnego - liczy się na dojrzałość i samodyscyplinę programisty. Czy z takim standardem zajdziemy daleko ? Jak szybko stanie się kulą u nogi ? A może lepiej byłoby zaczekać i wprowadzić unowocześnienia w bardziej przemyślany sposób, stworzyć do nich narzędzia ? Na te pytania każdy może odpowiedzieć sobie sam. Ja marzę o sieci: semantycznej, wolnej i technologicznie doskonałej. O internecie złożonym z aplikacji sieciowych, dobrze zaprojektowanych mechanizmów. Drugiego telewizora mi nie trzeba. Jeden bałagan w pudełko mi starczy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3649453032279244025?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3649453032279244025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3649453032279244025' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3649453032279244025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3649453032279244025'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/roi-est-mort-vive-le-roi.html' title='Roi est mort, vive le Roi! *'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7659937515486332021</id><published>2009-07-10T23:15:00.001-07:00</published><updated>2009-07-11T04:11:52.920-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworki'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Framework's killers*</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chart.apis.google.com/chart?cht=lc&amp;amp;chxt=x,y&amp;amp;chds=1,100&amp;amp;chd=t:100,100,100,60,20,20,20,20,20,20,20,20|100,100,100,10,10,10,10,10,10,10,10,10&amp;amp;chs=400x300&amp;amp;chf=bg,s,a&amp;amp;chco=C6D9FD,4D89F9&amp;amp;chdl=Framework|Drupal&amp;amp;chtt=Czas%20projektowania|kolejnych%20witryn&amp;amp;chma=30,30,30,30&amp;amp;chm=D,4D89F9,1,0,4|D,C6D9FD,0,0,6,-1"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://chart.apis.google.com/chart?cht=lc&amp;amp;chxt=x,y&amp;amp;chds=1,100&amp;amp;chd=t:100,100,100,60,20,20,20,20,20,20,20,20|100,100,100,10,10,10,10,10,10,10,10,10&amp;amp;chs=400x300&amp;amp;chf=bg,s,a&amp;amp;chco=C6D9FD,4D89F9&amp;amp;chdl=Framework|Drupal&amp;amp;chtt=Czas%20projektowania|kolejnych%20witryn&amp;amp;chma=30,30,30,30&amp;amp;chm=D,4D89F9,1,0,4|D,C6D9FD,0,0,6,-1" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Rozdzielczość wykresu jest umowna i nie stanowi żadnej faktycznej miary mówiącej o skali różnić w czasie projektowania.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Tworzenie witryn na bazie Drupala, w kolejnych projektach, zajmuje coraz mniej czasu. Godziny mu poświęcone zwracają się znacznie szybciej niż te zainwestowane we frameworki. Tyle z teorii - czas na fakty.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Niewdzięczny start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Początki to przedzieranie się przez kolejną dokumentację. Opis klas, funkcji, doczytywanie szczegółów. Wewnętrzna walka nakazująca szukać rozwiązania we frameworku nie zaś w samym języku programowania.&lt;br /&gt;&lt;br /&gt;Wiele zależy tu od naszych zdolności, jakości dokumentacji, dostępnych materiałów, aktywności społeczności na forach i grupach dyskusyjnych. W obydwu przypadkach wszystko zaczyna się mniej więcej od tego samego poziomu.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Framework-bajka&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rozpoczynający swoją pracę z frameworkami doznają szokujących usprawnień.&lt;br /&gt;&lt;br /&gt;Granicząca z cudem autonomiczność warstwy baz danych (ORM shock!). Drastycznie zwiększona kohezja kodu po rozmieszczeniu go w kontrolerach (controllers' code improvement). Wszystko-ułatwiające helpery wykonujące dokładnie to czego potrzebujemy (helpers exactly).&lt;br /&gt;&lt;br /&gt;Zaczynamy z wolna czuć się jak Alicja w Krainie Czarów, której nagle pokazano wejście do króliczej nory. Pozornie ciemne i ciasne, jednak kryjące w sobie cały nowy świat. Świat, w którym ciężko jest znaleźć zadanie wymagające napisania więcej niż 7 linii kodu.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Oszczędność czasu we frameworkach&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;W następnych projektach - zaczynamy wykorzystywać stworzone przez nas rozwiązania ponownie. Prawo lenistwa.&lt;br /&gt;&lt;br /&gt;Do kolejnych projektów przenosimy klasy, funkcje, z czasem kontrolery, modele a nawet całe biblioteki. Od czasu do czasu coś modyfikujemy, dodajemy kilka nowych opcji, poprawiamy znalezione błędy.&lt;br /&gt;&lt;br /&gt;Godziny poświęcane na tworzeniu strony zaczynamy liczyć w wykonanych instrukcja copy/paste. Jedyne usprawnienia stanowi używanie skrótów klawiszowych zamiast opcji menu kontekstowego. Po pewnym czasie przestają działać nam klawisze [CTRL], [X], [C] i [V] a w koszta projektu zaczynamy wliczać nową klawiaturę.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Magiczny świat CMS'ów&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wczoraj był u Ciebie klient. Zamówił witrynę. W nocy miałeś sen. Rozmawiałeś z wróżką. Mówiła o jakimś fantastycznym rozwiązaniu. Posiada wszystkie zalety framework'a. Większość standardowych klas ktoś zaprogramował za Ciebie. Witryna jest już praktycznie gotowa. Twoim jedynym zadaniem jest dostosować wszystko do Twoich potrzeb.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Drupal - gotowi start !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;W Drupal'u dostajemy wszystko to, a nawet więcej. Z punktu widzenia developera. Gdzieś na spodzie funkcjonuje sobie zwykły framework. Taki z abstrakcją dla baz danych, helperami, systemem templatów i innymi featurami.&lt;br /&gt;&lt;br /&gt;Na nim dopiero napisane są klasy do CMS'a. Tutaj dostajemy kilkanaście mechanizmów ekstra: ACL'e, klasy użytkowników, newsów, system rejestracji i logowania, raportowanie... Wymieniać można naprawdę długo.&lt;br /&gt;&lt;br /&gt;Poza klasami - system szablonów: formularze, panele administracyjne, tabelki, domyślne CSS'y. Do tego kilka autorskich bibliotek JS dzięki, którym interfejs stylizuje się (sic!) na aplikację webową.&lt;br /&gt;Z punktu widzenia użytkownika - gotowa strona, developera - wymarzony punkt startu.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Gdzie oszczędzamy czas ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zyskaliśmy już czas na projektowaniu i adaptacji standardowych elementów witryny. Systemu użytkowników, newsów, ACL'e, menu - są już gotowe. Doinstalowanie dodatkowych modułów, autorskich czy też pobranych z witryny projektu, zajmuje kilka chwil. Znacznie mniej niż wkoponowywanie ich do strony na poziomie kodu. O to dba Drupal.&lt;br /&gt;&lt;br /&gt;Tworzymy wyłącznie to czego nam brakuje, ewentualnie modyfikujemy istniejące rozwiązania. Możliwość jakie dają 144 funkcje (Drupal 7) pozwalające wpiąć się w niemal każdy mechanizm przygotowanych przez twórców - są nieograniczone. Wolno nam wszystko: od modyfikowania pól formularzy po przeprojektowywanie zapytań SQL.&lt;br /&gt;&lt;br /&gt;Stworzenie zwijanego pola fieldset, sortowania drag &amp; drop, przyklejonych nagłówków tabel, poziomych zakładek. Wszystko wymaga dodania parametru przy wywołaniu helpera  lub nadania odpowiednich klas CSS. JavaScript ? A co to jest ?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Podsumowanie&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Znacznie szybciej modyfikuje się gotową witrynę, aniżeli pisze na nowo. Szczególnie łatwo w przypadku Drupal'a, który do takich przeróbek został stworzony. API pozwalające zmieniać każdy aspekt działania aplikacji. Obszerna tutoriale dla developerów. Świetnie udokumentowane API. Czytelny, jednolity kod. Setki funkcji i gotowych bibliotek. Bibliotek które od lat sprawdzają się na &lt;a href="http://baheyeldin.com/technology/drupal/how-many-sites-run-drupal-april-2006.html"&gt;dziesiątkach tysięcy witryn&lt;/a&gt; internetowych.&lt;br /&gt;&lt;br /&gt;Barierę stanowi pomyślenie o CMS'ie w funkcji środowiska developerskiego - nie gotowej aplikacji. Przyjrzenie się na ile modyfikowanie jest szybsze od tworzenia. O ile łatwiej jest zmieniać &lt;span style="font-weight:bold;"&gt;dobrze zaprojektowane&lt;/span&gt; rozwiązania w miejscu ich tworzenia. Jednak ostrzegam - być może już nigdy więcej nie sięgniesz do żadnego frameworka.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;* Wpis traktuje o Drupal'u ponieważ jest najlepiej znanym autorowi, od strony developerskiej, CMS'em. Nie wyklucza on faktu iż równie dobre, a nawet lepsze, efekty można uzyskać w przypadku innych, dobrze zaprojektowanych systemów zarządzania treścią.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7659937515486332021?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7659937515486332021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7659937515486332021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7659937515486332021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7659937515486332021'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/framework-killers.html' title='Framework&apos;s killers*'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3185528106021479501</id><published>2009-07-04T10:55:00.000-07:00</published><updated>2009-07-10T13:58:28.632-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='isapi-wsgi'/><title type='text'>Dramaty WSGI i geniusz Microsoftu</title><content type='html'>Każdy kto choć odrobinkę siedział w administracji serwerami zna temat hostowania aplikacji. Gdy mowa o PHP zazwyczaj mówi się tylko o mod_php i temat jest prosty. Znacznie &lt;span style="font-style:italic;"&gt;ciekawiej&lt;/span&gt; maluje się hostowanie aplikacji napisanych w innych językach: między innymi ruby czy python.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Starsi wujkowie&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bardziej wymagający użytkownicy, których aplikacje miały działać z uprawnieniami właściciela pliku albo być wrappowane przez suexeca konfigurowało się z wykorzystaniem CGI lub jego bardziej wydajnego kolegi &lt;a href="http://www.fastcgi.com/"&gt;FastCGI&lt;/a&gt;. Istniejące w różnych odmianach dobrze służyły aplikacjom webowym serwowanym z odrębnymi uprawnieniami, zwiększając bezpieczeństwo i wygodę operowania na zasobach znajdujących się po stronie serwera.&lt;br /&gt;&lt;br /&gt;Wraz z wkroczeniem w świat Pythona czy Rubego w sieci zaroiło się od &lt;span style="font-style:italic;"&gt;"rails-serwerów"&lt;/span&gt; taki jak &lt;a href="http://code.macournoyer.com/thin/"&gt;Thin&lt;/a&gt;, &lt;a href="http://ebb.rubyforge.org/"&gt;Ebb&lt;/a&gt;, &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt;. Frameworki Pythona takie jak Web2Py, Django, Pylons były wyposażone we własne wydajne serwery developerskie, które nie jednej osobie posłużyły również w środowisku produkcyjnym.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Próba wejścia w świat Apache&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Równocześnie na arenie zaczęły pojawiać się inne rozwiązanie, te przypominające w swojej budowie mod_php: &lt;a href="http://www.modpython.org/"&gt;mod_python&lt;/a&gt;, &lt;a href="http://www.modrails.com/"&gt;mod_passenger&lt;/a&gt;. Swój debiut miał nawet &lt;a href="http://www.modruby.net/"&gt;mod_ruby&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Również dedykowane serwery "zagościły" pod piórem Apache. Obsługiwane przez wynalazki  rodziny modułów &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html"&gt;mod_proxy&lt;/a&gt; zapytania, trafiały na silnie skalowalne, wydajne klastry serwerów dedykowananych, takich jak wcześniej wspomniany Thin, Ebb czy Mongrel. Pozwalało to obsługiwać w wydajny sposób zapytania, równocześnie nie zdejmując z głowy pióropusza wodzowi plemienia Apachów.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;WSGIzachwyt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O WSGI po raz pierwszy przeczytałem gdy w ramach nauki języka angielskiego postanowiłem przeczytać całe &lt;a href="http://www.python.org/dev/peps/pep-0333/"&gt;PEP-333&lt;/a&gt;. Posiadała wszelkie zalety:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Technologia nie działała stricte jako moduł - tym samym zawieszenie się hostowanej z jej użyciem aplikacji nie powodowało zawieszenia serwera a jedynie samej aplikacji&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kolejne zapytania były przesyłane do kolejnych procesów i obsługiwane w kolejnych wątkach podobnie jak FastCGI. Wykorzystywało więc zalety maszyn zarówno wieloprocesorowych jak i procesorów z kilkoma rdzeniami&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pozwalało ad-hoc bez zewnętrznych wrapperów, jak suexec, uruchamiać aplikacje działające w imieniu konkretnego użytkownika i grupy. Wszystko out-of-the-box.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Specyfikacja mnie urzekła. Koniec z nieprzespanymi nocami spędzonymi nad pisaniem łatek do suexeca, z wiszącymi bez celu procesami FastCGI, koniec z koszmarami o sprytnych użytkownikach zawieszającymi serwer swoimi skryptami :]&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;WSGIrozczarowanie&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bajka o tytule "Pylons na WSGI hostowane pod Apache/&lt;a href="http://code.google.com/p/modwsgi/"&gt;mod_wsgi&lt;/a&gt; w Linuksie" skończyła się w dniu, gdy miałem napisać prostą witrynę w IIS, bez użycia frameworka.&lt;br /&gt;&lt;br /&gt;Na starcie okazało się, że standard w ogóle nie przewiduje hostowania plików statycznych. Trzeba się uciekać do sztuczek:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;przekierowywania ścieżek na poziomie serwera&lt;/li&gt;&lt;br /&gt;&lt;li&gt;używania subdomen dla plików statycznych&lt;/li&gt;&lt;br /&gt;&lt;li&gt;serwowania plików przez naszą aplikację&lt;/li&gt;&lt;br /&gt;&lt;li&gt;unikania plików statycznych&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Echa tych problemów można zauważyć w poradnikach konfiguracji serwerów dla frameworków czy kodzie aplikacji. Narzędzie, które tworzyłem miało być proste w użyciu, skalowalne i przenośne. Możliwe do wykorzystania w kilka chwil. Skoro tak - osobne konfigurowanie serwera odpadało, a rezygnacja z plików statycznych niestety nie wchodziła tutaj w grę.&lt;br /&gt;&lt;br /&gt;Z czasem prosty skrypt zaczął rozrastać się do rangi frameworka. System szablonów Mako, paste i kod przekopiowany żywcem z Pylonsów pozwalający serwować pliki statyczne - czułem, że wymyślam koło na nowo a z prostego projektu zaczyna robić się kolosalne przedsięwzięcie. Projekt, którego znaczną część stanowi jakaś otoczka, kompletnie zaciemniająca najważniejsze - kod samego narzędzia.&lt;br /&gt;&lt;br /&gt;Wszystko działo się w ramach &lt;a href="http://code.google.com/p/isapi-wsgi/"&gt;isapi-wsgi&lt;/a&gt;. Potencjał jaki posiada dawał podstawy do wstrzyknięcie odpowiedniej konfiguracji do witryny IIS automatycznie. Pojawiły się problemy.&lt;br /&gt;&lt;br /&gt;Każdorazowa zmiana w działaniu skryptu wymuszała restart serwera. Na produkcyjnym, rozwiązaniem tego problemu, było resetowanie osobnej puli zasobów IIS'a, do której przydzielona została aplikacja z Pythonem. Jedyną metodą aby to wykonać było posiadanie praw administratora lub pisanie do takowego - gdy coś się zmieniło.&lt;br /&gt;&lt;br /&gt;W międzyczasie okazało się, że isapi-wsgi posiadał, na szczęście banalny do naprawienia, błąd. Wskazywał on na to iż twórca skupia się na tworzeniu modułu dla IIS for clients natomiast nie testuje go w warunkach IIS for servers.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;A żaba chińczyka co z tego wynika&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cała przygoda skończyła się na przeprojektowaniu wszystkiego tak aby działało w trybie CGI. To kolejna historia, która skłania mnie do refleksji, że z jakiś przyczyn Windows jest środowiskiem,  "zasadowym" -  dla rozwiązań genialnie funkcjonujących w świecie Open Source. Pracując coraz więcej z produktami Microsoftu odczuwam stwierdzenia w stylu "Python jest multiplatformowym"  jako postawienie równości z kompletnym pominięciem wygody użytkowania.&lt;br /&gt;&lt;br /&gt;Zapewnia ją dopiero korzystanie z analogicznych implementacji wprowadzanych przez MS. Każde z nich świetnie wkomponowuje się w funkcjonujący ekosystem rozwiązań ze stajni Redmond. Mechanizmy i integracja stoją na oszałamiającym poziomie. Tworzone w ich ramach narzędzia uzyskują genialne efekty i możliwości. Tym samym dając wygodę użytkowania analogiczną dla systemów bazujących na rozwiązaniach opensourcowych.&lt;br /&gt;&lt;br /&gt;Moim skromnym zdaniem zachwyt nad geniuszem produktów Microsoftu może osiągnąć zenit wyłącznie na poziomie rozwiązań jemu dedykowanych. Tak jak osiąga zenit zachwyt nad przygotowanym środowiskiem pracy Mac'a - Apple. Nikt, decydując się na Linuksa, nie dziwi iż programy spod Windows często nie działają. Nikt nie narzeka kupując Mac'a, że nie ma tam MS Office. Wszyscy nagminnie korzystają z aplikacji nie pisanych przez Microsoft narzekając na Windows.&lt;br /&gt;&lt;br /&gt;P.S. Wpis jest dzieckiem zachwytu nad wygodą i wydajnością pracy w środowisku zbudowanym &lt;b&gt;wyłącznie&lt;/b&gt; z użyciem produktów Microsoft. Oszołomienia, w jak wielkim stopniu, tak jednolite technologicznie środowisko przekracza bariery, których osiągnięcie (sic!) byłoby niewyobrażalnie trudniejsze w świecie Open Source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3185528106021479501?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3185528106021479501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3185528106021479501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3185528106021479501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3185528106021479501'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/07/dramaty-wsgi-i-geniusz-microsoftu.html' title='Dramaty WSGI i geniusz Microsoftu'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-4321428389877576077</id><published>2009-06-20T07:33:00.001-07:00</published><updated>2009-06-20T12:19:57.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='przeglądarki'/><title type='text'>Instalacja Internet Explorer 8 może trwać dobę</title><content type='html'>Wczoraj wieczór poświęciłem troszkę czasu aby ponownie wrócić do Windows Vista. Czułem pewien dyskomfort na myśl iż Windows 7 zrobi sobie od &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Lipca&lt;/span&gt; wakacje i stwierdzi, że od tej pory co dwie godziny musi odpoczywać.&lt;div&gt;Po powrocie na Windows Vista w pierwszej kolejności chciałem zainstalować Internet Explorer 8. Uważałem ten manewr za kluczowy w procesie zwiększenia bezpieczeństwa mojego komputera. IE w wersji 8 pojawił się w systemie dopiero przed chwilą. Minęły około 24 godziny od momentu, w który Windows uporał się ze wszystkimi łatkami i pozwolił zainstalować przeglądarkę w najnowszej wersji.&lt;/div&gt;&lt;div&gt;Zdaję sobie sprawę, że na całą sytuację ma wpływ niska &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;częstotliwość&lt;/span&gt; wydań Windows i silna integracja, zależność przeglądarki od systemu. Przyznajcie jednak, że sytuacja jest &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;niekomfortowa&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;Nie zaświadczymy podobnych problemów z żadną inną z popularnych przeglądarek pod Windows i dobrze :) Cieszę się tym bardziej w tej chwili widząc iż mam w końcu najnowszy browser produkcji z Redmond.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-4321428389877576077?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/4321428389877576077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=4321428389877576077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4321428389877576077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/4321428389877576077'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/06/instalacja-internet-explorer-8-trwa.html' title='Instalacja Internet Explorer 8 może trwać dobę'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7945756543197286100</id><published>2009-06-18T22:31:00.000-07:00</published><updated>2009-06-26T23:08:04.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='przeglądarki'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera Unite'/><title type='text'>Opera Unite - zmiana polityki autoryzacji</title><content type='html'>&lt;p&gt;Nie zgadniecie jak wielkie było moje &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;zdziwienie&lt;/span&gt; kiedy dziś rano próbowałem skorzystać z Opera &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Unite&lt;/span&gt; i okazało się (fakt, kiedyś zakładałem konto ma my.opera.com), że mój mail jest zajęty.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_iATZVSQqOgg/Sjw7HdiECZI/AAAAAAAABBM/H8mlwwvwnbg/mailproblem.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 329px; height: 400px;" src="http://lh6.ggpht.com/_iATZVSQqOgg/Sjw7HdiECZI/AAAAAAAABBM/H8mlwwvwnbg/mailproblem.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5348909243269806050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Ale to nic :) Kiedy próbowałem nadać nazwie konta formę jaką zwykłem stosować z kropką okazało się, że nie mogę. I nie byłoby w tym nic dziwnego gdyby nie to, że posiadam już takie konto :] na my.opera.com&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_iATZVSQqOgg/Sjw784kxSMI/AAAAAAAABBU/51d4uwopNAI/s640/konto_posiadam.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 373px;" src="http://lh5.ggpht.com/_iATZVSQqOgg/Sjw784kxSMI/AAAAAAAABBU/51d4uwopNAI/s640/konto_posiadam.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5348909768661988754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Panowie&lt;/span&gt; z &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Opery&lt;/span&gt;, przy próbie logowania, grzecznie zasugerowali nazwę zmiany konta (wszak musi spełniać wszystkie obostrzenia adresu URL)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_iATZVSQqOgg/Sjw6rvUHBvI/AAAAAAAABBE/0r34ROOH85s/s720/zmien_nazwe_usera.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 352px;" src="http://lh6.ggpht.com/_iATZVSQqOgg/Sjw6rvUHBvI/AAAAAAAABBE/0r34ROOH85s/s720/zmien_nazwe_usera.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5348910768751008434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Nie pozostaje mi nic innego jak założyć wczas konto "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;koprowski&lt;/span&gt;" i stworzyć komputer "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;jan&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/6836763300070903809-7945756543197286100?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7945756543197286100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7945756543197286100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7945756543197286100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7945756543197286100'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/06/opera-unite-niekonsekwentna-polityka.html' title='Opera Unite - zmiana polityki autoryzacji'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_iATZVSQqOgg/Sjw7HdiECZI/AAAAAAAABBM/H8mlwwvwnbg/s72-c/mailproblem.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5340649202017392919</id><published>2009-06-17T21:42:00.000-07:00</published><updated>2009-06-18T05:55:05.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Express yourself - dlaczego kłócimy się o wyższość języków programowania</title><content type='html'>Na co dzień używamy jakiegoś języka. W naszym przypadku jest to język polski. Nikt nie narzeka na to iż nauczono go akurat tego języka i akurat w nim się wychował. Używamy go jak potrafimy najlepiej. Kiedy z czasem zaczynamy zagłębiać się w meandry języka angielskiego zauważamy iż jest niezrównany w opisie i pojemności leksykalnej gdy chodzi o żargon techniczny. Jego wykorzystanie w tej dziedzinie daje nam ogromne możliwości i otwiera wiele zamkniętych drzwi, które gdy władaliśmy jeszcze wyłącznie polskim, stały przed nami zamknięte. Nikt nie narzeka jednak i nie krytykuje języka polskiego, nie przestaje go nagle używać twierdząc, "że jest gorszy". Następuje raczej zapożyczanie, mieszanie i ewentualne spolszczanie wyrazów angielskich w gronie osób "technicznych".&lt;br /&gt;&lt;br /&gt;Również będąc fizykiem czy biologiem ciężko mieć pretensje do ilości łaciny z jaką się stykamy. Ten źródłosłów po prostu w najlepszy sposób opisuje istotę zagadnienia i nie ma od kilkunastu tysięcy lat lepszego języka aby wyrazić to wszystko co opisuje.&lt;br /&gt;&lt;br /&gt;Należy również dodać, że każdy język ulega z czasem czemuś co puryści nazwali by "skażeniem". Chodzi o przekręcanie i dodawanie nowych wyrazów i sformułowań, często w danym okresie czasu kompletnie nie poprawnych gramatycznie. Takich wyrazów "ułomnych". Zjawisko to występowało i występuje w wielu językach nie tylko w języku polskim ale również i w angielskim i zapewne każdym innym.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;O co się właściwie kłócimy ?&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Do tego wpisu sprowokowały mnie kłótnie, które systematycznie wywiązują się pod moimi artykułami publikowanymi na Webhosting.pl. Który polak (który chce aby oświadczyny wypadły pięknie) wybrałby do nich język niemiecki (szorstki i suchy) mogąc wykorzystać piękno i urok choćby języka francuskiego lub mając do dyspozycji całą gamę poezji śpiewanej Erotyków Krzysztofa Kamila Baczyńskiego ?&lt;br /&gt;&lt;br /&gt;Języki programowania są różne. Na początku, gdy zaczynamy przygodę z programowaniem, używamy ich aby wklepać ciąg instrukcji, które ma dla nas wykonać komputer. Z czasem zaczynają nam służyć do czegoś więcej. Programując, po kilku latach, zaczynamy pisać kod tak aby &lt;span style="font-weight:bold;"&gt;wyrazić swoją intencję&lt;/span&gt; - zupełnie jak w języku naturalnym.&lt;br /&gt;&lt;br /&gt;Czasem możemy pisać coś w Pythonie i myślimy: no nie, tutaj to idealnie, no po prostu idealnie użyłbym domknięcia (z języka Ruby), a tutaj .... kurcze - genialna sytuacja do wykorzystania modułów (z języka Ruby). Stajemy przed wyborem: zmieniamy język programowania albo spędzamy więcej czasu jak bez użycia tych mechanizmów równie dobrze wyrazić naszą intencję konstruując poprawnie kod.&lt;br /&gt;Myślę, że właśnie w tym momencie u wielu osób zaczyna zapalać się lampka "może język XYZ jest lepszy od ABC ?".&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Co to znaczy lepszy język ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Co to znaczy lepszy język ? Czy angielski jest lepszy od polskiego ponieważ w znacznym stopniu (jest wszak źródłosłowem) składa się na nomenklaturę techniczną ? Czy francuski jest lepszy od polskiego ponieważ oświadczyny, czy przysięga małżeńska ma w nim tak szalenie uroczy wydźwięk i oszałamiające brzmienie ?&lt;br /&gt;&lt;br /&gt;Do tej pory w Polsce funkcjonują wydziały, gdzie wykłada się informatykę, na których obowiązuje ochrona języka Polskiego czytaj - nie używa się nomenklatury anglojęzycznej. A więc się da :) Jak to naprowadziło mnie na pewne odniesienie do języków programowania ?&lt;br /&gt;&lt;br /&gt;Kiedy czyta się książkę o C pisaną przez entuzjastycznego programistę lat 90tych nie raz i nie dwa razy, ale niemalże, co publikację, można trafić na stwierdzenie, że "wskaźniki to potężne narzędzie" i można je wykorzystać na tak wiele sposobów. Sam kiedy zaczynałem studia - a programowaliśmy pierwszy rok w C - używałem ich namiętnie i z niemałym zachwytem podziwiałem kunszt ich wykorzystywania. Nastąpił czas gdy wskaźniki zaczęto krytykować. Świetnie opisuje to w swojej książce "Inżynieria Oprogramowania C++" Victor Shtern. Jednak były tak silnie zakorzenione w mentalności programistów czasów języka C iż wielu nie wyobrażało sobie nowoczesnego języka ich pozbawionych. Myśl o ich nieobecności budziła w wielu lęk, obawy. &lt;span style="font-weight:bold;"&gt;Nie potrafili myśleć w perspektywie pozbawionej takiego mechanizmu&lt;/span&gt;. I na tym chciałem się skupić.&lt;br /&gt;&lt;br /&gt;Wiele współczesnych języków programowania pokazuje, że w przypadku znacznej klasy zagadnień, da się programować bez wskaźników. Młode pokolenie programistów-samouków, które zaczęło swoją przygodę z językami wyższego poziomu niż C++, może nigdy się nie dowie co to wskaźnik i, że coś takiego w ogóle istniało. To co najważniejsze w tym wydarzeniu to fakt iż &lt;span style="font-style:italic;"&gt;to jak postrzegamy język programowania&lt;/span&gt; zależy od tego&lt;span style="font-weight:bold;"&gt; jak bardzo w funkcji charakterystycznych dla niego struktur myślimy&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Python jest językiem o pewnych cechach. Na pewno jest językiem prostym (jak na przykład angielski). Anglicy dobrze rozumieją się ze sobą i posługują swoim językiem od kilkunastu setek lat. Żaden z nich nie narzeka na jakieś "braki". Tak samo programiści Pythona. Jeżeli potraktować kod języka jako "ja piszę kod daję komuś innemu aby go zrozumiał on go czyta i rozumie albo nie" to i Pythonowcy bardzo dobrze się rozumieją. Równie dobrze rozumieją się ludzie piszący w Pascalu, Ruby, czy każdym innym językiem programowania.&lt;br /&gt;&lt;br /&gt;Bardzo nie lubię kłótni o wadach czy o rzekomych ułomnościach jakiegoś języka czy jego wyższości nad innym. Lambda w Pythonie. Podobno ułomna - spełnia wspaniale szereg zadań i jest nieocenioną pomocą w wielu przypadkach. Ktoś ma lepszą lambdę - fantastycznie, jeżeli będę jej potrzebował na pewno użyję jego języka. A jak bardzo chcą to niech ją wdrożą i w Pythonie, tylko, żeby nie popsuli języka. Nikt im nie broni. Zapytajcie jednak świeżo upieczonego programistę Pythona (wcześniej powiedzmy PHP) o wrażenia - powie, że język jest świetny. Mechanizmy zaprezentowane w kursie przyjmie do wiadomości takimi jakimi są i takimi zacznie je lubić, stosować i będzie robił to dobrze. Tak samo będzie gdy ktoś nauczy się Rubego czy Scali - oczywiście wciąż tylko jednego z nich. Chodzi o to, że nauczeni dobrze myśleć w jakiś ramach możemy pisać z nich naprawdę dobre programy. Ktoś kto dobrze umie Pythona nie będzie miał problemu z wyrażeniem siebie w kodzie - zrobi to tak jak pozwala mu na to język i zrobi to dobrze.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Kiedy zaczynamy się kłócić ? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wszystko zaczyna się psuć gdy znamy np. i Pythona i Rubego. Nie uważam broń Boże, że to złe. Uważam, że to fantastyczne. Jednak wciąż denerwują mnie ludzie, którzy znają oba te języki i zaczynają narzekać, że "Python nie jest Rubym", a "Ruby nie jest Pythonem" w zależności od sytuacji. Najbardziej na tym cierpią nowi programiści, którzy właśnie zastanawiają się nad przejściem, na któryś z tych świetnych języków i trafiają na tego rodzaju dyskusje. Po prostu beton. I wcale się nie dziwie ludziom, którzy po wejściu na 5 pierwszych stron i przeczytaniu komentarzy tego rodzaju rezygnują i zostają np. przy PHP rezygnując z dalszego rozwoju w kierunku, który naprawdę może dać wiele zabawy, satysfakcji i nowych, ekscytujących doświadczeń.&lt;br /&gt;&lt;br /&gt;Całe filozofowanie zaczyna się chyba przez to, że ulegliśmy "reklamie" i marketingowi jakiegoś języka programowania i przez jakiś czas uważaliśmy go za "naj" a teraz gdy poznajemy kolejny to nagle ten poprzedni wydaje nam się jakiś taki... nie za bardzo "naj".&lt;br /&gt;Wszystko przez to, że daliśmy się złapać na prosty chwyt. Chwyt polegający, że za "naj" nie było już żadnego słowa, które powiedziałoby &lt;span style="font-weight:bold;"&gt;naj&lt;/span&gt;&lt;span style="font-style:italic;"&gt;jaki&lt;/span&gt; jest ten język programowania, który zamierzamy poznać.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Piszmy o pozytywach !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Python&lt;/span&gt; jest &lt;span style="font-style:italic;"&gt;naj&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;prostszy&lt;/span&gt; - zwięzłością, oszczędnością i czytelnością bije po oczach&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ruby&lt;/span&gt; jest &lt;span style="font-style:italic;"&gt;naj&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;ekspresywniejszy&lt;/span&gt; - powala pisać developerski poematy&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Scala&lt;/span&gt; jest &lt;span style="font-style:italic;"&gt;naj&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;czystsza&lt;/span&gt; - purystyczna koncepcyjnie, paradygmatowo i składniowo&lt;br /&gt;&lt;br /&gt;Czy nie jest to obiektywną prawdą ? Czy takie ujęcie tematu nie jest prawdziwsze ? Oczywiście rozumiem, że jakaś struktura w jednym języku programowania została zaprojektowana lepiej niż w innym. W porządku. Języki naturalne ewoluują, na ile jest to możliwe. Na pewno lata świetlne trudniej ewoluują też i języki programowania. Nikt nie broni wprowadzić do języka dobrych zmian i go unowocześniać. Wiadomo jednak, że pewne zmiany nie będą mogły być wprowadzone, inne będą kosztowały nie wiadomo ile wysiłku aby ich dokonać. Języki obecnie istniejące są ulepszane na ile to tylko możliwe i należy się z tego cieszyć, wspierać ich rozwój (choćby duchowo) i korzystać z ich zalet - nie skupiać się zaś na wadach szczególnie tych, z którymi nic nie można zrobić - bo po co o nich pisać skoro nie można ich naprawić. Należy te wady znać, pokazać język, których nie posiada ale nie wciąż krytykować.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Jeżeli język naturalny pozwala nam na rozbudowanie go o zaporzyczenia angielskie, łacińskie czy francuskie - korzystajmy z nich. Jeżeli pozwala to robić w znacznym stopniu - róbmy tak, jeżeli w mniejszym, wykorzystujmy to nadal na ile się da. Ale nie mówmy, że nasz język jest zły. Jest piękny, ma pewną historię i z pewnych przyczyn brzmi i wygląda tak a nie inaczej. Jako Polacy nie obrażamy się na naszą gramatykę i ortografię, gremialnie nie zaczynamy, rezygnować z naszego nadwiślańskiego narzecza, na rzecz angielskiego. Część z nas czyni zaporzyczenia inni uczą się władać innym językiem (bo muszą albo dziedzina ich do tego zmusza) - nikt jednak nie robi afery z tego iż język polski jest jaki jest.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Bądźmy mistrzami w kunszcie :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Sztuka bycia człowiekiem elokwentnym polega między innymi na wykorzystaniu tego co się zna tak jak tylko najlepiej się potrafi w sytuacji, z którą się spotyka a gdy trzeba, douczenia się czegoś nowego. Człowiek inteligentny zna zarówno zalety jak i wady narzędzi, którymi się posługuje - bo to jest potrzebne aby dobrze ich używać - jednak nie wytyka ich "gdzie popadnie" i "jak tylko nadarzy się okazja". Zarówno jedne jak i drugie informacje służą ku lepszemu użytkowaniu i znacznie bardziej precyzyjnemu doborowi potrzebnej aparatury niż krytyce. Nikt nie narzeka na młotek, że ciężko się nim wkręca śrubki i nikt na piłę, że słabo się nią wbija gwoździe.&lt;br /&gt;&lt;br /&gt;Chciałem wszem i wobec zaznaczyć, że tekst &lt;span style="font-weight:bold;"&gt;nie jest&lt;/span&gt; skierowany przeciwko jakiejś konkretnej osobie. Jest wyłącznie zbiorem moich przemyśleń.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5340649202017392919?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5340649202017392919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5340649202017392919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5340649202017392919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5340649202017392919'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/06/express-yourself-dlaczego-kucimy-sie-o.html' title='Express yourself - dlaczego kłócimy się o wyższość języków programowania'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7098787994572233455</id><published>2009-05-28T09:13:00.000-07:00</published><updated>2009-05-28T10:43:46.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='w3c'/><category scheme='http://www.blogger.com/atom/ns#' term='przeglądarki'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='WebForms2'/><title type='text'>HTML 5 i WebForms 2.0 pod strzechą</title><content type='html'>Dzisiaj wraz ze współlokatorem postanowiliśmy sprawdzić jak malują się nowoczesne standardy sieciowe i co w trawie piszczy. Wyniki naszych obserwacji przerosły najśmielsze oczekiwania.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Od dziś tylko HTML 5&lt;/h4&gt;&lt;br /&gt;To chyba pierwsze co do nas dotarło. Łaziliśmy po stronkach i zaglądaliśmy do źródeł. Chyba największym odkryciem było przejrzenie źródeł witryny postawionej na Wordpressie i ... stwierdzenie, że szablon jest napisany w &lt;a href="http://dev.w3.org/html5/spec/Overview.html"&gt;HTML 5&lt;/a&gt;.&lt;br /&gt;Potem przyjrzeliśmy się innej napisanej dla hecy przez jakiegoś blogera wertując równocześnie znaczenia poszczególnych tagów i nie znanych nam atrybutów w drafcie W3C. Zrobiliśmy własną prostą stronkę i ... to po prostu działa. Stronka opisana w HTML 5 posiada masę fajowych znaczników. W gruncie rzeczy ich wstawianie nic nie zmienia z wyglądu strony ale najważniejsze jest to, że chyba, żadna przeglądarka się tym nie zachłysnęła i zwróciła najnormalniejszy prosty dokument. Nie mówię tu o jakiś videach czy innych audiach ale zwykłych nowych znacznikach, tych które posiadają raczej znaczenie niż "wygląd" czy funkcjonalność.&lt;br /&gt;O ile dla nas może nie wiele zmieniają - z wyglądu - o tyle dla robotów wyszukiwarek to musi być prawdziwa rewolucja na miarę &lt;a href="http://www.w3.org/RDF/"&gt;RDF&lt;/a&gt;. Wiedzieć gdzie jest menu, gdzie nagłówek, a gdzie stopka, co jest tekstem, co wstawką ... kurcze - internet gdzie strony byłby opisane z użyciem HTML 5 (o RDF nie wspominając) to chyba 3/11 Raju dla wszystkich wyszukiwarek kontekstowych. Po prostu masa znaczników, które pozwalają oddzielić treść, od znaczenia, od tagów odpowiedzialnych za elementy witryny nie związane z treścią. Bomba !&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wniosek ?&lt;/span&gt;&lt;br /&gt;Od dziś tylko HTML 5. Przeglądarki znaczniki tolerują, a roboty mogą w magiczny niemalże w porównaniu z HTML 4 sposób zindeksować naszą stronę.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Webforms 2.0 - dla nowoczesnych&lt;/h4&gt;&lt;br /&gt;Zawsze podobała nam się koncepcja &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#forms"&gt;Webforms 2.0&lt;/a&gt; gdzie walidacja jest wbudowana w składnię znaczników i nie trzeba się o to martwić, pola odpowiednich typów mają swój interfejs do wybierania daty itd... Chyba nie wyobrażacie sobie jakie było nasze zdziwinie gdy &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML_5)#Web_Forms_2.0"&gt;zobaczyliśmy na wikipedii&lt;/a&gt;, że ... format jest w 100% obsługiwany w Operze 9.0. Po prostu szok. Przeglądarka z Presto na pokładzie poszła błyskawicznie w ruch. Kto chce zobaczyć jakie udogodnienia wprowadza WebForms 2.0 i jak rewolucyjne są to zmiany niech obejrzy sobie witrynę http://olav.dk/wf2/demo/.&lt;br /&gt;Sceptyków IE poczęstuję wiadomością iż na podanej powyżej stronie zarówno IE 6 jak i 7 (sic!) obsługują WebFormsy w 100% (sic!) ! IE 6 lepszy od FF i Webkit, które sobie w ogóle z tym sobie nie radzą (według danych z Wikipedii obsługują 1 atrybut) ? Czy to możliwe ?! Gdzieś musi być haczyk ! Jeżeli chcesz go znaleźć odwiedź http://olav.dk/wf2/demo/. Brawa dla Microsoftu - zrobili to jak zrobili - ale zrobili to już w IE 6 i działa ! Byli pierwsi i to lata świetlne przed konkurencją. Szacunek !&lt;br /&gt;Ale to nic. Najlepsze przed nami. Otoż &lt;a href="http://code.google.com/p/webforms2/"&gt;istnieje biblioteka&lt;/a&gt;, która implementuje WebForms z użyciem JavaScript. W tym momencie zapadła decyzja - od dziś używamy WebForms 2.0. Dzięki tej bibliotece będzie obsługiwana w każdej popularnej przeglądarce :] To wspaniała wiadomość. Osoby projektujące strony z wersja dla "nie posiadających JS" wcale nie muszą się przejmować - walidator W3C nie zwróci błędów w przypadku formularzy typu data czy czas, a jeżeli nie wesprze ich przeglądarka to po prostu wyświetli w ich miejscu pola tekstowe - czyli to co mielibyśmy w HTML 4. A walidacja ? Jest czy nie, WebForms 2.0 czy JavaScript - i tak dla bezpieczeństwa trzeba dane przemielić jeszcze po stronie serwera.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wniosek ?&lt;/span&gt;&lt;br /&gt;Dlaczego nie używamy jeszcze WebForms 2.0 ? No właśnie... sam zadaję sobie to pytanie i moja odpowiedź brzmi "nie wiem", od dziś używam !&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;CSS 3 w natarciu&lt;/h4&gt;&lt;br /&gt;Tak wiem. IE 8 nie zdaje ACID 3 i zasysa... Już się tego nasłuchałem. Dobre zestawienie co się da posiada &lt;a href="http://www.quirksmode.org/css/contents.html"&gt;QuirksMode&lt;/a&gt;. Prawa kolumna wygląda sielsko :] Po lewej IE w barwach wojennych. Nie patrzę na IE 5.5 czy 6 wcześniejsze niż 8 bo to bez sensu. Mówimy o nowoczesnych standardach i przeglądarkach. Historię pozostawmy historykom. To jest blog informatyka. CSS3: selektory i deklaracje. IE 8 w deklaracjach CSS 3 wypada tylko trochę gorzej niż Firefox. Wszystkich krzykaczy zasłaniających się testem ACID 3 ostudzę faktem iż oficjalnie Opera 10a i Safari 4 ACID 3 zdają - co z tego skoro z tabelki i tak wynika iż wszystkich znaczników nie obsługują bezbłędnie. Ten test można przejść bez pełnej obsługi CSS.&lt;br /&gt;Zresztą - mówił o tym już kilka lat temu Microsoft w kontekście ACID 2. "Przejście ACID 2 nie oznacza zgodności ze standardami" argumentował fakt iż Internet Explorer nie zdaje tego testu. Jest tak również z ACID 3. Test można przejść - a zgodności ze standardami nie spełniać. Jednak trzeba bez bicia przyznać się iż Microsoft nas na razie tutaj nie rozpieszcza.&lt;br /&gt;&lt;strong&gt;Wnioski ?&lt;/strong&gt;&lt;br /&gt;Jak do tej pory tylko dwie przeglądarki obsługują w znacznym stopniu CSS 3. Tutaj jednak w przeciwieństwie do HTML 5 czy WebForms stajemy przed wyborem: wszystko albo nic... Pozostaje więc czekać i liczyć na to iż za pół roku (oby szybciej) będziemy mogli cieszyć się CSS3 w znacznie większym stopniu. Taka natura kaskadowych arkuszy stylów iż nie da się ich potraktować jak HTML 5. Szkoda.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Podsumowanie&lt;/h4&gt;&lt;br /&gt;Dla mnie dzisiejsze odkrycia stanowią rewolucję w życiu webmastera. Mogę bez przeszkód (sic!) używać HTML 5 i WebForms 2.0. Może nawet jeżeli dziś enginy wyszukiwarek nie do końca to wykorzystają, a w śród odwiedziającyc znajdą się osoby, których formularze nie będą posiadały funkcjonalności WebForms 2.0 to za rok czy dwa, gdy standardy te będą już normą, stworzona dziś stronka nie będzie wcale odstawała od tych "nowocześniejszych". Wszystko zupełnie bez żadnego wysiłku i pracy z mojej strony. Po prostu to co napisałem a nie było obsługiwane zacznie działać. Czysty zysk :]&lt;br /&gt;Niestety z CSS 3 nie jest już tak kolorowo. Fajnie, że już od dawna można używać składni selektorów w wersjach bibliotek JScriptowych.  Mogłoby (o ile to wykonalne) powstać coś na wzór biblioteki JS do WebForms. Uzyskiwanie layoutów zgodnych z CSS 3 z użyciem JS ? Możliwe ? Nie wiem. Chciałbym jednak dziś czegoś takiego używać. Twórcy przeglądarek mogliby sobie standard implementować tak długo jak muszą a developerzy używać już nowej składni. To byłoby piękne.&lt;br /&gt;Z niecierpliwością czekam na obsługę CSS 3, a od dziś - tylko HTML 5 i WebForms 2.0!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7098787994572233455?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7098787994572233455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7098787994572233455' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7098787994572233455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7098787994572233455'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/html-5-i-webforms-20-pod-strzecha.html' title='HTML 5 i WebForms 2.0 pod strzechą'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5361858398722380621</id><published>2009-05-19T22:52:00.000-07:00</published><updated>2009-05-19T23:55:36.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Office'/><category scheme='http://www.blogger.com/atom/ns#' term='Open XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Office'/><category scheme='http://www.blogger.com/atom/ns#' term='ODF'/><title type='text'>Biurowe formaty plików a użytkownik</title><content type='html'>Często zdarzało się, że któryś ze znajomych prosił mnie o pomoc z odczytaniem zawartości pliku docx lub podobnego. Ktoś uraczył go tym nowoczesnym formatem i wysyłając zapisane w nim dokumenty robił mu po prostu niedźwiedzią przysługę. Sam posiadam wyłącznie OpenOffice a jeszcze do niedawna nie dawał sobie rady z Open XML Format.&lt;br /&gt;&lt;br /&gt;Dziś wyszło słońce dla wszystkich użytkowników Windows a także i Linuksów. Na stronach &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; pojawiło się pierwsze wydanie OpenXML Document Viewer. Przeciętnego użytkownika nie posiadającego Microsoft Office zainteresuje funkcjonalność pozwalająca odczytywać format docx w przeglądarce. Istnieją pakiety wersja dla IE, Opery, Firefoxa oraz dla linii komend dostępne zarówno dla Windows jak i Linux.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOeHYQjLkI/AAAAAAAAA_s/9TPMU1mNk2E/s1600-h/openxml.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 328px; height: 400px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOeHYQjLkI/AAAAAAAAA_s/9TPMU1mNk2E/s400/openxml.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5337783832972308034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po zainstalowaniu pakietu możemy otworzyć plik Open XML Microsoft Word w przeglądarce interenetowej. Zostanie on prze konwertowany na stronę HTML.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOe2HKclKI/AAAAAAAAA_0/kwBac9Thqo4/s1600-h/ie_docx_openxml.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOe2HKclKI/AAAAAAAAA_0/kwBac9Thqo4/s400/ie_docx_openxml.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337784635837158562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Osoby, które potrzebuję konwersji a nie boją się o prywatność danych mogą już od dawna korzystać z oferty http://www.zamzar.com/. Lista formatów, nai które, z których możemy konwertować budzi podziw. Jednak wysyłamy swoje dane gdzieś i nie wiadomo co do końca się z nimi dzieje - plik skonwertowany przychodzi po pewnym czasie do nas na maila. Pewne osoby mogą mieć wątpliwości co do prywatności tak konwertowanych informacji.&lt;br /&gt;&lt;br /&gt;Niektóre pliki możemy sobie obejrzeć lub zmienić ich format z użyciem Google Documents inne obejrzeć z wykorzystaniem darmowych Microsoft * Viewer. Listę "podglądarek" i konwerterów znajdziemy na przykład pod &lt;a href="http://office.microsoft.com/en-us/downloads/HA010449811033.aspx"&gt;tym adresem&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Na dzień dzisiejszy nie ma problemu. Format taki jak docx otwiera się nawet w WordPadzie. Tak tak - mowa o Windows 7. WordPad obsługuje również ODT. Sam chciałbym zobaczyć swoją minę gdy w Windows 7 klikając dwa razy na plik ODT otworzył mi go właśnie Wordpad. Problem jak widać zaczyna być z docem. A jak jest z konwersją pomiędzy starymi formatami Microsoft Office, nowymi i natywnymi plikami Open Office ?&lt;br /&gt;&lt;br /&gt;Byłem w szoku gdy dotarłem do projektów &lt;a href="http://odf-converter.sourceforge.net/"&gt;Open XML / ODF Translator&lt;/a&gt; oraz &lt;a href="http://b2xtranslator.sourceforge.net/"&gt;b2xtranslator&lt;/a&gt;. Pierwszy ma zapewnić interopracyjność pomiędzy dokumentami OpenOffice a Open XML. Zadaniem drugiego jest konwersja plików bez końcówki 'x' (doc, xls, ppt) na tą z 'x' na końcu (docx, xlsx, pptx). Działanie wydaj się banelne. Podczas instalacji jesteśmy pytani czy aplikacja ma zintegrować się z menu kontekstowym jako rozszerzenie explorera. Po kliknięciu na przykład na plik  doc pojawia się opcja "Convert to docx". Wybierając ją po chwili mamy ten sam plik w nowym formacie. Prościej się chyba nie dało !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOjd511UtI/AAAAAAAAA_8/OYIAAecxyt8/s1600-h/convert_to_docx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 223px; height: 112px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShOjd511UtI/AAAAAAAAA_8/OYIAAecxyt8/s400/convert_to_docx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337789717502317266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dziwne tylko, że rozszerzenie nie działa gdy domyślną aplikacją dla doców jest Open Office Writer. No właśnie - najprościej jednak jest chyba mieć w pogotowiu OpenOffica, który choć często z błędami, otworzy wszystko.&lt;br /&gt;&lt;br /&gt;Bardzo cieszy mnie stan oprogramowania dotyczący biurowych formatów plików. Narzędzia do konwersji z doc na docx, obsługa ODT przez WordPad, możliwość otwierania plików OpenXML w OpenOffice :] Świat staje się piękny a to co było koszmarem jeszcze pół roku temu zaczyna być używalne. Widać, że ani Microsoft ani twórcy, których oprogramowanie używa domyślnie ODF nie próżnują. Cieszę się, że w tej "wielkiej walce formatów" ktoś dostrzegł małego użytkownika i zadbał o to aby nie był pokrzywdzony w tym starciu ale raczej by mógł z niego wyjść bez szwanku. Tak trzymać panowie !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5361858398722380621?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5361858398722380621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5361858398722380621' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5361858398722380621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5361858398722380621'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/open-xml-z-mojego-punktu-widzenia.html' title='Biurowe formaty plików a użytkownik'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_iATZVSQqOgg/ShOeHYQjLkI/AAAAAAAAA_s/9TPMU1mNk2E/s72-c/openxml.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7459533359773624836</id><published>2009-05-19T09:28:00.000-07:00</published><updated>2009-05-19T10:10:29.020-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winzip'/><category scheme='http://www.blogger.com/atom/ns#' term='zip'/><category scheme='http://www.blogger.com/atom/ns#' term='kompresja'/><title type='text'>Test nowego algorytmu kompresji zipx w WinZip 12</title><content type='html'>Dawno już w kompresję się nie bawiłem a informacja o nowym algorytmie wzbudziła moje zainteresowanie z kilku powodów. Po pierwsze ponieważ obecnie temat mam omawiany w ramach kilku wykładów prowadzonych na uczelni, po drugiej ponieważ mam sentyment do WinZipa. Głównie ze względu na sympatyczny interfejs.&lt;br /&gt;Na co dzień jednak używam 7zip. Przyszedł czas aby na chwilę zagościło u mnie i płatne oprogramowanie (Windowsa nie licząc). Test nie będzie bardzo wyszukany - od kompresja kilku plików starą i nową metodą a następnie przyjrzenie się wynikom.&lt;br /&gt;&lt;br /&gt;Na wstępie już podczas instalacji jesteśmy pytani o domyślną metodę kompresji oraz o zaletach nowej, zipx, ujawniającej się podczas kompresowania obrazów jpeg.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLfEWdb2TI/AAAAAAAAA9k/NsTNJ8uuZMY/s1600-h/screen_instalacja.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 309px;" src="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLfEWdb2TI/AAAAAAAAA9k/NsTNJ8uuZMY/s400/screen_instalacja.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337573774228969778" /&gt;&lt;/a&gt;&lt;br /&gt;Podczas instalacji jesteśmy pytani o domyślną metodę kompresji.&lt;br /&gt;&lt;br /&gt;Zanim jednak testy pewna uwaga. Wszystko wykonywałem na Windows 7. Aby było "wygodniej" poprosiłem WinZipa w opcjach (po instalacji) aby ładnie zintegrował się jako "explorer extension" w celu ułatwienia mi tworzenia archiwów. Nie wyobrażacie sobie jaki byłem zdziwiony gdy - opcja nie do końca działała. Konkretnie: gdy wywołałem menu kontekstowe dla pliku na pulpicie miałem podmenu Winzip i możliwość dodania pliku do archiwum. WinZip nie dał sobie jednak rady z Windowsowym "Libraries" z którego korzystam bardzo często aby uzyskać dostęp do Obrazków, Muzyki czy właśnie Dokumentów - i tutaj niestety menu się nie pojawiało. W tym samym folderze, wywołanym z pełną ściężką (C:\Users\ itd...) - wszystko działało ok :)&lt;br /&gt;&lt;br /&gt;Można byłoby przemilczeć temat - wszak Windows 7 jeszcze nie wyszedł - ale piszę o tym gdyż darmowy 7-zip w przeciwieństwie do WinZip radzi sobie tutaj znakomicie. Brawo !&lt;br /&gt;&lt;br /&gt;Przejdźmy do testów. W tym celu przygotowałem sobie foldery z 4 rodzajami danych. Dokumenty: tutaj głównie były pliki PDF i kilka odt. Zazwyczaj prezentacje mojej roboty lub jakieś z wykładów z uczelni więc nafaszerowane sporą ilością grafiki, muzyka: 10 plików mp3 średnio po 30 minut każdy z kazaniami ks. Piotra Pawlukiewicza, obrazki: polskie tapety z Windows 7 każdy o wymiarach 1920x1200 w sumie 5 sztuk i 7 skryptów Pythona, niewielkich programików po kilka kilkaset kibibajtów. Wyniki malują się następująco.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Dokumenty&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zip&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLhH9e7DII/AAAAAAAAA9s/JWk5s6RRt0o/s1600-h/documents.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLhH9e7DII/AAAAAAAAA9s/JWk5s6RRt0o/s400/documents.zip.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337576035267054722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLh8eEoHyI/AAAAAAAAA98/LVAxFAAWYck/s1600-h/documents.p.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLh8eEoHyI/AAAAAAAAA98/LVAxFAAWYck/s400/documents.p.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337576937368330018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zipx&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLhZt7TwBI/AAAAAAAAA90/TQbBXCjoV-U/s1600-h/documents.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLhZt7TwBI/AAAAAAAAA90/TQbBXCjoV-U/s400/documents.zipx.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5337576340328792082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLiFos8cwI/AAAAAAAAA-E/CHVpnKhCNXw/s1600-h/documents.p.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLiFos8cwI/AAAAAAAAA-E/CHVpnKhCNXw/s400/documents.p.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337577094840611586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nie da się ukryć, że kompresja zipx dała sobie radę znacznie lepiej. Należy jednak wspomnieć, że we wszystkich przypadkach użycie tej metody było bardzo czasochłonne i tworzenie archiwum trwało zdecydowanie dłużej. Różnica w czasie była tak duża że aż rzucająca się w oczy. Po analizie kompresji poszczególnych plików widać, że zyskaliśmy głównie na zwiększonym stopniu upakowania dużych plików - małe były pakowane tak samo. Jest to pierwszy sygnał mogący świadczyć o tym iż przy nowej metodzie zyskujemy pakując mniej większych porcji danych niż więcej mniejszych. Może być to też kwestia faktu iż w tych plikach PDF występowało więcej obrazków niż w innych chociaż naprawdę ciężko mi to określić - to tylko jakaś propozycja hipotezy. Skąd akurat taki pomysł ? Zobaczycie w następnym teście.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Obrazy&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zip&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLjwG0_TjI/AAAAAAAAA-M/WxRTRYP9ivk/s1600-h/images.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLjwG0_TjI/AAAAAAAAA-M/WxRTRYP9ivk/s400/images.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337578923993550386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLj7eGI5LI/AAAAAAAAA-U/8hfXO_NQ-PY/s1600-h/images.p.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLj7eGI5LI/AAAAAAAAA-U/8hfXO_NQ-PY/s400/images.p.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337579119218058418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zipx&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLkDpH9j4I/AAAAAAAAA-c/pVHz51hOJc8/s1600-h/images.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLkDpH9j4I/AAAAAAAAA-c/pVHz51hOJc8/s400/images.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337579259617447810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLkLpzOxBI/AAAAAAAAA-k/KWAZc4WgI7k/s1600-h/images.p.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLkLpzOxBI/AAAAAAAAA-k/KWAZc4WgI7k/s400/images.p.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337579397237883922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To tutaj zipx ma osiągać lepsze wyniki i trzeba przyznać, że zipx pokazał pazur. O ile w przypadku dokumentów różnica wynosiła 1% na korzyść pierwszego o tyle tutaj - 18%, robi wrażenie. Z jednej strony można się domyślać, że tapety Microsoftu nie są jakoś specjalnie skompresowane jako JPGi do użytku na ekranach dużej rozdzielczości jednak &lt;span style="font-weight:bold;"&gt;mówimy o kompresji bezstratnej&lt;/span&gt; !. Wszak po rozpakowaniu mamy te same obrazki - bez pogorszenia jakości. Sprawne algorytmy kompresji obrazu: jedne komercyjne, inne darmowe, są znane nie od wczoraj. Wiele mądrych głów zajmowało się tym zagadnieniem i wiele w tej dziedzinie osiągnięto. Domyślam się, że to co tutaj obserwujemy to po prostu skorzystanie z tych doświadczeń. Dwie "dziedziny kompresji": plików w ogóle i obrazów - łączą siły. Bardzo dobry ruch ! Zobaczmy co dalej.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Pliki mp3&lt;/h3&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zip&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLlyDwNJoI/AAAAAAAAA-s/2ZvVIvk-djA/s1600-h/music.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLlyDwNJoI/AAAAAAAAA-s/2ZvVIvk-djA/s400/music.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337581156551173762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLmH_nSQNI/AAAAAAAAA_E/D3na4eT6MWw/s1600-h/music.p.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/ShLmH_nSQNI/AAAAAAAAA_E/D3na4eT6MWw/s400/music.p.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337581533397139666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLmB9B3rZI/AAAAAAAAA-8/e1TYijsPZmU/s1600-h/music.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLmB9B3rZI/AAAAAAAAA-8/e1TYijsPZmU/s400/music.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337581429624122770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zipx&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLl-X4NoXI/AAAAAAAAA-0/k8x_y16WxFo/s1600-h/music.p.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLl-X4NoXI/AAAAAAAAA-0/k8x_y16WxFo/s400/music.p.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337581368111898994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Skrypt Pythona&lt;/h3&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zip&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLm9wDj5wI/AAAAAAAAA_k/Z5rGxMKxgZc/s1600-h/scripts.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/ShLm9wDj5wI/AAAAAAAAA_k/Z5rGxMKxgZc/s400/scripts.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337582456933705474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLm6gQ5x1I/AAAAAAAAA_c/BiZL88GKL80/s1600-h/scripts.p.zip.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 284px;" src="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLm6gQ5x1I/AAAAAAAAA_c/BiZL88GKL80/s400/scripts.p.zip.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337582401155090258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLm1RvCnHI/AAAAAAAAA_U/FOHniAi4U_Y/s1600-h/scripts.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://4.bp.blogspot.com/_iATZVSQqOgg/ShLm1RvCnHI/AAAAAAAAA_U/FOHniAi4U_Y/s400/scripts.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337582311355620466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Kompresja zip&lt;/h4&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLmw4vx0aI/AAAAAAAAA_M/WjZy_gHGHao/s1600-h/scripts.p.zipx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 284px;" src="http://1.bp.blogspot.com/_iATZVSQqOgg/ShLmw4vx0aI/AAAAAAAAA_M/WjZy_gHGHao/s400/scripts.p.zipx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337582235928351138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Analizując powyższe dane można zauważyć, że przy kompresji plików, które upakowują się bardzo słabo albo bardzo dobrze, stosując zipx, zyskujemy i w tym i w tym przypadku 1% na naszą korzyść.&lt;br /&gt;&lt;br /&gt;Zipx miał lepiej kompresować obrazy i robi to w rzeczywistości dużo lepiej niż starszy brat. To może niewielka nowość jak na "nowy format kompresji" z krzykliwą literką "x" na końcu jednak zawsze powód do radości i pogratulowania. Algorytm został też poprawiony na oko "w ogóle" gdyż również przy kompresji innego rodzaju formatów zyskujemy ten 1%. Tak więc nigdy nie tracimy na jakości kompresji - kosztem jest jednak przenośność gdyż obecnie archiwum zipx otworzymy wyłącznie za pomocą najnowszego WinZipa. Na razie coś za coś - z biegiem miesięcy kwestia czasu :]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7459533359773624836?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7459533359773624836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7459533359773624836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7459533359773624836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7459533359773624836'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/test-nowego-algorytmu-kompresji-zipx-w.html' title='Test nowego algorytmu kompresji zipx w WinZip 12'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_iATZVSQqOgg/ShLfEWdb2TI/AAAAAAAAA9k/NsTNJ8uuZMY/s72-c/screen_instalacja.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-544054317409854439</id><published>2009-05-11T23:09:00.000-07:00</published><updated>2009-05-19T11:42:57.202-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Rozszerzenia w Google Chrome - framework rewolucja</title><content type='html'>&lt;div align="justify"&gt;Ostatnio zostałem wiernym czytelnikiem strony developerów implementujących rozszerzenia do Google Chrome. Pewne elementy API są zaimplementowane już w całości, inne tylko w części. Jedną z dostępnych już dziś funkcjonalności jest ładowanie &lt;i&gt;&lt;span style="FONT-STYLE: normal" class="Apple-style-span"&gt;content scripts - &lt;/span&gt;&lt;/i&gt;elementów rozszerzeń napisanych z użyciem JavaScript.&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Ich działanie opiera się na ładowaniu do przeglądarki dowolnego skryptu js działającego na stronie. Pisanie dużych ilości kodu w JavaScript jest bardzo żmudnym zadaniem, ale od czego są narzędzia i biblioteki pokroju jQuery ?&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Postanowiłem zrobić mały eksperyment i nieco zmodyfikować przykład z dokumentacji. Na początku ściągnąłem i w pierwszej kolejności do mojego skryptu załadowałem plik jquery.js, dopiero w drugiej właściwy skrypt JavaScript podmieniający rysunek z google.com na logo komiks "Windows to Chrome" jednak pisząc skrypt z wykorzystaniem składni jquery. Efekty możecie obejrzeć poniżej lub spróbować sami.&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-size:180%;"&gt;Efekt działania skryptu.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 345px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5334822175378158386" border="0" alt="" src="http://2.bp.blogspot.com/_iATZVSQqOgg/SgkYgN9KszI/AAAAAAAAA8k/KVtob3mr0-U/s400/google_chrome_extension_jquery.png" /&gt; &lt;p align="center"&gt;&lt;span style="font-size:180%;"&gt;Kod plików stanowiących trzon rozszerzenia&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 283px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5334824550417357346" border="0" alt="" src="http://1.bp.blogspot.com/_iATZVSQqOgg/Sgkaqdqo2iI/AAAAAAAAA8s/PRbWh5YOFIw/s400/google_chrome_extensions_vim.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Jeżeli chcesz spróbować samemu uruchomić rozszerzenie jego kod znajdziej pod &lt;a href="http://jan.koprowski.zhr.pl/chrome_comics.zip"&gt;tym linkiem&lt;/a&gt;. Jedyne co musisz zrobić to wypakować je do jakiegoś folderu i podać ścieżkę do katalogu, w którym znajduje się manifest.json. Powiedzmy, że był to C:\chrome_comics. Wtedy polecenie, które musisz wykonać w zależności od tego gdzie w Twoim systemie zainstalowal się Google Chrome będzie wyglądało mniej więcej tak:&lt;/p&gt;&lt;blockquote&gt;&lt;p align="justify"&gt;&lt;span style="font-size:85%;"&gt;C:\Users\Username\AppData\Local\Google\Chrome\Application\chrome.exe&lt;br /&gt;--enable-extensions --load-extension="C:\chrome_comics"&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Co z tego wynika ? Możliwość wykorzystywania w pisanych przez siebie wtyczkach takich bibliotek jak jQuery, Mootools, Dojo, Qooxdoo, Prototype biorąc pod uwagę ich możliwości, ilość dostępnych wtyczek, sposób wjaki przyspieszają i ułatwiają pisanie kodu JavaScript oraz stworzone na ich bazie biblioteki, ogrom tego wszystkie daje pojęcie jak wielki potencjał tkwi w GoogleChrome. Już na samym początku, Google bez wysiłku daje developerowi rozszerzeń ogromne pole do popisuj po raz kolejny genialnie wykorzystując istniejące już, wszystkim dobrze znane, lubiane, dojrzałe i świetnie mające się dziś biblioteki JavaScript. Moim zdaniem genialne posunięcie.&lt;/p&gt;&lt;p&gt;Domyślam się iż zaraz odezwą się użytkownicy GreaseMonkey, którzy powiedzą, że "to już było". Dla mnie osobiście jest to odkrycie nie z tej ziemi. Pytanie tylko czy Google widząc potencjał takiego rozwiązania pozostawi dołączanie kodu bibliotek do wtyczek developerom czy też wyposaży w nią przeglądarkę. Biorąc pod uwagę zasadę DRY oraz fakt iż nie lada marnotrastwem byłoby ładowanie do powiedzmy co 3 wtyczki jquery do co 5tej mootools to dość rozsądne wydaje się wyposażenie w najnowsze wersje przeglądarki albo stworzenia API, gdzie samemu można wgrać skrypty ogólnodostępne dla wszystkich wtyczek.&lt;br /&gt;Biorąc pod uwagę iż przeciętny user będzie posiadał około 10 wtyczek załadowanie 3 bibliotek jQuery i 2 Mootools, przez każdą wtyczkę z osobna pamięci miija się z celem.&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/6836763300070903809-544054317409854439?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/544054317409854439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=544054317409854439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/544054317409854439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/544054317409854439'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/rozszerzenia-w-google-chrome-framework.html' title='Rozszerzenia w Google Chrome - framework rewolucja'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_iATZVSQqOgg/SgkYgN9KszI/AAAAAAAAA8k/KVtob3mr0-U/s72-c/google_chrome_extension_jquery.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3779850705861600697</id><published>2009-05-06T05:40:00.000-07:00</published><updated>2009-05-19T11:43:14.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><title type='text'>Pierwsze wrażenia z Windows 7</title><content type='html'>&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Windows 7 mam dopiero od kilku godzin. Jednak już teraz mogę napisać bardzo dużo dobrego na jego temat.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;Pierwsza sprawa to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;klawiatura i lokalizacja&lt;span class="Apple-style-span" style="font-style: italic;"&gt;. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;System jest po angielsku jednak wystarczyło ustawić odpowiednio klawiaturę oraz lokalizację w Panelu Sterowania i polskie znaczki oraz godzina w formacie 24h wróciła. To normalne ustawienia dla Polski a Windows 7 mam w wersji dla Amerykanów :] Fajne jest to, że można to bez problemu ustawić i działa.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kolejna sprawa to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;fantastyczny pasek zadań&lt;/span&gt;. Uruchomione aplikacje pojawiają się na nim w postaci dużych ikon. Ikonę taką można przypiąć i wtedy pozostaje tam jako skrót do uruchamiania aplikacji. Kiedy program, którego ikona widnieje na pasku jest uruchomiona ikonka przyjmuje obramowanie. Ikony pełnią wiele różnych innych funkcji. Internet Explorera oraz Library (druga od lewej, zaraz za Chrome) pełnią również rolę grupującą zakładki/okna a także pasku postępu jakiegoś procesu. Jeżeli dobrze przyjrzeć się ikonie IE to częściowo jest zielona - to postęp ściągania pliku. Podobnie w przypadku kopiowania plików rolę paska postępu będzie pełniła ikona Library.&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/SgGajMGXZqI/AAAAAAAAA8U/giuwhjWttKU/s1600-h/taskbar.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 39px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/SgGajMGXZqI/AAAAAAAAA8U/giuwhjWttKU/s400/taskbar.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5332713363117401762" /&gt;&lt;/a&gt;Z użyciem ikon możemy również podejrzeć, zamknąć lub przejść do konkretnego okna lub na przykład zakładki Internet Explorer.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_iATZVSQqOgg/SgGNMz-n8AI/AAAAAAAAA7c/HNwHRFdSoWc/s400/taskbar_view.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 176px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5332698685034196994" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Okna i zakładki są w miarę możliwości grupowane pod jedną ikoną. Jeżeli tak jest obramowanie staje się z prawej strony ikony powielone jak powyżej w Internet Explorer.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na pasku zadań pojawiają się uruchamiane aplikacje. Każdą z nich możemy przypiąć pinezką. Jej ikona pozostanie wtedy na pasku i będziemy mogli używać Jej jak skrótu.&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_iATZVSQqOgg/SgGOCknvYwI/AAAAAAAAA7k/zpatXHe9PBg/s400/taskbar_pin.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 332px; height: 177px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5332699608624620290" /&gt;&lt;/div&gt;To nie koniec nowości w pasku zadań. Wiele aplikacji posiada dodatkowe własności / opcje dostępne po kliknięciu na nie prawym klawiszem. Możemy w ten sposób uzyskać szybko dostęp do najczęściej odwiedzanych stron w IE albo ostatnio otwieranych folderów explorera.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iATZVSQqOgg/SgGPiKuhBmI/AAAAAAAAA7s/duA5wiefHDI/s1600-h/taskbar_specialie.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 397px; height: 400px;" src="http://1.bp.blogspot.com/_iATZVSQqOgg/SgGPiKuhBmI/AAAAAAAAA7s/duA5wiefHDI/s400/taskbar_specialie.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332701250941159010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iATZVSQqOgg/SgGP4D1OA_I/AAAAAAAAA70/OFuJ7mHDlaM/s1600-h/taskbar_specialexplorer.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 337px; height: 400px;" src="http://2.bp.blogspot.com/_iATZVSQqOgg/SgGP4D1OA_I/AAAAAAAAA70/OFuJ7mHDlaM/s400/taskbar_specialexplorer.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332701627047347186" /&gt;&lt;/a&gt;To może tyle z nowości z paska zadań. Co więcej w systemie. Na pewno cieszą mnie &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;wstążki w Paint i Wordpad&lt;/span&gt;. Oczywiście co kto lubi. Fajnie, że &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Wordpad obsługuje ODT&lt;span class="Apple-style-span" style="font-style: italic;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;ale co dziwniejsze nie obsługuje &lt;/span&gt;DOC&lt;span class="Apple-style-span" style="font-style: italic;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;tylko DOCX. Fajnie, że na wierzchu w folderze &lt;/span&gt;wyeksponowanajest opcja Nowy Folder&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;. Co więcej. Mam 4 GB choć system używa tylko 3 GB. Po uruchomieniu przez chwilę zajmuje około 810 MB RAM a zaraz potem 620-670 MB nie wiele więcej. Mam tam już jakieś GoogleUpdater więc tak naprawdę zjada trochę mniej. Jak się włącza i wyłącza ? Szybko - szybciej niż najnowsze Ubuntu a po zalogowaniu niemalże natychmiast dostajemy pulpit i możemy działać - na nic nie trzeba czekać.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;Czy system działa szybko - nie wiem, ale jedno co mogę powiedzieć - responsywność jest ogromna, największa z do tej pory przezemnie oglądanych Windowsów. Chciałoby się powiedzieć, że system reaguje błyskawicznie. Obciążenie procesora bardzo zmiennej ale w spoczynku 2-4 % więc moim zdaniem świentny wynik.&lt;/div&gt;&lt;div&gt;Obok zegara pojawiła się ikonki flagi - bardzo fajna sprawa. Można na nią kliknąć i podejrzeć sobie co system nam zgłasza i co proponuje. Tak np. dowiedziałem się iż Windows mile widziałby u mnie w systemi Antywirus. Po wciśnięciu powiadomienia zostałem przekierowany na stronę z listą antywirusów sprawdzonych pod Windows 7. Fajne jest to, że jest to pod ręką pod ikonką, którą łatwo kliknąć znajdującą się obok zegara a nie gdzieś schowane a jeszcze fajniejsze, że nie męczy wyskakującymi okienkami jakimiś dymkami - tylko sobie jest jak chcesz to klikasz.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Tak na przykład zostałem powiadomiony o tym iż Windows 7 nie obsługuje mojego czytnika kart SD w laptopie (Fujitsu Siemens Amilo Pro V3525). Powiedział mi, że rozwiązania powinienem szukać na stronie Fujtsu Siemens. Podał nawet link do strony gdzie mogłem sobie wybrac model lapka i ściągnąć sterowniki. Wiadomo - nie było dla Windows 7. Te dla Vista zainstalowały się bez zarzutu.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pewnie wiele osób zastanawia się czy wszystko działa? Zainstalowałem sobie dwie aplikacje znane mi głównie z Linuksa: Kadu i Quassel (ten drugi nawet chwali się na swoich stronach, że działa nawet pod Windows 7) i nie było problemów innych niż pod Windows Vista gdzie do Kadu musiałem dociągnąć kilka dllek. Ale tak to bywa z portami Linuksowych aplikacji pod Windows. Chrome działa - ale nie jest tak fajnie zintegrowany z paskiem zadań jak IE 8 i powiem szczerze, że dla tych kilku bajerów wacham się czy nadal używać Chrome :] a może napiszę dla niego łatki do integracji z Windows 7 :P Avast, Mathematica 7 i 5.2, TugZIP, VirtualBox, FoxitReader, VistaCodecs - wszystko działa bez zarzutu. Filmy w WMV sie odtwarzają - żyć nie umierać.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Jest też wiele fajnych zmian w aplikacjach. W końcu pojawiła się fajna obsługa karteczek przypinanych na pulpicie. Nie jest to gadżet sidebaru ale zwykła aplikacja. Wygląda moim zdaniem ładnie.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iATZVSQqOgg/SgGTeK8NkDI/AAAAAAAAA78/mOs3EQrCQYA/s1600-h/sticky.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 252px;" src="http://1.bp.blogspot.com/_iATZVSQqOgg/SgGTeK8NkDI/AAAAAAAAA78/mOs3EQrCQYA/s400/sticky.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5332705580325638194" /&gt;&lt;/a&gt;Nawet w Paincie mi teraz niczego nie brakuje do podstawowej edycji i korzysta się z niego ciekawiej.  A właśnie a propo sidebara. To go nie ma :] Teraz można poprostu dodawać gadżety do pulpitu spod prawego klawisza myszy na pulpicie.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iATZVSQqOgg/SgGUTYr3sEI/AAAAAAAAA8E/eKSe6ciX1ik/s1600-h/gadgets.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 253px;" src="http://4.bp.blogspot.com/_iATZVSQqOgg/SgGUTYr3sEI/AAAAAAAAA8E/eKSe6ciX1ik/s400/gadgets.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332706494548258882" /&gt;&lt;/a&gt;Mamy dostęp do tych samych znanych nam z Visty elementów: zegara, prędkościomierza, kalendarza itd... Karteczki - co moim zdaniem wyszło im na plus - zostały przeniesione do pozostałych aplikacji.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na koniec może wrócę jeszcze do menu start. Otóż wiele aplikacji, które się w nim pojawiają posiadają podmenu. Np z podmenu Painta możemy wybrać pliki z którymi ostatnio pracowaliśmy, Sticky Notes ma pozycję dzięki której możemy dodać nową notkę a opcje Internet Explorer to te znane z wyboru go prawym przyciskiem myszy na pasku zadań.&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iATZVSQqOgg/SgGVRWSGzlI/AAAAAAAAA8M/7Z-3Y0Yma0o/s1600-h/menu_start.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 383px; height: 400px;" src="http://3.bp.blogspot.com/_iATZVSQqOgg/SgGVRWSGzlI/AAAAAAAAA8M/7Z-3Y0Yma0o/s400/menu_start.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332707559055216210" /&gt;&lt;/a&gt;&lt;br /&gt;To oczywiście nie wszystkie opcje. Dopowiem tylko, że &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;w Panelu Sterowania&lt;/span&gt; pojawiały się panele do zarządzania skojarzeniami typów plików z aplikacjami oraz domyślnych aplikacji, które otwierają dany plik - moim zdaniem bardzo dobrze, że nie jest to w końcu schowane gdzieś głęboko bo często się przydaje. Nowości jest znacznie więcej - trudno wszystkie opisać. Aby zakończyć miłym akcentem zapraszam wszystkich do obejrzenia tapet dostępnych w Polskiej wersji Windows 7 RC, przygotowanych specjalnie dla Polaków prezentujących &lt;a href="http://www.rapidshark.pl/3zr1vizcimnf/Poland_Wallpaper.rar.html"&gt;piękne krajobrazy naszej Ojczyzny&lt;/a&gt;.  To moim zdaniem bardzo miły akcent, którzy przysporzy wielu sympatyków Microsoftowi - drobiazg a jak cieszy, gdy można podziwiać w takim systemie pejzaże ze swojego kraju :]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3779850705861600697?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3779850705861600697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3779850705861600697' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3779850705861600697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3779850705861600697'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/pierwsze-wrazenia-z-windows-7.html' title='Pierwsze wrażenia z Windows 7'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_iATZVSQqOgg/SgGajMGXZqI/AAAAAAAAA8U/giuwhjWttKU/s72-c/taskbar.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-36319788995666984</id><published>2009-05-06T03:16:00.001-07:00</published><updated>2009-05-06T03:24:49.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odt'/><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='wordpad'/><title type='text'>Windows 7 - wordpad otwiera odt.</title><content type='html'>Buszując po nowo postawionym u mnie Windows 7 trafiłem w moich dokumentach na jakiś plik OpenOffice.&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_iATZVSQqOgg/SgFlZaZr-NI/AAAAAAAAA60/TwcTqxjPwXM/s400/odt_file.PNG" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 16px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5332654921041574098" /&gt;&lt;div style="text-align: left;"&gt;Z jednej strony był to plik z ikonką charakterystyczną dla XML z drugiej - miał jasno określony typ jako &lt;span class="Apple-style-span" style="font-style: italic;"&gt;OpenDocument Text&lt;/span&gt;. Wzbudziło to moje podejrzenia. Możecie sobie tylko wyobrazić jak wielkie okazało się moje zdziwinie i radość gdy w następnej kolejności otworzył się WordPad.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;img src="http://1.bp.blogspot.com/_iATZVSQqOgg/SgFkrQt8t-I/AAAAAAAAA6s/uM9JbdRR48c/s320/wordpad_odt.PNG" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 239px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5332654128168220642" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Obecnie wiele serwisów pisze o tym iż do Microsoft Office 2007 została wprowadza obsługa formatów znanych między innymi z OpenOffice. Nie spotkałem się jeszcze aby ktoś pochwalił Microsoft za tą funkcjonalność w aplikacji tak podstawowej jak WordPad - Brawo !&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-36319788995666984?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/36319788995666984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=36319788995666984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/36319788995666984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/36319788995666984'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/05/windows-7-wordpad-otwiera-odt.html' title='Windows 7 - wordpad otwiera odt.'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iATZVSQqOgg/SgFlZaZr-NI/AAAAAAAAA60/TwcTqxjPwXM/s72-c/odt_file.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8977927415534316459</id><published>2009-04-25T23:40:00.000-07:00</published><updated>2009-04-25T23:58:44.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Dzięki za VirtualBox</title><content type='html'>Na Blogu co jakiś czas dało się na pewno odczuć pewien mój ból związany ze słabym przystosowaniem mojego laptopa do systemu Linux. Na Viście prawie wszystko pięknie działało pod Linuksem problemy były przede wszystkim z dźwiękiem i grafiką gdy podłączało się jakiś zewnętrzny rzutnika a od kiedy zniknęły zamknięte sterowniki do karty bezprzewodowej z Linuksa również z podłączaniem się do sieci z certyfikatami.&lt;br /&gt;Liczyłem po cichu, że z którymś wydaniem ALSA czy Ubuntu wszystko nagle zacznie działać - ale się przeliczyłem. Stoi obok na biurku jakiś 1 GHz Duron z 600 MB RAM i tutaj Ubuntu by działało obsługując wszystko - ale znowu przydałby się jakiś KVM żeby "wygodnie", tak to nazwijmy, pracować.&lt;br /&gt;Wszystko zmieniło się wczoraj a raczej z wczoraj na dzisiaj. Współlokator dla wygody zainstalował sobie VirtualBoxa. Mu Linuks na laptopie działał tyle tylko, że niewygodnie było mu się przełączać. Pomyślałem - to jest wyjście.&lt;br /&gt;Na wstępie okazało się, że mam za mało pamięci RAM aby choćby go zainstalować. Kupiłem więc 4 GB i włożyłem. KUbuntu się zainstalowało jedna za chiny ludowe no po prostu za nic nie chciało ruszyć. No nie - wybuliłem pieniądze na sprzęt, który nie działa : pomyślałem. Nagle uświadomiłem sobie, że mój Windows Vista trochę już na tym komputerze ciągnie i działa szalenie wolno. No to wio ! Wywaliłem z komputera Linuksa, zrobiłem nowe partycje, zainstalowałem system na nowo, zaktualizowałem sterowniki, dociągnąłem SP 1 aby obsłużył 4 GB RAM. Z zapartym tchem odpalam instalację KUbuntu na VirtualBox - wow uruchomiła się w trybie graficznym, wcześniej tylko w biednym ncurses. Wszystko zadziałało.&lt;br /&gt;&lt;br /&gt;Jedyne dwie rzeczy, które musiałem dopracować to &lt;a href="http://virtualbox.wordpress.com/doc/installing-guest-additions-on-ubuntu/"&gt;instalacja guest additions w KUbuntu&lt;/a&gt; i &lt;a href="http://rotwhiler.wordpress.com/2008/10/09/mount-virtualbox-shared-folders-automatically-using-fstab/"&gt;dodanie współdzielonego folderu fstab&lt;/a&gt;. Od teraz jestem szczęśliwym użytkownikiem Linuksa, w którym wszystko działa ładnie, zgrabnie. Mając w końcu wygodną platformę developerską zaczynam też cieszyć się w spokoju światem Windows nie będąc na niego skazanym :) Możliwość wyboru czyni wolnym.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8977927415534316459?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8977927415534316459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8977927415534316459' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8977927415534316459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8977927415534316459'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/04/dzieki-za-virtualbox.html' title='Dzięki za VirtualBox'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6367304510419706155</id><published>2009-04-23T10:41:00.000-07:00</published><updated>2009-04-23T10:49:05.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 9.04 i to jak do niego doszedłem</title><content type='html'>Dzisiaj nadszedł czas. Nowe *Ubuntu zostało wydane oficjalnie. Pliki z obrazami z serwerów np. TASKu są oznaczone datą 20-21 Kwietnia co sugeruje, że już 2-3 dni temu można było ściągnąć dzisiejsze wydanie Ubuntu z Gdańskich superkomputerów.&lt;br /&gt;Staram się używać Linuksa na Laptopie Fujitsu Siemens V3525. Niestety nie bez problemów. Karta graficzna Intela nie rozpieszcza - o graniu w gry nawet tak proste jak Soldat nie ma mowy niestety. System działa dobrze tylko z Windows Vista, instalację XP trzeba specjalnie przygotowywać dodając do niej dedykowane sterowniki do dysku twardego - bez niego wszystko co można sobie pooglądać to czarny ekran programu instalacyjnego.&lt;br /&gt;&lt;br /&gt;Ubuntu niestety również nie radzi sobie tutaj zbyt dobrze. Podczas dołączania słuchawek niestety dźwięk nadal jest podawany na głośniczki - to akurat problem ALSA. Niestey w tym konkretnym przypadku z mojego punktu widzenia Ubuntu się pogorszyło. W wersji 8.04 o ile mnie pamięć nie myli moja karta sieciowa była wspierana przez zamknięte sterowniki. Pozwalało mi się to z sukcesem łączyć do sieci akademickiej z certyfikatami bezpieczeństwa dostarczonymi przez eduroam. Od kiedy pojawiło się natywne wsparcie o połączeniu do sieci nie ma co mówić. Również karta graficzna Intela jest gorzej wykrywana (tego nie rozumiem) i ustawienia w XOrg z jakiś przyczyn są fatalne. Wcześniej typ sterowników był dopasowywany staranniej.&lt;br /&gt;&lt;br /&gt;Dziś zakupiłem do swojego laptopa i próbuję wcisnąć KUbuntu pod Virtual Boxa na Viście. Jeżeli się to powiedzie i wszystko pójdzie zgodnie z planem powinienem cieszyć się w pełni funkcjonalnym systemem, z którym wygodnie mi się pracuje. Zobaczymy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6367304510419706155?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6367304510419706155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6367304510419706155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6367304510419706155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6367304510419706155'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/04/ubuntu-904-i-to-jak-do-niego-doszedem.html' title='Ubuntu 9.04 i to jak do niego doszedłem'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-8412426507832573633</id><published>2009-04-18T09:36:00.000-07:00</published><updated>2009-04-18T22:41:40.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>Programowanie Funkcyjne</title><content type='html'>Mam ostatnio silne postanowienie zapoznać się z paradygmatem programowania funkcyjnego. Próbowałem zacząć od opracowań w języku Angielskim jednak nie poszło. Rozumiałem 5 przez 10 i to nie pozwalało mi czuć się usatysfakcjonowany wiedzą, którą posiadłem. Trafiłem jednak na wykłady na ważniaku i jestem ... w szoku :) Tak bardzo podobało mi się ujęcie paradygmatów programowania tam zaprezentowanych, że jestem pod ogromnym jego wrażeniem. Wpływ na to wszystko miało zestawienie, które znalazłem &lt;a href="http://wazniak.mimuw.edu.pl/index.php?title=Paradygmaty_programowania/Wykład_15:_Inne_paradygmaty_warte_wspomnienia"&gt;tutaj&lt;/a&gt;. Pozwoliło mi wiele zrozumieć i zupełnie zmieniło mój pogląd na programowanie :] Polecam wszystkim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-8412426507832573633?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/8412426507832573633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=8412426507832573633' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8412426507832573633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/8412426507832573633'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/04/programowanie-funkcyjne.html' title='Programowanie Funkcyjne'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-6779233466784795821</id><published>2009-04-05T22:12:00.000-07:00</published><updated>2009-04-05T22:18:57.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='inżynieria oprogramowania'/><title type='text'>Najlepsze darmowe narzędzie do modelowania UML</title><content type='html'>Kiedy jeszcze w moim grafików zajęć figurował taki przedmiot jak Inżynieria Oprogramowania zmagałem się ze znalezieniem dobrego, darmowego programu do modelowania diagramów UML.&lt;br /&gt;Jednym z zadań było rozdzielenie przez prowadzącą na grupy kilku przykładowych aplikacji i ich przetestowanie. Najlepiej - trzeba to przyznać - wypadła aplikacja Microsoftu z Visuala :] Była najschludniejsza, wykresy były miłe dla oka a możliwości wydawały się być niczym nie ograniczone.&lt;br /&gt;Pośród darmowych odpowiedników nie znalazłem nic co mogłoby jakkolwiek nadawać się do prezentacji. Albo wyglądało fatalnie albo aplikacja się zawieszała. Największe zastrzeżenia budziła we mnie estetyka diagramów. Po prostu koszmar.&lt;br /&gt;&lt;br /&gt;Dziś trafiłem na coś co spełnia moje oczekiwania :] Mówię o wtyczce UML do NetBeans. Można o nim poczytać na witrynie http://uml.netbeans.org/ Natomiast już w wersji 6.5 możemy cieszyć się pluginem http://www.netbeans.org/features/uml/. Estetyka niczego sobie. Troszkę niewygodna obsługa - brakuje skrótów klawiszowych a wyklikiwanie niektórych rzeczy z menu kontekstowego przy dodawaniu 17 metody do klasy nuży - ale nie ma na co narzekać. Muszę przyznać, że jestem pełen podziwu dla NetBeansa :] dziś zostałem bardzo miło zaskoczony !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-6779233466784795821?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/6779233466784795821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=6779233466784795821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6779233466784795821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/6779233466784795821'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/04/najlepsze-darmowe-narzedzie-do.html' title='Najlepsze darmowe narzędzie do modelowania UML'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-454642468593099864</id><published>2009-03-25T10:27:00.000-07:00</published><updated>2009-03-25T10:32:04.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='webhosting.pl'/><title type='text'>Przeprowadzka - Webhosting.pl</title><content type='html'>Od jakiegoś czasu nie publikuję nic na blogu. Tak już chyba zostanie. Moje wysiłki edytorskie skupiam na tworzeniu tekstów publikowanych na &lt;a href="http://www.webhosting.pl/"&gt;www.webhosting.pl&lt;/a&gt;. Tak więc nowości szukajcie od dzisiaj właśnie tam :) Mam nadzieję, że pośród czytelników tego bloga chociaż część znalazła tutaj ciekawe informacje :] i nadal będzie znajdować - tylko teraz już pod innym adresem. Tymczasem zapraszam do przeczytania pierwszego mojego działa pod tytułem &lt;a href="http://webhosting.pl/Python.absolutny.wstep.do.myslenia.w.ogol_nym.jezyku.programowania"&gt;Python: absolutny wstęp do myślenia w ogólnym języku programowania&lt;/a&gt;. Pozdrawiam !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-454642468593099864?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/454642468593099864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=454642468593099864' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/454642468593099864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/454642468593099864'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/03/przeprowadzka-webhostingpl.html' title='Przeprowadzka - Webhosting.pl'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-5853448189307271194</id><published>2009-02-05T04:09:00.001-08:00</published><updated>2009-02-05T04:17:46.642-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Drupal - what the stuff !</title><content type='html'>Jestem pod wrażeniem. Chyba główną wadą tego fantastycznego CMSa jest fakt iż został napisany w PHP. Poza tym ideał.&lt;br /&gt;&lt;br /&gt;Projekt, który obecnie realizuję podjąłem się napisać w Drupalu. Używam go jak frameworka i korzystam z faktu iż wiele rzeczy jest już w nim napisane. Tworzę głównie moduły, które rozszerzają lub modyfikują już istniejącą funkcjonalność. Jestem pod kolosalnym wrażeniem.&lt;br /&gt;&lt;br /&gt;Jednym z początkowych miłych zaskoczeń były fantastyczne hooki. Nie wiem czy tłumaczyć to na polski, ale mechanizmy wpinania się w już stworzone i działające razem trybiki Drupala są fantastyczne. Doświadczyłem tego dodając do już istniejących - dowolnie skonfigurowanych formularzy rodzajów treści swoje własne pola.&lt;br /&gt;&lt;br /&gt;Formularz tworzy się w sposób niemalże banalny. Wszystko z czym do tej pory zetknąłem się w Drupalu to tablice. Formularz, Schematy tabel, Router (o ile tak można to nazwać), który tam nazywany jest i wymieszany z systemem menu - są to po prostu ogromne tablice danych ... które posiadają swoją składnie i do których każdy moduł może coś dodać.&lt;br /&gt;&lt;br /&gt;Używanie całego wyposażenie Drupala (sticky headers, sorting tables) jest banalne choć czasem wymaga zrozumienia temat dość dogłebnie jak na przykład we wspomnianym sorting tables - mechanizm jest bardzo rozbudowany. Wszystko jednak działa naprawdę świetnie. CMSa rozszerza mi się o nowe funkcjonalności bardzo przyjemnie i łatwo :)&lt;br /&gt;&lt;br /&gt;Czuję że chciałbym zacząć używać Drupala jako frameworka w tworzonych przeze mnie projektach. Jego twórcy zrobili na dole świetną skrzynkę z narzędziami za pomocą którego zrobili fantastycznego CMSa, a używanie tej skrzynki z narzędziami to naprawdę prawdziwa przyjemność i masa różnych zaskoczeń co do tego jak "coś tam zrobić".&lt;br /&gt;&lt;br /&gt;Wszystkim, którzy będą musieli kiedyś zrobić witrynę z dość nietypową funkcjonalnością polecam Drupala !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-5853448189307271194?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/5853448189307271194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=5853448189307271194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5853448189307271194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/5853448189307271194'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/02/drupal-what-stuff.html' title='Drupal - what the stuff !'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7313671013102306322</id><published>2009-01-24T00:19:00.000-08:00</published><updated>2009-01-24T00:28:12.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='merb'/><title type='text'>Sprostowanie co do mojego merbowania</title><content type='html'>Pisałem jakiś czas temu (dawno) na moim blogu o Merbie, zachwycałem się HAMLem i SASSem (bo naprawdę byłem pod ich wrażeniem). Później zacząłem krytykować Railsy za ich kody i wykazywałem totalne niezrozumienie i krytykę wobec osób, które nadal programowały w Railsach.&lt;br /&gt;&lt;br /&gt;W Merbie nie napisałem ani jednej aplikacji. Robiłem tyle co pisałem na Blogu. Generalnie templaty: HAML/SASS i odbieranie jakiś danych w kontrolerze. Na modele byłem zawsze za leniwy. Jeżeli ktokolwiek poczuł się urażony moją ostrą krytyką - to przepraszam. Niestety mój "perfekcjonizm" programisty dał mi się we znaki i zamiast krytykować Railsy zacząłem jak widzę krytykować osoby.&lt;br /&gt;&lt;br /&gt;Do kodu Railsów nigdy nie zaglądałem i moje zdanie jest zdaniem wyrobionym na bazie idei obu projektów, celów im przyświecających oraz opiniom rzeczy osób programujący w Rails i Merb, których blogi czytam. Czepiam się nie funkcjonalności a jakości kodu, który w Rails jest podobno słabej jakości.&lt;br /&gt;&lt;br /&gt;W Rails robiłem kiedyś jakiś tutorial oparty na scaffoldingu i generowaniu kodu :]&lt;br /&gt;&lt;br /&gt;Urażonych przepraszam :) Mam nadzieję, że sprawę wyjaśniłem dość jasno. W Merbie i w Rails nie pisałem żadych dużych projektów. Bawiłem się nimi tylko jako frameworkami, gdzie w Merbie robiłem to tylko na bazie wysyłania formularzy i bawienia się HAML i SASSem a w Rails jakimś tutorialem w stylu "scaffolding" czy jakieś magiczne automaty :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7313671013102306322?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7313671013102306322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7313671013102306322' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7313671013102306322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7313671013102306322'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/sprostowanie-co-do-mojego-merbowania.html' title='Sprostowanie co do mojego merbowania'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1184921465278453707</id><published>2009-01-23T05:11:00.000-08:00</published><updated>2009-01-23T05:35:08.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><title type='text'>Django banał</title><content type='html'>Dziś pisałem przykładową aplikację, na której będę chciał pokazać jak wykorzystuje się luki w atakach XSS i CSRF. Chciałem to zrobić szybko i wybrałem Django, którego w ogóle nie znam.&lt;br /&gt;&lt;br /&gt;Muszę przyznać, że jestem w szoku. Aplikację napisałem w trymiga, dokumentacja świetna, walidacja, formularze generują się same a modele posiadają metody idealnie do CRUDa. Najbardziej denerwują urls.py, które co nóż to trzeba uzupełniać. Formularze tworzyłem na bazie modeli i nie za bardzo wiedziałem też jak zrobić bez grzebania w klasie formularza (o ile to w ogóle możliwe), żeby pewne pole wyświetlało się w trybie readonly. Poza tym wszystko szło jak burza.&lt;br /&gt;&lt;br /&gt;Szczerze mówiąc framework szalenie przyśpiesza tworzenie aplikacji. Dzięki temu, że nie trzeba dokładać do niego kolejnych modułów skupiam się na pisaniu aplikacji nie zaś na szukaniu rozwiązań, które po prostu były podane jak na dłoni w świetnej moim zdaniem dokumentacji.&lt;br /&gt;&lt;br /&gt;Programowało mi się przez tą chwilę znacznie lepiej, szybciej, wygodniej i przyjemniej niż w Pylons, w którym wszystko musiałem robić sam. W Django nie widać na przykład żadnych transakcji (jeżeli nie chce się ich mieć), klasy posiadają metody - nie trzeba korzystać jawnie z jakiegoś meta.Session, gdzie w Pylons musisz sobie samemu (choć to tylko chwilka) zrobić takie cudo.&lt;br /&gt;&lt;br /&gt;Brakowało mi tylko dekoratora do walidacji formularzy, żeby wyrzucić oczywisty kod na zewnątrz metody i nie zaśmiecać jej sprawdzaniem czy formularz się zwalidował ale napisanie go to pewnie sekundka.&lt;br /&gt;&lt;br /&gt;Nie będę się jednak uczył tego frameworka - na ile mi potrzeba już go umiem :] Po Pylons (gdy skończę pisać projekt, który w nim zacząłem) przyjdzie czas na naukę Rubego :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1184921465278453707?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1184921465278453707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1184921465278453707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1184921465278453707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1184921465278453707'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/django-bana.html' title='Django banał'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-7071421324345693325</id><published>2009-01-22T19:48:00.000-08:00</published><updated>2009-01-23T06:54:36.328-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><category scheme='http://www.blogger.com/atom/ns#' term='turbogears'/><title type='text'>TruboGears 2 - framework na Pylons</title><content type='html'>Wiadomość stara - jednak dla mnie szokująca. TurboGears w wersji 2 to framework, który jest napisany na Pylons. Nie wiem czy istnieje inny przykład frameworka pisanego na innym frameworku. &lt;a href="http://groups.google.com/group/pylons-discuss/browse_thread/thread/5b1edd907db72ac1/"&gt;Wątek na pylons-discuss&lt;/a&gt; jest z 27 Czerwca 2007 r.&lt;br /&gt;&lt;br /&gt;Zainteresowałem się temat ponieważ dziwnie często w niektórych źródłach ukazywały się jakieś "porównania" tych frameworków, ale nie na zasadzie TurboGears vs Pylons tylko na zasadzie "co użyto w Pylons co można byłoby użyć w TG", albo "W Pylons użyte jest to a w TG użyto tego i tego - trzeba sprawdzić czy nie powinniśmy używać tego w Pylons". Moim skromnym zdaniem :) fakt zaistnienia takiej sytuacji pokazuje, że Pylons to poważny framework, ceniony w gronie developerów Pythona :] i to aż tak fajny, że można na nim pisać inne frameworki.&lt;br /&gt;&lt;br /&gt;TG 2.0 jeszcze nie wyszedł (jest w wersji beta), być może wydanie jego pełnej wersji jest uzależnione od wyjścia Pylons w wersji 1.0. Poczekamy - zobaczymy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-7071421324345693325?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/7071421324345693325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=7071421324345693325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7071421324345693325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/7071421324345693325'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/trubogears-2-framework-na-pylons.html' title='TruboGears 2 - framework na Pylons'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-1626431706887843833</id><published>2009-01-22T19:41:00.001-08:00</published><updated>2009-01-22T19:54:37.602-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pylons'/><title type='text'>Nowa strona Pylons i wersja 0.9.7 rc4</title><content type='html'>Od wczoraj na stronie Pylons "psuło się" w niektórych działach menu - dziś możemy oglądać nową odsłonę witryny. Wiele witryn ładnie komponuje się z "otoczką" w stylu egipskim - najlepiej witryna główna. Wiki straszy obecnie troszeczkę Python stylowym wyglądem, który ciężko przypiąć do obecnego layoutu witryny :]&lt;br /&gt;&lt;br /&gt;Myślę, że wraz z odświeżeniem strony nastąpi też ożywienie społeczności, będzie to jaki bodziec, pozytywny akcent. To co cieszy to fakt iż proponowana do ściągnięcia na stronie wersja Pylons to 0.9.7rc4. Jak można wyczytać na grupie dyskusyjnej do wydania wersji 0.9.7 kod prawdopodobnie nie ulegnie zmianie bo jedyne zadania, które zostały do ukończenia to tickety niezwiązane z kodem.&lt;br /&gt;&lt;br /&gt;Jestem szalenie ciekaw jak szybko ruszą prace nad 9.8 i czy zmiany z 9.7 zostaną zmergowane do gałęzi 1.0, która już od około 10 miesięcy się nie zmienia. Zobaczymy :) Czekam na marcową wersję Pylons 1.0 ;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-1626431706887843833?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/1626431706887843833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=1626431706887843833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1626431706887843833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/1626431706887843833'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/nowa-strona-pylons-i-wersja-097-rc4.html' title='Nowa strona Pylons i wersja 0.9.7 rc4'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3600472305038966755</id><published>2009-01-21T06:56:00.000-08:00</published><updated>2009-01-21T07:05:42.629-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python - enumerate i reversed jako bonusy do fora</title><content type='html'>Pętlę for w Pythonie można wzbogacić używając dwóch ciekawych funkcji.&lt;br /&gt;&lt;br /&gt;Pierwszą z nich, którą omówię będzie &lt;span style="font-weight:bold;"&gt;enumerate&lt;/span&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;krotka = ('a', 'b', 'c', 'd')&lt;br /&gt;&lt;br /&gt;for &lt;span style="font-weight:bold;"&gt;nr&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;element&lt;/span&gt; in &lt;span style="font-weight:bold;"&gt;enumerate&lt;/span&gt;(krotka):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print nr, " ", element&lt;/span&gt;&lt;/blockquote&gt;Jak widzimy dzięki funkcji &lt;span style="font-style:italic;"&gt;enumerate&lt;/span&gt; poza elementem kroki zapisywanym w drugiej zmiennej dostajemy w zmiennej &lt;span style="font-style:italic;"&gt;nr&lt;/span&gt; kolejne liczby (licząc od zera). Dzięki temu dostajemy "typowy" licznik, który zwiększa swoją wartość wraz z kolejnym obrotem pętli.&lt;br /&gt;&lt;br /&gt;Dzięki funkcji &lt;span style="font-weight:bold;"&gt;reversed&lt;/span&gt; możemy zaś iterować po elementach w odwrotnej kolejności&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;krotka = ('a', 'b', 'c', 'd')&lt;br /&gt;&lt;br /&gt;for element in &lt;span style="font-weight:bold;"&gt;reversed&lt;/span&gt;(krotka):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print element&lt;/span&gt;&lt;/blockquote&gt;Kolejne elementy będą wyświetlane biorąc od końca krotki. Proste :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3600472305038966755?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3600472305038966755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3600472305038966755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3600472305038966755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3600472305038966755'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/python-enumerate-i-reversed-jako-bonusy.html' title='Python - enumerate i reversed jako bonusy do fora'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-2905062073045357593</id><published>2009-01-21T06:39:00.000-08:00</published><updated>2009-01-21T06:52:15.850-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python - Conditional Expression</title><content type='html'>Python posiada składnię "conditional expression". Pamiętacie taką śmieszną strukturę &lt;span style="font-style:italic;"&gt;(warunek) ? jezeli_true : jezeli_false&lt;/span&gt; ?&lt;br /&gt;&lt;br /&gt;W Pythonie przyjmuje ona formę (na przykład):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;'parzyste' if x % 2 == 0 else 'nieparzyste'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To co kole mnie w oczy to fakt iż po warunku na &lt;span style="font-style:italic;"&gt;if&lt;/span&gt; nie ma dwukropka, ale odrazu &lt;span style="font-style:italic;"&gt;else&lt;/span&gt;. Jak ta struktura działa ? Jeżeli warunek w ifie jest spełniony zostanie zwrócona wartość 'parzyste', jeżeli nie 'nieparzyste'. Zwróconą wartość można przyporządkować łatwo do zmiennej. Na przykład&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;liczba = 4&lt;br /&gt;czy_parzyste = 'parzyste' if liczba % 4 == 0 else 'nieparzyste'&lt;br /&gt;czy_parzyste = ('parzyste' if liczba % 4 == 0 else 'nieparzyste')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O dziwo zarówno pierwszy jak i drugi zapis działają tak samo. Zmienne czy_parzyste zostanie nada wartość 'parzyste' lub 'nieparzyste', przy czym IMHO drugi zapis jest o niebo czytelniejszy !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-2905062073045357593?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/2905062073045357593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=2905062073045357593' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2905062073045357593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/2905062073045357593'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/python-conditional-expression.html' title='Python - Conditional Expression'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6836763300070903809.post-3075864501563602362</id><published>2009-01-21T06:36:00.001-08:00</published><updated>2009-01-21T06:39:02.138-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funkcje'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python - funkcje też posiadają atrybuty</title><content type='html'>&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;def funkcja():&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;br /&gt;&lt;br /&gt;funkcja.imie = 'Jan'&lt;br /&gt;funkcja.wiek = 40&lt;/span&gt;&lt;/blockquote&gt;Jak widać zawykła funkcja to dla Pythona nadal obiekt, można mu więc (jak zwykłym obiektom) przypisywać różne atrybuty. Może kiedyś, okaże się to użyteczna - ja na razie nie umiem znaleźć zastosowania dla takiej składni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6836763300070903809-3075864501563602362?l=dziubdziub.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dziubdziub.blogspot.com/feeds/3075864501563602362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6836763300070903809&amp;postID=3075864501563602362' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3075864501563602362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6836763300070903809/posts/default/3075864501563602362'/><link rel='alternate' type='text/html' href='http://dziubdziub.blogspot.com/2009/01/python-funkcje-te-posiadaj-atrybuty.html' title='Python - funkcje też posiadają atrybuty'/><author><name>Johny JKJK</name><uri>http://www.blogger.com/profile/18165289348070396530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_iATZVSQqOgg/SLgees5EmiI/AAAAAAAAAOg/1Lw1iliDPR8/s1600-R/avatar.jpg'/></author><thr:total>4</thr:total></entry></feed>
