FizzBuzz

Eigentlich sollte man denken, ist folgende Aufgabe nicht so schwer. Ich bin allerdings doch gescheitert. Schließlich wird die FizzBuzz Aufgabe oft bei Einstellungsgesprächen gestellt.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Also zähle von 1 bis 100 hoch und teile die Zahl eben immer durch 3 = Fizz, durch 5 = Buzz und durch beides = FizzBuzz. Ansonsten gebe die Zahl korrekt aus.

Meine erste Rangehenweise war folgendermaßen:

i=1
for x in range(1, 100):
    if i/3:
        print "Fizz"
    if i/5:
        print "Buzz"
    if i/3 and i/5:
        print "FizzBuzz"
    else:
        print i
    i=i+1

Doch damit war schon einiges falsch:
1. Die Untersuchung auf FizzBuzz muss an aller erster Stelle kommen.
2. Für If Abfragen sollte das Ergebnis immer 0 sein, dass ist bei i/3 nicht unbedingt gegeben.

Letztendlich hat es dann geholfen die Reihenfolge zu ändern und darauf zu achten, dass ich eher Modulo (%) statt (/) verwende und das Ergebnis immer mit 0 zu deklarieren.
Also so:

for x in range(1, 101):
    if x % 3 == 0 and x % 5 == 0:
        print "FizzBuzz"
    elif x % 3 == 0:
        print "Fizz"
    elif x % 5 == 0:
        print "Buzz"
    else:
        print x

Das "i = 1" und die Hochzählerei "i = i + 1" kann man sich auch sparen, wenn man einfach die For Zählvariable nimmt. Diese wird bei jedem Schleifendurchlauf von alleine hochgezählt. Hätte ich bei VB.NET wohl auch gleich gemacht. Die Elif Passagen sind eigentlich auch logisch, hatte ich früher aber nicht so oft genutzt. :)
Gefunden habe ich diesen Lösungansatz bei Stackexchange

Eigentlich ist es ja alles gar nicht so schwer. Man muss nur die Eigenheiten der Sprache kennen und ein bisschen mathematisches Verständnis mitbringen.
Python habe ich bis vor einer halben Stunde noch gar nicht geschrieben, daher sind die fehlenden Eigenschaften verschmerzbar.

Natürlich kann man auch alles noch komprimieren, aber darum ging es mir hier nicht. Ich möchte den Code ja auch noch nachvollziehen können. :)

Command Line Users

Ich gehöre ja nicht zu den richtig harten Command Line Benutzern, aber das nachfolgende Bild hat doch einen wahren Kern. Jeder anständige Computernutzer wird den einen anderen Befehl schon mal gesehen haben. :)


So true

Gefunden in einem Tweet von climagic
Auch wenn ich nicht immer alle Sachen verstehe oder benutze, macht es doch einen Riesenspaß die Tweets zu lesen. :)

//Update von Carsten:
Unix is sexy Shirt
Erklärung von "Unix is sexy"

ToDo: Toffifee Buchstaben Generator

Vor einigen Jahren war ich noch ziemlich jung und etwas naiv, was die Programmierung angeht. Damals war ich auch ein großer Fan von den Toffifees und habe mal alle Buchstaben und Zahlen des Alphabets aus Toffifees nachgebaut und abfotografiert. Von nun war die Idee geboren und es gab den Toffifee Generator. Der Code ist anno 2006 entstanden und läuft (lief und läuft wieder) seitdem tadellos. 2008 hab ich mir im Anflug an Nostalgie auch meine alte Seite nochmal angepasst und somit auch den Toffifee Code erweitert.
Doch in den letzten Tagen habe ich mich gewundert, warum das Log plötzlich nicht mehr weiterzählt. Grund dafür war, dass die Logfiles vollgelaufen waren. Die Tage hatten die 2MB erreicht und somit konnte das Skript die Files nicht mehr schnell genug lesen und schreibt seit November 2011 keine Eingaben mehr rein. :)
Da ist schon der erste Punkt: Ich hatte damals noch keine Möglichkeit Datenbanken zu verwenden und so habe ich mir mit Textdateien ausgeholfen. Das funktioniert bis 3000 Zeilen auch einwandfrei, aber dann wird es irgendwann zu viel... Schließlich muss die Datei auch immer ausgegeben werden.

Ich hab mir also mal die Dateien vom Server geschnappt und wollte sie mit GEdit (auf Windows würde man Notepad++ sagen) öffnen und dieser ist damit erstmal ins Schnaufen gekommen. Danach mal via Konsole ins Verzeichnis gehüpft und die Datei mit vi geöffnet. Nach langem: "/0x" und "dd" und abschließendem ":wq!" habe ich zuerst einmal die Dateien gekürzt und die sinnlosen 0xE12335 Eingaben herausgelöscht. Da hat vermutlich irgendein Bot in der Vergangenheit gemeint, dass ich hinter dem Skript eine Datenbank habe, die man mal auf Sicherheitslücken abklopfen kann. Stattdessen wurden einfach immer sinnlose Logeinträge fabriziert. Aber nun sind die Logfiles auch wieder entsprechend kleiner und hängen auch wieder Aktuelle Einträge an.

