Archiv für die Kategorie „Code“

ASCII Art

Falls ihr euch denkt was das jetzt schon wieder für eine Abkürzung ist dann hier die Antwort:

American Standard Code for Information Interchange oder noch verständlicher – seht einfach mal auf eure Tastatur… Sogut wie jeder Buchstabe und jedes Zeichen das ihr seht beinhaltet diese “Tabelle”.

Nun haben sich manche mehr oder weniger die Arbeit gemacht mit diesen Zeichen ganze Bilder zu “malen”. Hier zum Beispiel eines meiner Favoriten – ein Radfahrer:

           __O
         _\-<,
       _(_)/(_)_

Ob nun einzeilig, mehrzeilig oder sogar 3D hier sind der Kreativität keine Grenzen gesetzt.

Falls jemandem der alltägliche Gebrauch des eigendlich schon fast langweiligen “Doppelpunkt-KlammerZu-Smileys” schon etwas zu wenig ist oder Zeichenprogramme einem nicht mehr fordern , dem sollte eine ASCII Tabelle weiterhelfen.

Achja und krönender Abschluss… Wer wollte Star Wars nicht schon immer mal “ASCIImiert” sehen? »Hier zum Film !!!!!!

Programmieren am Förderband?

Beim durchstöbern der Liste aller Programmiersprachen, welche auf Wikipedia zu finden ist, begann ich die Langeweile so mancher erst richtig zu verstehen. So haben sich einige die Zeit genommen mehr Witz, Herausforderung und jede Menge Unsinniges in eigens verfasste Programmiersprachen zu bringen. Von “Brainfuck”, wo die Zeichenfolgen dazu gedacht sind für das größte Maß an Verwirrung zu sorgen – über “Ook!”,  welche rein aus dem Wort “Ook” besteht – bis hin zu “Beatnik”, wo Wörter nach dessen Wert bei “Scrabble” einer Funktion zugeteilt werden.

Nun sind dies aber  Programmiersprachen, welche dem ein oder anderen schon mal zu Ohren gekommen sind.

Deshalb habe ich mich für eine esoterische Programmiersprache entschieden, welche sowohl ein wenig Witz als auch etwas Praktisches und visuelles mit sich bringt – genannt Befunge.

Befunge basiert auf einem 2D Schema und so komme ich gleich zu meinem Code den ich verfasst habe:

>>>>>>>>>>>v<<<<<<<<<<
      v<<<<?>>>>>v   ^
    v<?>>v ^  v<<?>v ^
  v<?>vv<?>vv<?>vv<?>^
  v ^ vv ^ vv ^ vv ^
  vv<<<v   vv   vv
  vvv<<<   vv   vv
  vvvv<<<<<<v   vv
  vvvvv<<<<<<   vv
  vvvvvv<<<<<<<<<v
  vvvvvvv<<<<<<<<<
  """""""
  identum
  """""""
@,<<<<<<<

Ergebnis: Gibt zufällig einen Buchstaben des Wortes “identum” zurück

Funktion:
< > ^ v – sind Richtungsänderungen (links, rechts, rauf, runter)
? – wechselt zufällig in eine Richtung (links, rechts, rauf, runter)
” – startet/beendet eine Zeichenkette
, – gibt eine Zeichenkette aus
@ – beendet das Programm

Und mit diesem Wissen lässt sich dieses Snippet eigentlich super-einfach verfolgen.
Falls Interesse besteht und das ein oder andere ausprobiert werden will, hier der Javascript-Compiler für Befunge.
Programmieren in 2D nach einem Förderbandprinzip… find ich toll!!

‘The Daily Ritual’

<?php
/**
 * 'The Daily Ritual' - A code poem by Sebastiaan de Jonge
 *
 * @author Sebastiaan de Jonge
 * @since 2010.03.01
 * @see http://www.identum.at/blog
 */
 
// Settings
$location = 'Sopron, Home';
 
// Sleeping
$alarm->buzz();
grmbl('..');
flipOver(RIGHT);
 
