sobota, 10 kwietnia 2010

Dlaczego Python? ...po raz drugi

Postaram się przedstawić listę argumentów na korzyść języka Python.

1) Dobre nawyki programistyczne.

Spośród kilku języków (programowania) które znam i z których korzystam na co dzień, właściwie żaden (z wyjątkiem Pythona) nie narzuca dobrego stylu programowania.

Pewnego razu zaglądnąłem do katalogu z programami, które pisałem gdy uczyłem się programować w C

void menu()
{
        char Sciezka[300];  //sciezka pliku
        char wybor;
        int koniec/*konic malej petli*/,Koniec=0;/*koniec duzej petli*/
        int i=0;//pomocniczy licznik 
        
     while(!Koniec)
      {    
           koniec=0;
               printf("Twoj wybor: ");
               scanf("%s",wybor); 
      }
}

int main(int argc, char* argv[])
{   

   
    if(argc != 2){
        printf("**Brak parametrów**\n");
    } else {
         menu();

    return 0; }
}
Pomyślałem sobie: "Jaka masakra". Wyobrażacie sobie znaleźć błąd w takim kodzie?

Gdybym uczył się programować zaczynając od Pythona, pewnie nie zobaczyłbym teraz takiego bajzlu
(pomijając oczywiście wartość merytoryczną tego kodu ;)


Z drugiej jednak strony programując tylko Pythonie, z pominieciem C nie zrozumiesz jak działają wskaźniki,
ręczna alokacja pamięci (malloc, realloc, calloc, itp.) oraz jej zwalnienie. Najpradopodobniej nigdy
nie spotkasz się też z pojęciem wycieku pamięci, buffer overflow czy nie napotkasz na segmentation fault.

2) Zajebiście czytelny kod.

Zazwyczaj gdy patrze na jakiś fragment kodu napisany w języku Python zazwyczaj wiem co on "robi",
gdy zobaczę na odpowiadający mu fragment w innym języku (np. w Javie) musi upłynąć chwilka czasu zanim skumam co autor "miał na myśli" nawet gdy kod jest poprawnie skomentowany. Ponadto prawie zawsze kod w Pythonie będzie zdecydowanie krótszy (no może z wyjątkiem Rubyego, ale ten ma za to kosmiczną składnie ;)

3) Wydajność

"Python is fast enough for our site and allows us to produce
maintainable features in record times, with a minimum of developers,"
powiedział Cuong Do, Software Architect z YouTube.com.

"Python has been an important part of Google since the beginning,
and remains so as the system grows and evolves. Today dozens of Google
engineers use Python, and we're looking for more people with skills in
this language." powiedział Peter Norvig, director of search quality w Google, Inc.

"Python makes us extremely productive, and makes
maintaining a large and rapidly evolving codebase relatively
simple," powiedział Mark Shuttleworth z Thawte Consulting.

Jakieś pytania?

4) Testowanie

Testy jednostkowe są częścią języka od wersji 2.1 wzwyż.
A ich pisanie jest prawdziwą przyjemnością ;), nie to co w Javie... 

5) "Importowanie z przyszłości" :)

"Instrukcja future jest dyrektywą
kompilatora, nakazującą skompilowanie danego modułu z użyciem składni
lub semantyki, która będzie dostępna w określonej przyszłej wersji Pythona"

Fajne, nie ?:) from __future__ import *

6) Przenośność

Kod pythona możesz uruchomić przez interpretator tego języka pod daną platformę lub system,
a w praktyce na Windowsie, Linuxie, Mac'u ...

 Swoją drogą zmuszenie kogoś do pisania w C# jest ograniczaniem jego wolności.
A korzystanie z Mono jest jak murowanie nocnika do podłogi ;).

7) Sam wybierasz paradygmat.

Możesz pisać strukturalnie, obiektowo, a nawet funkcyjnie, nie to co w Javie...
żeby wypisać "hello world" na ekran musisz utworzyć obiekt. 


no i na koniec:
8) Paradoks Pythona wg. Paula Grahama

"[...]Dlatego właśnie, z braku lepszego terminu, nazwę to Paradoksem Pythona: jeśli przedsiębiorstwo decyduje się na napisanie swojego oprogramowania we względnie ezoterycznym języku, będzie mogło zatrudnić lepszych programistów, ponieważ przyciągnie do siebie wyłącznie tych, którzy byli wystarczająco dobrzy, by się tego języka nauczyć. Określenie tej sprzeczności z punktu widzenia programisty jest nawet lepsze: język programowania, którego najlepiej się nauczyć by znaleźć dobrą pracę to język programowania, którego ludzie zwykle nie uczą się po to, by znaleźć pracę."  [1]

Jak na razie tyle, jak mi się jeszcze coś przypomni to dopisze.

[1] polskie tłumaczenie eseju Paula Grahama http://www.pdembinski.konin.lm.pl/python_paradox.html
oryginał: http://www.paulgraham.com/pypar.html

