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ß

Dienstag, 26. Januar 2010

Arista - Transcodieren geht auch einfach




Als ich neulich mal wieder Repository gucken gespielt habe, entdeckte ich diesen Schatz. Den Arista Transcoder. Ein Multimedia Transcoder für die Gnome-Desktop-Umgebung.

http://programmer-art.org/projects/arista-transcoder

Das Tool überzeugt vor allem durch seine Schlichtheit. Rechts wählt man zunächst das Quellmedium. Der Name Gerät ist zwar wie ich finde etwas irrführend, jedoch kann man hier das Zielmedium in vorgefertigten Profilen zusammen mit dem unter Profil einzustellenden Qualität anwählen. Ein klick auf"Zur Warteschlange hinzufügen", dann lässt sich der Transcodeierungsprozess auch schon beginnen.

Arista hat ein eigenes Github
http://github.com/danielgtaylor/arista

Moved to github

Yeah as you may have noticed my bashtools have been moved to github. i will push and add as regularly as i can.

Freitag, 22. Januar 2010

Arte+7 Videos herunterladen


In der heutigen Zeit gibt es ja schon genug Schrott im Fernsehen, den man sich getrost schenken kann. Reine Hirnzeitverschwendung. Schon länger bin ich daher ein Fan der Seite Arte Plus 7 auf der man die wertvollen Dokumentationen und Sendungen noch 7 Tage nach der Erstausstrahlung sehen kann.

Leider macht es Arte den Nutzern nicht leicht, die Sendungen auf dem PC zu speichern und zu archivieren. Ich stelle hier zwei Methoden vor, wie man dennoch an die begehrten Dateien kommt.

Linux Nutzer wird es freuen, dass sich jemand mal die Mühe gemacht hat dafür ein kleines Script zu schreiben. Mitzekotze hat auf http://github.com/devttybrain/arte-7-Download-Helper ein kleines Script geschrieben, welches in Zusammenhang mit Mplayer (diesen also noch installieren, falls das noch nicht der Fall ist) den Stream dumped.

Mitzekotzes Script kann nun ausgeführt werden, nachdem es mit chmod +x ausführbar gemacht worden ist. Für Mitzekotzes Script reicht es aus die URL der Seite mit dem herunterzuladenden Video als Argument in "" zu übergeben. Also zum Beispiel:

./arte.download.sh "http://plus7.arte.tv/de/1697660,CmC=3028662.html" foobar.wmv

in die Shell eingeben.
Die "" sind notwendig, um Interpretation der in der URL enthaltenden Sonderzeichen auszuschließen.

Für den Trick mit VLC muss man sich die Streamingurl selbst herauszuchen. Das geht so.

Man öffnet mit Firefox 3.x die Arte Seite und dann das Video was man sich anschauen will. Im Firefox kann man unter Ansicht --> Seitenquelltext anzeigen, sich den Quelltext der Seite anzeigen lassen. Gibt man in das Suchfeld wmv ein, sollte man unter anderem folgendes finden:

In einer anderen Methode kann man den VLC verwenden. Hier einfach Medien --> "Netzwerkstream öffnen" und die URL eintragen. Im Dropdown Menu neben Wiedergabe, wähl man nun Konvertieren aus. Im darauf folgenden Fenster noch Ausgabe anzeigen anwählen und das wars dann.