iPhone App MyVocab
16. Mai 2010, 16:17Ab 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.
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.
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.
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.B (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 |
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); } |
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.
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.
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'); |
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.
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'); } |
Alle aktuellen und folgenden Typoscripts werden ab nun im T3 Snippet Selector veröffentlicht.
Ein Beispiel wie man mit Hilfe einer ungeordneten Liste und CSS eine Tab-Navigation mit einem Rahmen um den aktiven Tab erstellen kann.

Live-Beispiel mit dazugehörigem CSS gibt es hier.
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.
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.
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:
Textfeld:
E-Mail:
Datum:
Telefon:
Wer sich ein wenig mit regulären Ausdrücken beschäftigen möchte, findet hier ein sehr gutes Tutorial zu dem Thema.