iPhone App MyVocab

16. Mai 2010, 16:17

Ab heute gibt’s meine erste iPhone App, den Vokabeltrainer MyVocab, im iTunes App Store. Weitere Infos zu der Applikation gibt es hier auf der Webseite und im iTunes-Store.

Höhe einer UITextView an den Inhalt anpassen

23. April 2010, 11:21

Um die Höhe einer UITextView nachträglich an den Inhalt anzupassen, kann man folgenden Code verwenden.

1
2
3
4
5
6
7
8
9
10
11
12
13
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0.0, 0.0, 280.0, 0.0)];
UIFont *textViewFont = [UIFont fontWithName:@"Helvetica" size:16.0];

[self.view addSubview:textView];

textView.font = textViewFont;
textView.textColor = [UIColor blackColor];
textView.userInteractionEnabled = NO;
textView.text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nQuisque posuere lobortis augue, ut dapibus massa consectetur non.\nUt cursus ante eu ante laoreet bibendum.\n\nNullam a nibh id nisl tempus suscipit facilisis quis lectus?";

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;

Wichtig ist dabei die Reihenfolge. Die contentSize wird erst durch das Hinzufügen der textView als Subview einer anderen View gesetzt. Davor entspricht sie der frame.size. Also in diesem Fall wäre die Höhe 0.

iPhone-App MyVocab

19. April 2010, 20:08

Bald gibt es die erste iPhone-App aus dem Hause [systemfehler.net]. Und was könnte es treffenderes sein als ein Vokabeltrainer?

iPhone-App MyVocab

Assemblerprogramm

27. März 2010, 19:00

Beim Aufräumen meines Rechners habe ich noch einen interessanten Quelltext entdeckt, der während meines Studiums entstand, den ich niemanden vorenthalten möchte. Alles was dieses Assemblerprogramm macht, ist eine Folge von Hex-Werten in ihre ASCII-Entsprechung umzuwandeln.

Das Programm sollte auf einem MC 68000 Prozessor von Motorola noch lauffähig sein.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
* Christian Meilicke, Robert Schneider

  ORG     $0
  DC.L    $8000
  DC.L    START
  ORG     $2000

* 16 bytes mit den ascii-werten in hex darstellung
* werden im speicher abgelegt
  VALUES  DC.B    $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$41,$42,$43,$44,$45,$46

* register D0,D1,D4 loeschen bzw auf 0 setzen
  START AND.L #0,D0
  AND.L #0,D1
  AND.L #0,D4

* wert des bytes, das umgewandelt werden soll, in das datenregister D0 schreiben
  MOVE.B  #$FF,D0

* anfangsadresse des speicherbereichs, in dem die ascii werte abgelegt wurden
* in das adressregister A0 laden
  LEA     VALUES,A0

* damit am schluss der hex wert des bytes weiterhin in D0 steht,
* kopiere ich den wert in D4 und arbeite mit diesem wert weiter
  MOVE.B  D0,D4

* indem ich die zahl in D4 durch hex 10 teile,
* habe ich danach in den bits 0-15 von D4 den qoutienten, in den bits 16-31 den rest stehen
  DIVU  #$10,D4

* in D1 wird dann der wert der speicherstelle geschrieben, die in A0 steht, um die distanz
* von dem wert der bits 0-15 in D4 erweitert
  MOVE.(A0,D4),D1

* durch eine multiplikation mit hex 100 wird der inhalt an die richtige stelle nach rechts
* geschoben, sprich in das 2 byte
  MULU.W  #$100,D1

* durch den swap erreicht man eine vertauschung der 2 16-bit worten in D4
  SWAP  D4

* erklaerung dieses schrittes, siehe weiter oben
  MOVE.B  (A0,D4),D1

* hilfsdatenregister D4 wieder auf 0 setzen
  AND.L #0,D4

END BREAK

Eine Anzahl von (Pseudo)Zufallszahlen generieren

24. März 2010, 11:10

Mit folgender Funktion lässt sich eine gewünschte Anzahl von (Pseudo)Zufallszahlen generieren.
Ich benutze es immer, um mir die Zahlen auszugeben, die ich dann im Lotto spiele.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function genNumbers($_min = 1, $_max = 49, $_number = 6) {
  $min    = $_min;
  $max    = $_max;
  $number = $_number;
  $numbers= array();

  $array = range($min, $max);
  srand ((double)microtime()*1000000);
 
  for($x = 0; $x < $number; $x++) {
    $i = rand(1, count($array)) - 1;
    $numbers[] = $array[$i];
    array_splice($array, $i, 1);
  }
  sort($numbers);
 
  return implode(' ', $numbers);
}

Storelocator mit Google-Maps

23. März 2010, 17:54

Habe einen Prototyp für einen Storelocator mit der Google-Maps API programmiert. Die Läden werde in einem Administrationstool erfasst. Die Genauigkeit der Anzeige der einzelnen Adressen auf der Karte hängt natürlich von der Genauigkeit der Adresseingabe selbst ab.

Eine Demo des Storelocators kann man hier finden.

jQuery-Plugin imageNavigation

23. März 2010, 17:29

Während der Arbeit an einer Webseite entstand das jQuery-Plugin imageNavigation. Wie der Name schon vermuten lässt, handelt es sich dabei um die Erzeugung einer Navigation, die man dazu nutzen kann durch eine Anzahl Bilder zu blättern.

