Friday, October 31, 2008

Windows Vista - Twoja decyzja

Mniej więcej rok temu na gwiazdkę dostałem laptopa. Zrzuciła się cała rodzina. Prezentem był Fujitsu-Siemens Amilo Pro V3525.
Ponieważ był to prezent nie miałem żadnego wpływu na to co dostanę. Oczywiście na pierwszy ogień poszedł Ubunciak - Vista, po pewnym czasie, szalenie wolno zaczęła działać. Po zainstalowaniu Linuksa - zaczęło się. Karta graficzna intela nie potrafiła udźwignąć gier 3D, a raczej słabo sobie radziła zaś karta dźwiękowa - poza tym, że w ogóle jest cicha to choć firmuje się jako realtek, okazało się, że niestety w Linuksie nie mam co marzyć o tym aby wkładając słuchawki alsa wyłączała mi głośniczki i na odwrót, szalenie irytujące. Choć nie zgłosiłem buga na bugtrackerze ALSY to wciąż mnie to denerwowało.

Z zazdrością patrzyłem na kolegów, którzy kupili sobie Asusy z NVIDIĄ i Realtekiem. Coż poradzić - darowanemu koniowi nie zagląda się w zęby. "Następnym razem kupię sobie już za swoje pieniąze Maczka, i tyle."

Z całą historią wiąrze się jeszcze jedna rzecz. Na rok pojawił się kolega z Maciem. Patrzę ! A On używa na nim Windowsa. Oczywiście się wzburzyłem! Jak można zrezygnować z Leoparda ?! Na którymś seminarium ten kolega miał problemy (chociaż może w końcu mu się udało), z podpięciem rzutnika pod Laptop. Pomyślałem sobie ... hmm ... A więc nie wszystko działa.

Wczoraj moja głowa zaczęła pracować. Gdybym kupił sobie Maca to oczywiście - wiedziałby, że jest na nim Mac OS X i używał tego właśnie systemu. Czy dziwiłbym się gdyby coś nie działało, wciskając temu komputerowi Windows ? Chyba raczej nie. Kupiłem go, jest na nim Leopard, wiem, że z nim komputer będzie działał dobrze a jak chcę mieć coś innego - trzeba było sobie kupić lapka z Windows, a nie teraz cudować - ktoś mógłby mi powiedzieć.

Zacząłem się zastanawiać czy nie podobnie jest w moim przypadku. Dostałem laptopa, współpracuje z Windows Vista i wiem, że z nim działa dobrze i co !Jak próbuję mu wcisnąć Linuksa to powinienem się dziwić, że nie wszystko działa ? Chcę mieć Ubuntu - powinienem sobie kupić DELLa a nie Fujitsu-Siemens.

Tak więc od wczoraj jestem ponownie szczęśliwym użytkownikiem Windows Vista Businnes i to się nie zmieni. Doszedłem do wniosku, że wyzwaniem będzie dla mnie nauczyenie się obsługi tego systemu. Zacząłem jednak zauważać u siebie bardzi dziwne, ciekawe syndromy. Otóż - pogodzony z tym iż będę już siedział w tym systemie zacząłem go ciut ulinuksawiać. Działam już na PowerShell, wciąż nie wiem jak zmusić skrypty Pythona aby odpalały się wew. tego samego okna PoweShell a nie w cmd.exe. Zainstalowałem sobie openSSH (jedyny mój problem to to, że nie mogę używać kluczy bez haseł dla autoryzacji). Na uczelni dowiedziałem się, że Windows Vista jest zgodny z POSIX tak więc kwestią czasu jest znalezienie takich poleceń jak chmod czy wszystkich innych ps, bg, fg itd... przypominających pracę z powłoką Linuksową.

Muszę szukać po grupach ? Tak - to prawda, jak każdy użytkownik Linuksa. Pomęczę się (jak w Linuksie) i nagnę po pewnym czasie system do moich wymagań, choć czuję, że dołoże laptopowi chyba jeszcze z 2 GB ramu :) dla pewności.

Aha i na koniec. System mi jeszcze nie muli, jak zacznie zmienię zdanie, ale jak wyłączy się automatyczne instalacji aktualizacji to Vista nie jest zła i naprawdę zdziwilibyście się jak Microsoft zmienił politykę i jak wiele dobrych aplikacji do Windows jest za darmo. Np. Pash :] - choć to akurat nie zasługa MS :)

