Dienstag, 16. Februar 2010

Rednotebook Notiz: - Mit Python Programmieren lernen 1

Ich habe mir neulich das Buch "Python 3 for absolute beginners" gekauft. Während ich das Buch lese, werde ich mir Notizen zu dem gelesenen in meinem persönlichen Notizbuch Rednotebook machen. An welchem ich die Allgemeinheit gerne teilhaben lasse. Wie gesagt es sind nur Notizen und haben daher weder Anspruch auf Vollständigkeit noch auf Richtigkeit. Ich hoffe dennoch, dass sie dem einem oder anderen vom Nutzen sind:

===Lerning Python Part 1===

__Chapter 1 Introducing Python__
**Why python**
- leicht zu lernen
- einfach zu lesender und zu wartender Code
- schnell zu schreibender Code
- man wird gezwungen sauberen Code zu schreiben
- aussergwöhnliche Große Bibliothek mit Funktionen und Klassen

**Wann Python**
- Schnelle Zweizeiler um adminstrative Aufgaben zu erledigen
- als Projektcode
- zum Einfachen nachvollziehen simpler Algorithmen
- Flexibel einsetzenbar +Jango --> Webprogrammierung
+ Pygtk --> grafische programmierung
- als kleiner Taschenrechner

[Python-docs ""http://docs.python.org/3.1/index.html""]

Python3 ist __**nicht**__ zur früheren Version 2.x komapttibel

[Jargon Hackers Dictionary ""http://catb.org/~esr/jargon""]
- erklärt Begriffe der Informatik und der Programmierung

**Tipp**
Da Python noch immer standardmäßig in Version 2.x ausgeliefert wird, wird Python3 oftmals zusätzlich installiert und dann durch python3 in der shell aufgerufen.
Wenn man in der bash aber den alias setzt
alias py='python3'

und dann anschließend mittels source ~$USER/.bashrc die bashrc neu sourced, bekommt man eine ziemlich nette Abkürzung für die shell.

matthias@Dickkopf:~$ py
Python 3.1.1+ (r311:74480, Nov 2 2009, 14:49:22)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Verlassen mit quit()

Geany wird als IDE erwähnt. Ich empfehle Genay weil es ein bisschen mehr als ein Text-Editor und ein bisschen weniger als eine IDE ist.

**Was heißt hier Programmieren**
Problem, was gelöst werden soll --> Idee wie ich dieses Problem lösen kann --> Wie kann ich die Idee Umsetzen (welche Methoden und Algorithmen muss ich anwenden)

Problem --> Idee --> Werkzeug
_____________v________________
v
Lösung
Cyclus der Softwareentwicklung (**software development circle**)

__Chapter 2 Designing Software__
//Frage: Wie wird ein Problem in ein funktionierendes Programm umgewandelt, welches dieses in Problem löst?//

**Das Problem beschreiben**
- (1) Was soll die Software für dich tun? Welches Problem soll sie lösen?
- (2 ) Wer soll die Software benutzen?
- (3) Auf welchem System wird die Software laufen

- zu (1)
Öffnen Sie einen Texteditor und beschreiben Sie kurz welches Problem die Software lösen soll und was die Software tun soll. Welche Optionne es verwenden wird, wie es generell ausgeführt werden soll.

**Tipp:**
ich speichere alle meine Projekte unter
/home/$USER/workspace/python

- zu (2)
Für wen ist das Programm und wie Benutzerfreundlich muss ich es machen. Technical Scills des Anwenders.
Wie soll der Anwender mit dem Programm interagiieren
--> einen knopf drücken
--> komplexe grafische oberfläche mit menüstruktur
--> Text interface wie bash mit optionen
--> Eine Fragedialog beantworten
--> Wieviel hilfestellung soll angeboten werden

- zu (3)
Welches Betriebssystem (bei Linux welche Distri) wird eingesetzt. Welche Bibliotheken kann ich benutzen. Müssen bestimmten Vorraussetzungen gegeben sein, damit dass Programm läuft.


**Tipp**
Um mehr Hilfe zu erhalten dokumentiert man möglichst in englisch
Beispiel:
"
Simple Program for Systemadministrators to make a dircetory or files
shared.
Share is a file having the Rights root:Shared rwxrx---, so that the group Shared is able to access and use the file but only root can delete and write to this files.

This idea came to me when i was deleting all my Music-Collection in a non sleeping night using rm -r /media/MeinMusik instead of rm -r /media/MeineMusik1

usage: mksh where the argument is eithe a vail file or dircetory known in root-directory.
"

**Functinal Requirement**
Methoden, Funktionen, Klassen die man braucht damit die Software das tut was man von ihr erwartet. Definieren Sie in Kommentaren am Ende des Programms welche Funktionen die Software noch erhalten soll. (ein Update soll möglich sein, der User soll in der lage sein den Ort einer log-datei selbst festzulegen). Oftmals fallen einem während der Arbeit an dem Programm noch zusätzliche Funktionen und Optionen ein, die ein Program erhalten soll oder man merkt dass Software hier und da noch nicht ausreichend so gestaltet ist, dass es auch die dümmsten falscheingaben des Users abfängt.
|
/ \
|
|
**Nonfunctional Requirements**
Accessibillity, Usability, Kosteneffizens, Kompatibilität mit anderen Systemen, Sicherheit und Performance, Stabilität, Flexibilität (sind neue Features leicht zu implementieren. Muss ich neue Features implementieren?)

__Besseres Beispiel:__
"
Problem: Make A file have permissions root:Shared 750 (Shared)

Target Users: Me and Users holding Root Permissions preventing there Data to be deleted in long work nights ;)

Target System: Linux

Interface: Bash Command-line

Functional Requirements: Using chmod and chown. Printing out a message when done with the processes.

Testing: simple run program on a bunch of files and use ls to verify

Maintainer: theo@example.com
"

__In Python__
#!/usr/bin/env python3
"""
hello_world.txt
Problem: Get the Computer to print a message
Target Users: Me
Target System: GNU/Linux
Interface: Command-line
Funtional Requiremnest: Print out a messae. User must be able to input text
Testing: Simple run test - expecting a message to appear.
Maintainer: me@home.com
"""

Python Programme haben immer die Endung .py

# In python wird alles was hinter den # in einer zeile bis zum ende der zeile steht als Kommentar gewertet.

Gute Dokumentration ist notwendig, um auch später nachzuvollziehen was ein Stückchen Code macht.

"" '' sind in Python //Text-Strings// Quotes Alles was innerhalb eines """ steht wird als Kommentar gesehen, so das man nicht jede Zeile mit # versehen muss. Dass hilft auch um nicht funktionierenden Code schnell auszukommentieren. Der Unterschied zwischen "" und '' ist der, dass man '' benutzt um Kommentare in Kommentare einzubetten.
"'Was soll das.', fragte sie."

**Pseudocode benutzen**
Pseudocode ist durch ein # Kommentar gekennzeichnet und beschreibt in kurzen prägnanten Worten, welcher Schriit hier implementiert werden soll.

__Beispiel:__
"""
#!/usr/bin/env python3

hello_world.txt
Problem: Get the Computer to print a message
Target Users: Me
Target System: GNU/Linux
Interface: Command-line
Funtional Requiremnest: Print out a messae. User must be able to input text
Testing: Simple run test - expecting a message to appear.
Maintainer: me@home.com
"""
#read users input <--step ##initialize varibale that holds users input <--substep #test users input #printout users input on screen #endprogramm

Donnerstag, 11. Februar 2010

Schau doch mal mein Conky

In den letzten Tagen habe ich mich sehr detailliert mit Conky und seinen Nettigkeiten beschäftigt. Das Ergebnis sieht man im Bild.

Ich will hier nicht weiter auf die Besonderheiten und Details eingehen. Dazu gibt es schon genug ausführliches Material im Netz.
http://crunchbanglinux.org/forums/topic/59/my-conky-config/
http://conky.linux-hardcore.com/

Zudem gibt es auf der Website von Conky eine ausführliche Dokumentation.

Ich werde einfach nur ein Conkyschalter vorstellen mit dem mehrere Conkys verwalten kann:

Conkymain (Ist die Hauptdatei):
"# Use Xft?
use_xft yes
xftfont Trebuchet MS:size=8
xftalpha 0.8
text_buffer_size 256

update_interval 2
total_run_times 0

####edit this lines if conky does not work propertly
#default 512
max_specials 1024
default 16384
max_user_text 18384
####edit this lines if conky does not work propertly

# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_transparent yes
#own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager


double_buffer yes
#minimum_size 220
draw_shades no
draw_outline no
draw_borders no
stippled_borders 0
border_margin 5
border_width 1
default_color 719ECE
color1 EF6631
alignment bottom_left
gap_x 15
gap_y 25
no_buffers yes
uppercase no
cpu_avg_samples 1
net_avg_samples 2
override_utf8_locale yes
use_spacer yes


TEXT
${font OpenLogos:size=22}J
${font}$nodename
${font OpenLogos:size=12}t${font} $sysname $kernel on $machine
${font StyleBats:size=12}q${font} Uptime: ${alignr}${uptime}
${hr}
${exec grep -m 1 "model name" /proc/cpuinfo | sed 's/^.*: //g'}
${font Poky}P ${font}CPU: ${cpu cpu1}% ${alignr}${cpugraph cpu1 10, 100 EF6631 EF6632}
${font Poky}H ${font}HDD: $diskio ${alignr}${diskiograph /dev/sda 10,100 EF6631 EF6632}
$diskio_read (disk read) ${alignr} $diskio_write (disk write)
${hr}
${font StyleBats:size=12}g${font} RAM: ${alignr}$mem / $memmax
${font StyleBats:size=12}j${font} SWAP: ${alignr}$swap / $swapmax
${hr}
${font Pie charts for maps:size=12}7${font} ${fs_free_perc /}% free / ${alignr 8}${fs_bar 4,100 /}
${font Pie charts for maps:size=12}7${font} ${fs_free_perc /boot}% free /boot ${alignr}${fs_bar 4,100 /boot}
${hr}
$processes processes ($running_processes running)

NAME $alignr PID CPU
${color1}${top name 1} $alignr ${top pid 1} ${top cpu 1}
${color white}${top name 2} $alignr ${top pid 2} ${top cpu 2}
${color}${top name 3} $alignr ${top pid 3} ${top cpu 3}
${top name 4} $alignr ${top pid 4} ${top cpu 4}
${top name 5} $alignr ${top pid 5} ${top cpu 5}

"

netioconky:
"
use_xft yes
xftfont Trebuchet MS:size=8
xftalpha 0.8
text_buffer_size 2048
update_interval 2
total_run_times 0
own_window yes
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 220 0
draw_shades no
draw_outline no
draw_borders no
stippled_borders 0
border_margin 5
border_width 1
own_window_colour grey
color1 white
color2 EF6631
alignment top_right
#gap_x 15
gap_y 40
no_buffers yes
uppercase no
cpu_avg_samples 1
net_avg_samples 2
override_utf8_locale yes
use_spacer none
if_up_strictness adress

TEXT
${if_up eth0}
${font VariShapes Solid}F${downspeedgraph 15, 100 EF6631 EF6632} ${font VariShapes Solid}E${upspeedgraph 15, 100 EF6631 EF6632}
${else}
${if_up eth1}
${font VariShapes Solid}F${downspeedgraph 15, 100 EF6631 EF6632} ${font VariShapes Solid}E${upspeedgraph 15, 100 EF6631 EF6632}
${else}
There is no connection ${font Smiley}m
${endif}

"

Das Script kann versteckt zum Beispiel als .conkystart.sh angelegt werden und zum Beispiel
zu den zu startenden Programmen hinzugefügt werden:
"
#!/bin/bash
CONKY_RC=$HOME/.conky/conkymain
SLEEP_TIME=$1 ${SLEEP_TIME:=30}
if pidof conky | grep [0-9] > /dev/null

then
exec killall conky
else
sleep $SLEEP_TIME
conky -c $CONKY_RC &
conky -c $HOME/.conky/conkynet &
#conky addmoresconkyshere
exit

fi

"

Achja hätte ich ganz vergessen. Das ganze funktioniert nur mit ConkyColors und den entsprechenden Fonts. Viel Spaß