Autoreninformation |
Hans-Joachim Baader (Site) befasst sich seit 1993 mit Linux. 1994 schloss er sein Informatikstudium erfolgreich ab, machte die Softwareentwicklung zum Beruf und ist einer der Betreiber von Pro-Linux.de. |
Autoreninformation |
Andreas Schott, Martin Neubauer, Ralf Hufnagel (Site) sind Entwickler bei easyVDR, welches im Mai 2006 von den Hauptverantwortlichen Uwe Kiehl und Martin Neubauer angestoßen wurde, um eine umfassende und dennoch einfach zu installierende VDR-Distribution bereitzustellen. |
Kurz erläutert: „Scheduler“ Der Scheduler (zu deutsch etwa: Arbeitsplaner) ist der Manager des Prozessors. Er verteilt die Rechenzeit der CPU möglichst gleichmäßig auf die wartenden Prozesse. Der in aktuellen Versionen des Linux-Kernels (seit 2.6.24) verwendete Completely Fair Scheduler (CFS) nutzt dazu Gruppen, in denen Prozesse jeweils eines Nutzers zusammengefasst werden. Jede Gruppe wird mit dem gleichen Anteil an Rechenzeit versehen, sodass jeder Anwender gleichberechtigt ist, unabhängig von der Anzahl und dem Leistungsbedarf der von ihm gestarteten Prozesse. Die einem Anwender zugeteilte CPU-Zeit wird wiederum gleichmäßig auf alle in seinem Kontext laufenden Prozesse verteilt. Wird die verfügbare Rechenzeit von einem Anwender nicht benötigt, so wird sie „zurückgegeben“ und vom Scheduler neu zugewiesen. |
Autoreninformation |
Mathias Menzer wirft gerne einen Blick auf die Kernel-Entwicklung, um mehr über die Funktion von Linux zu erfahren und um seine Mitmenschen mit seltsamen Begriffen und unverständlichen Abkürzungen verwirren zu können. |
>>> message = u"Hallo {0}, du hast {1} Euro im Portemonnaie.".format(u"Karl", 10) >>> print message Hallo Karl, du hast 10 Euro im Portemonnaie. |
>>> names = [u"Karl", u"Bernd", u"Hannes", u"Ina" ] >>> for name in names: ... print u"'{0}' hat {1} Buchstaben".format(name, len(name)) |
'Karl' hat 4 Buchstaben 'Bernd' hat 5 Buchstaben 'Hannes' hat 6 Buchstaben 'Ina' hat 3 Buchstaben |
>>> for name in names: ... print u"'{username}' \ ... hat {namelength} \ ... Buchstaben".format(\ ... username=name, \ ... namelength=len(name)) |
>>> print u"{0} mag Klammern wie \ ... { oder }".format(u"Bernd") Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: u' oder ' |
>>> print u"{0} mag Klammern wie {{ oder }}".format(u"Bernd") Bernd mag Klammern wie { oder } |
>>> persons = dict() |
>>> persons = {} |
>>> persons = {u"Peter":18, \ ... u"Ilse":87, u"Juergen":33, \ ... u"Jutta":25} |
>>> print persons[u"Peter"] 18 |
>>> if u"Hans" in persons: ... print persons[u"Hans"] ... else: ... print u"Der Eintrag Hans \ ... ist nicht vorhanden" |
>>> print persons.get(u"Hans", 15) 15 >>> print persons.get(u"Peter", 5) 18 |
>>> print persons.get(u"Anke") None |
>>> persons[u"Peter"] = 99 >>> print persons[u"Peter"] 99 >>> persons[u"Hans"] = 15 >>> print persons[u"Hans"] 15 |
>>> addresses = { ... u"Peter":{u"street":"Musterstr. 16", u"mobile":"0151/123 456"}, ... u"Jutta":{u"street":"Beispielstr. 99", u"mobile":"0151/33 44 55"}, ... } |
>>> print addresses[u"Peter"] |
{u'mobile': '0151/123 456', u'street': 'Musterstr. 16'} |
>>> print addresses[u"Peter"][u"street"] Musterstr. 16 |
>>> peters_data = addresses[u"Peter"] >>> type(peters_data) <type 'dict'> >>> peters_data[u"street"] 'Musterstr. 16' |
>>> print addresses[u"Peter"][u"street"] |
{u"street":u"Musterstr. 16", u"mobile":"0151/123 456"}[u"street"] |
def say_hallo(): print u"Hallo" |
def boxify(text): text_with_borders = u"= {0} =".format(text) line = len(text_with_borders) * u"=" output = u"{0}\n{1}\n{2}".format(line, text_with_borders, line) return output |
>>> print boxify(u"Mein Haus, mein Garten, meine Box") ===================================== = Mein Haus, mein Garten, meine Box = ===================================== |
def test(): print u"Hallo!" return print u"Dies ist ein Test" print u"start" test() print u"ende" |
start Hallo! ende |
def say_something(what, who=u"Karl"): print u"{0} sagt: '{1}'".format(who, what) say_something(u"Hi") say_something(u"Tach auch", u"Bernd") |
Karl sagt: 'Hi' Bernd sagt: 'Tach auch' |
def say_something(who="Karl", what): ... |
def print_a_lot(name, country, street, adress, mobile, age, sex, hobbies): print u"{name} stammt aus {country} ...".format(name=name, country=country) |
print_a_lot(name=u"Bernd", age=18, sex=u"m", street=u"Musterstrasse", adress=18, country=u"Deutschland", mobile=u"0151-123456789", hobbies=u"lesen") |
def print_info(name, country=None, street=None, adress=None, mobile=None, age=None, sex=None, hobbies=None): if age: print u"Hallo {0}! Du bist {1} Jahre alt!".format(name, age) else: print u"Hallo {0}".format(name) |
print_info(u"Jutta", age=25) |
>>> from operator import add >>> add(1, 3) 4 >>> plus = add >>> plus <built-in function add> >>> plus(1, 3) 4 |
import os counter = 0 files = os.listdir(".") for entry in files: if os.path.isfile(entry): counter += 1 print u"Es gibt {0} Dateien in diesem Verzeichnis".format(counter) |
from os import listdir |
files = listdir(".") |
#! /usr/bin/env python # -*- coding: utf-8 -*- def boxify(text): text_with_borders = u"= {0} =".format(text) line = len(text_with_borders) * u"=" output = u"{0}\n{1}\n{2}".format(line, text_with_borders, line) return output |
#! /usr/bin/env python # -*- coding: utf-8 -*- import box name = unicode(raw_input(u"Bitte Namen eingeben: ")) print box.boxify(name) |
#!/usr/bin/env python # -*- coding: utf-8 -*- from operator import add, sub, mul, div def info(*args): print "Moegliche Befehle:" print ",".join(dispatch) print "Syntax: BEFEHL [PARAM_A PARAM_B]" dispatch = { u"help": info, u"add": add, u"sub": sub, u"mul": mul, u"div": div, u"addiere": add, u"plus": add } def parser(): while True: user_command = unicode(raw_input("calc: ")) tokens = user_command.split() command = tokens[0] arg_a, arg_b = None, None if len(tokens) > 1: arg_a = int(tokens[1]) arg_b = int(tokens[2]) print tokens if command == u"quit": return elif command in dispatch: result = dispatch[command](arg_a, arg_b) print ">>> {0}".format(result) else: print "Unbekanntes Kommando '{0}'".format(command) print "Tippe 'help' fuer Hilfe." if __name__ == "__main__": parser() |
add 3 7 |
result = dispatch[command](arg_a, arg_b) |
if command == "add" or command == "addiere" or command == "plus": result = arg_a + arg_b elif command == "sub": result = arg_a - arg_b elif command == "div": result = arg_a / arg_b elif command == "mul": result = arg_a * arg_b elif command == "info": info() elif command == "quit": return else: print "Unbekanntes Kommando '{0}'".format(command) print "Tippe 'help' fuer Hilfe." print ">>> {0}".format(result) |
Autoreninformation |
Daniel Nögel (Blog) beschäftigt sich seit drei Jahren mit Python. Ihn überzeugt besonders die intuitive Syntax und die Vielzahl der unterstützten Bibliotheken, die Python auf dem Linux-Desktop zu einem wahren Multitalent machen. |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC //W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="920" height="1060" id="svg2"> <defs id="defs4"> <linearGradient id="linearGradient15295"> <stop id="stop15297" style="stop-color:#ffffff;stop-opacity:0" offset="0" /> ..... |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC //W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" version="1.1" baseProfile="full"> </svg> |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" version="1.1" baseProfile="full" width="300px" height="300px"> </svg> |
<rect x="0px" y="0px" width="300px" height="300px" fill="white" /> |
<rect x="25px" y="25px" width="250px" height="250px" fill="grey" /> |
<rect x="25px" y="25px" width="250px" height="250px" fill="grey" stroke="grey" stroke-width="1px" /> |
fill="blue" |
fill="#FF0000" fill="#F00" |
fill="rgb(0, 255, 0)" fill="rgb(0 |
<rect x="25px" y="25px" width="250px" height="250px" fill="rgb(200, 200, 200)" stroke="rgb(75, 75, 75)" stroke-width="1px" /> |
<line x1="150px" y1="25px" x2="150px" y2="275px" stroke="rgb(75, 75, 75)" stroke-width="0.5px" /> <line x1="25px" y1="150px" x2="275px" y2="150px" stroke="rgb(75, 75, 75)" stroke-width="0.5px" /> |
<circle cx="87.5px" cy="87.5px" r="10px" fill="rgb(200, 175, 0)" stroke="rgb(120, 40, 0)" stroke-width="2px" /> <circle cx="212.5px" cy="87.5px" r="20px" fill="rgb(100, 255, 150)" stroke="rgb(40, 180, 100)" stroke-width="2px" /> <circle cx="87.5px" cy="212.5px" r="30px" fill="rgb(150, 100, 255)" stroke="rgb(100, 40, 180)" stroke-width="2px" /> <text x="212.5px" y="222.5px" font-size="20px" font-style="italic" font-weight="bold" fill="white" text-anchor="middle" stroke="rgb(40, 40, 255)" > SVG </text> |
Autoreninformation |
Stefan Ohri (Blog) ist Student der Informatik an der Uni Wien. Da es ihm wichtig ist, zu verstehen, wie etwas funktioniert, schaut er sich auch die grundlegenden Dinge an. |
pcm.snd_card { type hw card 0 device 0 } ctl.snd_card { type hw card 0 device 0 } pcm.!default { type plug slave.pcm "snd_card" } |
$ cat /proc/asound/cards |
pcm.snd_card { type hw card 0 device 0 } ctl.snd_card { type hw card 0 device 0 } # Das dmix-Plug-in wird definiert. pcm.dmixer { # pcm.NAME: der Name jedes # Geraetes kann angepasst # werden type dmix ipc_key 1024 # andere Benutzer koennen # ebenfalls dmix gleichzeitig # nutzen ipc_perm 0666 slave.pcm "snd_card" slave { channels 2 } } ctl.dmixer { type hw card 0 } # Das dsnoop-Plug-in, welches es # erlaubt, mehrere Programme # gleichzeitig aufnehmen zu lassen. pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "snd_card" slave { channels 2 } } # Dies definiert unser Fullduplex- # Plug-in als Standard fuer alle # ALSA-Programme. pcm.duplex { type asym # natuerlich muss dann auch das # Gegenstueck angepasst werden playback.pcm "dmixer" capture.pcm "dsnooper" } pcm.!default { type plug slave.pcm "duplex" } |
pcm.phonon { type plug slave.pcm "phonon_vol" hint { show on # Anzeigename in den Phonon- # Einstellungen description "Alsa" } } # phonon-Lautstaerkeregler pcm.phonon_vol { type softvol # natuerlich kann der Sound # auch direkt nach dmix # oder duplex geleitet werden. slave.pcm "default" control { name "phonon_vol" card 0 } } # ctrl for phonon_vol ctl.phonon_vol { type hw card 0 } |
$ mpg123 -a phonon -cH /pfad/zur/Musik.mp3 |
$ aplay -D phonon /pfad/zur/Musik.wav |
# mpd pcm.mpd { type plug slave.pcm "mpdvol" } # clt fuer mpd ctl.mpd { type hw card 0 } # mpd volume control pcm.mpdvol { type softvol slave.pcm "duplex" control { name "MPD" card 0 } } # ctrl for mpd volume ctl.mpdvol { type hw card 0 } |
audio_output { type "alsa" name "My ALSA Device" mixer_type "mpdvol" device "mpd" mixer_device "mpdvol" mixer_control "MPD" } |
Autoreninformation |
Jonas Knudsen (Blog) nutzt lieber ALSA anstatt PulseAudio als Soundserver, da der letztere bei openSUSE 11.2 und Debian Lenny nicht vorinstalliert ist. Im Zuge der Konfiguration des MPD hat er sich intensiv mit ALSA beschäftigt. |
Autoreninformation |
Florian Bottke (Site) benutzt schon seit einigen Jahren freie Softwarelösungen, ist ursprünglich hauptsächlich wegen der freien Videoschnittsoftware Kdenlive auf Kubuntu umgestiegen. In seiner Freizeit arbeitet er am Invertika-Projekt, dreht Filme und schreibt ein dazu passendes Skript für interessierte Amateurfilmer. |
Autoreninformation |
Marc Hildebrandt (Blog) ist Supporter bei ubuntuusers.de für den Bereich „KDE Plasma“ und Mitglied des Ikhaya-Teams. Er beschäftigt sich seit 2006 mit Open Source im Allgemeinen und KDE im Speziellen. |
Autoreninformation |
Dominik Wagenführ (Blog) weiß gute Filme zu schätzen, vor allem wenn diese frei vertrieben werden. Sintel und die Blender Foundation hat er dabei mit dem Vorabkauf einer DVD unterstützt. |
Autoreninformation |
Martin Gräßlin (Blog) hat an der UDS als Upstream-KDE-Entwickler für Natty Narwhal teilgenommen. |
Buchinformationen | |
Titel | Python Phrasebook |
Autor | Brad W. Dayley |
Verlag | Sams, 2006 |
Umfang | 288 Seiten |
ISBN | 978-0672329104 |
Preis | ca. 17,- Euro |
Buchinformationen | |
Titel | JavaScript Phrasebook |
Autor | Christian Wenz |
Verlag | Sams, 2006 |
Umfang | 272 Seiten |
ISBN | 978-0672328800 |
Preis | ca. 15,- Euro |
Buchinformationen | |
Titel | MySQL Phrasebook |
Autor | Zak Greant |
Verlag | Sams, 2006 |
Umfang | 192 Seiten |
ISBN | 978-0672328398 |
Preis | ca. 19,- Euro |
Buchinformationen | |
Titel | Apache Phrasebook |
Autor | Daniel Lopez |
Verlag | Sams, 2006 |
Umfang | 240 Seiten |
ISBN | 978-0672328367 |
Preis | ca. 15,- Euro |
Autoreninformation |
Jochen Schnelle programmiert ab und an Web-Applikationen für das Intranet. Primäre Programmiersprache ist Python, als Datenbank kommt oft MySQL zum Einsatz, als Webserver der Apache. |
Buchinformationen | |
Titel | iText in action – Second Edition |
Autor | Bruno Lowagie |
Verlag | Manning, Oktober 2010 |
Umfang | 585 Seiten + 32 Seiten Vorspann |
ISBN | 978-1-93518-261-0 |
Preis | ca. 40 € |
Autoreninformation |
Michael Niedermair ist Lehrer an der Münchener IT-Schule und unterrichtet hauptsächlich Programmierung, Datenbanken und IT-Technik. Er beschäftigt sich seit Jahren mit der PDF-Erstellung, auch mit iText. |
Messen | ||||
Veranstaltung | Ort | Datum | Eintritt | Link |
PGDay.EU | Stuttgart | 06.-08.12.2010 | - | http://2010.pgday.eu/ |
Chaos Communication Congress | Berlin | 27.-30.12.2010 | 70 EUR | http://events.ccc.de/congress/2010 |
5. LIT-OL | Oldenburg | 12.02.2011 | frei | http://www.lit-ol.de/ |
CeBIT | Hannover | 01.-05.03.2011 | 39 EUR | http://www.cebit.de/ |
Chemnitzer Linux-Tage | Chemnitz | 19.-20.03.2011 | 8 EUR | http://chemnitzer.linux-tage.de/ |
Augsburger Linux-Infotag | Augsburg | 26.03.2011 | frei | http://www.luga.de/ |
$: | Shell-Prompt |
#: | Prompt einer Root-Shell – Ubuntu-Nutzer können hier auch einfach in einer normalen Shell ein sudo vor die Befehle setzen. |
~: | Abkürzung für das eigene Benutzerverzeichnis /home/BENUTZERNAME |
Impressum ISSN 1867-7991 | ||
freiesMagazin erscheint als PDF und HTML einmal monatlich. | ||
Redaktionsschluss für die Januar-2010-Ausgabe: 16. Dezember 2010 | ||
Kontakt | ||
Postanschrift | freiesMagazin | |
c/o Dominik Wagenführ | ||
Beethovenstr. 9/1 | ||
71277 Rutesheim | ||
Webpräsenz | http://www.freiesmagazin.de/ | |
Autoren dieser Ausgabe | ||
Hans-Joachim Baader | Fedora 14 | |
Florin Bottke | Invertika – ein Open-Source-MMORPG | |
Martin Gräßlin | Ubuntu Developer Summit 2010 | |
Marc Hildebrandt | Nepomuk in KDE – Theorie und Praxis | |
Jonas Knudsen | ALSA konfigurieren | |
Mathias Menzer | Der November im Kernelrückblick | |
Michael Niedermair | Rezension: iText in action – Second Edition | |
Daniel Nögel | Python-Programmierung: Teil 3 – Funktionen und Module | |
Stefan Ohri | Bildformat SVG verstehen | |
Jochen Schnelle | Rezenzion: Phrasebooks | |
Andreas Schott, Martin Neubauer und Ralf Hufnagel | easyVDR 0.8 – HDTV-Version veröffentlicht | |
Dominik Wagenführ | Rezension: Sintel |
Erscheinungsdatum: 5. Dezember 2010 | ||
Redaktion | ||
Frank Brungräber | Thorsten Schmidt | |
Dominik Wagenführ (Verantwortlicher Redakteur) | ||
Satz und Layout | ||
Ralf Damaschke | Yannic Haupenthal | |
Nico Maikowski | Matthias Sitte | |
Korrektur | ||
Daniel Braun | Stefan Fangmeier | |
Mathias Menzer | Karsten Schuldt | |
Stephan Walter | ||
Veranstaltungen | ||
Ronny Fischer | ||
Logo-Design | ||
Arne Weinberg (GNU FDL) | ||