Wnioski - skoro kupujesz MacBooka - nie zrzymasz się na Apple, że działa świetnie z Mac OS X, skoro kupuję coś Microsoftu - nie zamierzam się zrzymać na to, że działa świetnie z Windows Vista (bo działa !). Mam dwie drogi, albo się wściekać i toczyć walkę albo zaakceptować rzeczywistości. Przez rok przyjmowałem postawę pierwszą, czas na drugą i czuję, że zmienie ją dopiero kupując innego laptopa.

@edit
Niestety w Windows Vista Business nie zaświadczę zgodności z POSIX ponieważ istnieje ona dopiero od wersji Enterprise w górę (czyli jeszcze tylko Ultimate)

Wednesday, October 29, 2008

Python introspekcje funkcji

Nie wyobrażacie sobie jak byłem zdziwiony kiedy wczoraj na kanale IRC python.pl zobaczyłem, pierwszy raz w życiu - na oczy, implementację introspekcji funkcji.

Funkcja może być potraktowana jak obiekt o zbiorze jakiś właściwości. Weźmy sobie funkcję:

def fun(a,b=1,c='defc'):
"""DOCSTRING"""
print '{0} {1} {2}'.format(a,b,c)

O bebechach samej definicji funkcji może nam dużo powiedzieć już samo:

dir(fun)

func_doc
Zwróci nam dokumentację funkcji # 'DOCSTRING'

func_name
To nic innego jak nazwa funkcji # 'fun'

func_defaults
Krotka podające wartości domyślne funkcji # (1, 'defc')

func_code
Zwróci nam obiekt reprezentujący ciało funkcji. Możemy spróbować go wykonać używając metody exec. Oczywiście próba zakończy się niepowodzeniem ponieważ nie przekazaliśmy do kodu argumentów.

Obiekt ten jest o tyle ciekawy iż sam posiada kilka własności, które mogą pomóc nam dalej diagnozować funkcję. Na przykład:

func_code.co_argcount
Poinformuje nas o tyle ile funkcja przyjmuje parametrów

func_code.co_filename
Powie w jakim pliku została zdefiniowana funkcja

func_code.nlocals
Ilość lokalny zmiennych (łącznie z argumentami)

func_code.co_varnames
Krotka z nazwami lokalnych zmiennych (rozpoczyna się od argumentów funkcji)

Bardzo ciekawą własnością jest func_code.co_flags. Sprawdzając czy zostały dla niej ustawione konkretne bity możemy szybko dowiedzieć się kilku interesujących rzeczy.

Jeżeli w co_flags został ustawiony bit 0x04 Funkcja posługuje się parametrem *arguments. Bit 0x08 oznacza iż nasze obiekt posługuje się **kwarguments zaś 0x20 gdy funkcja jest generatorem.

Pierwszym sposobem, aby sprawdzić czy funkcja posiada, którąś z tych właściwości jest wykonanie ilorazu bitowego z poszukiwaną wartością. Tak np. jeżeli

fun.func_code.co_flags & 0x04

wyjdzie 0 oznacza iż nasza funkcja nie korzysta z *args, jeżeli otrzymamy 0x04 - korzysta.

Więcej szczegółów:
http://docs.python.org/reference/datamodel.html#index-1940
http://docs.python.org/reference/datamodel.html#index-1965

Tuesday, October 28, 2008

Python singletone

Dziś na okienku przed angielskim usiadłem na chwilkę, żeby zaimplementować w Pythonie singletonea :) Wygląda to w tym języku szalenie oryginalnie:

#!/usr/bin/python

class Klasa(object):
    pass

class Singletone(object):

    __instance = None

    def __new__(self):

        if Singletone.__instance == None:
            Singletone.__instance = self
        return Singletone.__instance

if __name__ == '__main__':
    s1 = Singletone()
    s2 = Singletone()
    k1 = Klasa()
    k2 = Klasa()

    print 'Singletone: ' + repr(s1 is s2)
    print 'Klasa: ' + repr(k1 is k2)


Python coraz bardziej mi się podoba :)

Monday, October 27, 2008

Zmiany w wykładach Pythona

Od jakiegoś już czasu poprawiam znalezione literówki, dodaję niektóre slajdy, zmieniam kolejność itd... Dzisiaj poprowadziłem dla jednoosobowej widowni próby wykład i wprowadziłem kilka znaczących zmian w slajdach, które sprawiają iż wszystko jest bardziej spójne i zaczyna wynikać jedno z drugiego. Zmiany pojawiają się codziennie - więc proponuję zainteresowanym śledzić pliki. Nie pojawia się w nich na razie żadna nowa treść, są to tylko zmiany np kolejności slajdów, dodania komentarza, usunięcia czegoś tak aby wykład stanowił jakąś "całość".

