Jest to oczywiście skrót. Dokładniejsze opisy można znaleźć na stronie.
Ja osobiście najbardziej chyba się boje urazów, które są wywoływane przez ciągłe przesiadywanie przy komputerze, takich jak pogorszenie wzroku czy RSI.
Napisz w komentarzu, czego Ty najbardziej boisz się jako programista!
Python ma to do siebie, że udostępnia ułatwienia dla programistów, które występują w niewielu innych językach. Sceptyk mógłby powiedzieć, że nie wnoszą one niczego nowego. To prawda, wszystkie rzeczy, które można za ich pomocą osiągnąć, można również uzyskać innymi sposobami w dowolnym języku.W tym wpisie przedstawiam jedną z moich ulubionych wyjątkowych cech Pythona – generatory.
Generatory
Podstawowe dwa cele, które osiąga się za pomocą generatorów to:
Istnieją również inne ich zastosowania, jednak tutaj skupię się na tym podstawowym.
Rozważmy przykład:
def foo(bar): result = [] for x in bar: # praca praca praca result.append(y) return result baz = list(foo([1,2,3,4]))
i funkcja, która robi dokładnie to samo z użyciem yield:
def foo(bar): for x in bar: # praca praca praca yield y baz = list(foo([1,2,3,4]))
Efekt działania obu przykładów jest taki sam. Realizują go one jednak w inny sposób. Pierwsza funkcja zwraca listę, druga zaś tworzy generator, który za pomocą funkcji list jest konwertowany na listę.
Zyskaliśmy zatem większą czytelność zapisu.
W czym jednak kryje się wyjątkowość generatora?
Aby to zobaczyć, należy prześledzić poniższy kod:
def foo1(bar): result = [] for x in bar: y = x * 3 print "foo1: %d" % y result.append(y) return result def foo2(bar): for x in bar: y = x * 3 print "foo2: %d" % y yield y def mysum(l): result = 0 for x in l: print "mysum: %d" % x result += x return result mysum(foo1([1,2,3,4,5])) mysum(foo2([1,2,3,4,5]))
i wynik jego działania:
foo1: 3 foo1: 6 foo1: 9 foo1: 12 foo1: 15 mysum: 3 mysum: 6 mysum: 9 mysum: 12 mysum: 15 foo2: 3 mysum: 3 foo2: 6 mysum: 6 foo2: 9 mysum: 9 foo2: 12 mysum: 12 foo2: 15 mysum: 15
Jak widać, generator jest wyliczany ,,leniwie”. Oznacza to ni mniej, ni więcej, że dana wartość jest liczona dopiero wtedy, gdy zażąda jej for, by wykonać kolejny obrót pętli.
Z punktu widzenia procedury wygląda to tak, że jej praca jest wstrzymywana, gdy wywoływany jest yield i wznawiana, gdy ktoś z zewnątrz zażąda następnej wartości.
Największą zaletą wykorzystania generatora jest to, że w procedurze nie jest tworzona tymczasowa tablica, dzięki czemu oszczędza się dużo pamięci. Wadą rozwiązania jest to, że jakiekolwiek zmiany w obiektach z których korzysta generator, w trakcie gdy generator jest wstrzymany, mogą doprowadzić do rezultatów, których się nie spodziewaliśmy, pisząc tę procedurę.
Podsumowując, generatory pozwalają na prowadzenie obliczeń w sposób kaskadowy, bez tworzenia tymczasowych tablic, które w niektórych przypadkach mogą kosztować bardzo dużo pamięci.
]]>
Najnowsza zabawka Google Jarlsberg to mikroblog z dziurami. Celem aplikacji jest umożliwienie programistom atakowania na stronę i przez to nauczenie ich kwestii związanych z bezpieczeństwem aplikacji www.
Jarlsberg został napisany w Pythonie. Na stronie można zażądać własnej instancji systemu i dzięki temu swobodnie bawić się w włamywacza, nie interferując z innymi użytkownikami. Dodatkowo na stronie zostały umieszczone materiały edukacyjne na temat bezpieczeństwa, oraz szereg misji, które należy wykonać. Można by rzec, że jest to takie Mafia Wars dla programistów (-:
]]>
Ubuntu 10.04 wydane. Zachęcam wszystkich do instalacji/aktualizacji. Wśród programów, które są nowe w tej wersji polecam Gource – wizualizator repozytorium gita.
Na blogu Django pojawiła się wiadomość potwierdzająca, że ostatni tydzień prac nad nową wersją Django odbył się zgodnie z harmonogramem. Oznacza to, że nowej wersji Django możemy spodziewać się w pierwszej połowie Maja. Jest to bardzo dobra wiadomość, ze względu na to, że nowa wersja dodaje wiele przydatnych funkcjonalności.
Dla wszystkich niewtajemniczonych warto powiedzieć, że Django to jeden z najbardziej popularnych frameworków webowych dla Pythona.
Nowe funkcjonalności godne uwagi to między innymi:
E-mail backend – sposób wysyłania maili będzie ujednolicony. Do tej pory aby wysłać maila trzeba było skorzystać z jakiejś biblioteki dostępnej dla Pythona. Teraz Django będzie posiadało własny interfejs do wysyłania maili, a wybór biblioteki będzie się dokonywało na poziomie konfiguracji (warto zauważyć, że Symfony również wprowadziło podobną funkcjonalność w swojej ostatniej wersji, wydanej w listopadzie 2009).
Wsparcie dla wielu baz danych - do tej pory można było korzystać z kilku baz danych “żaglując” konfiguracją. Teraz dodano oficjalne wsparcie, gdzie dla konkretnych obiektów będzie można wybierać bazę danych, do której będą się serializować.
Walidacja modeli – z mojego punktu widzenia najważniejsza zmiana wykonana w tej wersji. Walidacja modeli pozwala na sprawdzenie czy dane są poprawne tuż przed zapisaniem ich do bazy danych. Do tej pory było to możliwe, jednak niewygodne. Wprowadzenie walidacji do oficjalnie wspieranych funkcjonalności powinno uprościć ten proces. Warto zauważyć, że walidacja modeli jest bardzo ważnym elementem pisania dobrej aplikacji. Dzięki temu, że modele są walidaowane, programista czuje się znacznie pewniej z aplikacją, którą pisze, ponieważ wie, że nawet jeśli popełni błąd w innej części programu, walidacja modeli wykryje niepoprawne dane.
Podsumowując, wersja 1.2 Django to krok milowy w rozwoju tego frameworka. Polecam przesiadanie się na nową wersję już teraz, mimo że nie została jeszcze oficjalnie wydana (zostały do naprawienia tylko 2 bugi).
]]>
Internet Explorer 6 jest żyjącym dinozaurem i niemal owianą legendami zmorą webmasterów. Jednak Ci, którzy myślą, że IE6 umarł śmiercią naturalną, niestety się mylą.Warto przypomnieć, że IE6 jest przeglądarką już nie aktualizowaną, posiadającą dziury bezpieczeństwa. PayPal – najbardziej znana na świecie firma zajmująca się przesyłaniem pieniędzy przez internet, zablokowała dostęp z IE6 do swojego serwisu już w 2008 roku.
Dla porównania w Polsce odsetek użytkowników używających IE6 to poniżej 6%. Pokazuje to, że polscy internauci częściej wybierają nowoczesne przeglądarki, a co za tym idzie bardziej dbają o swoje bezpieczeństwo.
]]>
Kilka dni temu odbyła się konferencja F8 zorganizowana przez Facebooka. Na konferencji zostały zaprezentowane narzędzia dla developerów, które są od teraz dostępne. Facebook zmienił między innymi architekturę swojego API, jednak nie to jest najważniejszym aspektem konferencji. Najważniejsze zmiany jakie zostały wprowadzone, mają na celu większe zintegrowanie innych stron internetowych z Facebookiem.Podsumowując, Facebook robi pozytywne kroki, żeby zwiększyć swoją obecność na innych stronach. Wszystko wskazuje na to, że mu się to uda.
Polecam obejrzenie nagrań z konferencji. Szczególnie polecam: “Keynote”, “Open Graph and Social Plugins”, “Graph API”.
]]>