<?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-1128196143518613867</id><updated>2011-11-18T05:56:14.660+01:00</updated><category term='paranormal activity'/><category term='matematyka'/><category term='fotografia'/><category term='historia'/><category term='www'/><category term='Kraków'/><category term='muzyka'/><category term='python'/><category term='Krynica'/><category term='C'/><category term='studia'/><category term='Bochnia'/><category term='BSD'/><category term='programowanie'/><category term='hardware'/><title type='text'>internetowy śmietniczek kj</title><subtitle type='html'>czyli co w obiektywie piszczy i w komputerze szumi</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-7190910616334649511</id><published>2011-02-19T00:02:00.002+01:00</published><updated>2011-02-19T00:05:30.997+01:00</updated><title type='text'>Z cyklu tajemnice tego świata: karty SD</title><content type='html'>Udało mi się dzisiaj dowiedzieć, czemu karty pamięci Kingstona są tak dobrze wspierane. Otóż producent udostępnia ich specyfikację na swojej stronie za darmo wbrew oficjalnej organizacji (zwanej szumnie SD Association) pobierającej za świadczenie uprzejmości dostępu do dokumentacji drobne 1000 USD rocznie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-7190910616334649511?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/7190910616334649511/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2011/02/z-cyklu-tajemnice-tego-swiata-karty-sd.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7190910616334649511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7190910616334649511'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2011/02/z-cyklu-tajemnice-tego-swiata-karty-sd.html' title='Z cyklu tajemnice tego świata: karty SD'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3145170796908892510</id><published>2010-08-18T20:09:00.004+02:00</published><updated>2010-08-18T20:13:27.051+02:00</updated><title type='text'>Niech ich szlag!</title><content type='html'>Znowu o muzyce, a raczej o jej braku. Wchodząc sobie na filmik (raczej slajdowisko z muzyką) na YouTube, umieszczony pod adresem: &lt;a href="http://www.youtube.com/watch?v=YGRO05WcNDk"&gt;YouTube&lt;/a&gt; otrzymałem informację:&lt;br /&gt;&lt;br /&gt;"Ten film wideo zawiera treść od partnera Sony Music Entertainment, który zablokował go w Twoim kraju na mocy praw autorskich."&lt;br /&gt;&lt;br /&gt;Teraz puenta: powyższy link prowadzi do nagrania Nokturnu Es-dur op.9 cz. 2 autorstwa Polaka - Fryderyka Chopina, wykonywanego przez innego Polaka (pochodzenia żydowskiego) - Artura Rubinsteina, a ja siedzę sobie przed komputerem w Polsce i czytam, że banda Japończyków mi odcięła dostęp do tej muzyki.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3145170796908892510?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3145170796908892510/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/08/niech-ich-szlag.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3145170796908892510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3145170796908892510'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/08/niech-ich-szlag.html' title='Niech ich szlag!'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-2566723794737079903</id><published>2010-07-24T15:34:00.003+02:00</published><updated>2010-07-24T16:15:09.384+02:00</updated><title type='text'>Wydajność Django</title><content type='html'>Najwyższa pora zastanowić się, jak to jest z tą wydajnością w Django. Dla przykładu stworzymy sobie prostą aplikację, która będzie miała za zadanie jedynie generować tymczasowe dane. Dla ułatwienia generujemy tylko i wyłącznie prosty kod html, bez korzystania z szablonów. Naszym celem będzie sprawdzenie wydajności samego Pythona w charakterze szybkości obsługi żądania, wpływ zapytań do bazy danych na wydajność, a wreszcie - przyspieszenie dzięki użyciu memcache. Testy przeprowadzimy na serwerze www wbudowanym do Django. Będziemy mierzyli parametry pracy Django dla 1000 zapytań.&lt;br /&gt;&lt;br /&gt;Zadanie 1: widok zwracający statyczny html. Kod funkcji:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def test(request):&lt;br /&gt;        return HttpResponse('&amp;lt;html&amp;gt;Hello!&amp;lt;/html&amp;gt;')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Uruchamiamy serwer oraz testujemy:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total transferred:      152000 bytes&lt;br /&gt;HTML transferred:       19000 bytes&lt;br /&gt;Requests per second:    &lt;strong&gt;961.41&lt;/strong&gt; [#/sec] (mean)&lt;br /&gt;Time per request:       &lt;strong&gt;1.040&lt;/strong&gt; [ms] (mean)&lt;br /&gt;Time per request:       1.040 [ms] (mean, across all concurrent requests)&lt;br /&gt;Transfer rate:          142.71 [Kbytes/sec] received&lt;br /&gt;&lt;br /&gt;Connection Times (ms)&lt;br /&gt;              min  mean[+/-sd] median   max&lt;br /&gt;Connect:        0    0   0.0      0       0&lt;br /&gt;Processing:     1    1   0.8      1      22&lt;br /&gt;Waiting:        0    1   0.8      1      21&lt;br /&gt;Total:          1    1   0.8      1      22&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wydajność rzędu ok. 960 req/s jest jak najbardziej dobra. Dla porównania, serwer bochnianin.pl nie wytrzymała najazdu 60000 wejść na dobę (przy założeniu, że ruch koncentruje się max. 8h w ciągu doby, daje to zaledwie ~3 req/s). Jesteśmy zatem 300x do przodu.&lt;br /&gt;&lt;br /&gt;Zadanie 2: Widok odwołujący się do bazy danych (jedno zapytanie). Kod funkcji:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def test(request):&lt;br /&gt;        wal = Waluta.objects.get(pk='USD')&lt;br /&gt;        return HttpResponse('&amp;lt;html&amp;gt;Hello! - %s&amp;lt;/html&amp;gt;' % wal.nazwa)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total transferred:      173000 bytes&lt;br /&gt;HTML transferred:       40000 bytes&lt;br /&gt;Requests per second:    &lt;strong&gt;130.48&lt;/strong&gt; [#/sec] (mean)&lt;br /&gt;Time per request:       &lt;strong&gt;7.664&lt;/strong&gt; [ms] (mean)&lt;br /&gt;Time per request:       7.664 [ms] (mean, across all concurrent requests)&lt;br /&gt;Transfer rate:          22.04 [Kbytes/sec] received&lt;br /&gt;&lt;br /&gt;Connection Times (ms)&lt;br /&gt;              min  mean[+/-sd] median   max&lt;br /&gt;Connect:        0    0   0.0      0       1&lt;br /&gt;Processing:     6    8   1.4      7      19&lt;br /&gt;Waiting:        4    7   1.4      7      18&lt;br /&gt;Total:          6    8   1.4      7      19&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ilość obsłużonych żądań na sekundę spadła z magicznych okolic 960 req/s do ok. 130 req/s, co jest jednak nadal bardzo dobrym rezultatem. Pamiętajmy jednak, że jest to wynik dla zaledwie jednego prostego zapytania. Teraz będzie ciut trudniej - w kolejnym przykładzie zapytań będzie więcej, a także dojdzie łączenie relacją typu wiele-do-wielu. Zobaczmy, jak sprawdzi się Django.&lt;br /&gt;&lt;br /&gt;Zadanie 3: Widok pobierający z bazy danych więcej informacji, łączenie wiele-do-wielu. Kod funkcji:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def test(request):&lt;br /&gt;        wal = Waluta.objects.get(pk='USD')&lt;br /&gt;        wartosc = WartoscWaluty.objects.get(waluta=wal)&lt;br /&gt;        kurs = wartosc.kurs&lt;br /&gt;        return HttpResponse('&amp;lt;html&amp;gt;Hello! - %s&amp;lt;/html&amp;gt;' % kurs)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wyniki:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total transferred:      182000 bytes&lt;br /&gt;HTML transferred:       49000 bytes&lt;br /&gt;Requests per second:    &lt;strong&gt;91.41&lt;/strong&gt; [#/sec] (mean)&lt;br /&gt;Time per request:       &lt;strong&gt;10.940&lt;/strong&gt; [ms] (mean)&lt;br /&gt;Time per request:       10.940 [ms] (mean, across all concurrent requests)&lt;br /&gt;Transfer rate:          16.25 [Kbytes/sec] received&lt;br /&gt;&lt;br /&gt;Connection Times (ms)&lt;br /&gt;              min  mean[+/-sd] median   max&lt;br /&gt;Connect:        0    0   0.0      0       0&lt;br /&gt;Processing:     9   11   1.4     11      25&lt;br /&gt;Waiting:        8   10   1.3     10      24&lt;br /&gt;Total:          9   11   1.4     11      25&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Zwiększenie ilości zapytań do bazy danych spowolniło działanie aplikacji o ok. 40 reg/s. Czy to dużo? Dla porównania - standardowo Wordpress generuje ok. &lt;a href="http://blog.sweetnam.eu/2007/11/07/supercache-eaccelerator-and-wordpress-benchmarks/"&gt;6 req/s&lt;/a&gt;. Pamiętajmy jednak, że w naszym przypadku serwujemy bardzo mało danych, a sama aplikacja jest niezwykle prymitywna, nieporównywalna rozmiarowo z Wordpressem.  W podanym przeze mnie linku, autor chwali się, że dzięki użyciu mechanizmu cache, udało mu się przyspieszyć aplikację do ok. 395 req/s. Spróbujmy i my. Użyjemy Memcache.&lt;br /&gt;&lt;br /&gt;Zadanie 4: Dodajemy cache. Kod funkcji:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@cache_page(60*15)&lt;br /&gt;def test(request):&lt;br /&gt;        wal = Waluta.objects.get(pk='USD')&lt;br /&gt;        wartosc = WartoscWaluty.objects.get(waluta=wal)&lt;br /&gt;        kurs = wartosc.kurs&lt;br /&gt;        return HttpResponse('&amp;lt;html&amp;gt;Hello! - %s&amp;lt;/html&amp;gt;' % kurs)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cache ustawiony jest na 15 minut. Test:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total transferred:      338000 bytes&lt;br /&gt;HTML transferred:       49000 bytes&lt;br /&gt;Requests per second:    &lt;strong&gt;605.64&lt;/strong&gt; [#/sec] (mean)&lt;br /&gt;Time per request:       &lt;strong&gt;1.651&lt;/strong&gt; [ms] (mean)&lt;br /&gt;Time per request:       1.651 [ms] (mean, across all concurrent requests)&lt;br /&gt;Transfer rate:          199.91 [Kbytes/sec] received&lt;br /&gt;&lt;br /&gt;Connection Times (ms)&lt;br /&gt;              min  mean[+/-sd] median   max&lt;br /&gt;Connect:        0    0   0.0      0       0&lt;br /&gt;Processing:     1    2   1.2      1      33&lt;br /&gt;Waiting:        1    1   1.2      1      32&lt;br /&gt;Total:          1    2   1.2      1      33&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wróciliśmy do trzycyfrowego wyniku, osiągając wynik ponad 605 req/s! To ponad 200 req/s szybciej niż najbardziej przyspieszony Wordpress. Kluczowe pytanie: czy my tak naprawdę potrzebujemy aż tak szybkiego softu? Policzmy, zakładając, że serwujemy 8 godzin na dobę naszą stronę z maksymalną szybkością 605 req/s, to w ciągu miesiąca (30 dni) mamy: 522720000 (słownie: pół miliarda) wejść na miesiąc! Sądzę, że taką wydajność muszą mieć serwisy kalibru YouTube. Jeśli zaś nie użyjemy mechanizmu cache i spróbujemy działać przy szybkości 80 req/s, to okaże się, że nadal możemy obsługiwać ilość wejść na poziomie 69120000 (czyli ponad 69 milionów odsłon), co nadal jest doskonałym wynikiem.&lt;br /&gt;&lt;br /&gt;Konkluzja: dla szybkości działania serwisu, oprócz sprawności samego oprogramowania generującego kod html ważna jest także przepustowość łącz, efektywność baz danych, siedzących "pod spodem" oraz specyfika systemu operacyjnego, na którym to wszystko działa. Mój mały test pokazuje tylko zmiany wydajności frameworka Django w zależności od ilości zapytań do bazy danych oraz zastosowanych optymalizacji. W zestawieniu [jak dla mnie] brakuje tylko jednego elementu: testu wydajności Django, uruchomionego na interpreterze pochodzącym z projektu unladen-swallow. Wtedy też otrzymalibyśmy miarodajne przełożenie w postaci wzrostu [lub spadku ;)] ilości obsłużonych żądań na sekundę.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-2566723794737079903?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/2566723794737079903/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/07/wydajnosc-django.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2566723794737079903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2566723794737079903'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/07/wydajnosc-django.html' title='Wydajność Django'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3608309697597960376</id><published>2010-07-04T11:30:00.004+02:00</published><updated>2010-07-04T12:36:40.225+02:00</updated><title type='text'>Python - problemy</title><content type='html'>Tym razem kilka słów o niedoskonałościach Pythona, które powodują, że zostaje on nieco w tyle za chociażby Javą. Zacznijmy od tego, że Java dysponuje bardzo zaawansowaną maszyną wirtualną. Umożliwia ona współbieżne wykonywanie kilku wątków. Dla przykładu zademonstruję program, który zgodnie z wszelaką logiką powinien wykonywać się współbieżnie. Zakładamy, że oba wątki nie korzystają ze wspólnych danych i nie potrzebujemy tutaj żadnych blokad, które mogłyby być przeszkodą do wykonywania współbieżnego.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;from threading import Thread&lt;br /&gt;&lt;br /&gt;class moj_watek(Thread):&lt;br /&gt;        def __init__(self):&lt;br /&gt;                Thread.__init__(self)&lt;br /&gt;&lt;br /&gt;        def run(self):&lt;br /&gt;                a = 1&lt;br /&gt;                while(1): a+=a/2&lt;br /&gt;&lt;br /&gt;watek = moj_watek()&lt;br /&gt;watek.start()&lt;br /&gt;b = 1&lt;br /&gt;while 1: b+=b/2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Po uruchomieniu programu chcielibyśmy, aby nasz kod był równolegle wykonywany na dwóch procesorach (tyle mam w laptopie). Przypatrzmy się zatem, co się dzieje w komputerze po uruchomieniu programu:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/TDBZotROKqI/AAAAAAAAAXU/jOGn4axYnQg/s1600/blog.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;border:5px solid #f0f0f0" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/TDBZotROKqI/AAAAAAAAAXU/jOGn4axYnQg/s1600/blog.png" alt=""id="BLOGGER_PHOTO_ID_5489986501646101154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Widzimy, że procesory są używane tylko w ok. 50%, chociaż dwa wątki powinny zajmować cały czas obu procesorów. Dlaczego? Python ma w sobie wbudowaną blokadę - tzw. Global Interpreter Lock (&lt;a href="http://pl.wikipedia.org/wiki/GIL"&gt;GIL&lt;/a&gt;). Dobry opis tego problemu w języku polskim można znaleźć tutaj: &lt;a href="http://www.rwdev.eu/articles/gil"&gt;"Python, wątki i GIL. Fakty i mity."&lt;/a&gt;&lt;br /&gt;Problem jest o tyle poważny, że obecnie współbieżność programów w Pythonie uzyskuje się tworząc wiele procesów. Oczywiście ten sposób jest bardzo uciążliwy (powolność IPC, problem z przekazywaniem otwartych deskryptorów gniazd i plików etc.). Jednym z celów wersji 3.2 jest zmodyfikowanie GIL-a tak, aby zamiast zliczania instrukcji kodu bajtowego Pythona opierała się na pomiarze czasu, co pozwoliłoby uniknąć problemów opisanych tutaj: &lt;a href="http://www.dabeaz.com/python/GIL.pdf"&gt;Inside the Python GIL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Z drugiej strony mamy jeszcze inne implementacje Pythona niż standardowy CPython. Warto tutaj wspomnieć o Jythonie, czyli o implementacji Pythona w Javie. Tutaj wielowątkowość w żaden sposób nie jest problematyczna, a pojęcie globalnej blokady interpretera fizycznie nie istnieje. &lt;br /&gt;&lt;br /&gt;Jeszcze jedna sprawa. Python po kilkunastu latach istnienia doczekał się w końcu własnego JIT-a, bazującego na LLVM. W wersji 3.3 wysiłki projektu &lt;a href="http://code.google.com/p/unladen-swallow"&gt;Unladen Swallow&lt;/a&gt; zostaną zintegrowane z oryginalnym CPythonem. Dokładny opis zamieszczony jest tutaj: &lt;a href="http://www.python.org/dev/peps/pep-3146/"&gt;integracja Unladen Swallow&lt;/a&gt;. Co prawda nie osiągnięto założonego, pięciokrotnego przyspieszenia, jednak sami autorzy przyznają, że potencjał technologii JIT jest tak duży, że nawet nie zbliżyli się do jej pełnego wykorzystania. Miejmy więc nadzieję, że wysiłek pracowników Google, autorów LLVM oraz twórców Pythona pozwoli w końcu mocno przyspieszyć ten jakże efektywny dla programisty język.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3608309697597960376?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3608309697597960376/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/07/python-problemy.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3608309697597960376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3608309697597960376'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/07/python-problemy.html' title='Python - problemy'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_y5n6mbWJAwg/TDBZotROKqI/AAAAAAAAAXU/jOGn4axYnQg/s72-c/blog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-4378479018901027852</id><published>2010-06-04T16:29:00.002+02:00</published><updated>2010-06-04T16:38:28.598+02:00</updated><title type='text'>Profiler dla Pythona</title><content type='html'>Dzisiaj nieco tekstu technicznego. W swojej pracy miałem styczność z jboss-profilerem, czyli programem napisanym w Javie, a umożliwiającym podgląd efektywności napisanego kodu. Profiler ten, oprócz standardowych informacji o czasie wykonywania poszczególnych funkcji udostępniał dane o ilości alokacji poszczególnych obiektów. W Pythonie mamy co prawda cProfiler, który także generuje dane o czasach wykonania poszczególnych funkcji, jednak nie udostępnia on informacji o ilości instancji danego obiektu oraz rozmiarze pamięci zajmowanej przez obiekt. Oto moje rozwiązanie, czyli profiler monitorujący za pomocą modułu Garbage Collectora liczbę zaalokowanych i nie zwolnionych obiektów w pamięci:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import sys&lt;br /&gt;import os&lt;br /&gt;import gc&lt;br /&gt;import types&lt;br /&gt;import inspect&lt;br /&gt;import atexit&lt;br /&gt;&lt;br /&gt;def check_allocations():&lt;br /&gt;    dt = {}&lt;br /&gt;    #gc.collect() jeśli byśmy chcieli info tylko o obiektach żyjących&lt;br /&gt;    for obj in gc.get_objects():&lt;br /&gt;        try:&lt;br /&gt;            if dt.has_key(obj.__class__.__name__):&lt;br /&gt;                instances,number,size,typ,bi,module = dt[obj.__class__.__name__]&lt;br /&gt;                number+=1&lt;br /&gt;                size+=sys.getsizeof(obj)&lt;br /&gt;                if obj not in instances:&lt;br /&gt;                    instances.append(obj)&lt;br /&gt;                dt[obj.__class__.__name__] = (instances,number,size,typ,bi,module)&lt;br /&gt;            else:&lt;br /&gt;                dt[obj.__class__.__name__] = ([obj],1,sys.getsizeof(obj),type(obj),inspect.isbuiltin(obj),obj.__module__)&lt;br /&gt;        except AttributeError as e:&lt;br /&gt;            pass&lt;br /&gt;    return dt&lt;br /&gt;&lt;br /&gt;def run():&lt;br /&gt;    data = check_allocations()&lt;br /&gt;    print '\n\nCurrent allocations'&lt;br /&gt;    print '\t%40s | %9s | %9s bytes | &lt;&lt;%s&gt;&gt;' % ('Class name', 'number', 'size', 'module')&lt;br /&gt;    print '\t-----------------------------------------------------------------------------------'&lt;br /&gt;    for key in data:&lt;br /&gt;        instcs,number,size,typ,bi,module = data[key]&lt;br /&gt;        if module == '__main__':&lt;br /&gt;            print '\t%-40.40s | %9d | %9d bytes | &lt;&lt;%s&gt;&gt;' % (key, number, size, module)&lt;br /&gt;            for inst in instcs:&lt;br /&gt;                print '\t    -&gt; %14.14s 0x%016x | %9s | %9s bytes | &lt;&lt;%s&gt;&gt;' % ('id', id(inst),' ',sys.getsizeof(inst),'---')&lt;br /&gt;&lt;br /&gt;    print gc.garbage&lt;br /&gt;    print '\n\n'&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;    import os, sys&lt;br /&gt;    from optparse import OptionParser&lt;br /&gt;    usage = "profiler.py scriptfile"&lt;br /&gt;    parser = OptionParser(usage=usage)&lt;br /&gt;    parser.allow_interspersed_args = False&lt;br /&gt;    &lt;br /&gt;    if not sys.argv[1:]:&lt;br /&gt;        parser.print_usage()&lt;br /&gt;        sys.exit(2)&lt;br /&gt;    (options,args) = parser.parse_args()&lt;br /&gt;&lt;br /&gt;    sys.argv[:] = args&lt;br /&gt;&lt;br /&gt;    if len(sys.argv) &gt; 0:&lt;br /&gt;        import __main__&lt;br /&gt;        dict = __main__.__dict__&lt;br /&gt;        &lt;br /&gt;        sys.path.insert(0, os.path.dirname(sys.argv[0]))&lt;br /&gt;        gc.set_threshold(0)&lt;br /&gt;        gc.set_debug(gc.DEBUG_SAVEALL)&lt;br /&gt;        try:&lt;br /&gt;            exec 'execfile(%r)' % sys.argv[0] in dict, dict&lt;br /&gt;        except KeyboardInterrupt as ki:&lt;br /&gt;            pass&lt;br /&gt;        atexit.register(run)&lt;br /&gt;    else:&lt;br /&gt;        parser.print_usage()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    main()        &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Kompletny kod jest dostępny &lt;a href="http://kjopek.w.ds14.agh.edu.pl/profiler.txt"&gt;tutaj&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Powyższy kod ma obecnie tylko i wyłącznie wartość demonstracyjną, może służyć do badania małych skryptów. Jeśli chcielibyśmy podglądać większe programy, warto w funkcji run ustawić filtrowanie modułów na te, które chcemy monitorować.&lt;br /&gt;&lt;br /&gt;Korzystanie z mojego profilera jest analogiczne do tego z cProfilera:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;python -m profiler monitorowany_skrypt.py&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Miłego korzystania ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-4378479018901027852?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/4378479018901027852/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/06/profiler-dla-pythona.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4378479018901027852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4378479018901027852'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/06/profiler-dla-pythona.html' title='Profiler dla Pythona'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-2206757385134361482</id><published>2010-01-02T23:09:00.002+01:00</published><updated>2010-01-02T23:10:04.885+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Bochnia'/><title type='text'>Zachód słońca nad Bochnią</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/Sz_EMCLXn3I/AAAAAAAAATU/c-lXCkfYKjA/s1600-h/Zach%C3%B3d.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/Sz_EMCLXn3I/AAAAAAAAATU/c-lXCkfYKjA/s320/Zach%C3%B3d.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5422268187399397234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-2206757385134361482?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/2206757385134361482/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/01/zachod-sonca-nad-bochnia.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2206757385134361482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2206757385134361482'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/01/zachod-sonca-nad-bochnia.html' title='Zachód słońca nad Bochnią'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_y5n6mbWJAwg/Sz_EMCLXn3I/AAAAAAAAATU/c-lXCkfYKjA/s72-c/Zach%C3%B3d.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3797417280022915978</id><published>2010-01-02T15:22:00.001+01:00</published><updated>2010-01-02T22:54:41.206+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Krynica'/><title type='text'>Jaworzyna Krynicka w sylwestrową noc</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_y5n6mbWJAwg/Sz9Wu-1lZAI/AAAAAAAAASw/SvKJ_ZK9Xf8/s1600-h/F1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_y5n6mbWJAwg/Sz9Wu-1lZAI/AAAAAAAAASw/SvKJ_ZK9Xf8/s320/F1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5422147841519084546" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3797417280022915978?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3797417280022915978/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2010/01/jaworzyna-krynicka-w-sylwestrowa-noc.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3797417280022915978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3797417280022915978'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2010/01/jaworzyna-krynicka-w-sylwestrowa-noc.html' title='Jaworzyna Krynicka w sylwestrową noc'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_y5n6mbWJAwg/Sz9Wu-1lZAI/AAAAAAAAASw/SvKJ_ZK9Xf8/s72-c/F1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-2331011030463774078</id><published>2009-12-25T21:31:00.003+01:00</published><updated>2010-01-02T22:54:15.984+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Bochnia'/><title type='text'>Rynek w Bochni</title><content type='html'>Miłego oglądania:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SzUhsKIo-II/AAAAAAAAARw/68K-ygOP_gg/s1600-h/Rynek_noca.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SzUhsKIo-II/AAAAAAAAARw/68K-ygOP_gg/s320/Rynek_noca.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5419274769128814722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-2331011030463774078?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/2331011030463774078/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/12/rynek-w-bochni.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2331011030463774078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2331011030463774078'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/12/rynek-w-bochni.html' title='Rynek w Bochni'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_y5n6mbWJAwg/SzUhsKIo-II/AAAAAAAAARw/68K-ygOP_gg/s72-c/Rynek_noca.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-1351865012225965927</id><published>2009-09-09T00:40:00.004+02:00</published><updated>2009-09-09T00:57:47.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='muzyka'/><title type='text'>Muzyka z "Polskich dróg"</title><content type='html'>Pielęgnując dobry zwyczaj przeszukiwania YouTube w poszukiwaniu dobrej muzyki, wyniesiony z liceum dokopałem się najpierw do muzyki z filmu "Polskie Drogi" autorstwa nieżyjącego już niestety Andrzeja Kurylewicza:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yYfWa4N0yy8&amp;hl=pl&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yYfWa4N0yy8&amp;hl=pl&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Chwilę później natrafiłem na ten sam utwór w wykonaniu Pata Metheny'ego:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/f5uyv2jTZio&amp;hl=pl&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/f5uyv2jTZio&amp;hl=pl&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Dla zainteresowanych udostępniam nuty: &lt;a href="http://bochnia.com.pl/~kj/polskie_drogi.pdf"&gt;polskie_drogi.pdf&lt;/a&gt;. Dodatkowe ogłoszenie: nuty są w niskiej jakości - gdyby ktoś chciał je przepisać chociażby za pomocą &lt;a href="http://lilypond.org"&gt;LilyPond&lt;/a&gt; i ew. dodać wersję na gitarę, to serdecznie zapraszam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-1351865012225965927?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/1351865012225965927/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/09/muzyka-z-polskich-drog.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1351865012225965927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1351865012225965927'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/09/muzyka-z-polskich-drog.html' title='Muzyka z &quot;Polskich dróg&quot;'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-6152194679069487172</id><published>2009-09-06T21:52:00.007+02:00</published><updated>2009-09-06T23:04:52.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paranormal activity'/><title type='text'>Miodek (18+)</title><content type='html'>Dzisiaj coś miłego dla podniebienia, czyli techniki wyrobu alkoholu na potrzeby własne (a jakże) ze słodkawego, lepkiego, żółtego, pracowicie przez pszczoły przyniesionego miodku.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Do rzeczy.&lt;/h3&gt;&lt;br /&gt;Na początek musimy przygotować drożdże winne. Możemy je kupić w sklepach zielarskich, ja osobiście polecam drożdże "Tokaj" - u mnie się po prostu sprawdzały. W Bochni można je kupić na przeciwko "Groty" koło szybu Sutoris. Zanim zestaw przerobowy trafi do dymiona musimy owe drożdże uruchomić. Gotujemy wodę, rozpuszczamy w niej 2 łyżeczki cukru i małą szczyptę pożywki dla drożdży po czym studzimy do temp. ok 30&amp;ordm; C. Musimy uważać, gdyż drożdże są bardzo wrażliwe na wysoką temperaturę i za pomocą wrzątku możemy je po prostu zabić, a to niestety uwaliłoby cały misterny plan przerobienia miodu na alkohol. Wsypujemy drożdże do butelki (może być np. po piwie) i zalewamy ostudzoną pożywką. Odstawiamy na dzień lub dwa. Jeśli drożdże pracują, tj. w butelce widać bąbelki dwutlenku węgla, który jest intensywnie wydzielany w czasie pracy drożdży, to możemy przejść do konkretów. Bierzemy się za przygotowanie materiału na wino.&lt;br /&gt;&lt;br /&gt;Po pierwsze miód. Nie musi to być miód najlepszej kategorii, bo i tak pierwsze, co z nim zrobimy, to zmieszamy z wodą i zagrzejemy do ok. 70&amp;ordm; C. Ilość potrzebnego miodu zależy od tego, jaki chcemy zrobić trunek. Osobiście polecam trójniaczek (1:3) oraz czwórniaczek (1:4), a ponieważ zwykle trudno jest się zdecydować, który lepszy, to robię trójniaczkowaty czwórniaczek (1:3.5). W takim przypadku na kilogram miodu potrzeba 3.5 litra wody. Jeśli mamy do dyspozycji dymion 40-sto litrowy, to potrzebujemy ok. 9-10 kg miodu. Odradzam na początek robić miody słodkie, tj. stosunek 1:2 czy 1:1.5. Są one trudne do poprawnego zrobienia i trzeba bardzo długo czekać, aż do końca sfermentują. &lt;br /&gt;&lt;br /&gt;Oprócz miodu potrzeba przypraw: goździki, imbir, chmiel, pieprz, kwasek cytrynowy (lub sok z cytryny - jak kto lubi). Wszystkie te zioła, poza kwaskiem, owijamy w kawałek czystej gazy i wrzucamy do zmieszanego z wodą miodu i podgrzewamy do 70&amp;ordm; C, usuwając przy tym pojawiajacą się pianę. Możemy stworzyć np. jeden taki pakunek i po prostu przerzucać go z garczka do garczka w miarę przygotowywania kolejnych porcji. Ilość przypraw powinniśmy sami dobrać w/g własnego gustu. Nie będę tutaj nic nikomu sugerował. Ważna uwaga: &lt;strong&gt;nie zagotujcie tego czasem!&lt;/strong&gt; Po zagrzaniu magicznego wywaru musimy pozostawić go do ostudzenia - najlepiej do temp. ok. 40-50&amp;ordm; C. &lt;strong&gt;Jeśli na raz wlejemy rozgrzaną wodę z miodem, to możemy zniszczyć dymion!&lt;/strong&gt; Po przelaniu całości do dymiona i ostudzeniu do temperatury ok. 30&amp;ordm; C możemy wlać drożdże, dodać kwasek cytrynowy i dosypać resztę pożywki dla drożdży. Dymion zatykamy korkiem ze specjalną rurką do fermentacji. Rurka powinna być wypełniona wodą tak, aby mógł przez nią uciekać dwutlenek węgla, a do dymiona nie mogła dostać się żadna muszka owocówka. Jeśli nie odprowadzimy CO&lt;sub&gt;2&lt;/sub&gt;, to może się okazać, że za parę tygodni będziemy musieli nasze dzieło sprzątać ze ścian pomieszczenia, w którym stał dymion. Natomiast, jeśli do naszego dzieła dobiorą się muszki owocówki, to zamiast wina otrzymamy... ocet.&lt;br /&gt;&lt;br /&gt;I czekamy... Przez pierwszy miesiąc potrwa najintensywniejsza fermentacja. W dymionie pojawi się piana i będą się wydzielały duże ilości dwutlenku węgla. Dobrze by było, gdyby dymion znajdował się w stałej temperaturze od 26 do 28&amp;ordm; C. Nie powinno świecić na niego także Słońce. Po skończonym procesie fermentacji możemy zacząć powoli zlewać wino. Przygotowujemy drugi dymion i do niego za pośrednictwem np. rurki paliwowej zlewamy naszą radosną twórczość. Na dnie dymiona w którym trwała fermentacja znajdzie się duża ilość syfu z miodu. Po to stosujemy wężyk, żeby ten syf można było wywalić. Zlewać nasze wino będziemy jeszcze 2-3 razy. Za każdym razem pozbywając się osadu. W momencie, gdy nasze wino będzie całkowicie przezroczyste, możemy je rozlać do butelek i zacząć powoli konsumować.&lt;br /&gt;&lt;br /&gt;Smacznego!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-6152194679069487172?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/6152194679069487172/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/09/miodek-18.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/6152194679069487172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/6152194679069487172'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/09/miodek-18.html' title='Miodek (18+)'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-4868084308029372407</id><published>2009-09-05T19:46:00.008+02:00</published><updated>2009-09-06T22:38:51.658+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='historia'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Bochnia'/><title type='text'>Bitwa o Bochnię</title><content type='html'>Zdjęcia nie wymagają komentarza.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKnfIHvCDI/AAAAAAAAAOU/qP9C1hmwI2A/s1600-h/Zolniezyki1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKnfIHvCDI/AAAAAAAAAOU/qP9C1hmwI2A/s320/Zolniezyki1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045058231502898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SqKnejOUXvI/AAAAAAAAAOM/KgWdMUMRKk4/s1600-h/Zolniezyki.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 213px; height: 320px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SqKnejOUXvI/AAAAAAAAAOM/KgWdMUMRKk4/s320/Zolniezyki.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045048327003890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKneaZ_6iI/AAAAAAAAAOE/amNc1CpS8zU/s1600-h/Samolot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKneaZ_6iI/AAAAAAAAAOE/amNc1CpS8zU/s320/Samolot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045045960075810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKnd3nQFxI/AAAAAAAAAN8/d2DQInLlDSM/s1600-h/Dzialo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKnd3nQFxI/AAAAAAAAAN8/d2DQInLlDSM/s320/Dzialo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045036620420882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKndaz3nrI/AAAAAAAAAN0/S3w_7Q3ogSQ/s1600-h/Czolg1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKndaz3nrI/AAAAAAAAAN0/S3w_7Q3ogSQ/s320/Czolg1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045028888714930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKnry4tVwI/AAAAAAAAAOc/Ei1qpq_3SW0/s1600-h/Zolniezyki2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 213px; height: 320px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKnry4tVwI/AAAAAAAAAOc/Ei1qpq_3SW0/s320/Zolniezyki2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378045275869632258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SqKpOXXNWLI/AAAAAAAAAOs/94FIJ5Eww3s/s1600-h/Ulan.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 213px; height: 320px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SqKpOXXNWLI/AAAAAAAAAOs/94FIJ5Eww3s/s320/Ulan.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378046969288415410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKrzD7PIzI/AAAAAAAAAO0/anVRAvmNrnw/s1600-h/Ogien.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKrzD7PIzI/AAAAAAAAAO0/anVRAvmNrnw/s320/Ogien.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378049798749233970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKsSxHhjxI/AAAAAAAAAO8/iUrDwUfN-R8/s1600-h/Czapki.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/SqKsSxHhjxI/AAAAAAAAAO8/iUrDwUfN-R8/s320/Czapki.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378050343456313106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuQ_2UXmI/AAAAAAAAAPc/3lmKI2ocqdQ/s1600-h/Zwyciestwo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuQ_2UXmI/AAAAAAAAAPc/3lmKI2ocqdQ/s320/Zwyciestwo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378052512074194530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_y5n6mbWJAwg/SqKuQQiYPMI/AAAAAAAAAPU/VtQAVqSJu9U/s1600-h/Zolnierzyk.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_y5n6mbWJAwg/SqKuQQiYPMI/AAAAAAAAAPU/VtQAVqSJu9U/s320/Zolnierzyk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378052499374095554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuP46o5WI/AAAAAAAAAPM/A33-F937zGQ/s1600-h/Niemcy.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuP46o5WI/AAAAAAAAAPM/A33-F937zGQ/s320/Niemcy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378052493033399650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuPvaxsuI/AAAAAAAAAPE/_d8QrWBxDhQ/s1600-h/Gapie.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKuPvaxsuI/AAAAAAAAAPE/_d8QrWBxDhQ/s320/Gapie.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378052490483839714" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-4868084308029372407?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/4868084308029372407/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/09/bitwa-o-bochnie.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4868084308029372407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4868084308029372407'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/09/bitwa-o-bochnie.html' title='Bitwa o Bochnię'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_y5n6mbWJAwg/SqKnfIHvCDI/AAAAAAAAAOU/qP9C1hmwI2A/s72-c/Zolniezyki1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3538750936827619167</id><published>2009-08-20T22:32:00.005+02:00</published><updated>2009-08-20T22:51:09.153+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Kraków'/><title type='text'>Z aparatem po Krakowie</title><content type='html'>Tym razem ograniczymy się z tekstem do minimum. Miłej zabawy przy oglądaniu zdjęć.&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/So205xrAPAI/AAAAAAAAAMU/um7B5BhE3EY/s1600-h/Krak%C3%B3w_Teatr_Stary.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/So205xrAPAI/AAAAAAAAAMU/um7B5BhE3EY/s320/Krak%C3%B3w_Teatr_Stary.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372148835202120706" /&gt;&lt;/a&gt;&lt;br /&gt;Kraków, scena kameralna Teatru Starego przy ul. Starowiślnej, schody prowadzące na piętra budynku.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Schody&lt;/h3&gt;&lt;br /&gt;Tym razem zaciekawił mnie układ schodów w budynku Teatru Starego. Spirala od góry oświetlona półprzezroczystym dachem, barwiącym światło na charakterystyczny, żółtawy odcień. W zaistniałej sytuacji aparat nie upierał się, aby za pomocą balansu bieli "wybielać" rzeczywiste kolory.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/So205QDEtzI/AAAAAAAAAMM/r3vDYiWJLWI/s1600-h/Krak%C3%B3w_bw.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/So205QDEtzI/AAAAAAAAAMM/r3vDYiWJLWI/s320/Krak%C3%B3w_bw.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372148826176272178" /&gt;&lt;/a&gt;&lt;br /&gt;Widok na Rynek Główny&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Czerń i biel oraz wszystkie odcienie szarości&lt;/h3&gt;&lt;br /&gt;Lekko przepalony obraz ludzi na tle Sukiennic. Warto też zwrócić uwagę na kształty ułożone z kostki.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/So205I2Z37I/AAAAAAAAAME/bDkQxMgzcvs/s1600-h/Krakow_col.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/So205I2Z37I/AAAAAAAAAME/bDkQxMgzcvs/s320/Krakow_col.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5372148824244084658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Widok na Kościół św. Barbary z Rynku głównego. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ładne kolorki i błąd kadrowania&lt;/h3&gt;&lt;br /&gt;Ładnie podświetlona promieniami słońca fasada budowli. Mało ludzi na pierwszym tle i kawałek dachu Kościoła Mariackiego z lewej strony zdjęcia.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3538750936827619167?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3538750936827619167/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/08/z-aparatem-po-krakowie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3538750936827619167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3538750936827619167'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/08/z-aparatem-po-krakowie.html' title='Z aparatem po Krakowie'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_y5n6mbWJAwg/So205xrAPAI/AAAAAAAAAMU/um7B5BhE3EY/s72-c/Krak%C3%B3w_Teatr_Stary.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-4252759228543529577</id><published>2009-08-05T15:23:00.002+02:00</published><updated>2009-08-13T00:51:14.890+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Bochnia'/><title type='text'>Fototułaczka po Bochni - część 2</title><content type='html'>Czytając poprzednią część wpisu poświęconego fotograficznym wędrówkom po Bochni i okolicach można zadać sobie pytanie: skąd w ogóle wziął się taki pomysł? Przygotuj sobie coś do picia i jedzenia, bo to kawałeczek historii.&lt;br /&gt;&lt;br /&gt;Pierwszy poważniejszy kontakt z fotografią miałem w III klasie gimnazjum. Wtedy to udało mi się zdobyć działający, przeszło trzydziestoletni aparat Zenit 12 XP. Mała, czarna puszka z dokręcanym z przodu obiektywem przywieziona przez moją babcię z nieistniejącego dziś ZSRR przeleżała w garażu mojego wujka ponad 10 lat. Na pierwszy rzut oka nic szczególnego. Od strony technicznej także nie zachwycał. Dysponując zaledwie prostym światłomierzem oraz czasami otwarcia migawki o wartościach 1/30s, 1/60s, 1/125s, 1/250s oraz 1/500s plus tryb bulb (migawka otwarta tak długo jak długo trzymasz wciśnięty spust) nie pozwalał na wiele. Jednak miał tą miłą właściwość, że dużo wymagając wiele uczył. Wszystkie parametry zdjęcia należało ustawić własnoręcznie, a swój wybór potwierdzić za pomocą światłomierza. Oprócz tego człowiek nie miał zbyt wiele wolności - tylko jedna kombinacja czasu i przysłony dawała poprawnie naświetlone zdjęcie, a to z kolei uniemożliwiało zabawy z głębią ostrości. Z tamtego okresu pozostał mi w pamięci rozmiar wizjera. Wielki, jasny, czytelny, na którym ustawianie ostrości było proste, wygodne i precyzyjne. Muszę przyznać, że brakuje mi tego w dzisiejszym sprzęcie nastawionym na działanie w trybie autofocus.&lt;br /&gt;&lt;br /&gt;Mając już aparat mogłem w końcu robić zdjęcia. Pierwszy wydatek: klisza. Dziesięć złotych na najtańszą fototaśmę i w drogę. Pozostawało pytanie: kiedy się w to bawić? W dzień człowiek ma dużo obowiązków i zajęć, pozostaje zatem noc. Na dodatek zdjęcia nocne, głównie dzięki wyeksponowaniu za pomocą sztucznego oświetlenia, są zdecydowanie bardziej efektowne. Mając już wszystko, co do szczęścia potrzebne którejś nocy wyruszyłem z Zenitem w plecaku na ulice Bochni, aby próbować cokolwiek uchwycić. Od tego się zaczęło, potem były długie eksperymenty z aparatem cyfrowym - wtedy prostym kompakcikiem, aby w końcu dotrzeć do nieco egzotycznego aparatu średnioformatowego, za pomocą którego udało się nam zrobić kalendarz. Ciepłe przyjęcie moich prac oraz zabawa, która zawsze towarzyszyła wszystkim wędrówkom zachęciła mnie do dalszego rozwijania zainteresowań i unowocześnienia posiadanego zaplecza sprzętowego. Jaki będzie skutek? Ciężko dzisiaj ocenić, a jakiekolwiek sensowne wnioski będzie można wyciągać dopiero za kilkanaście lat.&lt;br /&gt;&lt;br /&gt;Napisałem, że wycieczkom towarzyszyła dobra zabawa. Zrobienie każdego zdjęcia pochłaniało kilkanaście minut, w czasie których należało znaleźć dobry obiekt do zdjęcia, umiejętnie go wykadrować, ustawić wszystkie potrzebne parametry aby w końcu nacisnąć spust migawki i zrobić zdjęcie. Gdy chodziłem sam, zabawa polegała głównie na tym, że człowiek ruszał się na świeżym powietrzu oraz podziwiał piękno swojego miasta. Gdy chodziłem z jakimś towarzystwem, to koncentrowaliśmy się na zrobieniu jak najlepszego zdjęcia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-4252759228543529577?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/4252759228543529577/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/08/fototuaczka-po-bochni-czesc-2.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4252759228543529577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4252759228543529577'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/08/fototuaczka-po-bochni-czesc-2.html' title='Fototułaczka po Bochni - część 2'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-924063620372865688</id><published>2009-08-05T01:34:00.008+02:00</published><updated>2009-08-05T15:14:17.483+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='Bochnia'/><title type='text'>Fototułaczka po Bochni - część 1</title><content type='html'>&lt;h3&gt;Środa, godzina 1:35.&lt;/h3&gt;Właśnie wróciłem z nocnego spaceru po Bochni i zabieram się za pisanie tego wpisu. Przez ponad dwie godziny tułałem się po rodzinnym mieście z aparatem w plecaku i statywem w ręku, szukając czegoś ciekawego do fotografowania. Przez ostatnie dwa tygodnie nazbierało się parę fotografii, niektóre z nich umieszczone zostały na Wikimedia Commons i reklamują Bochnię. Jednak zdecydowana większość moim zdaniem nie nadaje się do internetowej encyklopedii, a lepszym miejscem jest umieszczenie ich na blogu wraz z krótkim komentarzem. Zatem do dzieła. Przy każdym zdjęciu znajduje się zbiór argumentów za i przeciw umieszczeniu go na Wikimedia Commons. Wpis można potraktować jak ilustrowany przewodnik "czego unikać na zdjęciu" szczególnie wysyłanym na Wikipedię.&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSEpwi3vI/AAAAAAAAALI/cYCWspkmuUk/s1600-h/Tablica.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 134px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSEpwi3vI/AAAAAAAAALI/cYCWspkmuUk/s200/Tablica.png" alt="" id="BLOGGER_PHOTO_ID_5366269933382721266" border="0"/&gt;&lt;/a&gt;&lt;br /&gt;Tablica w I LO upamiętniająca nauczycieli prowadzących tajne nauczanie w okresie II wojny światowej.&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Niezbyt porywające ujęcie&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Odbicie aparatu i mnie samego w tablicy&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Słaby temat na zdjęcie - nawet jeśli ma ono trafić do encyklopedii&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;W miarę dobrze ustawiony aparat - zdjęcie trzyma pion&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Balans bieli sprawił, że tablica ma naturalne kolory&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tablica jest ustawiona w doskonałym miejscu na zdjęciu&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_y5n6mbWJAwg/SnjSEPhe3MI/AAAAAAAAALA/I_Rif-F4BtQ/s1600-h/Samlicki.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 134px; height: 200px;" src="http://1.bp.blogspot.com/_y5n6mbWJAwg/SnjSEPhe3MI/AAAAAAAAALA/I_Rif-F4BtQ/s200/Samlicki.jpg" alt="" id="BLOGGER_PHOTO_ID_5366269926340222146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Obelisk poświęcony pamięci malarza Marcina Samlickiego. Znajduje się on niedaleko miejsca jego śmierci.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Napis na tablicy jest mało czytelny z tej perspektywy, z kolei w kadr niepotrzebnie wdarła się roślinność w lewym dolnym rogu zdjęcia&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zdjęcie można było wykonać o innej porze roku i/lub dnia&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Perspektywa wymuszona przez tło. W tym przypadku drzewo, niebo i niskie domki na linii horyzontu rażą mniej niż blisko położone blokowisko&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_y5n6mbWJAwg/SnjSD8cS57I/AAAAAAAAAK4/jT8yEjFUtc0/s1600-h/Murowianka.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 134px; height: 200px;" src="http://4.bp.blogspot.com/_y5n6mbWJAwg/SnjSD8cS57I/AAAAAAAAAK4/jT8yEjFUtc0/s200/Murowianka.png" alt="" id="BLOGGER_PHOTO_ID_5366269921218193330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Kapliczka na Murowiance.&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Lecące piony, widoczne chociażby na liniach bocznych drzwi&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zdjęcie ma znikomą wartość informacyjną&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Tryb czarno-biały dodał zdjęciu nieco powagi&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSDDAcQFI/AAAAAAAAAKw/MuFOJ7XOajM/s1600-h/Komin.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 133px; height: 200px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSDDAcQFI/AAAAAAAAAKw/MuFOJ7XOajM/s200/Komin.png" alt="" id="BLOGGER_PHOTO_ID_5366269905800544338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Komin przy szybie Campi.&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Zdjęcie komina kopalnianego z takiej perspektywy na Wikipedii? Litości...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Trochę fikuśnie wyszła ostrość, która koncentruje się na bliżej położonej części komina&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Użycie tutaj trybu czarno-białego jest akurat przesadą. Naturalny kolor komina w połączeniu z kontrastującym kolorem nieba byłby ciekawszą kombinacją.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Perspektywa zbieżna podkreśla rozmiary budowli i sprawia, że odbieramy ją jako coś potężnego w stosunku do oglądającego&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSB5GpKGI/AAAAAAAAAKo/l__zGi2pFAE/s1600-h/Chrzcielnica.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 133px; height: 200px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSB5GpKGI/AAAAAAAAAKo/l__zGi2pFAE/s200/Chrzcielnica.png" alt="" id="BLOGGER_PHOTO_ID_5366269885962332258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Chrzcielnica w kościele św. Pawła w Bochni&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Błąd kadrowania. Za dużo posadzki na dole, za mało miejsca nad krzyżem. Akurat jest to wina mojego wzrostu (a raczej jego braku)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zdjęcie ma za duży kontrast. Mogłoby być trochę "delikatniejsze"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zła pozycja do robienia zdjęcia. W tym przypadku korzystniej byłoby wykorzystać ławki za chrzcielnicą jako tło.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Aparat ustawiony prostopadle do ścian. Efekt: brak lecących pionów&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chyba pierwszy raz do końca zapanowałem nad kolorystyką zdjęcia w trudnych warunkach oświetleniowych (kościelny półmrok)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="mark_frame"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/Snjf9sEyUXI/AAAAAAAAALQ/XiuKv36CJak/s1600-h/Kaplica.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 134px; height: 200px;" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/Snjf9sEyUXI/AAAAAAAAALQ/XiuKv36CJak/s200/Kaplica.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5366285206908195186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kaplica Matki Boskiej w kościele Św. Pawła w Bochni.&lt;br /&gt;&lt;br /&gt;&lt;div class="bad"&gt;&lt;h5&gt;Co jest źle?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Witraż się lekko zgiął&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Zdjęcie kończy się niemal na samym klęczniku&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Postać Maryi jest niepokojąco nieostra. Wygląda na to, że aparat skoncentrował się na ścianie z tyłu&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="goodies"&gt;&lt;h5&gt;Co jest dobrze?&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Kolorystyka. Może niektórych razić, ale co do jednego jestem pewien: użycie tutaj trybu czarno-białego byłoby zbrodnią&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Czytelność zdjęcia. Chyba nikt nie ma wątpliwości co przedstawia zdjęcie (w przeciwieństwie do komina, który na pierwszy rzut oka jest trudny w interpretacji)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Środa, godzina 3:35&lt;/h3&gt;Po małej dawce grafiki czas na kilka zdań tekstem. Na początku warto wyjaśnić skąd idea robienia zdjęć o tak nieludzkiej porze jak chociażby 1:00 w nocy. Otóż noc całkowicie opróżnia miasto z ludzi i samochodów. Dzięki temu w ogóle da się zrobić zdjęcia pewnym miejscom, które przez cały dzień są czymś zasłonięte. Dla osób, które nie lubią ciemności, a zdjęcia wolą pstrykać przy świetle dziennym, polecam poranki (zwłaszcza w lecie). O 5:00 rano nie ma tłoku, a jest już jasno. Kolejnym powodem jest światło. Podświetlanie tematu fotografii po pierwsze usuwa całe, nieraz zbędne, tło, a oprócz tego jest efektowne. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Jak ja robię zdjęcia dla Commons?&lt;/h3&gt;Lista zasad, którymi warto kierować się, robiąc zdjęcia na potrzeby np. encyklopedii.&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Starajmy się, aby zdjęcia jak najdokładniej przedstawiały rzeczywistość.&lt;/strong&gt; Najlepiej, gdy zdjęcie niewiele różni się od tego, co widzimy własnymi oczami. W tym punkcie warto też wspomnieć o wszelkiego rodzaju efektach specjalnych. HDR jest ciekawą techniką, ale lepiej używać ją w sytuacjach ekstremalnych, np. fotografując ciemne wnętrze z oknem przez które wpada światło. Nie przesadzajmy z saturacją jeśli w rzeczywistości nie będzie można zobaczyć tych kolorów gołym okiem w żadnych warunkach oświetleniowych. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Odpuśćmy poprawki.&lt;/strong&gt; Nie wymazujmy żadnych elementów na zdjęciu i nie dodawajmy niczego, co burzy stan rzeczywisty. Zdjęcie jako takie nie wymaga także ramki czy też innej oprawki. Tego typu dodatki są potrzebne dopiero po wywołaniu zdjęcia do postaci papierowej.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Pilnujmy jakości.&lt;/strong&gt; W dobie wszechobecnych aparatów w telefonach komórkowych musimy pamiętać, że wyższą jakość obrazu możemy uzyskać ze starego analogowego aparatu na kliszę formatu 35mm niż z większości aparatów w telefonie, a nawet dużej części aparatów kompaktowych. Jeśli nie posiadasz profesjonalnej cyfrowej lustrzanki, a koniecznie chcesz się bawić w fotografię, to zainwestuj w tani, używany sprzęt analogowy, naucz się nim robić zdjęcia, a dopiero później szukaj czegoś bardziej zaawansowanego. Pamiętajmy też o tym, że niektórzy ludzie chcieliby zrobione przez nas zdjęcia powiesić chociażby na ścianie u siebie w domu. Dbajmy o to, aby nasze zdjęcie wyglądało tak samo dobrze w formacie 15x10cm jak i dwa razy większym.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Nie niszcz tego, co fotografujesz.&lt;/strong&gt; Żaden człowiek nie lubi, gdy z odległości zaledwie 1 metra ktoś strzela mu bez opamiętania fleszem po oczach. Większość zabytków, zwłaszcza obrazów jest bardzo wrażliwa na ostre światło, które może go niszczyć. Jeśli tylko Twój aparat ma funkcję wymuszenia braku błysku, to używaj jej wszędzie tam, gdzie użycie flesza nie jest niezbędne.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Zostaw coś w zamian.&lt;/strong&gt; Fotografowałeś kogoś? Może chciałby otrzymać swoje zdjęcie? Zaoferuj mu to, a następnym razem z pewnością będzie z radością dla Ciebie pozował, zwłaszcza, gdy spodoba mu się Twoja praca. Fotografujesz w zabytkowych miejscach, które potrzebują pieniędzy na remonty i utrzymanie? Jeśli tylko możesz zostawić nawet drobną sumę, to zrób to, aby także i inni mogli w tym miejscu robić zdjęcia po Tobie.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Zaskakuj!&lt;/strong&gt; Zdjęcie nie musi być nudne. Ciekawa kompozycja zdjęcia, niekonwencjonalne ujęcie oraz inne elementy, jakimi możesz przyciągnąć uwagę oglądającego są dobre o ile tylko nie powodują utraty wartości dokumentalnej.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-924063620372865688?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/924063620372865688/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/08/fototuaczka-po-bochni-czesc-1.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/924063620372865688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/924063620372865688'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/08/fototuaczka-po-bochni-czesc-1.html' title='Fototułaczka po Bochni - część 1'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_y5n6mbWJAwg/SnjSEpwi3vI/AAAAAAAAALI/cYCWspkmuUk/s72-c/Tablica.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-8207400173268636104</id><published>2009-07-14T20:33:00.003+02:00</published><updated>2009-09-06T22:39:38.539+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Canonier</title><content type='html'>Początek tego wpisu poświęcę na krótki opis zakupu obiektywu do mojego aparatu, który wbrew pozorom wcale nie był czynnością prostą. Czwartek, 9 lipca. Na terenie Krakowa odwiedziłem dwa sklepy zajmujące się profesjonalnym wyposażeniem dla fotografów. W obu poinformowano mnie, że "obiektywu nie ma i nie wiadomo kiedy będzie". Przyznam się szczerze, że pierwszy raz w życiu na terenie mojego kraju zdarzyła mi się taka sytuacja, że przychodzę z kieszeniami wypchanymi kasą, a sprzedawcy jakoś się tym nie interesują. Trudno, szukamy dalej. Wieczorem odnajduję sklep w Sopocie, oferujący ten sprzęt 200 PLN taniej. W piątek (10 lipca) dowiaduję się, że i tam sprzętu nie ma i nie wiadomo, kiedy będzie. W międzyczasie szybki telefon do Warszawy, a później 4 kolejne do Krakowa. Efekt: Foto Nova - sprzętu brak, Saturn w galerii krakowskiej także. Ciekawostka: sprzęt ma Media Markt, ale droższy o drobne 400 PLN, co szybko leczy mnie z idiotycznego skądinąd pomysłu zakupów tamże. Odwiedziny na Allegro - jest obiektyw w tej samej cenie, co w Sopocie. Sprzedawca utrzymuje, że sprzęt jest na stanie. Ponieważ jest to zakup przez Allegro więc rozpoczynam śledztwo w sprawie wiarygodności sprzedawcy. Szybko natrafiam na forum, gdzie sprzedawca de facto sam podważa własną wiarygodność, co wstrzymuje mnie od zakupu od niedzieli. W niedzielę, po krótkich konsultacjach decyduję się na zakup. Przesyłka jest ekspresowa - obiektyw we wtorkowe południe jest już podpięty pod mój aparat i mogę zaczynać zabawę w zdjęcia.&lt;br /&gt;&lt;br /&gt;A teraz odnośnie samego obiektywu: zakres ogniskowej wynoszący od 17 do 40mm po pomnożeniu przez 1.6 daje typowy standardowy zoom (nawet określiłbym go jako szerokokątny). Maksymalny otwór przysłony na poziomie F/4 nie jest jakoś szczególnie porywający. Wykonanie obiektywu nie budzi jakichkolwiek zastrzeżeń. Obiektyw miło leży w ręce, sprawia wrażenie solidnego. Niemiłą rzeczą jest rozmiar osłony przeciwsłonecznej, ale to akurat da się zmienić gdy tylko znów zacznę cierpieć na nadmiar gotówki. Obiektyw ma kilka ciekawych cech, które prędzej czy później mi się przydadzą. Oto niektóre z nich: całkowite uszczelnienie przed wodą i kurzem (tylko filtr trzeba dokupić), autofocus typu USM - tutaj zaczyna się historia. Otóż aparat wziął do ręki mój wujek zaczął się nim bawić a ja wpadłem w panikę, bo "autofocus nie działa". Dźwięk wydawany przez obiektyw w trakcie ustawiania ostrości jest tak cichy, że stojąc 1.5 obok nie byłem w stanie go wychwycić. Ponoć wszyscy ludzie przesiadający się z obiektywów nieposiadających USM na obiektywy weń wyposażone dają się tak nabierać. Wracając do tematu, obiektyw ma słuszną masę i gabaryty, co umila pracę - dzięki temu aparat jest lepiej wyważony i ręce jakoś mniej się telepią. Jakość zdjęć - nieporównywalna ze wszystkim, co miałem w rękach. Nie zauważyłem nigdzie śladu aberracji chromatycznej, choć dokuczała mi trochę niska rozdzielczość obiektywu. Pomimo tego drobnego szkopułu, zdjęcia można ocenić na 5+. &lt;br /&gt;&lt;br /&gt;A teraz idę pstrykać dalej - pa ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-8207400173268636104?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/8207400173268636104/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/07/canonier.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/8207400173268636104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/8207400173268636104'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/07/canonier.html' title='Canonier'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-4702875789542595491</id><published>2009-06-09T00:42:00.007+02:00</published><updated>2009-09-06T22:40:00.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='www'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>Django</title><content type='html'>Dzisiaj oderwę się od spraw przysprzętowych i co nieco poopowiadam o frameworku do tworzenia stron internetowych w języku Python. Mowa będzie oczywiście o Django. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Trochę historii&lt;/h3&gt;&lt;br /&gt;Python jako język programowania powstał na początku lat 90. Został dość dobrze przemyślany, a reguły gramatyczne wprost wymuszają na programiście pisanie czytelnego kodu. Do tego, podobnie jak np. Ruby, jest językiem wysoce wymownym&lt;sup&gt;&lt;a href="#ref1"&gt;1&lt;/a&gt;&lt;/sup&gt;, dzięki czemu można bardzo łatwo tworzyć w nim nawet duże projekty. Pierwsze spotkanie z nim nastąpiło kilka lat temu. Na początku nie wzbudził mojej większej sympatii, lecz dzisiaj jest językiem używanym przeze mnie niemal do wszystkiego.&lt;br /&gt;&lt;br /&gt;Pierwsze strony www tworzyłem oczywiście w PHP, jednak widząc, jak wielki nakład pracy trzeba wkładać w napisanie nawet najprostszej strony www szukałem rozwiązań alternatywnych. Początkowo spotkałem się z frameworkiem Ruby on Rails. Sprawiał on wrażenie eleganckiego, jednak to, co mnie bardzo zniechęciło, to jego szybkość działania. Podobno do dziś sam interpreter Rubiego oraz cały framework poczyniły znaczny postęp i dzisiaj wręcz zachwycają szybkością działania. Jednak nie lubiąc specjalnie czekać na takie przełomy zdążyłem się przekwalifikować, poznać moc Pythona oraz zasmakować Django. I zostałem przy nim.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Do rzeczy&lt;/h3&gt;&lt;br /&gt;Zacznijmy od tego, że w Django nie tworzymy serwisów www w taki sposób, jak czyniliśmy to przy użyciu PHP. Serwer www nie uruchamia tutaj poszczególnych plików z rozszerzeniem .py jak czyni to w przypadku w/w rozwiązania. Można śmiało zaryzykować stwierdzenie, że w Django tworzymy cały program komputerowy. Jednak wprowadzimy tutaj nieco inne nazewnictwo. Kompletny kod serwisu zawarty jest w &lt;em&gt;projekcie&lt;/em&gt;, czyli zbiorze &lt;em&gt;aplikacji&lt;/em&gt;. Czym zatem jest aplikacja? Jest moduł, swego rodzaju "cegiełka" z której budujemy projekt. Moduły są przenośne między projektami&lt;sup&gt;&lt;a href="#ref2"&gt;2&lt;/a&gt;&lt;/sup&gt;, więc raz dobrze napisany moduł może być przez nas używany w wielu różnych projektach. Każdy moduł składa się z następujących składowych:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;pliku views.py - czyli kodu napisanego w języku Python zawierającego funkcje, odpowiadającego w pewnym przybliżeniu pojedynczemu plikowi .php.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;pliku urls.py - w nim zawarte są informacje jak ma wyglądać url, prowadzący do określonej funkcji z pliku views.py&lt;/li&gt;&lt;br /&gt;&lt;li&gt;pliku models.py - tutaj zawarte są definicje klas, które dzięki &lt;a href="http://pl.wikipedia.org/wiki/ORM"&gt;ORM&lt;/a&gt; są reprezentowane w bazie danych jako tabele. Dzięki temu w aplikacji pojedynczy wiersz danych z tabeli jest reprezentowany jako instancja klasy. Piszemy cały czas w Pythonie i nie przejmujemy się wcale kodem SQL, który ukryty jest w ORM&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Są to oczywiście tylko wybrane pliki - może być ich znacznie więcej i mogą przechowywać inne, bardziej zaawansowane elementy. Pytanie tylko: &lt;strong&gt;gdzie podział się kod html?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Kod html ukryty jest w tzw. szablonach, czyli plikach, gdzie zawarty jest szkielet html strony. Ponadto kod ten zawiera znaczniki, które są uzupełniane przez ładowarkę szablonów wartościami, które generuje kod zawarty chociażby w pliku views.py. Połączenie kodu html ze zmiennymi z plików views.py daje nam już kompletny kod html z treścią.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Dlaczego to jest takie dziwne?&lt;/h3&gt;&lt;br /&gt;Zauważmy, że dzięki takiemu "rozbiciu" elementów frameworka, ludzie pracujący nad samym kodem poszczególnych aplikacji nie muszę przejmować się wcale kodem html i css. Oni po prostu udostępniają pewnego rodzaju API, z którego korzystają później twórcy szablonów tworząc odpowiedni kod html, css oraz całą otoczkę graficzną. Zatem ekipa programistów może nie mieć zielonego pojęcia o html-u, a graficy w ogóle nie muszą znać Pythona, aby móc wspólnie łatwo i szybko stworzyć kompletny serwis. Do tego, ani jedni ani drudzy nie muszą znać nawet SQL-a, gdyż ORM załatwia za nich wszystko.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Brzmi zachęcająco, ale...&lt;/h3&gt;&lt;br /&gt;Użycie tego frameworka jest kłopotliwe z trochę innych względów. Oto niektóre problemy:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;nierozwinięty hosting pod projekty&lt;/li&gt;&lt;br /&gt;&lt;li&gt;kłopotliwa konfiguracja na komputerze developera&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Ponadto, korzystając z Django trzeba być dość dobrym programistą i dobrze znać Pythona. Użycie Django wymusza na nas pisanie kodu w określony sposób, bez swoistych "improwizacji" znanych z PHP. W zamian dostajemy stabilny framework, rozpowszechniany na bardzo liberalnej licencji (BSD), który umożliwia szybkie tworzenie projektów.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Do czego zachęcam?&lt;/h3&gt;&lt;br /&gt;Do spokojnego zapoznania się z frameworkiem. Dostępna do niego bardzo bogata dokumentacja z pewnością ułatwi pierwsze kontakty. Dla osób, które koniecznie chcą stosować serwer Apache dodam, że sam stosuję Nginx i bardzo go sobie chwalę (głównie za szybkość).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Do czego nie zachęcam?&lt;/h3&gt;&lt;br /&gt;Do szybkiego zniechęcenia się. Naprawdę warto poświęcić trochę czasu na poznanie języka i całego frameworka.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ciekawostki&lt;/h3&gt;&lt;br /&gt;W Django dostępny jest bardzo elegancki i potężny panel administratorski, który może obejmować swoim zasięgiem każdą aplikację w projekcie. Jest to bardzo wygodne rozwiązanie, które odciąża programistę, zajętego tworzeniem kodu pod "front" serwisu od myślenia o sprawach związanych z kwestiami administracyjnymi. Panel administratora jest także dość łatwo modyfikowalny oraz umożliwia stosowanie mechanizmu uprawnień.&lt;br /&gt;&lt;br /&gt;Django, a właściwie sam Python udostępnia bardzo elegancki mechanizm przechwytywania błędów. Można za jego pomocą przechwytywać nawet błędy składniowe. Dzięki temu można o wszystkich błędach w działaniu serwisu informować drogą np. mailową administratorów.&lt;br /&gt;&lt;br /&gt;Sam framework oferuje ciekawe podejście do backupu danych. Można je zrzucić chociażby do prostego pliku XML. Oczywiście jest ono mało przydatne w przypadku działającego serwisu, jednak w pracach developerskich potrafi bardzo umilić życie. Dzięki temu samemu mechanizmowi programiści tworzący aplikacje mogą udostępniać dane startowe, zawierające "niezbędne minimum" dla funkcjonowania danej aplikacji w obrębie projektu.&lt;br /&gt;&lt;br /&gt;Framework umożliwia łatwe tworzenie aplikacji wielojęzycznych. Moduły aplikacyjne mogą zawierać pliki tłumaczeń na wiele różnych języków, jednak muszą być one tworzone przez człowieka. Niemniej jednak, bardzo ułatwiają tworzenie wielojęzycznych projektów.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Przypisy&lt;/h4&gt;&lt;br /&gt;&lt;ol style="font-size:small"&gt;&lt;br /&gt;&lt;li id="ref1"&gt;Wymowność języka rozumiem tutaj jako ilość kodu potrzebnego do osiągnięcia jakiegoś konkretnego efektu. Im ta ilość mniejsza, tym język jest wymowniejszy.&lt;/li&gt;&lt;br /&gt;&lt;li id="ref2"&gt;A przynajmniej dobrze napisane aplikacje powinny być przenośne.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-4702875789542595491?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/4702875789542595491/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/06/django.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4702875789542595491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4702875789542595491'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/06/django.html' title='Django'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-2763621695416648930</id><published>2009-04-28T10:18:00.007+02:00</published><updated>2009-09-06T22:40:29.645+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='paranormal activity'/><title type='text'>Walczymy z m-spamem</title><content type='html'>W ostatnich dniach do białej gorączki doprowadziły mnie firmy, których głównym celem jest zarabianie pieniążków na idiotach korespondujących za pośrednictwem sms-ów z komputerami tychże firm na tematy najczęściej... seksualne. Jako że wczoraj otrzymałem od któregoś z komputerów takiej firmy sms-a, w którym ta maszyna przedstawiała się jako "28-latka bez zobowiązań", to postanowiłem, delikatnie mówiąc, ukrócić proceder. Powstał z tego kod: &lt;a href="http://bochnia.com.pl/~kj/sms.py"&gt;sms.py&lt;/a&gt;.&lt;br /&gt;&lt;code style="white-space:pre"&gt;&lt;br /&gt;import inbox, appuifw, e32, re&lt;br /&gt;&lt;br /&gt;app_lock = e32.Ao_lock()&lt;br /&gt;box = inbox.Inbox()&lt;br /&gt;&lt;br /&gt;def spam_message(adr, cont):&lt;br /&gt; if re.match('[0-9]{4,5}', adr): return True&lt;br /&gt;# if 'pln' in cont.lower(): return True&lt;br /&gt; return False&lt;br /&gt;&lt;br /&gt;def message_received(msg_id):&lt;br /&gt; box = inbox.Inbox()&lt;br /&gt; sms_text = box.content(msg_id)&lt;br /&gt; address = box.address(msg_id)&lt;br /&gt; print "Received new sms"&lt;br /&gt; if spam_message(address, sms_text): &lt;br /&gt;  box.delete(msg_id)&lt;br /&gt;  appuifw.note(u"Deleted sms from: " + address,"info", 1)&lt;br /&gt;&lt;br /&gt;def exit_key_handler():&lt;br /&gt; app_lock.signal()&lt;br /&gt;&lt;br /&gt;appuifw.app.exit_key_handler = exit_key_handler&lt;br /&gt;box.bind(message_received)&lt;br /&gt;&lt;br /&gt;print "Waiting for new SMS messages.."&lt;br /&gt;app_lock.wait()&lt;br /&gt;print "sms-filter closed"&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Jeśli macie telefon z Symbianem, to zainstalujcie odpowiednią wersję &lt;a href="http://sourceforge.net/projects/pys60"&gt;PyS60&lt;/a&gt; i możecie cieszyć się tym programikiem do woli. Dla nieznających języka Python krótkie wyjaśnienie. Program reaguje na każdą wiadomość, którą otrzymuje wasz telefon. Następnie ocenia, czy nadawcą sms-a jest numer 4-ro lub 5-cio cyfrowy (najczęściej takie numery służą do rozsyłania spamu). Uwaga: sms-y pochodzące z bramek smsowych także będą usuwane! Jeśli chcecie przerobić program pod siebie, to PROSZĘ BARDZO. Kod jest na licencji &lt;a href="http://pl.wikipedia.org/wiki/Beerware"&gt;beer-ware&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-2763621695416648930?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/2763621695416648930/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/04/walczymy-z-m-spamem.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2763621695416648930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/2763621695416648930'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/04/walczymy-z-m-spamem.html' title='Walczymy z m-spamem'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-5149721621236376855</id><published>2009-04-03T01:18:00.004+02:00</published><updated>2009-09-06T22:40:42.181+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Fotograficzne obserwacje</title><content type='html'>Obiecałem niedawno podzielenie się dalszymi obserwacjami dot. mojego aparatu, więc słowa dotrzymuję. Oto dalsze obserwacje:&lt;br /&gt;- wymagania dot. obiektywu niestety się potwierdzają - posiadany przeze mnie "kitowy, plastikowy" EF 90-300 F4.5/5.6 daje niezbyt ostry obraz. [Z racji braku pod ręką obiektywu standardowego 50mm F/1.8 lub F/1.4 nie przeprowadziłem testów porównawczych.]&lt;br /&gt;+ szybkość i precyzja działania bardzo umila fotografowanie. Naprawdę brakowało mi tego w Zenicie.&lt;br /&gt;+ Aparat jest dość dobrze wyważony, nie męczy człowieka w trakcie pracy.&lt;br /&gt;+ W porównaniu do 50D moja 40D ma zdecydowanie lepszą jakość zdjęć przy wysokich ISO (powyżej ISO 1600).&lt;br /&gt;&lt;br /&gt;Za niedługo będzie okazja przekonać się, jak działa połączenie EOS 40D z EF 17-40 F/4 L. Zapowiada się niezwykle interesująco ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-5149721621236376855?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/5149721621236376855/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/04/fotograficzne-obserwacje.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/5149721621236376855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/5149721621236376855'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/04/fotograficzne-obserwacje.html' title='Fotograficzne obserwacje'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3049060800287093110</id><published>2009-03-15T23:02:00.004+01:00</published><updated>2009-09-06T22:40:54.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>No to się porobiło</title><content type='html'>Dożyłem czasów, w których drugi telefon, który używam w swoim życiu jest szybszy od pierwszego komputera, którego używałem. Co gorsza, telefon ów umożliwia uruchamianie programów napisanych w Pythonie. Bez jakiejkolwiek prekompilacji. Ot tak, czysta interpretacja pliku tekstowego. Żeby było weselej mam do dyspozycji konsolę interpretatora. Aż zatęskniłem za Commodore 64.&lt;br /&gt;&lt;br /&gt;Mojemu wujkowi, w ciągu pięćdziesięciu paru lat życia świat stanął na głowie dobre kilka razy. Ja właśnie doświadczyłem pierwszego przewrotu: 2.4 kg brutto laptopa jest w tym momencie równie funkcjonalne programistycznie, co 0.1 kg zwykłej komórki. Jest i plus całej sytuacji: będę mógł produkować soft do obliczeń na potrzeby sprawozdań z fizyki na bieżąco w trakcie laboratoriów :P.&lt;br /&gt;&lt;br /&gt;Podsumowując: komórka umożliwia mi zrobienie praktycznie takich samych rzeczy, do których potrzebowałem dotychczas dobrego kawałka komputera. Nie chcę wiedzieć, co będą mogły urządzenia moich dzieci...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3049060800287093110?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3049060800287093110/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/03/no-to-sie-porobio.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3049060800287093110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3049060800287093110'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/03/no-to-sie-porobio.html' title='No to się porobiło'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-6060126491266515659</id><published>2009-01-27T21:09:00.003+01:00</published><updated>2009-09-06T22:41:34.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='studia'/><title type='text'>Studia? Niezła rzecz!</title><content type='html'>Jestem na półmetku pierwszego roku, a to uprawnia mnie do napisania kilku refleksji nt. studiów. Cóż zatem mogę powiedzieć? &lt;br /&gt;&lt;br /&gt;Po pierwsze: na studiach wcale nie jest jakoś super ciężko. Nie można leżeć do góry tyłkiem, ale z drugiej strony - nie zarywam nocy nad matematyką (chociaż mógłbym a wręcz powinienem chcieć to robić). WDI jest prostsze niż prowadzący groził. Algebra, dzięki świetnemu prowadzącemu ćwiczenia była całkiem bezbolesna, analiza i elektronika także. Co ciekawe, każdy z tych przedmiotów przynosił nie tylko wiedzę z danej dziedziny. Oprócz tego była to także bardzo ciekawa lekcja życia wśród innych ludzi, głównie starszych i lepiej wykształconych. Nikt na siłę nie wciskał studenta do kanału, a z drugiej strony - swoją wiedzą i stosunkiem do nas nabywał szacunku z naszej strony. &lt;br /&gt;&lt;br /&gt;Czego się dowiedziałem? Otóż wiem już, co ludzie z wyższym wykształceniem wspominają z okresu swoich studiów.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-6060126491266515659?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/6060126491266515659/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2009/01/studia-nieza-rzecz.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/6060126491266515659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/6060126491266515659'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2009/01/studia-nieza-rzecz.html' title='Studia? Niezła rzecz!'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-485069077411346358</id><published>2008-12-11T00:51:00.007+01:00</published><updated>2009-09-06T22:41:48.603+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='studia'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>Optymalizacje C</title><content type='html'>Dzisiaj omówię problem optymalizacji. Jako przykład podam projekt ze studiów - szukamy 10-cio cyfrowych liczb Armstronga (a dokładnie jednej takiej liczby ;)). Dodam jeszcze, że aby usprawnić proces poszukiwań nieco zawężyliśmy zakres poszukiwań. Podam 4 przykłady kodów źródłowych z komentarzem i czasami wykonania.&lt;br /&gt;&lt;br /&gt;Skupmy się zatem na samym kodzie. Zaczniemy od programu najwolniejszego. &lt;a href="http://bochnia.com.pl/~kj/wdi3.c"&gt;Wdi3&lt;/a&gt; ma tą przykrą własność, że ma zarówno zbyt dużo odwołań do pamięci, jak i zbyt wiele pętel. W głównej pętli, sprawdzającej kolejne liczby wykonujemy pętlę, która sumuje 10-te potęgi cyfr. Jest to zupełnie niepotrzebne. &lt;a href="http://bochnia.com.pl/~kj/wdi2.c"&gt;Wdi2&lt;/a&gt; pozbywa się dodatkowej pętli, jednak zauważamy tutaj zbyt wiele odwołań do pamięci. Eliminujemy tę wadę w programie &lt;a href="http://bochnia.com.pl/~kj/wdi1.c"&gt;wdi1&lt;/a&gt;. I z punktu widzenia algorytmicznego nie pozostaje nam już nic innego do poprawy. Spójrzmy teraz na osiągi programów, pracujących od zakresu 4600 000 000 do poszukiwanej liczby.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;kjopek@student:~ (150) &gt; time ./wdi3&lt;br /&gt;Start at: 4600000000&lt;br /&gt;4679307774&lt;br /&gt;9.95u 0.00s 0:10.04 99.1%&lt;br /&gt;kjopek@student:~ (151) &gt; time ./wdi2&lt;br /&gt;Start at: 4600000000&lt;br /&gt;4679307774, 4679307774&lt;br /&gt;8.68u 0.00s 0:08.72 99.5%&lt;br /&gt;kjopek@student:~ (152) &gt; time ./wdi1&lt;br /&gt;Start at: 4600000000&lt;br /&gt;4679307774, 4679307774&lt;br /&gt;8.02u 0.00s 0:08.07 99.3%&lt;br /&gt;kjopek@student:~ (152) &gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Wygląda cudnie - udało nam się obniżyć czas wykonania tego samego programu z poziomu ponad 10 sekund do niewiele ponad 8 sekund. A czy dałoby się go obniżyć jeszcze bardziej? Algorytmicy pewnie powiedzą, że nie, jednak mamy jeszcze małą sztuczkę w zanadrzu. Otóż procesor bardzo nie lubi odwołań do pamięci. Spróbujemy zatem dwie najczęściej powtarzające się zmienne umieścić w rejestrach procesora. W przypadku architektury AMD64 (i EMT_64T) będzie to łatwe - dysponujemy przecież 8 nowymi rejestrami ogólnego przeznaczenia. &lt;a href="http://bochnia.com.pl/~kj/wdi.c"&gt;Wdi.c&lt;/a&gt; jest kolejnym stopniem optymalizacji. Co otrzymujemy?&lt;br /&gt;&lt;code&gt;&lt;br /&gt;kjopek@student:~ (153) &gt; time ./wdi&lt;br /&gt;Start at: 4600000000&lt;br /&gt;4679307774, 4679307774&lt;br /&gt;3.30u 0.00s 0:03.35 98.5%&lt;br /&gt;kjopek@student:~ (154) &gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Efekt mówi sam za siebie. Po analizie kodów tych wszystkich programów nasuwa się parę pytań, np. dlaczego w programie, wykonującym dwukrotnie więcej odwołań do pamięci oraz dodatkową pętlę czas wykonania jest dłuższy tylko o 2 sekundy, podczas gdy prosta optymalizacja przeniesienia zmiennej do rejestru skraca czas o 2/3?&lt;br /&gt;&lt;br /&gt;Wszystkie próby wykonywane były na serwerze student.agh.edu.pl, przy użyciu kompilatora GCC 3.4.3 z opcją -m64. System: Solaris 10, 4 procesory Opteron 875 Dual Core 2.2 GHz, 16 GB RAM-u.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-485069077411346358?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/485069077411346358/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/12/optymalizacje-c.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/485069077411346358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/485069077411346358'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/12/optymalizacje-c.html' title='Optymalizacje C'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-1158564023005732512</id><published>2008-11-11T22:15:00.004+01:00</published><updated>2009-09-06T22:42:11.897+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Odkrywanie tajemnic 40-stki - c.d.</title><content type='html'>Składając się coraz bardziej do dalszego tworzenia pewnego autorskiego portalu, doszły mnie ciekawe newsy o możliwości mojego świeżo zakupionego aparatu. Otóż przystawka WFT-E3 umożliwia podpięcie do niego zewnętrznego dysku, a także odbiornika GPS przez USB! Jest to o tyle przyjemne, że byłoby to bardzo ciekawe urozmaicenie funkcjonalności serwisu, dodające dokładne miejsce na kuli ziemskiej, gdzie dana fotografia została zarejestrowana.&lt;br /&gt;&lt;br /&gt;Jednak, jak każde rozwiązanie i to ma swoje minusy: cena WFT-E3 oscyluje wokół 3000 PLN, za które z pewnością miałbym świetnej klasy obiektyw.&lt;br /&gt;&lt;br /&gt;Co nam pozostaje? Dwa wyjścia: jedno polega na noszeniu ze sobą niezależnego odbiornika GPS i dopisywaniu danych do gotowych plików. Tutaj zamieszczam opis tagów EXIF, jakie mogą się przydać:&lt;br /&gt;&lt;a href="http://www.digicamsoft.com/exif22/exif22/html/exif22_52.htm?gInitialPosX=10px&amp;gInitialPosY=10px&amp;gZoomValue=100"&gt;exif 2.2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Druga opcja to arcymistrzostwo elektroczniczno-programistyczne, polegające na użyciu wbudowanego gniazda USB do transmisji danych. Jednak to raczej na pewno nie wypali, po pierwsze dlatego, że komunikacja USB jest hierarchiczna, a aparat jest tylko "odbiornikiem" i nie może pełnić funkcji hosta, a po drugie - nie za bardzo wiadomo jak poprawić firmware i oprogramowanie aparatu.&lt;br /&gt;&lt;br /&gt;Wniosek: za 3000 PLN miałbym około 1115 butelek mojego ulubionego piwa. Nie zamienię tego na durnowatą opcję dodawania do zdjęcia informacji o położeniu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-1158564023005732512?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/1158564023005732512/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/11/odkrywanie-tajemnic-40-stki-cd.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1158564023005732512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1158564023005732512'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/11/odkrywanie-tajemnic-40-stki-cd.html' title='Odkrywanie tajemnic 40-stki - c.d.'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-503570310288224562</id><published>2008-11-10T01:19:00.006+01:00</published><updated>2009-09-06T22:42:26.437+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Canon w rękach kj</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_y5n6mbWJAwg/SRhLSIFwbAI/AAAAAAAAAAM/XfSbXHVg-aA/s1600-h/IMG_0194.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 134px; height: 200px; border:5px solid #ccc" src="http://3.bp.blogspot.com/_y5n6mbWJAwg/SRhLSIFwbAI/AAAAAAAAAAM/XfSbXHVg-aA/s200/IMG_0194.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5267042538991152130" /&gt;&lt;/a&gt;&lt;br /&gt;Po długim oczekiwaniu połączonym ze zbieraniem pieniędzy udało mi się zakupić w końcu cyfrową lustrzankę. Oceniając plusikiem i minusikiem, po krótkim i mało wnikliwym teście wyszło, co następuje:&lt;br /&gt;- przy czułości powyżej ISO 800 aparat jest średnio użyteczny bez funkcji odszumiania. Dotyczy się to tylko długich czasów naświetlania. Przy krótkich czasach naświetlania wszystko jest w granicach rozsądku.&lt;br /&gt;+ nocna sesja przy czułości ISO 100 - 200 pokazała, że aparat nie szumi przy niskich czułościach i długich czasach naświetlania &lt;br /&gt;+ aparat bez problemu współpracuje z polskimi lampami błyskowymi z lat 70.&lt;br /&gt;+ wygoda użytkowania aparatu jest niesamowita (wliczamy w to tempo działania)&lt;br /&gt;- wymaga obiektywu. Dobrego obiektywu. Drogiego i dobrego obiektywu (mówimy o Zoomie). No, chyba, że temu, którego akurat mieliśmy zaszkodził piasek z plaż Chorwacji.&lt;br /&gt;+ liczba opcji konfiguracyjnych jest na przyzwoitym poziomie (- do tego stopnia, że można się w nich zgubić)&lt;br /&gt;- za 2300 PLN oczekiwałem większych rewelacji. Live view to fajny bajer, ale bajer. Może tak w tej cenie lepiej byłoby dopieścić matrycę?&lt;br /&gt;+ 10 mpix za tą cenę to przy tym rozmiarze matrycy rozsądna kombinacja ceny, możliwości i jakości (na 9 mpix powstawały wydruki 70x50 cm o wysokiej jakości)&lt;br /&gt;- najciekawsze jest to, że jedną z głównych wad tego aparatu przy użyciu statywu jest pozycja wyłącznika, który przy szerokiej podstawie mocującej do statywu czasami bywa trudnodostępny&lt;br /&gt;+ 1000 zdjęć na baterii i 1300 zdjęć na karcie to rozsądna ilość&lt;br /&gt;+ masa zbliżona do Zenita bardzo umila migrację na cyfraki&lt;br /&gt;- pod względem jakości zdjęć średnioformatowy Kiev nadal pozostaje poza zasięgiem Japońskich elektryków&lt;br /&gt;+ ekonomicznie Kiev nadal pozostaje poza zasięgiem budżetu kj&lt;br /&gt;+ autofokusa, nawet przy nienajlepszym oświetleniu nie można się doczepić&lt;br /&gt;- rozstawienie przycisków może nie być najwygodniejsze dla osób o małych dłoniach (+ to niech sobie kupią coś mniejszego)&lt;br /&gt;- domyślnie włączona funkcja automatycznego czyszczenia matrycy opóźnia start (+ da się to wyłączyć)&lt;br /&gt;+ profil korpusu spodobał się moim dłoniom. Plastik i guma są przyjemne w dotyku, aparat nie zniechęca do używania. Magnezowy korpus daje miłe poczucie solidności aparatu. Nie będę jednak używał tego sprzętu do oceny jakości wykonania płyt chodnikowych.&lt;br /&gt;+ joystick wbrew wielu recenzjom wcale nie okazał się taki niemiły.&lt;br /&gt;+ ekran LCD oddzielony jest jakąś plastikową szybką od użytkownika - nie zgniecie się tak prędko, jak kompakcik mojej kuzynki&lt;br /&gt;- zdążyłem się kilka razy zaplątać w pasek na szyję. Problemy były przejściowe i niegroźne, chwilowe połączenie ze statywem węzłem paskowym przyjemne może nie było, ale nie pozostawiło trwałych uszkodzeń ciała i psychiki&lt;br /&gt;- dla osoby, która nie używa Canonowskich lustrzanek na co dzień przyzwyczajenie się do rozkładu przycisków zajmuje chwilę. Dłuższą chwilę (powyżej 2h).&lt;br /&gt;+ Nobel w dziedzinie ergonomii należy się wynalazcy podświetlenia górnego ekranu LCD. W nocy to rzecz nieoceniona.&lt;br /&gt;+ cokolwiek by to nie było, Picture Style umiejętnie używane daje świetne efekty&lt;br /&gt;- dlaczego Canon stworzył mocowanie EF? M42 by nie wystarczyło?&lt;br /&gt;+ chwała Bogu, gorąca stopka się nie zmieniła od zeszłego tysiąclecia&lt;br /&gt;+ trzy opcje dostosowywalne do użytkownika, dostępne z pokrętła to dobry pomysł (- szkoda, że trzy, a nie pięć)&lt;br /&gt;- Canon chwali się, że to ma jakieś uszczelnienia przed wilgocią. Uszczelnień nie odnaleziono. Zaryzykuję stwierdzenie, że dla aparatu zabójcze mogłoby być zwykłe pokropienie wodą. Ze względów ekonomicznych, testu nie przeprowadzę.&lt;br /&gt;+ Wizjer okazał się większy, niż się obawiałem.&lt;br /&gt;+ Czułość pokazana w wizjerze to także niegłupi pomysł.&lt;br /&gt;+ Tryb A-dep to mądra sprawa.&lt;br /&gt;+ Może to standard w lustrzankach, ale mocowanie statywu na osi obiektywu powoduje, że przykręcenie 740 gramowej lustrzanki jest prostsze, niż pół kilo lżejszego PowerShota, o lekko zdecentralizowanym położeniu gwintu.&lt;br /&gt;&lt;br /&gt;Jak mi się coś jeszcze przypomni, to napiszę.&lt;br /&gt;&lt;br /&gt;Zdjęcie Teachers'a z zawartością wykonane zostało przez pijącego Damiana Bukowskiego niepijącym Canonem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-503570310288224562?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/503570310288224562/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/11/canon-w-rkach-kj.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/503570310288224562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/503570310288224562'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/11/canon-w-rkach-kj.html' title='Canon w rękach kj'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_y5n6mbWJAwg/SRhLSIFwbAI/AAAAAAAAAAM/XfSbXHVg-aA/s72-c/IMG_0194.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-666882994454057547</id><published>2008-09-22T23:04:00.010+02:00</published><updated>2009-09-06T22:42:48.931+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>kj wybiera Pythona</title><content type='html'>Przy tworzeniu wielu stron www developerzy często używają języka PHP. Ja także go używałem, znam dość dobrze jego składnię. Jednak będąc głównie programistą spotkałem się także z różnymi innymi językami, z których dwa także dość często używane są do pisania stron internetowych. Mowa o językach Ruby i Python. Wybór między nimi to jak dla mnie kwestia raczej bardziej polityczna, w dodatku zależna od aktualnych ustawień edytora. Nasuwa się jednak pytanie: dlaczego nie PHP? Spróbujmy zatem oprzeć się na pewnych przykładach.&lt;br /&gt;&lt;br /&gt;Przykład pierwszy: kilka potencjalnych wartości zmiennej.&lt;br /&gt;PHP:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;if ($zmienna == 'jedna wartość' || $zmienna == 'druga wartość' || $zmienna == 'trzecia wartość') {&lt;br /&gt;wykonaj_cos();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Brzmi znajomo, a teraz przykład w Pythonie:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;if zmienna in ['jedna wartość', 'druga wartość', 'trzecia wartość']:&lt;br /&gt;  wykonaj_cos()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python - PHP 1:0.&lt;br /&gt;&lt;br /&gt;Przykład drugi: filtracja tablicy (w Pythonie także listy).&lt;br /&gt;PHP:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env php&lt;br /&gt;$t = Array(1,2,3,4,5,6,7,8,9,10);&lt;br /&gt;$nowa_t = Array();&lt;br /&gt;foreach ($t as $el) {&lt;br /&gt;        if ($el % 2 == 0) {&lt;br /&gt;                $nowa_t[] = $el;&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;t = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;nowa_t = [v for v in t if v % 2 == 0]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python - PHP 2:0&lt;br /&gt;&lt;br /&gt;Przykład trzeci: prosta pętla z przeskokiem o 2.&lt;br /&gt;PHP:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env php&lt;br /&gt;for ($i=0;$i&lt;10;$i+=2) {&lt;br /&gt;  echo $i."\n";&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;for i in range(0,10,2):&lt;br /&gt;  print i&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3:0.&lt;br /&gt;&lt;br /&gt;Przykład czwarty: pomocny interpreter.&lt;br /&gt;PHP:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env php&lt;br /&gt;help():&lt;br /&gt;&lt;br /&gt;Fatal error: Call to undefined function help() in /home/kj/- on line 2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;help()&lt;br /&gt;&lt;br /&gt;Welcome to Python 2.3!  This is the online help utility.&lt;br /&gt;&lt;br /&gt;If this is your first time using Python, you should definitely check out&lt;br /&gt;the tutorial on the Internet at http://www.python.org/doc/tut/.&lt;br /&gt;&lt;br /&gt;Enter the name of any module, keyword, or topic to get help on writing&lt;br /&gt;Python programs and using Python modules.  To quit this help utility and&lt;br /&gt;return to the interpreter, just type "quit".&lt;br /&gt;&lt;br /&gt;To get a list of available modules, keywords, or topics, type "modules",&lt;br /&gt;"keywords", or "topics".  Each module also comes with a one-line summary&lt;br /&gt;of what it does; to list the modules whose summaries contain a given word&lt;br /&gt;such as "spam", type "modules spam".&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4:0...&lt;br /&gt;&lt;br /&gt;Przykład piąty: tempo działania.&lt;br /&gt;PHP:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env php&lt;br /&gt;for ($i=2;$i&lt;1000;$i++) {&lt;br /&gt;        $found = 0;&lt;br /&gt;        for ($n=2;$n&lt;$i;$n++) {&lt;br /&gt;                if ($i % $n == 0) {&lt;br /&gt;                        echo $i." = ".$n.'*'.$i/$n."\n";&lt;br /&gt;                        $found = 1;&lt;br /&gt;                        break;&lt;br /&gt;                        }&lt;br /&gt;                }&lt;br /&gt;        if ($found == 0) {&lt;br /&gt;                echo $i." is a prime number\n";&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;oraz wyniki:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;# time php test1.php &gt; test.txt&lt;br /&gt;real    0m0.137s&lt;br /&gt;user    0m0.110s&lt;br /&gt;sys     0m0.017s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;for n in range(2, 1000):&lt;br /&gt;     for x in range(2, n):&lt;br /&gt;         if n % x == 0:&lt;br /&gt;             print n, '=', x, '*', n/x&lt;br /&gt;             break&lt;br /&gt;     else:&lt;br /&gt;         # loop fell through without finding a factor&lt;br /&gt;         print n, 'is a prime number'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;oraz wyniki:&lt;br /&gt;&lt;pre style="overflow:auto"&gt;&lt;br /&gt;# time ./test1.py &gt; test1.txt &lt;br /&gt;real    0m0.188s&lt;br /&gt;user    0m0.148s&lt;br /&gt;sys     0m0.012s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Chwilowy koniec testu. Mam nadzieję, że podane argumenty wyjaśniły dlaczego kj wybrał akurat Pythona. Nie będę porównywał Rubiego z Pythonem, gdyż jak już wspomniałem wcześniej - jest to wybór, który ciężko jednoznacznie uzasadnić technicznie ;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-666882994454057547?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/666882994454057547/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/09/kj-wybiera-pythona.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/666882994454057547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/666882994454057547'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/09/kj-wybiera-pythona.html' title='kj wybiera Pythona'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-4426104462924036942</id><published>2008-09-15T18:19:00.003+02:00</published><updated>2009-09-06T22:43:11.960+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Gdy sieciówce brak adresu</title><content type='html'>Zapewne każdy informatyk wie o tym, że każda karta sieciowa ma swój własny, unikalny adres, zwany MAC. A przynajmniej mieć powinna. Okazuje się bowiem, że współczesna technika i dążenie do uproszczenia sprzętu spowodowała, że nie jest to już takie oczywiste. Dość często odwiedzam polskie forum użytkowników &lt;a href="http://m0n0wall.eu/forum"&gt;M0n0walla&lt;/a&gt;. Spotkałem się na nim z dość ciekawym problemem. Otóż współczesny dostawca Internetu bardzo często identyfikuje swoich klientów właśnie na podstawie adresu MAC sprzętu sieciowego. Wydaje się to słuszne, jednak zdarza się i taki sprzęt, który tego adresu potrafi... nie posiadać. Mowa tu o &lt;a href="http://www.freebsd.org/cgi/man.cgi?query=cdce"&gt;CDCE&lt;/a&gt; (Communication Device Class Ethernet), czyli swoistej "przejściówce" z USB na ethernet. Może to się wydawać śmieszne, ale tak to wygląda. Sterownik tego urządzenia w systemach NetBSD i FreeBSD w bardzo ciekawy sposób go inicjalizuje. Próbuje odczytać adres MAC z urządzenia (poprawne i pożądane zachowanie), a gdy to mu się nie uda adres MAC staje się kombinacją losowej wartości pochodzącej z licznika czasu systemu operacyjnego, stałej liczby 0x2a oraz id urządzenia (zwykle 0). Taka kombinacja daje teoretycznie unikalny adres MAC. Jednak taki sposób ustawiania adresu MAC dyskwalifikuje użycie go w sieciach, gdzie adres MAC jest podstawowym sposobem autoryzacji. Pojawia się więc problem: co z takim fantem zrobić? Jednym z moich pomysłów było stworzenie &lt;a href="http://bochnia.com.pl/~kj/if_cdce.patch"&gt;łatki&lt;/a&gt;, która przypisuje urządzeniu statyczny adres. Pojawia się jednak problem: co w przypadku, gdy w jednej domenie kolizji pojawią się dwa takie urządzenia? Aby rozwiązać ten problem należy zastanowić się nad rozbudowaniem łatki w możliwość ustawiania adresu mac np. za pomocą mechanizmu sysctl. Proponuję pomyśleć nad innymi sposobami rozwiązania tego problemu ;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-4426104462924036942?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/4426104462924036942/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/09/gdy-sieciwce-brak-adresu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4426104462924036942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/4426104462924036942'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/09/gdy-sieciwce-brak-adresu.html' title='Gdy sieciówce brak adresu'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-5820421400507420445</id><published>2008-08-24T14:14:00.003+02:00</published><updated>2009-09-06T22:43:29.979+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><category scheme='http://www.blogger.com/atom/ns#' term='matematyka'/><title type='text'>Magia liczb całkowitych</title><content type='html'>Pisząc niedawno mały program obliczający sumę kontrolną dla danego ciągu znaków zostałem nie miło zaskoczony pewnym ograniczneniem języków skryptowych (w moim przypadku - Python i Ruby). Oba te języki traktują liczby całkowite jako liczby ze znakiem i w żaden sposób nie idzie ich tego zachowania oduczyć. Z tego też powodu np. prosta negacja daje bardzo dziwne efekty:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&gt;&gt;&gt; ~4&lt;br /&gt;-5&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Chyba nie o to chodziło. Znalazłem rozwiazanie, za pomocą SWIG skonstruowałem moduł napisany w języku C, w którym z łatwością mogłem używać typów bez znaku i to w nim zaimplementowałem obliczanie sum kontrolnych dla danego ciągu znaków. Szkoda tylko, że pomimo wszystkich swoich zalet języki skryptowe potrafią także dość mocno ograniczać swobodę programisty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-5820421400507420445?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/5820421400507420445/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/08/magia-liczb-cakowitych.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/5820421400507420445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/5820421400507420445'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/08/magia-liczb-cakowitych.html' title='Magia liczb całkowitych'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-7237048374294200017</id><published>2008-07-25T22:43:00.003+02:00</published><updated>2009-09-06T22:43:42.072+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><category scheme='http://www.blogger.com/atom/ns#' term='programowanie'/><title type='text'>Open Source i społeczność</title><content type='html'>Społeczność Open Source chlubi się m.in. tym, że potrafi szybko reagować na zaistniały problem. Na ile szybko? Wczoraj dane mi było się samemu o tym przekonać...&lt;br /&gt;&lt;br /&gt;Z problemem tym miałem już do czynienia - budując router na podstawie procesora Geode GX1 wraz z typowym dla niego otoczeniem oraz na dystrybucji &lt;a href="http://m0n0.ch/wall"&gt;m0n0wall&lt;/a&gt;, spotkałem się z odmową zamontowania dysku (w moim przypadku 32-megabajtowego Compact Flasha). Wynikało to ni z tąd, ni z owąd z pewnej niedogodności. Dokładniej podsystem PCI nie mógł uwierzyć, że inicjalizowany sprzęt istnieje i należy mapować go w taki sam sposób, jak inne urządzenia ATA. Dodajmy jeszcze, że kontroler oparty jest na chipie Cyrix 5530. Problem udało mi się rozwiązać dzięki liście dyskusyjnej FreeBSD. Podano tam także łatkę, którą należało zaaplikować, aby system poprawnie uruchomił dysk. Mi się udało, jednak kilka tygodni później niemal identyczny przypadek przydarzył się kolejnemu użytkownikowi m0n0walla. On jednak nie był w stanie samodzielnie przebudować jądra systemu, a co gorsze - chciał go aktualizować, co z pewnością pociągałoby za sobą konieczność każdorazowego bawienia się z jądrem. Postanowiliśmy problem zgłosić odpowiednim siłom. Autor m0n0 jeszcze tego samego dnia odpowiedział, stosowna łatka została dodana, a ja otrzymałem zapewnienie, że będzie obecna w kolejnych wydaniach systemu.&lt;br /&gt;&lt;br /&gt;Tak oto, w ciągu jednego dnia kolejny produkt Open Source zyskał, a przy tym zyskali jego użytkownicy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-7237048374294200017?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/7237048374294200017/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2008/07/open-source-i-spoeczno.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7237048374294200017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7237048374294200017'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2008/07/open-source-i-spoeczno.html' title='Open Source i społeczność'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-7943891189431987125</id><published>2007-10-25T22:26:00.002+02:00</published><updated>2009-09-06T22:43:57.659+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='muzyka'/><title type='text'>Techniczny Chopin</title><content type='html'>Po obejrzeniu na &lt;a href="http://www.youtube.com/watch?v=8cHDyLKvDPk"&gt;YouTube&lt;/a&gt; Artura Rubinsteina grającego Polonez as-dur F. Chopina (op. 53) doszedłem do wniosku, że skoro on umie, to ja na pewno też się nauczę. Za mną stoi przecież 16 lat namiętnego obmacywania klawiatury komputera. Nie wziąłem pod uwagę, że za wykonawcą tego poloneza stoi 70 lat równie namiętnego obmacywania klawiatury pianina. No ale do idiotów świat należy. Dorwałem stosowne nuty, po czym usiłowałem wyczytać z nich główny motyw całego utworu. Po pół godzinie prób i błędów znalazłem poszukiwany fragment i zabrałem się za analizę. Pierwsza nuta, druga. No, po 3 godzinach miałem już 2 nuty potrzebne do zagrania pierwszego akordu... Na jedną rękę oczywiście. Ale jest postęp. Drugi dzień przyniósł 4 kolejne akordy, które zebrały się w jeden takt. Kolejny dzień i pierwszy takt był oczywisty na obie ręce. Pozostawało go tylko odpowiednio zagrać, co oczywiście nie było już takie proste.  Dobrze, że nasłuchałem się tego utworu wcześniej, dzięki czemu, nie patrząc w nuty mogłem spróbować odegrać melodię. I nawet się udało. W sumie liczyłem na więcej, ale i tak było nieźle. Tak minął wieczór dnia trzeciego. Dzień czwarty przyniósł kolejne odkrycie - otóż pianino ma pedały, które potrafią cuda czynić! Mało tego, w nutach zawarte są informacje kiedy i jak długo te pedały należy wciskać. Pod wieczór dnia czwartego okazało się, że pierwszy takt, grany z odpowiednim naciskaniem pedałów brzmi prawie, jak na filmie. Jak się później okazało "prawie" spowodowane było moją niewiedzą o tym, że bemole przy kluczu odnoszą się... do całej linijki utworu. Po 3-godzinnej korekcie polonez brzmiał zupełnie poprawnie. Kolejne dni upływały na ćwiczeniu kolejnych taktów, wyłuskiwaniu pojedynczych nut a także na ćwiczeniu... do-re-mi-fa-sol-la-si-do i to w obie strony. Cóż - jakoś nie miałem przyjemności wyćwiczyć tego wcześniej. Po 3 tygodniach nauki wydaje mi się, że zarówno Chopin, jak i sproszkowany Rubinstein przewracają się w grobach na odgłos mojego pianinowania...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-7943891189431987125?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/7943891189431987125/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2007/10/techniczny-chopin.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7943891189431987125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/7943891189431987125'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2007/10/techniczny-chopin.html' title='Techniczny Chopin'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-3760968682283705333</id><published>2007-08-27T23:45:00.002+02:00</published><updated>2009-09-06T22:44:21.493+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='historia'/><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><title type='text'>Pecet 15 lat temu (2)</title><content type='html'>&lt;div style="text-align: justify;"&gt;Pora na drugą część przemyśleń. Tym razem odsuniemy się nieco od sprzętu, a przejdziemy bliżej oprogramowania.&lt;br /&gt;Ostatnie obserwacje wykazują, że (podręcznikowy wręcz) stos TCP/IP systemu FreeBSD jest ok. 4-krotnie szybszy od stosu Windowsa. Jeśli weźmiemy pod uwagę, że medium testowym była sieć radiowa, różnice mogą być jeszcze większe. Jednak wracając do tematu - czy po 15 latach faktycznie nastąpiła poprawa?&lt;br /&gt;Instalacja Windowsa 3.11 potrafiła zabrać bite 5 godzin. Instalacja 386/BSD cały dzień. Czy dzisiaj jest lepiej? Okazuje się, że Windows XP instaluje się stosunkowo szybko, tj. poniżej 1 godziny. FreeBSD w zależności od ilości dodatkowego oprogramowania i medium instalacyjnego  - od 15 minut do 5-6 godzin. Ale przecież nie sama instalacja się liczy. Współczesne systemy operacyjne mają znacznie większe możliwości w tworzeniu abstrakcyjnych obiektów, przeznaczonych do magazynowania dużych ilości danych (woluminy logiczne), przyspieszania działalności komputera (ciekawe algorytmy planujące, szybki przydział pamięci). Jednak coraz więcej aplikacji, działających w przestrzeni użytkownika jest dosłownie "nabajerowana". Owocuje to tym, że owe oprogramowanie ma nieziemskie wymagania sprzętowe i po prostu muli. Pod tym względem nadal siedzimy w epoce kamienia łupanego. Dobrym przykładem jest tutaj nowy system Microsoftu - Vista. Co ciekawe - rozwiązanie Open Source -  Beryl wymaga zdecydowanie mniej a jest przy tym znacznie bardziej spektakularne. Microsoft usiłował odgapić rozwiązanie od Apple i mu znowu nie wyszło. Ale cóż. Z drugiej strony coraz szybszy sprzęt teoretycznie powinien rekompensować powolność oprogramowania, niejednokrotnie pisanego w językach skryptowych (nawet w Visual Basicu). Jednak takie podejście nadal trzyma nas - użytkowników pecetów w miejscu. Zamiast przyspieszać w zasadzie stoimy w miejscu, a przyrost mocy obliczeniowej zajmują wodotryski. Widać jednak i pozytywne strony tych 15 lat. Oprogramowanie tworzone mądrze wykorzystuje praktycznie każdy procent przyrostu mocy obliczeniowej, a dodawane nowości są w 100% funkcjonalne - nie ma miejsca na wodotryski.&lt;br /&gt;Patrząc na dzisiejszy rynek software napawa mnie nadzieją, że rozwój nadal będzie oznaczał zwiększenie funkcjonalności, a nadmiar wodotrysków będzie tylko i wyłącznie wyśmiewany...&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-3760968682283705333?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/3760968682283705333/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2007/08/pecet-15-lat-temu-2.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3760968682283705333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/3760968682283705333'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2007/08/pecet-15-lat-temu-2.html' title='Pecet 15 lat temu (2)'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-8408953273160492894</id><published>2007-08-26T23:40:00.002+02:00</published><updated>2009-09-06T22:44:52.501+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='www'/><title type='text'>Web 2.0 kontra Internatuta</title><content type='html'>&lt;div style="text-align: justify;"&gt;Skończyły się piękne czasy, gdy strona www wyglądała tak, jak przeciętny dokument, wydrukowany na kartce papieru. Web 2.0 zaczyna wymuszać inne spojrzenie na wygląd strony. Nie liczy się, czy jest ona nabajerowana do granic możliwości (i przyzwoitości), lecz czy jest ona dostępna, użyteczna i dostosowana do potrzeb osób niepełnosprawnych. Problem polega też na tym, że treść i wygląd strony muszą być od siebe odseparowane - dokument (x)html jest tylko nośnikiem danych, podczas gdy pliki css zawierają informacje o wyglądzie strony. Kolejnym problemem jest połączenie "sztywnego" szablonu z bardzo uniwersalnym programem, który w zasadzie powinien tylko w ów szablon wstawić stosowną treść. Do tego trzeba pilnować, aby (z racji optymalizacji) unikać nadmiernych pętel, etc. Wszystko pięknie, ale pojawia się problem: po co to wszystko? Przecież przeciętny użytkownik Internetu coraz bardziej obniża swój poziom intektualny. Nie próbuje zrozumieć, jak to wszystko działa i czy ta strona jest lepsza technicznie od innej.&lt;br /&gt;Lenistwo?&lt;br /&gt;Brak zdolności technicznych?&lt;br /&gt;Brak zdolności detektywistycznych?&lt;br /&gt;Nie, to nie to. Po prostu ludzie przyzwyczaili się, że wszystko, co ich otacza ma im pomagać bez względu na swoją budowę. Czy wobec takiego podejścia ludzi warto się wysilać, konstruując poprawne technicznie strony, zgodne z zaleceniami, dostępne i użyteczne? Chyba jednak nie możemy tak postąpić - zawsze może się zdarzyć, że to my będziemy potrzebować stron, stworzonych dla osób niepełnosprawnych. Dlatego też starajmy się tworzyć wszystko jak najlepiej, pomimo tego, że czasami będzie to trudne i męczące.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-8408953273160492894?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/8408953273160492894/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2007/08/web-20-kontra-internatuta.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/8408953273160492894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/8408953273160492894'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2007/08/web-20-kontra-internatuta.html' title='Web 2.0 kontra Internatuta'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1128196143518613867.post-1021396838500872098</id><published>2007-08-25T20:57:00.001+02:00</published><updated>2009-09-06T22:45:10.647+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='historia'/><title type='text'>Pecet 15 lat później</title><content type='html'>&lt;div style="text-align: justify;"&gt;Prawdziwie świadomą przygodę z komputerami zaczałęm koło 4 roku życia. Nie była ona początkowo zbyt spektakularna, lecz po tych piętnastu latach mogę już podzielić się swoimi spostrzeżeniami odnośnie komputerów, których (prawie) wszyscy używamy.&lt;br /&gt;Początki były trudne - statycznie ustawione przerwania, których zwykle było za mało, ciągłe konflikty, masa sterowników, ograniczenia BIOS-u. Jak donosi archiwalny już "PC World Komputer" ze stycznia 1994 roku instalacja BSD/386 zajęła redakcji calutki dzień. Problemy mnożyły się dosłownie wszędzie: a to nie działa cd-rom, a to z kolei niewłaściwa konfiguracja dysku i niefortunny podział partycji blokują możliwość korzystania z komputera. Instalacja sterowana ręcznie przez specjalistów z BSDI oraz od producenta komputera.&lt;br /&gt;Nieprawdopodobne?&lt;br /&gt;Ja jednak postawię dziwne pytanie: czy jest lepiej? Zarzucicie mi zapewne, że takie pytanie jest pytaniem retorycznym i tylko idiota mógłby je zadać. Jednak postaram się zaprezentować nieco inne spojrzenie na tą kwestię.&lt;br /&gt;Czym jest dzisiejszy komputer? Na pewno szybkim urządzeniem. Współczesna technologia tak rozpędziła komputer domowy, że niegdyś mógłby być on uważany za niesamowite urządzenie obliczeniowe. Jednak moc obliczeniowa nie rozwiązuje wszystkich problemów. Pomimo, że magistrala PCI jest de facto standardem, zdarzają się sytuacje, gdy np. karta sieciowa działa ze we wszystkich gniazdach, poza jednym na płycie głównej komputera. W 1994 roku narzekano na brak sterowników do sprzętu w systemach Uniksowych. Ten problem nadal jest największą bolączką użytkowników. Na szczególne wyróżnienie zasługują tutaj 3 grupy sprzętu:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;karty graficzne&lt;/li&gt;&lt;li&gt;karty radiowe&lt;/li&gt;&lt;li&gt;modemy wewnętrzne&lt;/li&gt;&lt;/ol&gt;O ile w przypadku kart graficznych producent rzeczywiście może zasłaniać się tajemnicą technologiczną, to postawa dwóch pozostałych grup jest dla mnie niewytłumaczalna. Dlaczego do jasnej cholery nie można znaleźć informacji, jak działa modem wewnętrzny? Czy w czasach szerokopasmowego dostępu do Internetu "tajniki" transmisji danych przez analogowe łącza telefoniczne jest aż tak ważną i istotną informacją? Żeby było weselej tzw. "postęp" wspomógł producentów w tworzeniu urządzeń, które praktycznie nic nie robią! W dawnych czasach karta sieciowa była tak skonstruowana, że sterownik miał za zadanie praktycznie skopiować gotowe dane z karty sieciowej do podsystemu obsługi sieci w systemie operacyjnym. Obliczanie sumy kontrolnej, odrzucanie pakietów adresowanych do innych urządzeń, usuwanie danych protokołów najniższych rzędów - to wszystko realizował sprzęt, odciążając procesor komputera oraz programistę, tworzącego sterowniki. Dzisiaj karta sieciowa praktycznie nie robi nic. Odbiera dane i wywołuje przerwanie, aby kod sterownika zrobił wszystko za nią. Programiści dostają szału, gdy sterowniki niejednokrotnie są dłuższe, niż znacznie bardziej istotne elementy systemu operacyjnego. I na co nam to wszystko? Czy cała ta "rewolucja" z PCI, USB i innymi spowodowała tylko utworzenie nowych problemów? Czy zwiększenie mocy obliczeniowej komputerów idące w parze z przerzucaniem na CPU większości obliczeń jest rozsądnym rozwiązaniem? Nasze komputery mogłyby działać szybciej, gdyby procedury obsługi przerwań w popularnych urządzeniach były krótsze. Ale co z tego, skoro i tak 200 kolejnych megaherców rozwiąże sprawę? Jednak przeskok o taką częstotliwość nie zmieni jednej rzeczy. Czasu spędzanego przez programistów, usiłujących uruchomić urządzenie pod innym systemem niż Windows, przed ekranem komputera. Przekonałem się o tym sam, przesiadując 2 godziny nad poprawieniem sterownika do radiówki, która przecież mogłaby działać i bez mojej pracy. Gdybyśmy przez te 15 lat poszli choć dwa kroki w przód.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1128196143518613867-1021396838500872098?l=kjopek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kjopek.blogspot.com/feeds/1021396838500872098/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kjopek.blogspot.com/2007/08/pecet-15-lat-pniej.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1021396838500872098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1128196143518613867/posts/default/1021396838500872098'/><link rel='alternate' type='text/html' href='http://kjopek.blogspot.com/2007/08/pecet-15-lat-pniej.html' title='Pecet 15 lat później'/><author><name>kj</name><uri>http://www.blogger.com/profile/16400893105079784643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_y5n6mbWJAwg/SohHxvK1S7I/AAAAAAAAALc/Dp_T6k307iQ/S220/KJ1.jpg'/></author><thr:total>0</thr:total></entry></feed>
