Dies ist das Archiv zu der Kategorie 'Code'.

Nicht größer ist nicht gleich kleinergleich

Abgelegt unter Code am 30.09.2009

In einer Kraut und Rüben – typisierten Sprache wie PHP ist das Gegenteil von Größer (  > ) nicht unbedingt Kleinergleich ( <= ).

Immer wieder komme ich auf Sachen, die ich so löse:

if(!($id > 0))

Wenn ich herausfinden will ob z.b. eine User-Id wirklich gültig (also größer Null ist)  ist. In der kleinen Zeile sind gleich mehrere Annahmen:

  • Größer kann etwas nur sein, wenn es auch eine Zahl ist. Ist also auch eine Prüfung, ob es sich um eine Zahl handelt.
  • Die Variable kann auch (wenn schlecht programmiert wurde) null sein oder einen String enthalten.

Wäre

$id = “hi”;

Würde eine umgestellte Abfrage

if($id <= 0)

nicht greifen. In dem Fall liegt ja auch wieder eine Prüfung auf eine Zahl inne. Nur diesmal nicht zu unserem Vorteil sondern zu unserem Nachteil. Währenddessen die ursprüngliche Abfrage auch kein Problem damit hat, wenn $id ein String ist.

Faulheit

Abgelegt unter Code am 28.08.2009

&copy;kb <?= date(”Y”); ?>

Funktional programmieren in a nutshell

Abgelegt unter Code am 13.07.2009

Wenn man eine Liste mit einer Funktion filtert, die aus einer Funktion generiert worden ist der eine Liste übergeben worden ist.

Halbe Schritte

Abgelegt unter Code am 21.12.2008

Wie rundet man auf 0.5er-Stellen genau in PHP?
Die Lösung ist sogar programmiersprachenunabhängig! Verdoppeln, runden ohne Nachkommastelle, durch 2 teilen!

Unkonventionelle Lösung

Abgelegt unter Code am 12.12.2008

Wenn wordpress 2.7 meckert, dass zu wenig Speicher für die datei wp-lang.php da ist, so muss man die Datei einfach umbenennen. Einer so vielschichtigen Software wie wordpress scheint es nichts auszumachen, wenn mal eine Datei fehlt.
Nein im ernst: Mein Webspace scheint mir zu wenig Speicher für PHP-Anwendungen zuzusichern. Jetzt muss ich auf den WYSIWYG-Editor von wordpress erst mal verzichten, bis mir auf meine Support-Email geantwortet wird.

Die Fehlermeldung

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 311296 bytes) in wordpress/wp-includes/js/tinymce/langs/wp-langs.php on line 230

kann jedenfalls einfach durch ein Umbennnen der Datei eliminiert werden.

Who’s to blame

Abgelegt unter Code am 07.12.2008

git blame <dateiname>

Und man bekommt eine Auflistung wer welche Zeile in der genannten Datei zuletzt commited hat. Sehr nettes Feature, gerade auch die Benennung. So etwas hätten wir in CVS gebraucht, für unser Labor für Softwareprojekte.. hrhr.

Wo wir gerade beim Thema sind, warum git besser als X ist (via Ole). Ich mache jedenfalls im moment gut Strecke an einem meiner neusten Errungenschaften von Pragprog.

Doch nicht

Abgelegt unter Code am 06.12.2008

Nur die Datenbankverbindung war persistenter (!) als ich dachte.

Statische Überklassenvariable

Abgelegt unter Code am 06.12.2008

Gerade in PHP hat eine statische Klassenvariable von zwei Klassen mit verschiedenen Bezeichnungen über beide Klassen hinweg ihren Wert gehalten. Das einzige gemeinsame war die Benennung der Datei. Oder das ich etwas übersehen habe. Warum passiert sowas immer so knapp vor Release? ;)

Netbeans

Abgelegt unter Code am 07.11.2008

Ist wie Eclipse, nur ohne Aufgebläht.

Netbeans mit Ruby-Addon ist imho die momentan beste Ruby-IDE. Übertrifft imho sogar noch das (heftig) kostenpflichtige Rubymine von der Bedienung her. Bedienung Intuitiv, Design schlank und aufgeräumt. Man hat nicht so ein Plugin-Gefrickel wie unter Eclipse (Aptana .. Radrails..). Gerade Eclipse mit diesen so aufgeblähten Addons stürzt ja auch regelmäßig deswegen ab.