Demo und kurze Dokumentation finden sich wie gewohnt unter code.systemfehler.net.

lastInsertID mit MDB2

22. März 2010, 20:39

Mit folgendem Snippet kann man mit der Pear-Klasse MDB2 die ID des letzten eingefügten Datensatzes ermitteln.

1
2
3
4
$sql = 'INSERT INTO benutzer (vorname, name, role) VALUES ("robert", "schneider", 1)';
$res = $db->exec($sql);
if (PEAR::isError($res)) { die($res->getMessage()); }
$uId = $db->lastInsertID('benutzer');

WP-Plugin Custom Footer

27. Februar 2010, 17:53

Kleines Wordpress-Plugin, das es einem Benutzer ermöglichen soll, den Footer einer Seite zu ändern, ohne das HTML-Template bearbeiten zu müssen. Dafür muss in der Datei footer.php des verwendeten Themes lediglich die Funktion wp_footer() eingebunden sein.

Download

Content-Bereich am Hintergrundbild ausrichten

2. Juli 2009, 17:38

Mit folgendem Code lässt sich ein Content-Div relativ zum zentrierten Hintergrundbild positionieren. Benötigt wird die Javascript-Bibliothek jQuery.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$(document).ready(function() {
  resize();
  $(window).resize(function(){ resize(); });
  $(window).load(function(){ resize(); });
}

function resize() {
  bg_width    = 1280;
  bg_height   = 852;
  margin_left = 15;
  margin_top  = 15;

  doc_height = $(window).height();
  if(bg_height < doc_height) {
    margin_top += ((doc_height - bg_height)/2);
  }
  $('#main').css('margin-top', margin_top+'px');

  doc_width = $(window).width();
  if(bg_width < doc_width) {
    margin_left += ((doc_width - bg_width)/2);
  }
  $('#main').css('margin-left', margin_left+'px');
}

Typoscript Snippet Selector

12. Mai 2009, 13:59

Alle aktuellen und folgenden Typoscripts werden ab nun im T3 Snippet Selector veröffentlicht.

Tabs mit CSS

11. März 2009, 18:48

Ein Beispiel wie man mit Hilfe einer ungeordneten Liste und CSS eine Tab-Navigation mit einem Rahmen um den aktiven Tab erstellen kann.

Tabs mit CSS

Live-Beispiel mit dazugehörigem CSS gibt es hier.

Suchen, Ersetzen und reguläre Ausdrücke, Teil 2

28. Februar 2009, 16:21

Diese Funktion führt eine Suchen&Ersetzen-Aktion auf einem Text aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function searchReplace($search, $replace, $txt, &$hits = array()) {
  $matches   = array();
  $sItems    = array();
  $rItems    = array();
  $mCounter  = 0;
  $rCounter  = substr_count($replace, '%s');
  $replace   = str_replace('%s', '%1$s', $replace);
 
  preg_match_all($search, $txt, $matches, PREG_OFFSET_CAPTURE);
  $matches   = $matches[0];
  $mCounter  = count($matches);
 
  if($mCounter > 0) {
    for($i = 0; $i < $mCounter; $i++) {
      $sItems[$i] = substr($txt, $matches[$i][1], strlen($matches[$i][0]));
      $hits[$i]   = $sItems[$i];
      $rItems[$i] = sprintf($replace, $sItems[$i]);
    }
    $txt = str_replace($sItems, $rItems, $txt);
  }
 
  return $txt;
}

Als erster Parameter wird ein regulärer Audruck erwartet.
Der zweite Parameter ist eine Zeichenkette, mit der die gefundenen Werte ersetzt werden sollen. Enthält die Zeichenkette die Formatierungsanweisung ‘%s’ (Beschreibung siehe sprintf), so wird jedes Vorkommen dieser Anweisung durch den gefundenen Wert ersetzt.
Als dritter Parameter erwartet die Funktion den Text, auf dem die Aktion ausgeführt werden soll.
Der vierte Parameter ist optional. Dabei kann ein Array per Referenz übergeben werden, das nach der Ausführung der Aktion die gefundenen Werte enthält.

Manipulation von Select-Boxen

26. Februar 2009, 12:02

Ein kleines Beispiel wie man mit Hilfe von jQuery und des swapOptions-Plugins Werte in einer Selectbox selektieren und sie in eine andere übertragen kann.

Suchen, Ersetzen und reguläre Ausdrücke, Teil 1

22. Februar 2009, 23:57

Habe hier ein paar reguläre Ausdrücke für verschiedene Textwerte zusammengetragen, die ich während der Programmierung oft verwende. Natürlich könnte man diese noch weiter verfeinern, doch für meine Bedürfnisse waren sie bisher ausreichend.

Dezimalzahl:

'/^[0-9]*$/'

Textfeld:

'/^[a-zA-Z .-]*$/'

E-Mail:

"/^[a-z0-9]+([_\\.-][a-z0-9]+)*" . "@" . "([a-z0-9]+([\.-][a-z0-9]+)*)+" . "\\.[a-z]{2,4}" . "$/"
"'/[a-zA-Z0-9_-]?[a-zA-Z0-9_\.-]+[a-zA-Z0-9_-]?@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}/"

Datum:

'/^\d{2}\.\d{2}\.\d{2,4}$/'

Telefon:

"/[^+-\/0-9 ()]/"

Wer sich ein wenig mit regulären Ausdrücken beschäftigen möchte, findet hier ein sehr gutes Tutorial zu dem Thema.