Doch nun mal eine Frage an meine Leser:
- Wie würdet ihr das Toffifee Skript neu machen?
- Macht so eine Log-DB Sinn?

Mir schwebt so mal folgendes vor: Eine Eingabe mit einer Art Suchvorschlägen. So wie Google das zum Beispiel macht. Vielleicht auch das Ergebnis schon während der Eingabe anzeigen. Via Ajax kann man doch die Daten schnell vorladen lassen...
Die Möglichkeit kleine Rechnungen (1*1+2-3/3 = 2) einzutippen und auszugeben wäre auch cool. Mit PHP und meinem Code ist das irgendwie schwierig.

Welche Sprache nimmt man dafür am besten? Momentan ist alles in relativ schmalem PHP Code. Nimmt man dafür am besten Javascript oder geht auch was anderes?

Welche Programmiersprache lernen? - Python, Perl oder andere?

Hallo liebe Leute.
Um mal wieder was sinnvolles zu tun, dachte ich mir, dass vielleicht eine neue Programmiersprache ganz interessant wäre. Zum einen um mich selbst mal wieder weiter zu bilden. Aber zum anderen um auch manche Codes von bestimmten Programmen zu verstehen. Als Beispiel kann man hier mal den kleinen "Hack" nennen namens Dropship. Das Tool hat damals die Lücke in Dropbox genutzt um quasi Filesharing mit größeren Dateien zu betreiben. Dieses war beispielsweise in Python geschrieben, daher liegt es nahe, sich mal näher mit Python zu beschäftigen.
Da ich auch Linux Nutzer bin, sollte die Programmiersprache auch in diesem Bereich irgendwie nützlich sein. Viele schnelle "Hacks" um eine bestimmte Aufgabe zu automatisieren sind ja auch in Perl geschrieben. Daher wäre vielleicht auch Perl interessant. Andererseits wird von Perl behauptet, dass dort der Code schnell unübersichtlich sein soll.
Wenn ich etwas programmieren möchte, wird es sich vermutlich eher auf die Konsolenebene beschränken. Meistens wünsche ich mir einfach irgendwelche Skripte, die manches für mich automatisieren.

Die Sprache sollte aber auch ein paar Anforderungen beherrschen:
- Code leicht lesbar
- COM-Unterstützung
- Objekt Orientiert (wobei, dass heutzutage ja schon Standard ist)
- Laufzeitumgebungen für Linux (eventuell auch Windows und Mac)

Ein paar Grundkenntnisse habe ich natürlich auch noch: C von der Berufschule. Daher sind mir zumindest die Kontrollstrukturen, Variablen und Dateiverarbeitung relativ vertraut. Und von der Arbeit habe ich vor nem halben Jahr mich intensiv mit COM-Funktionsaufrufen und die Abfragen von Datenbanken mit sqlite3 in VB.NET beschäftigen dürfen. Da diese Programme nur als Dienste ohne Benutzereingaben konzipiert sind laufen diese "Skripte" auch weitgehenst reibungslos im Hintergrund auf einem dediziertem Server. Die Hauptarbeit sind sowieso meist Abfragen über das COM-Objekt. Da dieses "Skript" jedoch auf VB.NET basiert, läuft es nur auf Windows und braucht ewig viele Code Zeilen aufgrund der VB.NET Sprachstruktur.

Nach einer kleinen Lektüre in "A byte of Python" wurde mir klar, dass Python mir mehr Spaß als VB.NET bereiten könnte.

Daher meine Frage: Was haltet ihr von Python? Lohnt sich diese Sprache? Oder habt ihr noch eine andere Sprache, die sich gut für Konsolenprogramme und eventuell auch COM-Schnittstellen unterstützt? Anbindungen an Web 2.0 Schnittstellen wären auch dankbar.
Java und C# möchte ich bewusst vermeiden, da ich diese Sprachen nicht mag. Java hat so viele verschachtelte Aufrufe (system.lang.console.output oder so ähnlich) und C# ist fast wie C einfach öde und schwer lesbar.

Speziell zu Python:
- Kennt ihr noch weitere gute Einsteier Python Seiten?
- Welchen Editor oder IDE nutzt ihr für Python? Hab mal Eric4 genommen.
- Python 2.x oder Python 3.x verwenden?

Danke für eure Erfahrungen.

//Update: 21.01.2016:
Aufgrund einer Empfehlung per Mail kann man sich auch mal die Perl Sammlung anschauen.
Davor bitte ich aber euch: Schaut euch diese Videos an, warum man Perl besser NICHT benutzen möchte!
[youtube]https://www.youtube.com/watch?v=gweDBQ-9LuQ[/youtube]
[youtube]https://www.youtube.com/watch?v=RPvORV2Amic[/youtube]

Wenn ihr dann immer noch Perl lernen wollt: Perl 6 hat diese schreckenserregenden Features nicht mehr. :) Aber warten wir besser noch den 33c3 ab. Vielleicht gibt es dazu dann wieder einen Vortrag!