Framework Web 2.0++ ?

Dzisiaj, jadąc autobusem, zastanawiałem się nad różnicami pomiędzy chmurami obliczeniowymi a zwykłymi aplikacjami. Dokładniej nad tym czy można byłoby zrobić małą rewolucję w stworzeniu framerowka, który zrewolucjonizowałby tworzenie witryn Web 2.0. Pierwsze co mi przyszło do głowy to stworzenie helpera ajax_link_to(source_link, destination_element), który zwróconą zawartością aktualizowałby jakiegoś na przykład diva. Oczywiście odpowiednie konfigurowywalne. Taki gotowy mechanizm do tworzenia statycznych witryn Web 2.0.

Problem pojawia się gdy musimy np. zapisać newsa czy dodać użytkownika. W aplikacjach webowych obiekty przecież giną, w zwykłej aplikacji wszystko dzieje się w jakiejś dużej pętli, której zakończenie oznacza wyjście z programu. Co można byłoby tutaj zmienić ?

Może to co przyjść do głowy to próba zapętlenia skryptu działającego na serwerze. Hmm :) Z jednej strony oczywiste jest, że jak długo nie zakończy się skrypt tak długo nie wyświetli się witryna. Możemy tutaj spekulować z użyciem buforowania i flushowania buforów. Wtedy nawet gdyby wszystko działało w pętli trzeba byłoby uporać się jeszcze z timeoutami.

Ktoś inny mógłby wpaść na pomysł trzymania wszystkich obiektów w sesjach. I jest to chyba najprostsze rozwiązanie. Framework mógłby wspierać również jakąś inteligentną metodę przekazywania do zapytań ajaxowych obiektów, z którymi będzie pracować i odbieraniu zmodyfikowanych form oraz nadpisywanie obecnych.

Pomysł zastosowania obiektowej bazy danych byłby jeszcze lepszy :) bo pozwalałby na zachowanie stanu witryny również po jej wyjściu.

Jak widać bezstanowość protokołu HTTP sprawia nie lada problemy. Istnieje oczywiście jak widać kilka rozwiązań, które mogłyby nam pomóc jednak sprawdzenie wydajności i wykonywalności ich zastosowań trzeba byłoby sprawdzić.

Friday, October 24, 2008

Python - wykłady

Dziś ukończyłem pierwszy etap przygotowywania wykładów z języka Python.

Wstęp
Cały ten fragment ma być zachętą do rozpoczęcia przygody z językiem Python. Przedstawione są w nim cele i historia języka. Na koniec pozwoliłem sobie na porównanie Python i PHP oraz Python i Rubego.

Podstawy
Bardzo ogólnikowe omówienie języka. Prezentacja ma na celu zaprezentowanie podstaw języka, ułatwiając jego późniejsze zrozumienie. Wyszedłem tutaj z założenia, że omówienie pewnych elementów dwukrotnie (wpierw pobieżnie, ponownie - dokładniej) jest właściwym podejściem. Po zakończeniu tej części będziesz miał ogólne pojęcie o języku i jego składni, czy strukturze.

Wprowadzenie
Tutaj wiele obiektów, które pojawiły się w części Podstawy omawiam już dokładniej. Te które pojawią się kolejnych, tematycznych działach wykładu - pomijam (na przykład matematykę).

Matematyka
Omówienie części matematycznej Pythona. Liczby zespolone i biblioteka math, a także rozwinięcie tematu w postaci kilku przykładów wykorzystania SciPy.

Tuesday, October 14, 2008

Przewodnik po Pylons 0.9.7

W ostatnich dniach postanowiłem usytematyzować swoją wiedzę związaną z frameworkiem Pylons. W wolnym czasie tworzyłem kolejne części przewodnika, z myślą o opublikowaniu go na łamach python.org.pl. Na "całość" składają się cztery części. Ponieważ niestety uczelnia daje się we znaki postanowiłem opublikować ich szkice a w miarę ich dopracowywania publikować oficjalnie opracowane wersje na wyżej wymienionym portalu.

Część 1 0.0.1

Część 2 0.0.1

Część 3 0.0.1

Część 4 0.0.1