Gerade die NetBeans IDE Early Access for PHP am testen. War mit den PHP Development Tools für Eclipse noch nie richtig zu frieden. War halt nur das beste für Linux. Genauso wie Radrails. Notwendiges Übel.

Früher sah ich Netbeans immer als nicht konkurenzfähig an .. aber mit den 6er-Versionen haben sie gewaltig aufgeholt.

Wirrwar

Abgelegt unter Code am 03.11.2008

Kein Wunder, dass die Konkatenation von zwei Strings 0 ergibt, wenn der entsprechende Operator +  in PHP ein . ist. Und das, wo ich heute Mittag erst Javacode mit einer # auskommentieren wollte.

Gelangweilt?

Abgelegt unter Code am 24.10.2008

Wenn man Commitmessages als Haikus verfasst.

Presentationen über Zen

Abgelegt unter Code am 10.10.2008

Da ich in diesem Semester meine Note in ganzen vier Fächern (Für die Insider: BusApps, ERP-Systeme, GPA und Krone der Software-Engineering-Kunst: AKSE) allein über die Durchführung einer Präsentation bekomme, habe ich mir mal das Buch Presentation Zen: Simple Ideas on Presentation Design and Delivery (Voices That Matter) von Garr Reynolds gegönnt. Ich spielte schon lange mit dem Gedanken, mir das zu holen. Denn meine Designs und Präsentationen sind immer total überladen, und vor allem gefallen sie mir nicht. Aber ich wüsste auch nicht direkt, was ich anders machen sollte. Deshalb erschien mir der Ansatz von diesem Buch gut – die Rezensionen dazu und die aktuelle Situation in diesem Semester gaben ihr übriges.

Reynolds überträgt den ZEN-Gedanken, sich auf das wesentliche zu konzentrieren, auf die drei Präsentationsstufen Vorbereitung, Design und Vorführung. Zuerst erklärt er dem Leser jedoch die Grundlagen seiner Präsentaionsphilosophie: Zurückhaltung, Einfachheit und Natürlichkeit bestehend aus ZEN, Beispielen und Grundlagen der Komunikation zwischen Menschen (denn um die geht es hier ja).

Zen

Verarbeitung durch Nichtstun

Abgelegt unter Code am 10.10.2008

Es ist immer wieder interessant, dass man viele Sachen eigentlich gar nicht verlernt – sondern diese sich eher noch festigen. Mit LaTeX wollte ich schon immer beginnen, seit es Prof. Herzberg im ersten Semester uns ans Herz gelegt hat. Irgendwann im 3ten habe ich dann damit wirklich begonnen – 3, 4 Dokumente für die FH damit geschrieben. War alles noch etwas neu und unübersichtlich. Im 4ten habe ich dann, glaube ich, gar nichts damit gemacht und jetzt im 5ten geht es mir plötzlich locker von der Hand, wie wenn ich schon ewig damit arbeiten würde.

Damit möchte ich nicht sagen, dass man durch Faulheit lernt – nein. Eher, dass man nur früh genug mit etwas beginnen muss und sich nicht selbst einem zu großen Druck (evtl Zeitdruck) aussetzen darf.

Bei Ruby war das ähnlich. Ich habe mir das in den Weihnachtsferien angeschaut, dann ein ganzes Semester nichts mehr damit zu tun gehabt. Und in den Sommerferien hatte ich dieses *click*-Erlebnis und bin in Ruby on Rails durchgestiegen. Jetzt lass ich das erst mal wieder sacken, da ich vorraussichtlich bis zu den nächsten Weihnachtsferien nicht genug Zeit habe mich damit zu beschäftigen. Genauso werde ich bei Guitar Hero nicht schlechter, wenn ich es mal ein, zwei Wochen nicht spiele sondern eher besser – zocke plötzlich Lieder dir mir davor irrsinnig schnell vor kamen.

Damit ist etwas lernen wirklich effizent. Effizient von der Zeit her, die man selbst aufwendet – allerdings nicht effizient für den Zeitraum.

Mein erstes noobiges Shellscript

Abgelegt unter Code am 29.09.2008

Mich hats genervt, dass die CPU zu schnell für die Festplatte war. Die Lösung war einfach. Von einer Platte lesen, auf die andere schreiben. Da ich recht viel unrare, habe ich mir dieses kleine Shellscript überlegt.

