<?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-10764524</id><updated>2012-02-16T14:22:45.077+01:00</updated><category term='Python'/><category term='Usability'/><category term='Zemanta'/><category term='Semantic Web'/><category term='komórka'/><category term='web development'/><category term='Gmail Google Boomerang lifehack zero-inbox firefox plugin'/><category term='Windows'/><category term='Microsoft Visual Studio'/><category term='Microsoft SQL Server'/><category term='phone'/><category term='programowanie'/><category term='Programming'/><category term='generatory'/><category term='Anime'/><category term='RSS'/><category term='stable'/><category term='foto'/><category term='bookmarklet'/><category term='NNTP'/><category term='Video'/><category term='backup'/><category term='instalacja Django Windows InstantDjango'/><category term='Generators'/><category term='szablony'/><category term='Google Reader'/><category term='DailyBlog'/><category term='Polish Football Association'/><category term='Google'/><category term='Web service'/><category term='DailyBlog Programming money gpw Python Unix Linux Gmail'/><category term='photo'/><category term='Firefox'/><category term='Google Blog Search'/><category term='Delicje web2.0 ulubione'/><category term='Django'/><category term='Linux'/><category term='DailyBlog .NET Framework'/><category term='Tools'/><category term='baza danych'/><category term='skryptozakładka'/><category term='skrypty'/><category term='Feed Readers'/><category term='Ubuntu'/><category term='blogowanie'/><category term='Databases'/><category term='Buzz'/><category term='Blog'/><category term='money'/><title type='text'>PiotrB</title><subtitle type='html'>Programowanie, narzędzia, opinie</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10764524.post-8192173048904515291</id><published>2010-08-17T02:16:00.000+02:00</published><updated>2010-08-17T02:16:24.789+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gmail Google Boomerang lifehack zero-inbox firefox plugin'/><title type='text'>Malutkie odkrycie - Boomerang</title><content type='html'>&amp;nbsp;Dziś &lt;a href="http://lifehacker.com/5614073/boomerang-schedules-your-gmail-messages-and-weve-got-beta-invites?skyline=true&amp;amp;s=i"&gt;lifehacker zareklamował&lt;/a&gt; nowy przydatny serwis (w zasadzie to wtyczkę do Firefoxa/Chrome). Nazywa się to &lt;a href="http://www.baydin.com/boomerang4gmail/"&gt;Boomerang for Gmail &lt;/a&gt;i na razie jest na zaproszenia (ja zdążyłem na kod lifehacker). Podstawowa funkcja rzucająca się w oczy to wysyłanie maila później (za jakiś czas lub o określonej godzinie). Jednak ciekawszą funkcjonalnością (moim zdaniem) jest "wywabianie" maili do inboxa w określonym terminie. W tej chwili chcąc pamiętać przy pomocy Gmaila o jakimś terminie trzymam go w inboxie (nawet jak to termin upływający za 3 miesiące). Teraz można zrobić sobie prawdziwy zero-inbox a maila wywabić na dzień-dwa przed właściwym terminem. Oczywiście serwis trudno polecić ludziom, którzy w gmailu (na głównym koncie) trzymają dużo tajemnic i boją się, że wtyczka pozna ich tajne dane ;). Maile nie giną, są dostępne pod etykietą 'Boomerang'. Akcje są wykonywane nie tylko przez wtyczkę, ale również przez sam serwis, mail pojawia się w skrzynce przy wyłączonym gmailu (sprawdziłem w źródłach wtyczki - znając dane maila da się dołożyć do kolejki na serwisie).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-8192173048904515291?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/8192173048904515291/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=8192173048904515291' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8192173048904515291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8192173048904515291'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2010/08/malutkie-odkrycie-boomerang.html' title='Malutkie odkrycie - Boomerang'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-6356977941155058961</id><published>2010-04-14T19:26:00.000+02:00</published><updated>2010-04-14T19:26:44.294+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><category scheme='http://www.blogger.com/atom/ns#' term='Buzz'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Reader'/><category scheme='http://www.blogger.com/atom/ns#' term='skryptozakładka'/><title type='text'>Skryptozakładki do buzza</title><content type='html'>Przygotowałem sobie na szybko (więc mogą być błędy) dwie skryptozakładki (bookmarklets) do buzza. Obydwie nie używają Google Readera. Korzystają ze standardowej strony z API. Później, o ile będzie zainteresowanie, można przygotować mini okienkową wersję. Pierwsza zakładka: &lt;a href="javascript:location.href='http://www.google.com/buzz/post?url='+encodeURIComponent(location.href)+';message='+encodeURIComponent(document.title)"&gt;Buzzuje tytuł&lt;/a&gt; wpisu i url, druga natomiast &lt;a href="javascript:location.href='http://www.google.com/buzz/post?url='+encodeURIComponent(location.href)+';message='+encodeURIComponent(document.getSelection())"&gt;Buzuuje zaznaczenie&lt;/a&gt; i url.&lt;br /&gt;Przy okazji odkryłem, że buzzy konkretnego użytkownika można obserwować przez RSS w Google Readerze (nawet nie będąc obserwującym). Np. &lt;a href="http://buzz.googleapis.com/feeds/piotrb/public/posted"&gt;tu są moje buzzy&lt;/a&gt;&lt;br /&gt;Wydaje się to kolejną skuchą G, bo niektórzy chcieliby na przykład wiedzieć kto ich obserwuje i ewentualnie pozbyć się kogoś z obserwujących.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-6356977941155058961?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/6356977941155058961/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=6356977941155058961' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/6356977941155058961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/6356977941155058961'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2010/04/skryptozakadki-do-buzza.html' title='Skryptozakładki do buzza'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5802657488436104585</id><published>2009-04-25T19:24:00.000+02:00</published><updated>2009-04-25T19:24:17.820+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Blog Search'/><category scheme='http://www.blogger.com/atom/ns#' term='foto'/><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog'/><category scheme='http://www.blogger.com/atom/ns#' term='money'/><category scheme='http://www.blogger.com/atom/ns#' term='komórka'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='phone'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Linki codzienne 2009-04-25</title><content type='html'>Dziś kolejny odcinek z cyklu z linkami (&lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://patrz.pl/filmy/tajemnicapieniadza"&gt;http://patrz.pl/filmy/tajemnicapieniadza&lt;/a&gt; - zacznijmy od sposobu powstawania zadłużenia i jednego z pomysłów na rozwiązanie tych problemów, jak najbardziej na czasie. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://chir.ag/projects/tip-of-my-tongue/"&gt;http://chir.ag/projects/tip-of-my-tongue/&lt;/a&gt; - ciekawy projekcik wyszukujący słowa z końca naszego języka, podajesz początek, środek, koniec słowa albo podobne słowo, a stronka podaje Ci to słowo, które miałeś na myśli, albo i nie, warto poćwiczyć,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashable.com/2008/10/27/how-to-sync-google-services-mobile/"&gt;http://mashable.com/2008/10/27/how-to-sync-google-services-mobile/&lt;/a&gt; - jak zsynchronizować swoją komórkę z usługami Google,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.histografica.com/search.aspx#lat=53.4235&amp;amp;lng=14.5631&amp;amp;z=14&amp;amp;from=1870&amp;amp;to=1983&amp;amp;page=1"&gt;http://www.histografica.com/search.aspx#lat=53.4235&amp;amp;lng=14.5631&amp;amp;z=14&amp;amp;from=1870&amp;amp;to=1983&amp;amp;page=1&lt;/a&gt; - serwis ze zdjęciami historycznymi w połączeniu z mapą, tu akurat w zawężeniu do Szczecina,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://poradnikwebmastera.blox.pl/2008/10/Wufoo-ndash-galeria-formularzy.html"&gt;http://poradnikwebmastera.blox.pl/2008/10/Wufoo-ndash-galeria-formularzy.html&lt;/a&gt; - Paweł Wimmer poleca gotowe darmowe formularze na strony www, dość estetyczne,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dzisiejsze plusy:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hushchamber.com/"&gt;http://www.hushchamber.com/&lt;/a&gt; - zbiór linków z blogów z linkami, posortowany po liczbie pojawień się danego linka na różnych blogach, takie &lt;a class="zem_slink" href="http://blogsearch.google.com/" rel="homepage" title="Google Blog Search"&gt;Google Blog Search&lt;/a&gt;, ale bardziej tematyczne (programowanie, design, sieć),&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blockposters.com/"&gt;http://www.blockposters.com/&lt;/a&gt; - serwis dla wszystkich chcących sobie zrobić fototapetę, z dowolnego obrazka, a ja myślałem, że to tylko u nas ;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/3ef8ac63-570a-4d8e-b609-42d62c4f2ae6/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=3ef8ac63-570a-4d8e-b609-42d62c4f2ae6" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&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/10764524-5802657488436104585?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5802657488436104585/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5802657488436104585' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5802657488436104585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5802657488436104585'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/04/linki-codzienne-2009-04-25.html' title='Linki codzienne 2009-04-25'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-361846787834679682</id><published>2009-04-22T22:35:00.001+02:00</published><updated>2009-04-22T22:37:16.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog'/><category scheme='http://www.blogger.com/atom/ns#' term='Databases'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='baza danych'/><title type='text'>Linki codzienne 2009-04-22</title><content type='html'>Po dłuższej przerwie, kolejny odcinek cyklu z linkami (&lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ridelust.com/top-10-everyday-things-people-do-to-ruin-their-cars/"&gt;http://www.ridelust.com/top-10-everyday-things-people-do-to-ruin-their-cars/&lt;/a&gt; - Jak szanować swój samochód, część uwag oczywista, ale niektóre odkrywcze (przynajmniej dla mnie),&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sqlmusings.wordpress.com/2008/10/04/free-sql-server-ebooksresources/"&gt;http://sqlmusings.wordpress.com/2008/10/04/free-sql-server-ebooksresources/&lt;/a&gt; - kilka naprawdę dobrych, a do tego darmowych książek na tematy związane z SQLServer,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/rjacobs/archive/2008/10/07/clean-that-project.aspx"&gt;http://blogs.msdn.com/rjacobs/archive/2008/10/07/clean-that-project.aspx&lt;/a&gt; - Dzisiaj oddajemy co cesarskie, cesarzowi - czyli do MS. Prosty programik, który "przeczyści" katalog z projektem pisanym w &lt;a class="zem_slink" href="http://msdn.microsoft.com/vstudio/" rel="homepage" title="Microsoft Visual Studio"&gt;Visual Studio .NET&lt;/a&gt; (usuwa przede wszystkim zbędne katalogi bin i obj). Jeśli ktoś sobie takiego programiku jeszcze nie napisał, to polecam. Szczególnie przydatne przy udostępnianiu projektów znajomym,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://larswilhelmsen.com/2008/10/14/pimp-my-visual-studio-2008/"&gt;http://larswilhelmsen.com/2008/10/14/pimp-my-visual-studio-2008/&lt;/a&gt; - Jak już pisać o rozwiązaniach od MS, to na całego. Jak odpicować sobie visual studio, szczególnie polecam: Resharper i &lt;a class="zem_slink" href="http://ankhsvn.net/" rel="homepage" title="AnkhSVN"&gt;AnkhSVN&lt;/a&gt; (i to niezależnie od wersji VS.NET), w bonusie mała lista skrótów,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx"&gt;http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx&lt;/a&gt; - się dzisiaj zrobiło okienkowo-programistycznie, potężny zestaw narzędzi pod Windows, głównie dla programistów, ale Power USer też coś dla siebie znajdzie.&lt;br /&gt;&lt;br /&gt;Dzisiejsze plusy:&lt;br /&gt;&lt;a href="http://taoofbackup.com/"&gt;http://taoofbackup.com&lt;/a&gt; - jak robić backup, żeby zrobić go dobrze (wprawdzie na koniec okazuje się, że to trochę reklama, ale naprawdę przedstawione są ważne zasady),&lt;br /&gt;&lt;br /&gt;&lt;a href="http://projecteuler.net/"&gt;http://projecteuler.net/&lt;/a&gt; - wspaniały zbiór zagadek matematycznych, od w miarę prostych, do wymagających, można potraktować jako dobry materiał do nauki programowania.&lt;br /&gt;   &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/53234eb8-a164-42ed-b576-47eb5a9b42bb/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=53234eb8-a164-42ed-b576-47eb5a9b42bb" alt="Reblog this post [with Zemanta]" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&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/10764524-361846787834679682?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/361846787834679682/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=361846787834679682' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/361846787834679682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/361846787834679682'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/04/linki-codzienne-2009-04-22.html' title='Linki codzienne 2009-04-22'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-4262955303543613670</id><published>2009-02-23T00:37:00.001+01:00</published><updated>2009-02-23T00:37:56.727+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Anime'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog .NET Framework'/><title type='text'>Linki codzienne 2009-02-23</title><content type='html'>Po ciężkim weekendzie, kolejny odcinek &lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;cyklu z linkami&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=t_LWQQrpSc4&amp;amp;fed"&gt;http://www.youtube.com/watch?v=t_LWQQrpSc4&amp;amp;fed&lt;/a&gt; - Ekonomia w Kaczogrodzie, czyli czemu Sknerus McKwacz wie jak powstaje inflacja, dedykuję wszystkim chcącym dodrukowywać pieniądze (nazywając to inwestowaniem np.),&lt;br /&gt;&lt;br /&gt;&lt;a href="http://o22.pl/articles.php?article_id=36"&gt;http://o22.pl/articles.php?article_id=36&lt;/a&gt; - Garść ogólnych porad dla poszukujących pracy, dwa pierwsze linki tak się jakoś przypadkiem kryzysowe zrobiły,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pbe.lightbird.net/"&gt;http://pbe.lightbird.net/&lt;/a&gt; - Nauka Pythona przez przykłady, przydatne przy nauce, ale również jako zbiór fragmentów kodu,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/mcantelon/basic-crud-in-django?src=related_normal&amp;amp;rel=672975"&gt;http://www.slideshare.net/mcantelon/basic-crud-in-django?src=related_normal&amp;amp;rel=672975&lt;/a&gt; - jak zrobić CRUD (&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete" rel="wikipedia" title="Create, read, update and delete"&gt;create, read, update and delete&lt;/a&gt; czyli podstawa w zasadzie każdej aplikacji) w &lt;a class="zem_slink" href="http://www.djangoproject.com/" rel="homepage" title="Django (web framework)"&gt;Django&lt;/a&gt;, czyli 2 kolejne linki dla odmiany Pythonowo,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.parleys.com/display/PARLEYS/Home#talk=16285749;slide=4;title=Project%20anti-patterns.%20How%20to%20make%20your%20project%20fail"&gt;http://www.parleys.com/display/PARLEYS/Home#talk=16285749;slide=4;title=Project%20anti-patterns.%20How%20to%20make%20your%20project%20fail&lt;/a&gt; - Jak zmusić swój projekt do tego, żeby się nie udał. Zarówno treść, jak i forma warta zauważenia. &lt;br /&gt;&lt;br /&gt;Dzisiejsze plusy:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bronikowski.com/"&gt;http://bronikowski.com/&lt;/a&gt; - kolejny blog z mojego &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/RSS" rel="wikipedia" title="RSS"&gt;RSS&lt;/a&gt;, fan Amigi, &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Anime" rel="wikipedia" title="Anime"&gt;Anime&lt;/a&gt;, Ska i pewnie wielu innych rzeczy, pisze niezbyt często, ale za to często ciekawie,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devage.com/"&gt;http://www.devage.com/&lt;/a&gt; - a tu dla odmiany coś ze świata &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/.NET_Framework" rel="wikipedia" title=".NET Framework"&gt;.NET&lt;/a&gt;, głównie ze względu na kontrolkę grid.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/dbc0be62-86ee-4be2-8c73-41f3f070aaff/" title="Zemified by Zemanta"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=dbc0be62-86ee-4be2-8c73-41f3f070aaff" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-4262955303543613670?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/4262955303543613670/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=4262955303543613670' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/4262955303543613670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/4262955303543613670'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-23.html' title='Linki codzienne 2009-02-23'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-1601544191823966863</id><published>2009-02-20T23:49:00.000+01:00</published><updated>2009-02-20T23:49:26.568+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog Programming money gpw Python Unix Linux Gmail'/><title type='text'>Linki codzienne 2009-02-20</title><content type='html'>Kolejny odcinek &lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;cyklu z linkami&lt;/a&gt;:&lt;br /&gt;&lt;a href="http://poradnikwebmastera.blox.pl/2008/10/Gadzety-dla-Gmaila.html"&gt;&lt;br /&gt;http://poradnikwebmastera.blox.pl/2008/10/Gadzety-dla-Gmaila.html&lt;/a&gt; - Paweł Wimmer pisze o gadżetach dla Gmaila. Ja ze swojej strony dodam, że gadżet można zrobić w zasadzie z każdej strony, również własnej,&lt;br /&gt;&lt;a href="http://nhw.pl/pl/2008/10/prezentowac-mozna-i-bez-powerpointa"&gt;&lt;br /&gt;http://nhw.pl/pl/2008/10/prezentowac-mozna-i-bez-powerpointa&lt;/a&gt; - Kilka starych i nowych prezentacji, głównie Apple, warto obejrzeć dla wyrobienia sobie zdania, niekoniecznie do ściśłego naśladownictwa,&lt;br /&gt;&lt;a href="http://tools.tortoisesvn.net/CommitMonitor"&gt;&lt;br /&gt;http://tools.tortoisesvn.net/CommitMonitor&lt;/a&gt; - Jeśli korzystasz z svn i chcesz wiedzieć co się dzieje w Twoim(-ch) repozytorium(-ach), to jest najlepsze narzędzie, proste, wystarczająco konfigurowalne i dopracowane. Ach, gdyby wszystkie narzedzia programistyczne takie były,&lt;br /&gt;&lt;a href="http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/"&gt;&lt;br /&gt;http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/&lt;/a&gt; - Po jaju w Bombaju, po demonie w Pythonie, czyli jak zrobić poprawnie demona z węża, &lt;br /&gt;&lt;a href="http://www.math.utah.edu/%7Ealfeld/math.html"&gt;&lt;br /&gt;http://www.math.utah.edu/~alfeld/math.html&lt;/a&gt; - Zrozumieć matematykę - raczej dla tych zainteresowanych, przy okazji polecam całą stronę Peter Alfelda: http://www.math.utah.edu/~pa/ , można znaleźć kilka ciekawych prezentacji na tematy związane z matematyką.&lt;br /&gt;&lt;br /&gt;Dzisiejsze plusy:&lt;br /&gt;&lt;a href="http://lcamtuf.coredump.cx/"&gt;&lt;br /&gt;http://lcamtuf.coredump.cx/&lt;/a&gt; - Nasz (.pl) chyba najlepszy (a na pewno najbardziej znany) specjalista od bezpieczeństwa sieci (choć może należałoby wymienić jeszcze kilka innych dziedzin) prezentuje swoje dokonania i nie tylko,&lt;br /&gt;&lt;a href="http://www.notowany.pl/"&gt;&lt;br /&gt;http://www.notowany.pl/&lt;/a&gt; - strona (można powiedzieć, że startowa) dla chcących poczytać, co się dzieje na giełdzie, analizy wybiegające poza standard.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/5060f532-a8f8-4fd9-aafb-3d3670bfad14/" title="Zemified by Zemanta"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=5060f532-a8f8-4fd9-aafb-3d3670bfad14" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-1601544191823966863?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/1601544191823966863/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=1601544191823966863' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/1601544191823966863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/1601544191823966863'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-20.html' title='Linki codzienne 2009-02-20'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-2330302718952543065</id><published>2009-02-19T02:10:00.000+01:00</published><updated>2009-02-19T02:10:50.173+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Usability'/><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Polish Football Association'/><title type='text'>Linki codzienne 2009-02-19</title><content type='html'>Kontynuuję &lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;wczorajsze wpisy&lt;/a&gt;, tym razem już bez zbytniego rozwodzenia nad regułami.&lt;br /&gt;&lt;br /&gt;Linki:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://prawo.gazetaprawna.pl/artykuly/39562,o_zawieszeniu_decyduje_trybunal_arbitrazowy.html"&gt;http://prawo.gazetaprawna.pl/artykuly/39562,o_zawieszeniu_decyduje_trybunal_arbitrazowy.html&lt;/a&gt; - kto kogo i dlaczego mógł zawiesić w u leśnych dziadków, czyli w &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Polish_Football_Association" rel="wikipedia" title="Polish Football Association"&gt;PZPN&lt;/a&gt;. Co z tego wynikło każdy już wie,&lt;br /&gt;&lt;a href="http://ikeahacker.blogspot.com/2008/08/quality-headphone-stand-for-cheap.html"&gt;&lt;br /&gt;http://ikeahacker.blogspot.com/2008/08/quality-headphone-stand-for-cheap.html&lt;/a&gt; - jak zrobić w prosty sposób stojak na walające się wszędzie słuchawki&lt;br /&gt;&lt;a href="http://www.useit.com/alertbox/20010805.html"&gt;&lt;br /&gt;http://www.useit.com/alertbox/20010805.html&lt;/a&gt; - Dlaczego nie słuchać użytkowników, czyli rzecz o &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Usability" rel="wikipedia" title="Usability"&gt;usability&lt;/a&gt; (jakoś nasza użyteczność sztucznie brzmi, szczególnie w kontekście angielskiego artykułu),&lt;br /&gt;&lt;a href="http://www.bankier.pl/wiadomosc/Zarobil-miliony-na-kryzysie-teraz-zegna-sie-z-rynkiem-1849126.html"&gt;&lt;br /&gt;http://www.bankier.pl/wiadomosc/Zarobil-miliony-na-kryzysie-teraz-zegna-sie-z-rynkiem-1849126.html&lt;/a&gt; - o człowieku, który zarobił na kryzysie, ale już nie chce tego robić,&lt;br /&gt;&lt;a href="http://www.xtranormal.com/"&gt;&lt;br /&gt;http://www.xtranormal.com&lt;/a&gt; - serwis pozwalający przygotować animowany filmik, w rozmaitych sceneriach, z różnymi aktorami itp. Postacie niestety mówią bardziej po angielsku (nawet całkiem wyraźnie).&lt;br /&gt;&lt;br /&gt;Dzisiejsze plusy:&lt;br /&gt;&lt;a href="http://antyweb.pl/"&gt;&lt;br /&gt;http://antyweb.pl/&lt;/a&gt; - Bardzo popularny, nie za prosty, nie za trudny blog o nowych startupach, sieci, technologiach itp,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/"&gt;http://www.codeproject.com/&lt;/a&gt; - Jedno z ważniejszych miejsc w sieci dla każdego kto programuje pod &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Microsoft_Windows" rel="wikipedia" title="Microsoft Windows"&gt;Windows&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/c88cd793-59c7-4e39-aea9-1233e850b296/" title="Zemified by Zemanta"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=c88cd793-59c7-4e39-aea9-1233e850b296" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-2330302718952543065?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/2330302718952543065/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=2330302718952543065' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2330302718952543065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2330302718952543065'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-19.html' title='Linki codzienne 2009-02-19'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-8442981467619303091</id><published>2009-02-18T02:05:00.002+01:00</published><updated>2009-02-18T02:12:21.917+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DailyBlog'/><title type='text'>Linki codzienne 2009-02-18</title><content type='html'>Jakiś czas temu wpadłem na pomysł (nie taki wcale nowy), żeby dzielić się w usystematyzowany sposób linkami w sieci.&lt;br /&gt;Znam kilka tego typu blogów po angielsku (głównie programistycznych) i publikują one najczęściej same linki.&lt;br /&gt;Mi zależy na mieszaniu linków do polskich i angielskich miejsc w sieci, spraw technicznych z ciekawostkami, rzeczy ważnych z przyjemnymi, taki misz-masz wędrówek sieciowych.&lt;br /&gt;Będę umieszczał takie linki: znalazłem link, opiszę go 1-2 zdaniami, tak, żeby czytelnik mógł sie zorientować, czy to dla niego i podzielę się z ludźmi.&lt;br /&gt;Formuła jaką sobie obmyśliłem to 5+2. Pięć linków do stron z pojedynczym artykułem, obrazkiem, filmem czy grą. Czasami pojawi się jakaś nowy startup. Dodatkowe dwa linki do "całych" stron, serwisów czy blogów, wygrzebanych z moich dawnych lub aktualnych ulubionych&lt;br /&gt;Każdy link jest przeczytany lub obejrzany przeze mnie, są to więc rzeczy które uznałem za warte poświęcenia uwagi i na pewno nie znajdziecie tu tabloidowych nagłówków&lt;br /&gt;Linki zbieram półautomatycznie przy pomocy delicji (&lt;a href="http://delicious.com/piotrbla"&gt;http://delicious.com/piotrbla&lt;/a&gt;).&lt;br /&gt;Częstość publikowania: jak się zbierze zestaw, na razie mam zapasy, więc prawie codziennie, później w zależności od formy.&lt;br /&gt;&lt;br /&gt;Poloneza czas więc zacząć:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kongregate.com/games/EvilDog/z-rox"&gt;http://www.kongregate.com/games/EvilDog/z-rox&lt;/a&gt; - interesująca gierka logiczna polegająca na odgadywania liter i innych znaków na podstawie obrazu z linii "skanującej" odgadywany znak,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sqlzoo.net/"&gt;http://sqlzoo.net/&lt;/a&gt; - samouczek do sql, można od razu poćwiczyć na danych,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blog.gwiazdowski.pl/index.php?subcontent=1&amp;amp;id=455"&gt;http://www.blog.gwiazdowski.pl/index.php?subcontent=1&amp;amp;id=455&lt;/a&gt; - rozmyślania, prowadzone jakiś czas temu, ale chyba nawet bardziej aktualne, w czym rynki finansowe są lepsze od stoczni&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oko.info.pl/index.php?body=1801"&gt;http://www.oko.info.pl/index.php?body=1801&lt;/a&gt; - ćwiczenia oka, dla siedzących długo przy komputerach jak znalazł,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sport.pl/pilka/1,65032,4665894.html"&gt;http://www.sport.pl/pilka/1,65032,4665894.html&lt;/a&gt; - Poczet Klubów Polskich, czyli śmieszne, czasem żenujące i żałosne, czasem tylko dziwne, nazwy klubów w Polsce, od Swornicy Czarnowąsy do LZS Zimna Wódka.&lt;br /&gt;&lt;br /&gt;Plusami na początek zostały:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.giveawayoftheday.com/"&gt;http://www.giveawayoftheday.com/&lt;/a&gt; - Programy w prezencie, raz na jakiś czas trafiają się prawdziwe perełki,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://poradnikwebmastera.blox.pl/"&gt;http://poradnikwebmastera.blox.pl&lt;/a&gt; - spojrzenie na sieć (i coraz częściej na inne aspekty rzeczywistości) prezentowane przez Pawła Wimmera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-8442981467619303091?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/8442981467619303091/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=8442981467619303091' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8442981467619303091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8442981467619303091'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html' title='Linki codzienne 2009-02-18'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-3085726886225432734</id><published>2008-09-04T22:31:00.001+02:00</published><updated>2008-09-04T22:47:07.787+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stable'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><title type='text'>Nowe Django</title><content type='html'>Wyszła nowa, według numeru, stabilna wersja Django. Opis po angielsku do znalezienia oczywiście &lt;a href="http://docs.djangoproject.com/en/dev/releases/1.0/"&gt;na oficjalnej stronie&lt;/a&gt; i&amp;nbsp; &lt;a href="http://www.djangoproject.com/weblog/2008/sep/03/1/"&gt;blogu&lt;/a&gt;.&amp;nbsp; Nowości (a w zasadzie zmiany) to przede wszystkim stabilność, admin, ORM i Unicode, wszystko to tak naprawdę usprawnienia a nie rewolucja i w zasadzie nadanie numeru to formalność i długo zastanawiano się nad tym 1.0, bo w końcu to niewiele znaczy, ale z drugiej strony zobowiązuje. Przy okazji podniósł mi się ruch na blogu ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-3085726886225432734?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/3085726886225432734/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=3085726886225432734' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/3085726886225432734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/3085726886225432734'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/09/nowe-django.html' title='Nowe Django'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-4461646394400521970</id><published>2008-08-10T02:21:00.000+02:00</published><updated>2008-08-10T02:31:15.685+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Nowy Firefox  (3.1) - to co najlepsze</title><content type='html'>&lt;span class="zemanta-img" style="margin: 1em; float: right; display: block;"&gt;&lt;a href="http://www.flickr.com/photos/44124404848@N01/19876142"&gt;&lt;img alt="Mr. Firefox" src="http://farm1.static.flickr.com/13/19876142_fb5989318d_m.jpg" style="border: medium none ; display: block;" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution" style="margin: 1em 0pt 0pt; display: block;"&gt;Image by &lt;a href="http://www.flickr.com/photos/44124404848@N01/19876142"&gt;hugovk&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/span&gt;A w zasadzie najważniejsze, nowy Firefox ma przełączanie pomiędzy kartami rozwiązane w sposób znany z klasycznych systemów operacyjnych - po naciśnięciu Ctrl+Tab wraca do poprzedniej karty (ostatnio oglądanej). Powinno to zadowolić wszystkich malkontentów. Dodatkowo wprowadzono podgląd kart (przy więcej jak 2 kartach). Karty nie są duże, przez co nawet tak sceptycznie nastawiony do takich wynalazków osobnik jak ja jest w stanie to zaakceptować . Obiecuje sobie również wiele po możliwości używania znaków specjalnych (* itp.) w pasku adresów, jednak na chwilę obecną ta opcja nie działa w wersji 3.1., albo ja nie umiem z niej skorzystać.&lt;br /&gt;&lt;div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/93b801c7-f457-420c-a543-6e85198c4ad8/" title="Zemified by Zemanta"&gt;&lt;img alt="Zemanta Pixie" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=93b801c7-f457-420c-a543-6e85198c4ad8" style="border: medium none ; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-4461646394400521970?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/4461646394400521970/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=4461646394400521970' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/4461646394400521970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/4461646394400521970'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/08/nowy-firefox-31-to-co-najlepsze.html' title='Nowy Firefox  (3.1) - to co najlepsze'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/13/19876142_fb5989318d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-7078348196560709154</id><published>2008-07-31T22:35:00.003+02:00</published><updated>2008-08-01T01:01:26.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='generatory'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Feed Readers'/><category scheme='http://www.blogger.com/atom/ns#' term='Generators'/><title type='text'>Fajne RSS</title><content type='html'>Do napisania posta o fajnych narzędziach związanych z &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/RSS" rel="wikipedia" title="RSS"&gt;RSS&lt;/a&gt; zbierałem się długo, dzisiaj skłoniło mnie do tego ostatecznie pojawienie się fajnego serwisu: &lt;a href="http://www.postrank.com/home.html"&gt;PostRank &lt;/a&gt;(i &lt;a href="http://www.postrank.com/readers.html"&gt;www.postrank.com/readers.htm&lt;/a&gt;)będącego elementem &lt;a href="http://www.aiderss.com/"&gt;większego systemu&lt;/a&gt; oceniania feedów i linków. Oceniane są linki z RSS, na podstawie występowania w kilku popularnych serwisach i klikania w linki (&lt;a href="http://postrank.com/postrank.html#how"&gt;PostRank: How it works&lt;/a&gt;). Co ciekawe działa (można powiedzieć: trochę działa) dla &lt;a href="http://wykop.pl/"&gt;wykopu:&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.scrnshots.com/users/piotrb/screenshots/39369"&gt;&lt;img src="http://s3.amazonaws.com/scrnshots.com/screenshots/39369/tmp_med_rect.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oprócz tego w zestawie jest też plugin do Firefoksa, który integruje się z Google Readerem i pokazuje przy każdym wpisie jego notę w PostRanku.&lt;br /&gt;&lt;br /&gt;Kolejne istotne narzędzie to &lt;a href="http://page2rss.com/"&gt;Page2RSS&lt;/a&gt;. Na podstawie ZMIAN strony WWW generuje ono pojedynczy wpis RSS. Po podaniu adresu strony dostajemy adres kanału RSS, który można dodać do swojego czytnika. Jeśli coś się zmieni na wpisanej stronie, dostaniemy informację. Do czego to może być przydatne: śledzenie strony, która nie ma kanału RSS (&lt;a href="http://page2rss.com/page?url=contexteditor.org/"&gt;np. strona edytora, który chyba nie będzie miał wersji 1.0&lt;/a&gt;); śledzenie &lt;a href="http://page2rss.com/page?url=www.wykop.pl/ludzie/adas/linki/ulubione"&gt;ulubionych &lt;/a&gt;lub dodanych przez użytkownika linków w serwisie, który nie ma takiej funkcjonalności (prawie Web3.0, ostatnio na wykopie padła nawet taka propozycja); sprawdzania, czy &lt;a href="http://page2rss.com/page?url=www.google.com/"&gt;Google świętuje&lt;/a&gt; jakąś okazję. Dobrą cechą tego rozwiązania jest to, że strona ma generowany stały adres kanału i dzięki temu, jeśli ktoś wcześniej wpisał taki sam adres, to można obejrzeć np. od kiedy strona się nie zmieniła. Nie ma jednak rozwiązań doskonałych: Page2RSS nie radzi sobie z bardzo długimi stronami (chciałem np. monitorować dużą listę ogłoszeń zmieniających się nieregularnie 1-2 razy na tydzień.). Podobne, ale trochę bardziej zaawansowane narzędzia w tej kategorii: &lt;a href="http://feedity.com/"&gt;Feedity&lt;/a&gt; (testuję i wygląda, że lepiej sobie radzi z dużymi plikami, dają dodatkowe opcje po zalogowaniu, np. zapamiętanie ustawień kanału i ich edycja) i &lt;a href="http://www.dapper.net/"&gt;dapper&lt;/a&gt; (ten jest ładniejszy i oferuje dużo fajnych funkcjonalności, ale praktycznie na każdym rzeczywistym teście się zawiesza, więc jeszcze trzeba chyba poczekać).&lt;br /&gt;&lt;br /&gt;Następny program to &lt;a href="http://rss2pdf.com/"&gt;RSS2PDF&lt;/a&gt;. Służy do zamieniania wpisów z RSS na dokument PDF (np. &lt;a href="http://rss2pdf.com/index.php?url=http%3A%2F%2Fwww.giveawayoftheday.com%2Ffeed%2F&amp;amp;src=rss&amp;amp;title=&amp;amp;img=0"&gt;tak&lt;/a&gt;). PDF ma spis treści i zawiera aktualne wpisy, nadaje się to na przykład do zabrania do pociagu (jak ktoś nie lubi offline w Google Readerze), ewentualnie wydrukowania. Dają też np. możliwość wygenerowania sobie dokumentu na podstawie Google News.&lt;br /&gt;&lt;br /&gt;Większa lista narzędzi do RSS: &lt;a href="http://oedb.org/library/features/the_ultimate_rss_toolset"&gt;http://oedb.org/library/features/the_ultimate_rss_toolset&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/6f61f526-6f4f-4355-9f4c-86e2ca26c95e/" title="Zemified by Zemanta"&gt;&lt;img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=6f61f526-6f4f-4355-9f4c-86e2ca26c95e" alt="Zemanta Pixie" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-7078348196560709154?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/7078348196560709154/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=7078348196560709154' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7078348196560709154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7078348196560709154'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/07/fajne-rss.html' title='Fajne RSS'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5444087067009192924</id><published>2008-07-31T22:18:00.001+02:00</published><updated>2008-07-31T22:29:22.350+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delicje web2.0 ulubione'/><title type='text'>Nowe delicje</title><content type='html'>Y odpaliło nowe delicious, teraz pod &lt;a href="http://delicious.com/"&gt; nowym adresem: delicious.com&lt;/a&gt;&lt;br /&gt;Zmiany widać, na lepsze, tagi ładnie uporządkowane. Widać lepszy charakter społecznościowy, linki znajomych, wygląd też przejrzysty, ogólnie widać krok do przodu.&lt;br /&gt;Wszystko pięknie, tylko nie można się zalogować, co ciekawsze nie działa też przypominanie hasła. &lt;a href="http://delicious.com/piotrbla"&gt;Linki są&lt;/a&gt;. Chyba się za bardzo pośpieszyli.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-5444087067009192924?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5444087067009192924/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5444087067009192924' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5444087067009192924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5444087067009192924'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/07/nowe-delicje.html' title='Nowe delicje'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-8083182977595556236</id><published>2008-07-07T02:23:00.016+02:00</published><updated>2009-04-23T14:27:55.670+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='instalacja Django Windows InstantDjango'/><title type='text'>Instalacja Django pod Windows</title><content type='html'>Ostatnio sporo korzystam z Windows i stwierdziłem, że oprócz cygwina warto mieć jakieś środowisko do kodowania w &lt;a class="zem_slink" href="http://www.djangoproject.com/" rel="homepage" title="Django (web framework)"&gt;Django&lt;/a&gt;. Jakiś czas temu zainstalowałem sobie wersję "instant", którą niniejszym chciałbym polecić. Ale, jak to mawiają na PKP, po kolei:&lt;br /&gt;Do robienia czegoś w Django są potrzebne:&lt;br /&gt;1. samo Django,&lt;br /&gt;2. Python rzecz jasna,&lt;br /&gt;3. baza danych, bez niej oczywiście też można sobie poradzić, ale nie ma to sensu, szczególnie, że dostajemy to (bazę) "gratis",&lt;br /&gt;4. narzędzie do obsługi bazy danych,&lt;br /&gt;5. przykładowa aplikacja.&lt;br /&gt;Oczywiście warto mieć jakiś dobry edytor, a to jak wiadomo, każdy wybiera sam (mi się niejako przy okazji zainstalowało &lt;a class="zem_slink" href="http://www.eclipse.org/" rel="homepage" title="Eclipse (software)"&gt;Eclipse&lt;/a&gt;+Pydev, a nuż się przyda)&lt;br /&gt;Założeniem całej instalacji ma być też szybkość uzyskania takiego środowiska, a co za tym idzie minimum konfiguracji.&lt;br /&gt;&lt;br /&gt;Samo Django (pkt. 1) pobieramy spod &lt;a href="http://www.instantdjango.com/download.html"&gt;tego linka&lt;/a&gt; (na chwilę obecną &lt;a href="http://s3.amazonaws.com/instant.django/django.exe"&gt;bezpośrednio pliku z archiwum (~22MB)&lt;/a&gt;), co ciekawe jest w zestawie z samym Pythonem, czyli punkt 2 też już mamy z głowy, a dla odmiany dostajemy również bazę (pkt. 3) w postaci sqlite. Aplikacje przykładową pobieramy z tej &lt;a href="http://www.instantdjango.com/download.html"&gt;samej strony&lt;/a&gt; lub &lt;a href="http://s3.amazonaws.com/instant.django/crimemap.exe"&gt;bezpośrednio&lt;/a&gt;. Pozostaje tylko punkt 4, czyli zarządzanie bazą. Tu z pomocą przychodzi nam dodatek do Firefoksa: &lt;br /&gt;&lt;a href="http://code.google.com/p/sqlite-manager/"&gt;sqlite-manager&lt;/a&gt; (po ściągnięciu pliku .xpi trzeba go przeciągnąć na listę dodatków)&lt;br /&gt;Instalacja InstantDjango jest prościutka: uruchamiamy samorozpakowujące się archiwum, wskazujemy katalog docelowy i fruuu, trochę długo trwa rozpakowywanie, więc trzeba się wykazać cierpliwością, ale w końcu całość to jakieś ~70MB.&lt;br /&gt;Potem możemy dopisać sobie na końcu pliku &lt;code&gt;start.bat&lt;/code&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;echo Instant Django is now ready&lt;br /&gt;echo In app directory: python manage.py runserver&lt;br /&gt;echo.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;a później go (&lt;code&gt;start.bat&lt;/code&gt;) uruchamiamy i mamy "quasikonsole" Django do wykonywania poleceń. Później tylko przechodzimy do katalogu aplikacji i możemy ją na przykład uruchomić:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;F:\django&amp;gt;cd crimemap&lt;br /&gt;F:\django\crimemap&amp;gt;python manage.py runserver&lt;br /&gt;Validating models...&lt;br /&gt;0 errors found&lt;br /&gt;Django version 0.97-pre-SVN-6991, using settings 'crimemap.settings'&lt;br /&gt;Development server is running at http://127.0.0.1:8000/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;i na przykład pod &lt;a href="http://127.0.0.1:8000/crime/homicide"&gt;adresem&lt;/a&gt;&lt;br /&gt;mamy naszą przykładową aplikację. Oczywiście można ją generować i pisać samemu, do czego &lt;a href="http://piotrbla.blogspot.com/2007/05/zaczynam-z-django.html"&gt;zachęcam &lt;/a&gt;(&lt;a href="http://piotrbla.blogspot.com/search/label/Django"&gt;niejednokrotnie&lt;/a&gt;). Choćby dlatego, że aplikacja przykładowa nie należy do arcydzieł sztuki programistycznej i wymaga zmian, żeby działała z domyślnymi ustawieniami InstantDjango.&lt;br /&gt;&lt;br /&gt;Miałem jeszcze napisać o aktualizacji Django przy takiej instalacji, ale okazuje się, że w katalogu &lt;code&gt;Utilities&lt;/code&gt; jest już odpowiedni batch: &lt;code&gt;update.bat&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;Jeśli zainteresował cię ten wpis, to może przeczytasz inne &lt;a href="http://piotrbla.blogspot.com/search/label/Django"&gt;wpisy o Django&lt;/a&gt; lub &lt;a href="http://piotrbla.blogspot.com/search/label/Windows"&gt;o Windows&lt;/a&gt;, zachęcam też gorąco do zerknięcia na &lt;a href="http://piotrbla.blogspot.com/search/label/DailyBlog"&gt;zbiór moich linków&lt;/a&gt;, którymi &lt;a href="http://piotrbla.blogspot.com/2009/02/linki-codzienne-2009-02-18_18.html"&gt;od niedawna&lt;/a&gt; cyklicznie się dzielę.&lt;br /&gt;Dla korzystających z RSS &lt;a href="http://piotrbla.blogspot.com/feeds/posts/default"&gt;adres kanału z postami&lt;/a&gt;, można subskrybować. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/55dce6c3-3596-428c-aa89-896307ce5314/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=55dce6c3-3596-428c-aa89-896307ce5314" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&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/10764524-8083182977595556236?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/8083182977595556236/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=8083182977595556236' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8083182977595556236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8083182977595556236'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/07/instalacja-django-pod-windows.html' title='Instalacja Django pod Windows'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-9107442908246935304</id><published>2008-05-10T00:23:00.003+02:00</published><updated>2008-05-10T01:09:24.191+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>Stos pusty</title><content type='html'>Jakiś czas temu &lt;a href="http://www.joelonsoftware.com/items/2008/04/16.html"&gt;przeczytałem&lt;/a&gt; o nowej inicjatywie Joela Spolsky'ego: &lt;a href="http://stackoverflow.com"&gt;stackoverflow.com&lt;/a&gt;. Wygląda ciekawie? Może. O ile można się zgodzić z tezą, według której programiści nie czytają książek (nawet tych o programowaniu), to już programowanie metodą &lt;a href="http://en.wikipedia.org/wiki/Trial_and_error" title="Trial and error" rel="wikipedia" target="_blank" class="zem_slink"&gt;trial-and-error&lt;/a&gt; jest grubym nadużycem (semantycznym oczywiście). &lt;br /&gt;Bo: &lt;br /&gt;- jaki sens ma czytanie 200 stron książki, tylko po to, żeby dowiedzieć się jednej, dwóch nowych rzeczy,&lt;br /&gt;- jak ktoś pracuje zawodowo w jakimś środowisku to jego problemy nie są opisane w książkach, nawet tych lepszych,&lt;br /&gt;- zanim pewne rzeczy staną sie modne na tyle, że jakiś książkopisarz będzie chciał o tym napisać, zawodowcy już dawno będą mieli każdy szczegół rozpoznany.&lt;br /&gt;- książkopisarze rzadko są dobrymi programistami i odwrotnie, w związku z tym dużo ważniejsza jest praca w zespole, z guru/ojcem prowadzącym, który pokieruje (i wcale nie nazywałbym tego szumnie &lt;a href="http://en.wikipedia.org/wiki/Pair_programming" title="Pair programming" rel="wikipedia" target="_blank" class="zem_slink"&gt;pair programming&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Następna rzecz o której pisze JS jest wpisywanie problemu w Google i nie trafianie na rozwiązanie, a nawet jeśli, to rozwiązanie nie jest poparte wiedzą eksperta albo płatne. Ja z perspektywy mojego (skromniejszego, ale jednak) doświadczenia stwierdzam, albo coś jest w Google/na forum programu/biblioteki, albo trzeba iść do producenta (ale wtedy ma się jakąś formę supportu). Zawsze zostaje Usenet, na którym też wiele rzeczy można sie dowiedzieć, a jak to nie wystarczy to jest choćby &lt;a href="http://www.codeproject.com/"&gt;Code Project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Opierając się na tych (moim zdaniem mylnych) założeniach Joel postanowił stworzyć stronę, która rozwiąże przedstawione przez niego problemy: będzie dostępna za darmo, bez nachalnych reklam, konieczności (ale z możliwością) rejestracji i będzie zawierać wiedzę ekspertów. Pożyjemy, zobaczymy, na razie strona jest w zasadzie pusta, zawiera jednak odnośnik do &lt;a href="http://blog.stackoverflow.com"&gt;bloga&lt;/a&gt;, na którym są już 4 podcasty.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset class="zemanta-related" style="margin: 0.5em 0pt 1em; padding: 0pt;"&gt;&lt;legend class="zemanta-title"&gt;Related articles&lt;/legend&gt;&lt;ul class="zemanta-article-ul" style="margin: 1em 0pt 1.5em; padding: 0pt;"&gt;&lt;li class="zemanta-article" style="margin: 0.5em 2em;"&gt;&lt;a title="Open in new window" target="_blank" href="http://www.joelonsoftware.com/items/2008/04/16.html"&gt;stackoverflow.com&lt;/a&gt; [via&amp;nbsp;Zemanta]&lt;/li&gt;&lt;li class="zemanta-article" style="margin: 0.5em 2em;"&gt;&lt;a title="Open in new window" target="_blank" href="http://www.37signals.com/svn/posts/700-ask-37signals-is-formal-education-important"&gt;Ask 37signals: Is formal education important?&lt;/a&gt; [via&amp;nbsp;Zemanta]&lt;/li&gt;&lt;/ul&gt;&lt;/fieldset&gt;&lt;div id="zemanta-pixie" style="margin: 5px 0pt; width: 100%;"&gt;&lt;a id="zemanta-pixie-a" href="http://www.zemanta.com/" title="Zemified by Zemanta"&gt;&lt;img id="zemanta-pixie-img" src="http://img.zemanta.com/pixie.png?x-id=3b3dc66e-f43f-493d-bdc5-ac620071bc2f" style="border: medium none ; float: right;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-9107442908246935304?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/9107442908246935304/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=9107442908246935304' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/9107442908246935304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/9107442908246935304'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/05/stos-pusty.html' title='Stos pusty'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-3492386382694808879</id><published>2008-05-06T03:01:00.005+02:00</published><updated>2008-05-06T03:30:08.999+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Reader'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Nowinki w GReaderze</title><content type='html'>Mała rzecz a cieszy. W &lt;a href="http://reader.google.com" title="Google Reader" rel="homepage" target="_blank" class="zem_slink"&gt;Google Reaeder&lt;/a&gt; dodano wczoraj nowe funkcje:&lt;br /&gt;Przede wszystkim dodawanie notek - jest prosty &lt;a href="http://en.wikipedia.org/wiki/Bookmarklet" title="Bookmarklet" rel="wikipedia" target="_blank" class="zem_slink"&gt;bookmarklet&lt;/a&gt;, wciągamy go na pasek ulubionych, podoba nam się strona, klik, dopisujemy notkę, szybka decyzja, czy chcemy sie podzielić notką i leci.&lt;br /&gt;Do tego możemy pisać notki "po prostu".&lt;br /&gt;Dodatkowo możemy określić jak ma wyglądać strona z rzeczami, którymi się dzielimy.&lt;br /&gt;Całość opisana oczywiście na: &lt;a href="http://googlereader.blogspot.com/2008/05/share-anything-anytime-anywhere.html"&gt;&lt;br /&gt;Official Google Reader Blog: Share anything. Anytime. Anywhere.&lt;/a&gt; przy czym ja najpierw znalazłem a później czytałem, i muszę przyznać 2 rzeczy: &lt;br /&gt;wymyślili jak zwykle dokładnie tak jak to powinno działać (IMHO),&lt;br /&gt;dokładnie tak sobie myślałem kiedyś, że przydałaby się możliwość dopisania strony do Readera.&lt;br /&gt;Z drobiazgów zauważonych później:&lt;br /&gt;można dodać notkę do rzeczy znalezionych w swoich subskrybowanych elementach,&lt;br /&gt;zmieniono nazwę checkboxa "mark as read" na "keep unread" - co zdecydowanie lepiej oddaje sens tego elementu.&lt;br /&gt;&lt;fieldset class="zemanta-related" style="margin: 0.5em 0pt 1em; padding: 0pt;"&gt;&lt;legend class="zemanta-title"&gt;Related articles&lt;/legend&gt;&lt;ul class="zemanta-article-ul" style="margin: 1em 0pt 1.5em; padding: 0pt;"&gt;&lt;li class="zemanta-article" style="margin: 0.5em 2em;"&gt;&lt;a title="Open in new window" target="_blank" href="http://www.geeksugar.com/1561546?sidcheck=1&amp;amp;idcheck=1"&gt;Geek Tip: Show Off Shared Google Reader Posts on Your Blog&lt;/a&gt; [via&amp;nbsp;Zemanta]&lt;/li&gt;&lt;/ul&gt;&lt;/fieldset&gt;&lt;div id="zemanta-pixie" style="margin: 5px 0pt; width: 100%;"&gt;&lt;a id="zemanta-pixie-a" href="http://www.zemanta.com/" title="Zemified by Zemanta"&gt;&lt;img id="zemanta-pixie-img" src="http://img.zemanta.com/pixie.png?x-id=4cd1e071-68e6-42e2-a3a3-5ce20f88efa5" style="border: medium none ; float: right;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-3492386382694808879?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/3492386382694808879/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=3492386382694808879' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/3492386382694808879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/3492386382694808879'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/05/nowinki-w-greaderze.html' title='Nowinki w GReaderze'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5818730052959237864</id><published>2008-03-28T01:49:00.005+01:00</published><updated>2008-03-28T02:29:54.594+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='blogowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='Zemanta'/><title type='text'>Zemanta aka podpowiadacz semantyczny</title><content type='html'>Trafiłem na coś, co do przetestowania wymaga napisania nowego posta na blogu. Jest to &lt;a href="http://www.zemanta.com" title="Zemanta ltd." rel="homepage" target="_blank" class="zem_slink"&gt;Zemanta&lt;/a&gt;, strona (w zasadzie &lt;a href="http://en.wikipedia.org/wiki/Web_service" title="Web service" rel="wikipedia" target="_blank" class="zem_slink"&gt;web service&lt;/a&gt; + plugin do firefoksa), podpowiadająca treści (zdjęcia/artykuły) do aktualnie pisanego artykułu. Oczywiście testowanie nie może przebiegać dokładnie tak jak sugerują autorzy narzędzia. Próbowałem znaleźć treści do samego tytułu i pierwszego zdania, ale rezultat był marny. Po 300 pierwszych znakach już się zaczęło coś pojawiać. Ale raczej jako reakcja na konkretne słowa kluczowe po angielsku.&lt;br /&gt;Kolejna próba oczywiście dotyczy &lt;a href="http://en.wikipedia.org/wiki/Django_%28web_framework%29" title="Django (web framework)" rel="wikipedia" target="_blank" class="zem_slink"&gt;Django&lt;/a&gt; &lt;br /&gt;Po tym krótkim teście, krótkie wnioski: w dobie pisania na zbliżone tematy (wszyscy piszą o &lt;a href="http://en.wikipedia.org/wiki/Tibet" title="Tibet" rel="wikipedia" target="_blank" class="zem_slink"&gt;Tybecie&lt;/a&gt;, olimpiadzie itp.) narzędzie może okazać się dobrym dopełnieniem bloga w rękach wytrawnych grafomanów. Sympatyczna jest też aktualizacja co 300 znaków albo na żądanie. Wychodzi w sumie taki googloprzyśpieszacz. Szkoda, że szukanie po odbywa się raczej w anglojęzycznej sieci i że obrazki zawsze lądują na początku, opcji nie ma żadnych (ani w dodatkach do firefoksa, ani w interfejsie, skądinąd zgrabnym).&lt;br /&gt;&lt;br /&gt;&lt;span class="zemanta-img" style="margin: 1em; display: block; float: right;"&gt;&lt;a href="http://commons.wikipedia.org/wiki/Image:Yamdrok-tso-2.jpg" target="_blank"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Yamdrok-tso-2.jpg/202px-Yamdrok-tso-2.jpg" style="border: medium none ; display: block;"&gt;&lt;/a&gt;&lt;span style="margin: 1em 0pt 0pt; display: block;"&gt;Source: &lt;a href="http://commons.wikipedia.org/wiki/Image:Yamdrok-tso-2.jpg" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset class="zemanta-related" style="margin: 0.5em 0pt 1em; padding: 0pt;"&gt;&lt;legend class="zemanta-title"&gt;Related articles&lt;/legend&gt;&lt;ul class="zemanta-article-ul" style="margin: 1em 0pt 1.5em; padding: 0pt;"&gt;&lt;li class="zemanta-article" style="margin: 0.5em 2em;"&gt;&lt;a title="Open in new window" href="http://www.zemanta.com/blog/?p=57"&gt;Zemanta launch party&lt;/a&gt; [via&amp;nbsp;Zemanta]&lt;/li&gt;&lt;/ul&gt;&lt;/fieldset&gt;&lt;div id="zemanta-pixie" style="margin: 5px 0pt; width: 100%;"&gt;&lt;a id="zemanta-pixie-a" href="http://www.zemanta.com/" title="Zemified by Zemanta"&gt;&lt;img id="zemanta-pixie-img" src="http://img.zemanta.com/pixie.png?x-id=44f28c66-cb46-47fc-9748-c3344c6c0829" style="border: medium none ; float: right;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-5818730052959237864?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5818730052959237864/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5818730052959237864' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5818730052959237864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5818730052959237864'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2008/03/zemanta-aka-podpowiadacz-semantyczny.html' title='Zemanta aka podpowiadacz semantyczny'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5195791981268024378</id><published>2007-08-14T01:28:00.000+02:00</published><updated>2007-08-14T01:31:46.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Zaczynam z Django 6 - prawdziwa strona II</title><content type='html'>Kolejną właściwością szablonów jest dostęp do elementów słowników, obiektów i tablic. Większości wyda się to oczywiste, ale warto o tym wspomnieć. &lt;br /&gt;&lt;br /&gt;Słownik:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [15]: from django.template import Context,Template&lt;br /&gt;In [16]: t = Template("""Jestem {{ osoba.nazwisko }}. {{osoba.imie}} {{osoba.nazwisko}}&lt;br /&gt;   ....: W najnowszym filmie bede mial {{osoba.liczbaZyc}} zyc""")&lt;br /&gt;In [18]: james = {'imie': 'James', 'nazwisko': 'Blond', 'liczbaZyc': '5'}&lt;br /&gt;In [19]: c = Context({'osoba': james})&lt;br /&gt;In [20]: t.render(c)&lt;br /&gt;Out[20]: 'Jestem Blond. James Blond\nW najnowszym filmie bede mial 5 zyc'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Obiekt (oczywiście do obiektów własnych klas odwołujemy się tak samo):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [24]: from django.template import Context,Template&lt;br /&gt;In [25]: import datetime&lt;br /&gt;In [26]: d = datetime.date(2007, 7, 14)&lt;br /&gt;In [27]: d.month&lt;br /&gt;Out[27]: 7&lt;br /&gt;In [28]: t = Template('Miesiac {{ date.month }} roku Panskiego {{ date.year }}.')&lt;br /&gt;In [29]: c = Context({'date': d})&lt;br /&gt;In [30]: t.render(c)&lt;br /&gt;Out[30]: 'Miesiac 7 roku Panskiego 2007.'&lt;br /&gt;In [31]: c = Context({'date': datetime.date(2007, 6, 14)})&lt;br /&gt;In [32]: t.render(c)&lt;br /&gt;Out[32]: 'Miesiac 6 roku Panskiego 2007.'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Elementy tablicy (i wywołanie metody upper - można wołać metody, ale tylko bezparametrowe, jak najbardziej można używać kropki wielokrotnie, nie używa się nawiasów przy wywołaniu ):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [48]: from django.template import Template, Context&lt;br /&gt;In [49]: t = Template('Teraz prezentujemy agenta o numerze dwa: {{ agenci.2.upper }}.')&lt;br /&gt;In [50]: t.render(Context({'agenci': ['James', 'Bolo', 'Olo']}))&lt;br /&gt;Out[50]: 'Teraz prezentujemy agenta o numerze dwa: OLO.'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Jak na warstwę prezentacji, wymienione elementy to naprawdę sporo. W przypadku gdyby ktoś bał się, że mu wystąpi konflikt nazw, kolejność szukania elementu po kropce jest następująca (dla a.b): klucz w słowniku (a["b"]), atrybut obiektu (a.b), wywołanie metody(a.b()), odwołanie do tablicy (a[b]).&lt;br /&gt;Jeszcze słówko o obsłudze wyjątków w metodach. Można spowodować, żeby wyjątek był zignorowany (oczywiście nie jest to dobry sposób obsługi każdego wyjątku). W szablonach Django dzieje się tak wtedy, kiedy obiekt wyjątku ma ustawioną specjalną zmienną: &lt;code&gt;silent_variable_failure = True&lt;/code&gt; &lt;br /&gt;Można także zabezpieczyć się przed wywołaniem metody (na przykład takiej, która ma efekty uboczne):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;def zapis(self):&lt;br /&gt; zapis.alters_data = True&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Kolejnym istotnym elementem jest zachowanie szablonów w momencie odwołania się do nieistniejącej zmiennej. Jeżeli nie zostanie zmieniona konfiguracja Django, to błędne odwołania są ignorowane (pusty string). Warto o tym pamiętać, choćby ze względu na rozróżnianie wielkości liter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-5195791981268024378?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5195791981268024378/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5195791981268024378' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5195791981268024378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5195791981268024378'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/08/zaczynam-z-django-6-prawdziwa-strona-ii.html' title='Zaczynam z Django 6 - prawdziwa strona II'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-2519098080942388686</id><published>2007-06-16T21:19:00.000+02:00</published><updated>2007-06-16T21:21:19.888+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><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='Ubuntu'/><title type='text'>Najnowsze Django w Ubuntu</title><content type='html'>Dzisiaj pojawiło się nowe Django w Ubuntu (7.04, Feisty Fawn) - Version 0.96-1, czyli zgodnie z aktualnie wydaną wersją. Miło, bo oszczędzi to kilku problemów (jak np. &lt;a href="http://piotrbla.blogspot.com/2007/05/zaczynam-z-django-4-pierwsza-strona.html"&gt;ten opisany przeze mnie z krótkimi URL-ami&lt;/a&gt;). Pozwoli to też wzorować się dokładniej na DjangoBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-2519098080942388686?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/2519098080942388686/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=2519098080942388686' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2519098080942388686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2519098080942388686'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/06/najnowsze-django-w-ubuntu.html' title='Najnowsze Django w Ubuntu'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5953021209766520439</id><published>2007-06-09T23:02:00.000+02:00</published><updated>2007-06-10T02:55:53.099+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='NNTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Wracam na niusy</title><content type='html'>Postanowiłem zacząć znowu czytać niusy, oczywiście RSS dalej traktując jako podstawowe źródło informacji. Ale przeprosiłem się Usenetem i starym dobrym NNTP. Zachęcił mnie do tego występ &lt;a href="http://supergigant.blox.pl"&gt;Michała Rutkowskiego&lt;/a&gt; w telewizorni, przypomniałem sobie jak kiedyś na łamach pl.rec.sport.koszykowka dyskutowaliśmy np. o Timie Duncanie, o którym zresztą MR wczoraj sporo mówił. I od razu włączyłem tina (best ever NNTP reader) i uporządkowałem listę grup. Na razie tylko python, donosy i koszykówka. I już przyniosło to efekty, znalazłem ciekawy link: &lt;a href="http://showmedo.com/videos/python"&gt;Zestaw filmów o Pythonie&lt;/a&gt;, między innymi Django (tylko instalacja). Jest też kilka innych interesujących kategorii.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-5953021209766520439?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5953021209766520439/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5953021209766520439' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5953021209766520439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5953021209766520439'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/06/wracam-na-niusy.html' title='Wracam na niusy'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-7947020158976841114</id><published>2007-06-02T03:32:00.000+02:00</published><updated>2007-06-02T03:33:27.202+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><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='szablony'/><title type='text'>Zaczynam z Django 5 - prawdziwa strona</title><content type='html'>W kolejnym podejściu chcę generować "prawdziwe" strony. Teraz trzeba już wykorzystać system szablonów oferowanych przez Django. W końcu po to on jest. Po to jest on. Z lektury czwartego rozdziału DB dowiedziałem się, że w szablonach: dostęp do zmiennych uzyskuje się poprzez napisanie &lt;code&gt;{{ nazwa_zmiennej }}&lt;/code&gt;, bloki kodu oznaczamy tak &lt;code&gt;{% instrukcje do wykonania %}&lt;/code&gt; i mamy dostęp do filtrów (przy pomocy znaku |, to chyba najciekawszy element) wbudowanych i własnych. Dozwolone sa zarówno bloki kodu z instrukcjami warunkowymi &lt;code&gt;if else endif&lt;/code&gt; jak i pętlami &lt;code&gt;for&lt;/code&gt; (np. &lt;code&gt;{% for category in categories %}&lt;/code&gt;) Wszystkie te możliwości spróbuje sprawdzić i pokazać w najbliższym czasie.&lt;br /&gt;&lt;br /&gt;Kolejna ciekawostka, którą oferują szablony użyte w Django, to możliwość wygenerowania obiektu szablonu poprzez podanie łańcucha znaków zawierającego szablon (oprócz tego oczywiście jest możliwość podania ścieżki do pliku zawierającego szablon, ale to standard). Zaczynam klasyczne testy: &lt;code&gt; ./manage.py shell&lt;/code&gt; a potem: &lt;code&gt;from django.template import Template&lt;/code&gt;, potem &lt;code&gt;t = Template("Jestem {{ nazwisko }}. {{imie}} {{nazwisko}}")&lt;/code&gt; i &lt;code&gt;print t&lt;/code&gt; co spowoduje nam tylko wyświetlenie gdzie znajduje się obiekt t. Z tego co piszą w DB to szablony są prekompilowane do wewnętrznej formy, gotowej do wygenerowania strony. W związku z tym błąd w szablonie (np. &lt;code&gt;t = Template('{% bledna instrukcja %} ')&lt;/code&gt;), objawia się już w momencie powoływania obiektu szablonu do życia.&lt;br /&gt;&lt;br /&gt;Generowanie strony z szablonu odbywa sie w kontekście, który jest reprezentowany przez obiekt klasy &lt;code&gt;Context&lt;/code&gt;. W poniższym kodzie krótka prezentacja (kod przeklejony bezpośrednio z konsoli, uznałem że ta forma prezentacji będzie lepsza, oczywiście wpisujemy to, co jest po dwukropku):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [27]: from django.template import Context,Template&lt;br /&gt;In [28]: t = Template("Jestem {{ nazwisko }}. {{imie}} {{nazwisko}}")&lt;br /&gt;In [29]: c = Context({"nazwisko": "Blond", "imie": "James"})&lt;br /&gt;In [30]: t.render(c)&lt;br /&gt;Out[30]: 'Jestem Blond. James Blond'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Oczywiście warto sprawdzić, co się stanie, jak kontekst nie będzie miał zdefiniowanej jakiejś zmiennej:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [33]: from django.template import Context,Template&lt;br /&gt;In [34]: t = Template("Jestem {{ nazwisko }}.{{imie}}{{nazwisko}}")&lt;br /&gt;In [35]: c = Context({"nazwisko": "Blond"})&lt;br /&gt;In [36]: t.render(c)&lt;br /&gt;Out[36]: 'Jestem Blond.Blond'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Jak widać, nic złego sie nie stało. Wygenerowany został pusty napis. Moim zdaniem, to plus (CakePHP generował, o ile dobrze pamiętam, błąd w takiej sytuacji). Projektant strony może więc ją spokojnie rozszerzać o nowe elementy odwołujące się do jeszcze nie zdefiniowanych zmiennych i nie czekać na programistę.&lt;br /&gt;&lt;br /&gt;Ostatni element w tym wpisie to umożliwienie interaktywnego testowania wielolinijkowych szablonów (informacja przydatna dla tych co wcześniej nie korzystali z Pythona), wielolinijkowe łańcuchy znaków umieszczamy po prostu pomiędzy potrójnymi cudzysłowami &lt;code&gt;"""długi łańcuch"""&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;In [39]: from django.template import Context,Template&lt;br /&gt;In [40]: t = Template("""Jestem {{ nazwisko }}.{{imie}}{{nazwisko}}&lt;br /&gt;   ....: W najnowszym filmie bede mial {{liczbaZyc}} zyc&lt;br /&gt;   ....: Co Ty na to""")&lt;br /&gt;In [42]: c = Context({"nazwisko": "Blond", "imie": "James", "liczbaZyc": 5})&lt;br /&gt;In [43]: t.render(c)&lt;br /&gt;Out[43]: 'Jestem Blond.JamesBlond\nW najnowszym filmie bede mial 5 zyc\nCo Ty na to'&lt;br /&gt; &lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Przykłady zawierają powtórzenia (importy, ponowne definicje obiektów) wyłącznie dla pokazania pełnego obrazu tego co się dzieje w programie. W trakcie jednej sesji oczywiście nie ma potrzeby wielokrotnego importowania klas czy tworzenia tego samego szablonu.&lt;br /&gt;&lt;br /&gt;Czwarty rozdział DjangoBook jest całkiem spory, więc jego zawartość rozciągnie się na kilka wpisów, w których sukcesywnie będę poszerzał informacje o szablonach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-7947020158976841114?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/7947020158976841114/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=7947020158976841114' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7947020158976841114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7947020158976841114'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/06/zaczynam-z-django-5-prawdziwa-strona.html' title='Zaczynam z Django 5 - prawdziwa strona'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-7869208358370968621</id><published>2007-05-15T02:41:00.000+02:00</published><updated>2007-06-02T03:41:16.024+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Zaczynam z Django 4 - pierwsza strona</title><content type='html'>Czas najwyższy, żeby zobaczyć efekty jakiejś własnej pracy, bo jak do tej pory, to głównie automaty wykonywały za mnie wszystkie czynności.&lt;br /&gt;Czas wykorzystać konfiguracje URL-i, którą już raz zmieniałem (plik &lt;code&gt;urls.py&lt;/code&gt;). Pierwsza wprawka w DB (rozdział 3) po uproszczeniu przeze mnie wygląda następująco:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;from django.http import HttpResponse&lt;br /&gt;import datetime&lt;br /&gt;&lt;br /&gt;def current_datetime(request):&lt;br /&gt;    html = "Jest %s" % datetime.datetime.now()&lt;br /&gt;    return HttpResponse(html)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Zapisujemy to do pliku &lt;code&gt;views.py&lt;/code&gt;.&lt;br /&gt;Warto sobie znowu na boku odpalić terminal i &lt;code&gt; ./manage.py shell&lt;/code&gt; a potem: &lt;code&gt;from mdjango.mbegin.views import *&lt;/code&gt;&lt;br /&gt;(wszystkie kolejne sprawdzenia będę najpierw przeprowadzał w konsoli, więc nie będę juz pisał o jej odpalaniu).&lt;br /&gt;Odpalamy &lt;code&gt;current_datetime()&lt;/code&gt;, powinien nam się pojawić błąd. Wynika on z tego, że próbowałem wykorzystać konsolę do wypisania HTTPResponse.&lt;br /&gt;Teraz już zmiana konfiguracji URL-i: dodajemy import pliku z widokami i konfiguracje przekierowania w przypadku wywołania adresu http://localhost:8080/czas/. &lt;br /&gt;plik &lt;code&gt;urls.py&lt;/code&gt; wygląda teraz tak:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;from django.conf.urls.defaults import *&lt;br /&gt;from mdjango.mbegin.views import *&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;     (r'^czas/', current_datetime),&lt;br /&gt;     (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I powoduje pokazanie....błędu. Przy okazji okazuje się jak django pokazuje błedy, jak dla mnie całkiem przejrzyście i tego właśnie bym oczekiwał od informacji o błędzie. Jest stos, jest zapytanie, jest konfiguracja. Chyba nie muszę już pisać o kolejnym plusie. Zauważyłem również możliwość przełączania pomiędzy trybami oglądania informacji o błędzie. Sam błąd to: &lt;code&gt;AttributeError at /czas/ 'function' object has no attribute 'rindex'&lt;/code&gt; oznacza on, że DB jest do przodu w stosunku do mojego Ubuntu. Tak jak napisałem URL-e docelowe, można je pisać dopiero od wersji 0.96 a ja mam 0.95. Na razie daruję sobie podnoszenie wersji (warto znać różne metody obejścia problemu). Rozwiazaniem jest napisanie nazwy funkcji jako stringa poprzedzonego nazwą aplikacji i modułu. Więc ostatecznie wygląda to tak: &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;code&gt;&lt;br /&gt;from django.conf.urls.defaults import *&lt;br /&gt;from mdjango.mbegin.views import *&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;     (r'^czas/', 'mbegin.views.current_datetime'),&lt;br /&gt;     (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Przy okazji upraszczania zrobiłem jeszcze jeden błąd: W ramach upraszczania nie napisałem parametru request dla funkcji current_datetime, jest on oczywiście potrzebny. Po poprawieniu usterek widać skromną, ale własną, pierwszą stronę wykonaną przy uzyciu django. Teraz już pójdzie z górki, ale to już w następnym odcinku. A na dzisiaj ostatni element, żeby mieć poprawny czas, trzeba ustawić &lt;code&gt;TIME_ZONE = 'Europe/Warsaw'&lt;/code&gt; (lub jak kto woli mieć ustawione) w &lt;code&gt;settings.py&lt;/code&gt;, no chyba, że ktoś mieszka w tej samej strefie czasowej co Chicago&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-7869208358370968621?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/7869208358370968621/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=7869208358370968621' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7869208358370968621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7869208358370968621'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/05/zaczynam-z-django-4-pierwsza-strona.html' title='Zaczynam z Django 4 - pierwsza strona'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-5397595936166103698</id><published>2007-05-07T01:13:00.000+02:00</published><updated>2007-05-07T01:15:58.219+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><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='baza danych'/><title type='text'>Zaczynam z Django 3 - baza danych</title><content type='html'>Zaczynam z Django 3&lt;br /&gt;&lt;br /&gt;Jako, że mam już wcześniej przygotowaną bazę danych, to warto byłoby z niej skorzystać. Do tego służy znalezione dopiero w 17 rozdziale DB &lt;code&gt;python mysite/manage.py inspectdb&lt;/code&gt;, warto sobie przejrzeć co się produkuje na ekran, a potem w najprostszy sposób zapisać to do pliku z modelem: &lt;code&gt;./manage.py inspectdb &gt; mbegin/models.py&lt;/code&gt;&lt;br /&gt;(DB: &lt;code&gt;python mysite/manage.py inspectdb &gt; mysite/myapp/models.py&lt;/code&gt;). Generowane jest coś w tym stylu:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Categorie(models.Model):&lt;br /&gt;    id = models.IntegerField(primary_key=True)&lt;br /&gt;    name = models.CharField(maxlength=600)&lt;br /&gt;    description = models.TextField(blank=True)&lt;br /&gt;    class Meta:&lt;br /&gt;        db_table = 'categories'&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Ponieważ tabele miały nazwy przystosowane do innego frameworka, więc ich nazwy są w liczbie mnogiej. Wygląda na to, że Django korzysta z prostej zasady, odejmij od liczby mnogiej 's' i masz liczbę pojedynczą. Nie zawsze się to sprawdza, w DB piszą, żeby przejrzeć i oczyścić wygenerowany model, z pewnością to później uczynię, zgodnie z zasadami podanymi we wspomnianym rozdziale 17. Druga zastanawiająca rzecz, to wartość maxlength (w bazie pola są varchar(200) a w modelu 600), trzeba będzie doczytać o sposobie kodowania znaków. Niestety bezpośrednio w DB nic na ten temat nie piszą.&lt;br /&gt;Żeby sprawdzić, czy model działa można skorzystać z &lt;code&gt; ./manage.py shell&lt;/code&gt;. Jeżeli wcześniej zainstalowaliśmy sobie IPythona, to mamy w tej chwili całkiem sympatyczne środowisko pracy z bazą danych, a właściwie z jej modelem. Śmiem przypuszczać, że będzie to też dobre miejsce do np. uruchamiania unit testów. Żeby skorzystać z modelu jakiejś tabeli, starczy wpisać &lt;code&gt;from project.app.models import nazwa_modelu&lt;/code&gt; czyli na przykład&lt;code&gt;from mdjango.mbegin.models import Categorie&lt;/code&gt;, a później już można &lt;code&gt;Categorie.objects.values()&lt;/code&gt; (wartości z rekordów), albo &lt;code&gt;Categorie.objects.count()&lt;/code&gt; (liczba rekordów). Kolejny duży plus dla Django, można sprawdzić od razu jak działa model, zanim go użyjemy w aplikacji. Na razie phpmyadmina użyłem tylko do sprawdzenia, czy model się zgadza, większość potrzebnych operacji można teraz z poziomu powłoki wykonać, mając pewność, że jest się podłączonym do właściwej bazy itp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-5397595936166103698?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/5397595936166103698/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=5397595936166103698' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5397595936166103698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/5397595936166103698'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/05/zaczynam-z-django-3-baza-danych.html' title='Zaczynam z Django 3 - baza danych'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-7939943761222506965</id><published>2007-05-04T02:35:00.000+02:00</published><updated>2007-05-04T02:40:38.345+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Zaczynam z Django 2</title><content type='html'>Jedziemy dalej, zgodnie z tym co napisane na utworzonej wcześniej (http://piotrbla.blogspot.com/2007/05/zaczynam-z-django.html) stronie projektu. W pliku settings.py ustawiamy fragment dotyczący bazy danych (od &lt;code&gt;DATABASE_ENGINE&lt;/code&gt; do &lt;code&gt;DATABASE_PORT&lt;/code&gt;. Dwa ostatnie, na czas testów, można zostawić puste. Przy okazji warto zauważyć, że plik z ustawieniami to źródła w Pythonie, więc obowiązują wszystkie reguły języka. Dzięki temu piszemy też cały czas w jednym języku. Oprócz bazy danych ustawiam też dane administratora.&lt;br /&gt;&lt;br /&gt;Po ustawieniu bazy danych generujemy pierwszą aplikację: &lt;code&gt;./manage.py startapp mbegin&lt;/code&gt; (na wygenerowanej stronie projektu: &lt;code&gt;python mdjango/manage.py startapp [appname]&lt;/code&gt;). Powstaje katalog (u mnie &lt;code&gt;mbegin&lt;/code&gt;) w którym są puste pliki dla modeli i widoków (&lt;code&gt;models.py i views.py&lt;/code&gt;). Przy generacji mały problem z kodowaniem pliterek w nazwisku administratora, na razie odpuszczam (rezygnuje z pliterek), jak później będzie trzeba to zgłębię temat.&lt;br /&gt;&lt;br /&gt;Kolejną rzeczą dającą szybkie efekty jest panel administratora (mały chwilowy przeskok do 6 rozdziału DB). W pliku &lt;code&gt;settings.py&lt;/code&gt;  w sekcji &lt;code&gt;INSTALLED_APPS&lt;/code&gt; dodajemy wpis &lt;code&gt;'django.contrib.admin',&lt;/code&gt; później uruchamiamy &lt;code&gt;./manage.py syncdb&lt;/code&gt; (DB: &lt;code&gt;python manage.py syncdb&lt;/code&gt;) co powoduje wygenerowanie tabel administracyjnych w bazie danych. Przy pytaniu o superusera warto od razu go utworzyć (później robi się to według DB przy pomocy skryptu &lt;code&gt;/django/contrib/auth/create_superuser.py&lt;/code&gt;. Ja przy pomocy &lt;code&gt;locate create_superuser.py&lt;/code&gt; znalazłem ten skrypt w następujących lokalizacjach:&lt;br /&gt;&lt;code&gt;/var/lib/python-support/python2.4/django/contrib/auth/create_superuser.py&lt;br /&gt;/var/lib/python-support/python2.5/django/contrib/auth/create_superuser.py&lt;br /&gt;/usr/share/python-support/python-django/django/contrib/auth/create_superuser.py&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Według DB trzecim etapem generowania panelu jest dopisanie do pliku &lt;code&gt;urls.py&lt;/code&gt; (w projekcie) &lt;blockquote&gt;&lt;code&gt;urlpatterns = patterns('',&lt;br /&gt;  (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;)&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;a w moim przypadku było to odkomentowanie tej linijki w rzeczonym pliku. Próbuję sprawdzić, stwierdzam, że niepotrzebnie wcześniej restartowałem mini serwer (zmiany pojawiają się od razu po nagraniu pliku). Niestety (jednak to jakoś przeżyję) nowe zmiany spowodowały, że dotychczasowa strona główna zgłasza błąd (w tym miejscu warto zauważyć, że wszystkie komunikaty o Django jakie do tej pory widziałem prowadziły do rozwiązania). Działa natomiast podstrona &lt;code&gt;/admin&lt;/code&gt;&lt;br /&gt;&lt;a href="http://localhost:8080/admin/"&gt;http://localhost:8080/admin/&lt;/a&gt; logujemy się, i ukazuje się w pełni GOTOWA estetyczna strona administracyjna, z możliwościami przeglądania i filtrowania danych, dodawania grup, użytkowników itp. Innymi słowy, coś co powinno być wszędzie.&lt;br /&gt;&lt;br /&gt;Podstawy zarządzania użytkownikami mam całkowicie z głowy, co w porównaniu z innymi frameworkami znowu wygląda obiecująco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-7939943761222506965?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/7939943761222506965/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=7939943761222506965' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7939943761222506965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/7939943761222506965'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/05/zaczynam-z-django-2.html' title='Zaczynam z Django 2'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-8857292457939570092</id><published>2007-05-04T01:29:00.001+02:00</published><updated>2007-05-04T01:31:09.042+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Zaczynam z Django</title><content type='html'>Zacząłem właśnie próbować użyć django, o którym tak wiele dobrego się naczytałem (choćby &lt;a href="http://blog.zabiello.com/articles/category/django"&gt;tutaj&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Chciałbym przy pomocy django zrealizować jeden mały, ciekawy i innowacyjny projekt, o którym myślę od dawna. Jak django będzie współpracował, to czekają już kolejne pomysły.&lt;br /&gt;&lt;br /&gt;Taka ciekawostka: przy okazji rozmowy o django, wyszedł jak zwykle problem wymowy. Dobrze poinformowane źródła mówią, że mówi się dżangoh (bezdźwięczne d, oh przechodzące w oł ;) ).&lt;br /&gt;&lt;br /&gt;Jako towarzysza wędrówki wybrałem: &lt;a href="http://www.djangobook.com/en/beta/"&gt;DjangoBook&lt;/a&gt;, rozwiązań problemów będę poszukiwał najpierw w tej dostepnej na &lt;a href="http://www.djangobook.com/license/"&gt;licencji GNU książce&lt;/a&gt;. Na chwilę obecną jeszcze nie wszystkie jej rozdziały są napisane (większość jest), więc czasami trzeba będzie wesprzeć się wyszukiwarką.&lt;br /&gt;&lt;br /&gt;Zestaw startowy już mam: Linux (Ubuntu DD-&gt;EE-&gt;FF), Python, Django, Mysql. Wszystko do znalezienia w synapticu. Oczywiście można używać django z innymi popularnymi bazami danych (jak i bez żadnej bazy, co też kiedyś zweryfikuje). W DjangoBooku (&lt;span style="font-weight:bold;"&gt;dalej DB&lt;/span&gt;) piszą, żeby sprawdzić czy ma się mysql-python, ja mam w Ubuntu python-mysqldb i wygląda, że to właśnie ten pakiet. Dodatkowo oczywiście warto sprawdzić czy działa phpmyadmin (niestety, na chwilę obecną pod Linuksa brak IMHO lepszego narzędzia, można jeszcze z kexi próbować).&lt;br /&gt;&lt;br /&gt;Warto wspomnieć przy okazji o mojej znajomości Pythona. Napisałem kilka (naprawdę kilka) skryptów (wielkości, jak ja to mówie, ekranu). Trochę czytałem o języku (w tym jedną średniej wielkości książkę), interesuje się nim od dawna. Zawodowo programowałem jednak zawsze w innych językach. To co _mi_ w Pythonie podoba się najbardziej to załączone bateryjki i wymuszanie wcięć (jak ktoś poprowadzi zajęcia z programowania dla poczatkujących w jakimkolwiek języku C-podobnym, to będzie wiedział, dlaczego to jest plus języka). Znajomość Django: słyszałem, że dobry i nic więcej. Czyli: Python 4/10, Django 1/10.&lt;br /&gt;&lt;br /&gt;Bazę danych do mojego projektu mam juz prawie gotową, więc raczej nie będę się nad nią specjalnie pochylał.&lt;br /&gt;&lt;br /&gt;Na początek w terminalu przechodzimy do swojego katalogu ze stronami (u mnie public_html i piszemy: &lt;code&gt;django-admin startproject mdjango&lt;/code&gt; (w DB piszą: &lt;code&gt;django-admin.py startproject mysite&lt;/code&gt;, ale instalacja django z pakietu dodała gdzieś elegancko skrypt i wie, że to pythonem się uruchamia). Z tego co na chwilę obecną wiem, Django może przechowywać kilka aplikacji w jednym projekcie.&lt;br /&gt;Projekt przechowuje ustawienia bazy danych, opcji Django i aplikacji.&lt;br /&gt;Powstają następujące pliki:  &lt;code&gt;__init__.py, manage.py, settings.py, urls.py&lt;/code&gt;.&lt;br /&gt;Jak będą potrzebne to napiszę do czego służą.&lt;br /&gt;Tak powstałą stronę można od razu sprawdzić przy pomocy wbudowanego mini serwera http. Wystarczy go uruchomić (w katalogu mdjango): &lt;code&gt;./manage.py runserver&lt;/code&gt; (znowu DB podaje dłuższą wersję: &lt;code&gt;python manage.py runserver&lt;/code&gt;). Ja akurat mam domyślny port (8000) zajęty, więc dostaje błąd: Error: That port is already in use. Port zmienia się trywalnie: &lt;code&gt;./manage.py runserver 8080&lt;/code&gt; (DB: &lt;code&gt;python manage.py runserver 8080&lt;/code&gt;). Po wejściu na &lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt; widzimy od razu działającą stronę projektu ze wskazówkami. Czas na pierwszą ocenę: z kilku przeze mnie wypróbowanych frameworków (w tym RoR i CakePHP) Django na tym etapie wygrywa, czas dojścia do tego punktu był po prostu najkrótszy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-8857292457939570092?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/8857292457939570092/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=8857292457939570092' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8857292457939570092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8857292457939570092'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/05/zaczynam-z-django.html' title='Zaczynam z Django'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-8632206959927822797</id><published>2007-03-21T23:45:00.000+01:00</published><updated>2007-03-26T00:43:59.195+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='skrypty'/><title type='text'>Kasowanie kopii zapasowych plików</title><content type='html'>Wiadomo, żeby usunąć pliki '*~' zawierające kopie zapasowe w jakimś katalogu piszemy &lt;code&gt;rm *~ .*~&lt;/code&gt;, niektórzy lubią napisać jeszcze -Rf. Nie skasuje to nam jednak plików kopii zapasowych w podkatalogach. Żeby to wykonać, można użyć takiego magicznego polecenia:&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;code&gt;&lt;span style="font-weight: bold;"&gt;find ./ -name '*~' | xargs rm -r&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Można się tego nauczyć na pamięć, ale oczywiście warto sobie przygotować skrypcik o powyższej treści np. o nazwie rmbak (i przy pomocy polecenia &lt;code&gt;chmod +x rmbak&lt;/code&gt; nadac mu atrybut wykonywalności). Dobrze jest tego typu skrypty umieszczać w katalogu ~/bin . Jeżeli programiki tam umieszczone nie uruchamiają się, należy do pliku ~/.bashrc  (ewentualnie jak potrzebujemy to do ~/.bash_profile) dodać taki wpis:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;if [ -d ~/bin ] ; then&lt;br /&gt;PATH="${PATH}":&lt;/code&gt;&lt;code&gt;~/bin&lt;/code&gt;&lt;br /&gt;&lt;code&gt;fi&lt;/code&gt;&lt;/blockquote&gt;Próba kasowania w katalogu, który nie zawiera żadnych plików tymczasowych kończy się komunikatem: &lt;code&gt;rm: missing operand&lt;/code&gt;, ja go traktuje jako informację, że nie było nic do skasowania. Jeżeli komuś to nie pasuje, to wystarczy dodać opcję -f(orce), czyli polecenie będzie wyglądać tak: &lt;span style="font-size:130%;"&gt;&lt;code&gt;&lt;span style="font-weight: bold;"&gt;find ./ -name '*~' | xargs rm -rf&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-8632206959927822797?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/8632206959927822797/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=8632206959927822797' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8632206959927822797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/8632206959927822797'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/03/kasowanie-kopii-zapasowych-plikw.html' title='Kasowanie kopii zapasowych plików'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-2048512891828416518</id><published>2007-03-12T00:26:00.000+01:00</published><updated>2007-03-12T00:33:54.524+01:00</updated><title type='text'>Blogowanie</title><content type='html'>Zaczynam blogować. Wszyscy to robią, to mi też wolno czasem popisać. O czym? O wszystkim co podleci. Przede wszystkim ciekawe znaleziska z sieci, trochę programowanie, Linux i inne nerdowskie tematy. Czasem o polityce i rzetelności dziennikarskiej, a raczej jej braku, może o tematach społecznych.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-2048512891828416518?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/2048512891828416518/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=2048512891828416518' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2048512891828416518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/2048512891828416518'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2007/03/blogowanie.html' title='Blogowanie'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10764524.post-110811217429978541</id><published>2005-02-11T09:56:00.000+01:00</published><updated>2005-11-27T20:54:02.433+01:00</updated><title type='text'>Linki</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10764524-110811217429978541?l=piotrbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://piotrbla.blogspot.com/feeds/110811217429978541/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10764524&amp;postID=110811217429978541' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/110811217429978541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10764524/posts/default/110811217429978541'/><link rel='alternate' type='text/html' href='http://piotrbla.blogspot.com/2005/02/linki.html' title='Linki'/><author><name>Piotr Błaszyński</name><uri>https://profiles.google.com/108388794896813016137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-1ifRIyQkqpg/AAAAAAAAAAI/AAAAAAAADIE/Ix6KSD1srog/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