// If there is time we can sleep a little more
$alarm->buzz();
while(time() < (26400 + mktime(0,0,0,date('m'),date('d'),date('Y')))) {
	grmbl('Five more minutes..');
	snooze();
	sleep(300);
}
 
// Sleeping time is over, time to get up!
$alarm->buzz();
turnOffTheAlarm();
echo 'Hello world!';
 
// Get ready to go to work
freshenUp();
dressUp();
echo 'Woohoo!';
 
// Grab some cookies
$cookies = getCookies();
foreach($cookies as $cookie) {
	eat($cookie);
	echo '*yumyum*';
 
	// Check if there is time to eat more cookies
	if(time()  (28680 + mktime(0,0,0,date('m'),date('d'),date('Y')))) {
		run(array('direction' => 'Train'));
	}
}
 
// Get on the train and travel to Vienna
getOnTheTrain();
$seated = sitDown();
while($seated) {
	work();
	$location = checkLocation();
 	if($location == 'Vienna, Wien Meidling') break;
}
walkToSubway('U6');
 
// Take the subway
$trainIsThere = seeIfSubwayIsThereAlready(array('direction' => 'Florisdorf'));
if($trainIsThere) {
	run(array('direction' => 'Subway'));
}
else {
	waitUntilSubwayIsThere();
}
 
getOnSubway(array('direction' => 'Florisdorf'));
while($location != 'Vienna, Westbahnhof') {
	$location = checkLocation();
}
getOffSubway();
 
// Switch at Westbahnhof to the U3, direction Ottakring
walkToSubway('U3');
$trainIsThere = seeIfSubwayIsThereAlready(array('direction' => 'Ottakring'));
if($trainIsThere) {
	run(array('direction' => 'Subway'));
}
else {
	waitUntilSubwayIsThere();
}
getOnSubway(array('direction' => 'Ottakring'));
while($location != 'Vienna, Ottakring') {
	$location = checkLocation();
}
getOffSubway();
 
// Finally, the last walk towards Identum
if(itsRaining()) getUmbrella();
while($location != 'Vienna, Sandleitengasse 32') {
	walk(array('direction' => 'Sandleitengasse 32'));
}
 
// Arrived at work!
echo 'Woohoo!';
getCoffee('strong');
sitDown();
echo '*Pfew*';
?>

Smoothgallery, Perfect Lightbox 2, Colorbox & Co…

… die Auswahl an einer Popup-Alternative ist groß geworden. “Lightboxen” sind aus dem WWW nicht mehr wegzudenken . Nahezu jede Werbung öffnet sich schon in einem Fensterchen mit einem halbtransparenten Hintergrund. Doch nicht nur die teils nervigen Werbepopups werden durch die Lightbox verschönert, sondern auch eine Bildvergrößerung bekommt dadurch den letzten Schliff.

Als Programmierer fragt man sich: “Aber welche Lightbox Version nehme ich eigentlich?”

Im Zuge eines Typo3 CMS Projektes habe ich mir den Unterschied zwischen “SmoothGallery” und “Colorbox”, die zwei weitverbreitetsten und am meist downgeloadeten Lightboxen für Typo3 ,  etwas genauer angesehen, um diese Frage zu beantworten.

Wie der Name “Smoothgallery” schon sagt, wird hier sehr großen Wert auf eine Galerie Ansicht gelegt. Leicht einzubinden und mit wenigen Klicks und Anpassungen hat man schon was man möchte.

Das Layout lässt sich mit guten CSS-Kenntnissen leicht anpassen und die Galerie selbst macht ein schönes Bild aus jeder Bildersammlung. Etwas ärgerlich sind leider die mitgeführten Schaltflächen. Die Glühbirne zur Vergrößerung (mittlerweile upgedatet), der “Schließen” -Button und der Ladebalken sind leider etwas unpassend bzw. nicht jedermann’s Geschmack. Auch bei einem kleinen Farbwechsel des Layouts kommt man nicht drumherum diese Schaltflächen zu bearbeiten.