#!/bin/sh
if [ -n $2 ]
then
unrar x -ad $1 -p$2 /home/kb1/mnt/sda9/in/
else
unrar x -ad $1 /home/kb1/mnt/sda9/in/
fi

Das ruft unrar auf, aber entpackt immer in einen bestimmten Ordner auf einem anderen Laufwerk. Also quasi eine weitere temporäre Ablage. Neben dem Downloads-Ordner. Muss man halt zwei mal aufräumen, aber dafür nicht so viel jeweils.

Dann noch ein alias auf unrar, und bis auf die Parameter geht alles wie gewohnt. Nur doppelt so schnell! Danke an Lostinspace und Flo für die kleine Hilfestellung jeweils.

Kunst in SQL

Abgelegt unter Code am 27.09.2008

Also dieses Statement finde ich wahrlich schön formatiert – ansonsten wäre der Überblick auch schwer. Und es funktioniert (natürlich!).

SELECT
	SQL_CALC_FOUND_ROWS c.id
	c.id AS id,
	c.comment AS content,
	c.date AS date,
	c.userid AS userid,
	c.userid AS username,
	v.status AS voted

FROM
	comments c

LEFT JOIN (
	SELECT *
	FROM comments_votes
	WHERE  userid =  4
) v
ON c.id=v.commentid

WHERE
	c.type = 0
	AND c.refid = 1
	AND c.status > -5

ORDER BY c.date DESC

LIMIT
	0,
	25

Ich würde es ja gerne noch gruppieren und mit HAVINGs schmücken. Aber es würde einfach keinen Sinn ergeben

Es geht um eine Votefunktion für Kommentare – so wie bei youtube. Es muss jeder User geloggt werden der abgestimmt hat, um zu verhindern dass das Vote-Element noch mals angezeigt wird. Es muss halt für jeden User anders sein, und für jeden Thread anders. Deshalb gehen keine Autojoins. Da hätte man am Ende eine Ergebnissmenge wo gar nichts mehr drin steht. Das alles ist allerdings nur das Nebenprodukt. Eigentlich sollten nur die Kommentare an sich ausgegeben werden.

SQL_CALC_FOUND_ROWS ist übrigens ein ganz besonderes Schmankerl.

Weiterbildung mit Altlasten

Abgelegt unter Code am 26.09.2008

Zur Zeit gibt es nicht viel spekakuläres. Viel zu tun für die Arbeit bei Computec, nächste Woche geht es weiter zu studieren (und ich bin mir immernoch unschlüssig was genau ich dieses Semester machen werde). Jedenfalls muss ich nochmal einen kleinen Auszug aus pragmatic thinking geben, denn das ist wirklich war und habe ich in den letzten Jahren – auch bei mir selbst beobachten können. Diese Entwicklung trifft ja fast auf mich zu, nur dass am Anfang PHP war. Was ja auch nicht arg viel anders als dieses C-Gedings ist. Aber mein Javacode hat sich wirklich stark daran orientiert wie ich PHP programmiert habe. Nicht nur von den einzelnen Zeilen, auch vom kompletten Aufbau. Und momentan versuche ich Ruby mit meinem Java Mindset zu denken. Leider. Bzw. mich nicht davon befreien kann. Aber wie der Autor schon sagt, dass ist wohl auch der Lauf der Dinge.

You learn a new programming language relative to the concepts you knew from the last programming language. That’s why in years past we saw so much C++ code that looked like C, so much Java code that looked like C++, so much Ruby code that looked like Java, and so on. It’s a natural transition from one set of skills to the next.

Pragmatic Thinking and Learning

Abgelegt unter Code am 13.09.2008

Pragmatic Thinking and Learning: Refactor Your “Wetware” (by Andy Hunt) ist meine neuste Anschaffung.
Habe es als Beta-PDF direkt im Pragmatic Bookshelf gekauft. Das heißt, ich kann jetzt schon mal die Beta-Version als PDF lesen und bekomme bei Release (in 2 Wochen) die fertiggestellte Version. Ein Super Service. Wirklich hübsch gemacht ist auch die Widmung. Auf jeder Seite werde ich daran erinnert, dass das meine spezielle Version (jahaha!!) ist: Prepared exclusively for Klaus Breyer. Nebenbei verhindern sie so wohl auch noch das illegale spreaden des Titels. Desweiteren absolute Transparenz und Service für den Kunden! Aber etwas anderes kann man vom momentan besten Verlag für Entwicklerlektüre nicht verlangen – oder?!!