sobota, 13 lutego 2010

Python IDE który wspiera Django :)

Niedawno natknąłem się na bardzo ciekawe IDE dla Pythona, wsparcie dla Django to jedna z jego zalet.


Możliwości: http://code.google.com/p/pyscripter/wiki/Features

piątek, 25 grudnia 2009

Wesołych Świąt

Z okazji świąt przygotowałem ciekawy skrypcik:
                 *                  
                ooo                 
               %oo%*                
              %%*oo*%               
             **ooo%oo*              
            **%%%*o%%o%             
                 %                  
                *%o                 
               %*%%%                
              **oo*o%               
             %%*o*o*%*              
            **%%*o**o%%             
           **o*o%o*%**%*            
          %%*o%%*%***%***           
         %%oo**%**oo%ooo*%          
        *%*%*%*%*oo%*%**%**         
       %ooooo*%%*o*oo*%*%*%%        
      *%oo**o*oo%oo%**ooo%%%%       
                 *                  
                ***                 
               o%o*o                
              %*%oo%*               
             o%*o*%**%              
            %***%oo%o*%             
           *o%o%%%%%%*%*            
          **%*o%%**o*%***           
         %*ooo%o%%o*%%**%%          
        *%%o%o***o%*%%%**o*         
       *****oo*oo*%%%**%%%o%        
      %***o%%**%%%o*oooo%***%       
     %o**o*o%***%%%o%o**%oooo*      
    o%o*o**oo*o%o**o%%%%%o%%**o     
   o*o%o%*%oo%*oo%%o*ooooo%**oo*    
  o*oo*o%%o*ooo%****oo*o%%o%o%*%%   
 *oo*ooo%o**o%**oo*o%%%o%o%oo%o*oo  
o**%ooo%o*o*o*%%o%*%%o%o%%o*oo%**** 

           Wesołych Świąt    


#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import random

def ChristmasTree(levels, n, decoration=["*"]):
    """
    level - liczba poziomów drzewka
    n - wysokość pierwszego poziomu
    decoration - lista ozdób drzewka 
    """
    for j in range(1,levels+1):
        for i in range(j*n):
            line = ""
            for k in range(2*i+1):
                line +=  random.choice(decoration)
            print line.center(2*levels*n)
    print ""
    print u'Wesołych Świąt'.center(2*levels*n) 

ChristmasTree(3, 6, ["*","%","o"])

PS. potrafisz uzyskać podobny efekt w innym języku programowania?
Podejmij wyzwanie :)

środa, 7 października 2009

Wi-Fi router ze starego laptopa

Jestem w posiadaniu starego laptopa Fujitsu Siemens Amilo M7400, który nie ma (już) dysku twardego. Postanowiłem go wykorzystać do stworzenia wi-fi routerka (nie musze kupować access pointa i wykorzystam pozornie bezużytecznego lapka).

System nie może startować z dysku twardego, jedyne możliwości to PXE boot(odpada), live CD(nie będe miał prawa zapisu na nośnik), live USB(!).

Niestety na tym sprzęcie (256Mb RAMu) nie odpale Ubuntu 9.10, nawet Xubuntu też nie wydala.
Znalazłem jednak Lubuntu (dystrybucja ubuntu z lxde,
http://download.lxde.org/lubuntu-9.10/) - wypaliłem na USB(UNetbootin, pisałem o tym w którymś z poprzednich postów) i śmiga:)

Teraz tylko skonfigurować interface'y sieciowe, włączyć routing w kernelu(echo 1 > /proc/sys/net/ipv4/ip_forward) i napisać firewall'a.

Jeszcze ważna uwaga: żeby zadziałała karta sieciowa ipw2200 należy odpalić moduł fsam7400

$sudo modprobe fsam7400 radio=1

Gdyby ktoś potrzebował szyfrowania WPA, to musi sobie skompilać firmware ze źródeł(http://ipw2200.sourceforge.net/ + instrukcja: http://ubuntuforums.org/showthread.php?t=26623), mi WEP całkowice wystarcza(iwconfig $LAN essid [nazwa_sieci] key [s:tekstowy_klucz] channel [nr_kanału] power on).

piątek, 10 lipca 2009

Potrzebujesz małe forum ?

...dodatkowo z darmowym hostingiem...bez reklam...w domenie appspot.com

Właśnie napisałem malutkie forum w GAE bazujące na stylu phpBB.

jak to wygląda? tutaj jest przykład: small-forum

Stąd można pobrać najnowszą wersje: small forum na google code

Jak zainstalować?

znaleść w pliku main.py linijkę:


class AclUser:
__admin__ = 'Twój google login' #(login administratora)

w pliku app.yaml:
application: small-forum #zmienić na własną nazwę aplikacji
i wgrać forum:
$python appcfg.py update forum

piątek, 5 czerwca 2009

log1 CMS (video) HD