In der “Colorbox” steckt wohl die meiste Arbeit. Mitgeführte Slideshow, Anzeigen von Videos, weniger als 9KB Datengröße,… und, und, und. Gleich wie die Smoothgallery ist auch diese Lightboxerweiterung für Typo3 schnell und ohne viel Aufwand eingebunden. Für spezielle Layoutanpassungen lässt sich ein Besuch in der CSS-Datei nicht vermeiden, jedoch sollte bei fünf verschiedenen mitgeführten Designs auch eines dabei sein, welches gefällt. Elastisches öffnen, halbtransparente Schrägen als Hintergrund, verschiedenste Schaltflächen – ein großes Plus dieser Erweiterung.

Leider fehlt eine Galerieansicht! Hier muß man sich mit der Slideshow begnügen. Weniger zu empfehlen wenn mehr als eine Handvoll Bilder angezeigt werden möchten.

Blätterfunktion einmal anders

Fast jeder Programmierer hat sie schon einmal geschrieben, die Blätterfunktion. Auch ich bin unlängst wieder über dieses Problem gestolpert und hatte meine übliche Blätterklasse gerade nicht bei der Hand. Ein bisschen Zeit war auch vorhanden, also habe ich mich kurzerhand entschlossen, die Funktion neu zu schreiben.

Mein bisheriger Ansatz unterschied sich nicht wirklich von dem, was einem google so anbietet, wenn man nach einer Blätterfunktion sucht. Mein Problem mit diesen Varianten war jedoch immer, dass der Code durch die doch recht große Anzahl von verschachtelten If-Abfragen, relativ unübersichtlich wird und das wollte ich diesmal vermeiden.

Irgendwann ist mir dann die Idee gekommen einen Zwischenschritt einzulegen. Ich nehme einfach ein leeres Array und setzte nummerische Indizes, wo ich einen Seitenlink angezeigt haben möchte. Also in etwa so:

// $p = aktuelle Seite
// $pages = Gesamtanzahl der Seiten
// $innerLimit = Anzahl der Seitenlinks die vor und nach der Aktuellen Seite angezeigt werden sollen
// also bei $p = 5; $innerLimit = 2;
// 3 4 5 6 7
 
$arrP = array();
for ($i = $p - $innerLimit; $i <= ($p + $innerLimit); $i++)
{
if ($i >= 1 && $i <= $pages)
{
$arrP[$i] = true;
}
}

Möchte ich zusätzlich noch für die ersten und letzten paar Seiten einen Link haben, ergänze ich das Ganze um 2 For-Schleifen:

// $p = aktuelle Seite
// $pages = Gesamtanzahl der Seiten
// $innerLimit = Anzahl der Seitenlinks die vor und nach der Aktuellen Seite angezeigt werden sollen
// also bei $p = 5; $innerLimit = 2;
// 3 4 5 6 7
// $outerLimit = Anzahl der Seitenlinks die am Beginn und am Ende immer Angezeigt werden sollen
// also bei $pages = 7; $outerLimit = 2;
// 1 2 .. 6 7
 
$arrP = array();
for ($i = 1; $i <= $outerLimit; $i++) $arrP[$i] = true;
for ($i = $p - $innerLimit; $i <= ($p + $innerLimit); $i++)
{
if ($i >= 1 && $i <= $pages)
{
$arrP[$i] = true;
}
}
for ($i = $pages - $outerLimit + 1; $i <= $pages; $i++) $arrP[$i] = true;

Damit habe ich eine Array das alle anzuzeigenden Seiten als Indizes gesetzt hat und muss mich nicht um mögliche doppelte Einträge kümmern, da der betreffende Index einfach weiterhin gesetzt bleibt. Das Ganze dann einfach per Foreach ausgeben und fertig ist unsere Blätterfunktion. Eventuell möchte man noch die aktuelle Seite abfragen um den Link nicht zu setzen oder zwischen größeren Sprüngen in der Seitenzahl Punkte haben (zB 1 2 .. 5 6), was einfach zu erreichen ist, wenn man den vorherigen Index mitspeichert und vom aktuellen subtrahiert.

Have fun :)