Software development happens in your head. Not in an editor, IDE, or design tool. You’re well educated on how to work with software and hardware, but what about wetware—our own brains? Learning new skills and new technology is critical to your career, and it’s all in your head.
In this book by Andy Hunt, you’ll learn how our brains are wired, and how to take advantage of your brain’s architecture. You’ll learn new tricks and tips to learn more, faster, and retain more of what you learn.
You need a pragmatic approach to thinking and learning. You need to Refactor Your Wetware.

Besonders gut gefällt mir auch schon mal, was der Autor der Einleitung nach vertritt. Genau über diesen Punkt habe ich vor kurzem erst mit jemandem philosophiert.

Software isn’t designed in an IDE or other tool. It’s imagined and created in our heads.

Pragmatic Thinking

FF2 – übles JS-Workaround

Abgelegt unter Code am 11.09.2008

Zwecks meiner Arbeit musste ich mich mit dem FCKEditor beschäftigen, einem WYSWYG-Editor für Websites. Dazu sollte ich auch einen Live-Switch bauen. Direkt zur Laufzeit musste der Editor zwischen einer Textarea und dem FCKEditor switchen. Dazu hatte ich folgenden Codeabschnitt

// Set the current text in the textarea to the editor.
oEditor.SetData( document.getElementById(’DataTextarea’).value ) ;

Im FF2 hat das aber nicht funktioniert. Ich habe das testweise mal zu

// Set the current text in the textarea to the editor.
oEditor.SetData( document.getElementById(’DataTextarea’).value ) ;
alert(’switch zu html’);

umgebaut – um zu testen ob die Methode aufgerufen wird. Und wenn der einen Alert bringt, dann funktioniert das Übertragen problemlos – man kann 100 mal switchen. Wenn kein Alert drin ist, dann wird der Text aus der Textarea nicht übernommen. Jetzt war ich aber gespannt, an was das lag. Denn ein

// Set the current text in the textarea to the editor.
oEditor.SetData( document.getElementById(’DataTextarea’).value ) ;
document.getElementById(’testarea’).value = “switch zu html”;

brachte nicht das gewünschte Ergebnis. Es ging also nicht grundsätzlich darum, etwas danach auszuführen. Ich vermutete, dass ich etwas ausführen musste, dass das Script stoppt. Also versuchte ich die

function Nix()
{ /* gar nix weiter */ }

direkt danach aufzurufen:

// Set the current text in the textarea to the editor.
oEditor.SetData( document.getElementById(’DataTextarea’).value ) ;

window.setTimeout(”Nix()”,1000);

Brachte mir ebenfalls nicht das gewünschte Ergebnis. Im Endeffekt muss ich jetzt jedes mal den Editor neu erzeugen (anstatt nur die Daten zu übernehmen). Schade eigentlich!

Customized Eclipse

Abgelegt unter Code am 03.09.2008

Da ich eigentlich ständig nur Probleme mit Eclipse-Plugins habe (ich glaube ich habe inzwischen 5 Ordner aus 3 Versionen mit jeweils anderen Pluginkonfigurationen – und alle nerven rum!), hat mich folgende Seite doch leicht erfreut. Man kann dort angeben welche Eclipse-Plugins man haben will und bekommt ein Archiv zu download indem alle Plugins, und vor allem, alle Abhängigkeiten gelöst sind. Ganz speziell für einen Zugeschnitten.

Ich hoffe jetzt einfach mal, dass ich damit endlich PDT ordentlich zum laufen bekomme. RadRails scheint im Ubuntunativen Callisto-Eclipse momentan zu laufen.

Railsmagie

Abgelegt unter Code am 02.09.2008

Da sucht man erst mal ne Weile im Netz, wie man am besten die speziellen HTML-chars ersetzt. Ich habe schon vermutet, dass man das nicht alles per Hand machen muss. Und was ist es? Einfach nur ein h in den Code. Ein simples h! Nur ein Buchstabe. WTF!

Habe dazu eine sehr nette Seite gefunden, gerade für mich als Umsteiger von PHP zu Rails spitze. Jede PHP-Funktion wird dort erläutert, wie man sie in Rails umsetzt.