RSS
 

FTP Backup von Verzeichnisen über die Komandozeile

22 Apr

Wer schon mal versucht hat per FTP auf der Kommandozeile etwas zu machen, wird sehr schnell festgestellt haben, dass es 1.) recht mühsam und unkomfortabel ist, sich mit den vorhandenen Befehlen durch einen Verzeichnisbaum zu hangeln und dass (viel Wichtiger) 2.) manche Sachen einfach nicht gehen. So ist es zum Beispiel nicht möglich, einen Verzeichnisbaum mit einem Befehl herunter zu laden!! Man kann immer nur eine Datei gleichzeitig laden.

Mir ist das noch nie aufgefallen, da ich immer mit FTP-Programmen gearbeitet habe, die machen das quasi “im Hintergrund” für einen. Wenn man das aber auf der untersten Ebene versucht – sprich auf der Kommandozeile – dann fällt das eben auf.

Konkret ging es darum, einen Backup-Server, auf dem nur FTP-Zugriff möglich war (ja, leider, ich hätte auch lieber per ssh drauf zugegriffen!), ein Backup im Hintergrund auf ein NAS zu machen, ohne dabei über ein FTP den Hauptrechner zu belasten, bzw. das ganze zu automatisieren.

Machbar ist es nun nicht über ftp, sondern per wget:

wget -r -l0 -np ftp://user:password@host.com/verzeichnis

-r steht für rekursiv (also alle Dateien durchsuchen)
-l0 steht für die Verzeichnistiefe (0 = unbeschränkte Tiefe, 1 = Eine Verzeichnisebene, 2 = Zwei Verzeichnisebenen, etc.)
-np steht für “no parent”, also nicht in die darüber liegenden Verzeichnisse wechseln
/verzeichnis/ ist optional

Das ganze kann man dann noch wunderbar mit dem screen Befehl oder einem cronjob verknüpfen.

Link: http://www.essential-freebies.de/board/viewtopic.php?t=4075

 
 

Typo3 Backend: stdWrap in eigner Funktion nutzen

11 Apr

Um in einen Aufruf einer php-Funktion in einer eigenen Extension das “Schweizer Messer” ‘’stdWrap” nutzen zu können bedarf es einiger – nicht wirklich gut dokumentierter – Kniffe. Beispielsweise ist es sinnvoll, einen Wrap um ein eigenes Feld setzen zu können, ohne dass dies im PHP-Code hardkodiert werden muss, oder ein Template genutzt und geparst werden muss.

Und so funktioniert es.
Wir verwenden im Beispiel ein Typoscript, dass eine eine userFunc aufruft und ”apptitle” als Parameter wrappen soll.

  10 = USER_INT
  10 {
    	userFunc = tx_lpiphone_pi2->getXMLValue
    	apptitle.stdWrap.dataWrap = <apptitle updated="{field:tstamp}">|</apptitle>
  }

Zuerst sucht man sich das entsprechende Element aus dem Konfigurationsarray.

 function FUNCTIONNAME ($content, $conf)    {
		$this->conf=$conf;
		...
 }

nun muss es durch das cObj-Objekt “geschleust” werden und dort dann die stdWrap-Methode aufgerufen werden. Die stdWrap-Mehtode cObj-Objekt nimmt zwei Parameter entgegen: Der erste Parameter ist der Parameter/die Variable auf der der stdWrap angewendet werden soll. Der zweite Parameter ist ein array der die stdWrap Anweisungen enthält (was wir uns gleich aus dem $conf-igurations-Array bauen werden).

Den zweiten Parameter (also die Anweisungen) holen wir uns jetzt aus dem $conf array:

$arrayValueFromConfig = 'apptitle'; //das ist der Parametername aus dem Typoscript
$arrayValueFromConfigPlusPoint = $arrayValueFromConfig."."; //hier fügen wir einen Punkt (".") hinzu damit wir einen Array kriegen!.

$valueToWrap = "Beispielvariable"; // Wer aus dem Phpskript, der per stdWrap verarbeitet werden soll (hier ge-dataWrappt).

Diese so zusammen gebastelten Werte übergeben wir jetzt an die funktion stdWrap vom cObj-Objekt und fügen sie der Variable $content hinzu, damit sie im Frontend angezeigt wird.

 $content .= $this->cObj->stdWrap($valueToWrap, $conf[arrayValueFromConfigPlusPoint]);

Hier noch ein einfacheres Beispiel, was die Verwendung noch etwas veranschaulicht:

$valueToWrap = "hallo";
$wrapAnweisungsArray = array ('case' => 'upper', 'wrap' => '<font size="10"> | </font>');
$content .= $this->cObj->stdWrap($valueToWrap,$wrapAnweisungsArray);

// gibt folgendes aus: <font size="10">HALLO</font>

http://www.pi-phi.de/functions.html
http://www.typo3.net/tsref/functions/stdwrap/
http://wiki.typo3.org/De:TSref/stdWrap

 
 

Typo3: Backend-Felder an die richtige Stelle positionieren

06 Apr

Um im Typo3 Backend selbst erstellte Felder an die richtige Stelle zu positionieren, gibt es nachfolgende Möglichkeit.

Beispiel:

  • Aus welcher Tabelle: ”tt_content”
  • Das (Datenbank-)Feld das eingebunden werden soll ‘tx_lpiphonedisplay_color’
  • In welchen CType soll das neue Feld eingefügt werden: ”lp_iphone_pi1” (hier könnte auch so was stehen, wie ”textpic” oder ”text”).
  • Vor oder nach welchem Feld es eingefügt werden soll: ”before:tx_lpiphone_lp_aditional_items” (fügt das neue Feld vor dem Feld ”tx_lpiphone_lp_aditional_items” ein). Entsprechend ”after:” für nach dem Feld.

In der Datei ”ext_tables.php” werden folgende Zeilen hinzugefügt:


// in $tempColumns wird das Feld erzeugt (sieht bei Euch bestimmt ganz anders aus
// hier werden drei Radobuttons für die Werte 1,2,3 erzeugt
$tempColumns = Array (
	"tx_lpiphonedisplay_color" => Array (
		"exclude" => 1,
		"label" => "LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color",
		"config" => Array (
			"type" => "radio",
			"items" => Array (
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.1", "1"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.2", "2"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.3", "3"),
			),
		)
	),
);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);

// ### diese Zeile fügt nun Euer neues Feld an die richtige Stelle ein: ###
t3lib_extMgm::addToAllTCAtypes('tt_content','tx_lpiphonedisplay_color','lp_iphone_pi1','before:tx_lpiphone_lp_aditional_items');
 
 

XML mit typo3 ausgeben

28 Mrz

“Lass’ uns doch eine App machen” – so fing das ganze einmal an. Gesagt getan. Es wurde drauf los programmiert. Wir wussten, wie die App aussehen sollte und auch was sie können sollte: Sie sollte in etwa so aussehen, wie die vom größten Konkurrenten – nur besser. Die Daten sollten aus einem vorhandene Datenpool kommen, der in einer MySQL Datenbank vor lag.

Die App war nach einer “gewissen” Entwicklungszeit dann auch so gut wie fertig, es fehlten nur noch die Daten. Diese waren noch nicht eingefügt worden, da der Entwickler – wie das ja oft der Fall ist, entweder mitten in einem Projekt war, oder einfach keine freie Kapazität hatte, sich um eine Schnittstelle zu kümmern.

Es musste also eine andere Lösung her. Als ich mein Problem einem Freund erzählte bekam ich nur ein kurzes “typo3″ kann doch auch XML ausspucken – ich hab das mal bei einem Flash Projekt gemacht” zu hören. Gesagt, getan – und so fing das ganze Projekt an, das sich in den letzten zwei Jahren zu einem beachtlichen Framework entwickelt hat.

Das schöne daran ist, dass keine einzige Zeile Code in php geschrieben werden muss, sondern dass die ganze Ausgabe über typoscript gesteuert werden kann. XML eignet sich hervorragend dazu, weil es in Prinzip aus lauter Wraps besteht.

Das Grundgerüst sieht in etwa so aus:

page = PAGE
   page {
   typeNum = 111
   config.disableAllHeaderCode = 1
   config.additionalHeaders = Content-type:text/xml
   config.xhtml_cleaning = 0

   10 = TEXT
   10.value = <?xml version="1.0" encoding="utf-8" standalone="yes"?>
   20 = COA
   20 {
      stdWrap.dataWrap = <root>|</root>
      10 < temp.your_wrapped_items
   }

Damit kann man dann wunderbaren XML-Code ausgeben um diesen wiederum in iPhone Anwendungen lesen zu können.

Worauf ihr unbedingt achten müsst: UTF-8 ist zwingend erforderlich, sonst machen die Parser auf dem iPhone nur Zicken.

 
No Comments

Posted in iphone, typo3

 

xCode per WGET downloaden

30 Nov

Im Leben eines (iPhone-) Entwicklers wird man von Apple alle paar Monate dazu genötigt, die komplette Entwicklungsumgebung (xCode) herunter zu laden. Selbst mit einer 16.000er Leitung kann das über eine Stunde benötigen, da die Datei mehrere GB groß ist. Ärgerlich ist das ganze, da eigentlich nur das SDK benötigt wird und nicht die ganze Entwicklungsumgebung (das ist etwa so, als ob man für ein neues Word-Datei-Format jedes mal das komplette Office-Paket herunter laden muss). Sei’s drum…
Am schönsten wäre es wenn die Datei gleich auf das NAS gespeichert würde. Das geht prinzipiell erst mal nicht, weil man sich bei Apple einloggen muss (ein Cookie gesetzt bekommt) und dann erst den Download starten kann.
Hier nun der workaround:

  • Cookie exporter im Firefox installieren (https://addons.mozilla.org/en-US/firefox/addon/66579/)
  • Firefox neu starten
  • Bei Apple im Devcenter einloggen (http://developer.apple.com/iphone)
  • Cookies mittels Coockie exporter in eine Datei exportieren (z.B. export_coockies.txt)
  • Diese Datei in das Verzeichnis des NAS/Linux-Systems legen in dem der Download passieren soll
  • mit folgendem Befehl den xCode-Download starten (gilt hier exemplarisch für xCode 4.2):

wget –server-response –continue –no-check-certificate –load-cookies=export_coockies.txt https://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.2__final/xcode_3.2.5_and_ios_sdk_4.2_final.dmg

  • Das Ganze lässt man am besten per “sreen”-Befehl in einem virtuellen Terminal laufen, damit man es dann mit CTRL-A D im Hintergrund laufen lassen kann.

Update 1:
Irgendwie gibt es seit einer Weile mit dieser Methode Fehlermeldungen (ich bin dem Grund nicht wirklich auf die Spur gekommen) und deshalb hier noch eine kleine aber effektive Verbesserung:
Der Teil des Links wird nicht per “Link kopieren” von der Webseite kopiert, sondern ihr müsst ihn zuerst anklicken, bis der Download startet und dann in der Downloadliste im Kontextmenü (rechtsklick) “Download Link kopieren” anklicken. Damit bekommt ihr einen Link der direkt auf die Datei zeigt – etwa so:

http://adcdownload.apple.com/Developer_Tools/xcode_4.0.2_and_ios_sdk_4.3/xcode_4.0.2_and_ios_sdk_4.3.dmg

 
 

iPhone prepaid in den USA vewenden

21 Apr

Wer kennt da nicht: man fährt in den Urlaub und möchte dort auf seinen Datentarif nicht verzichten. Dann erkundigt man sich mal pro forma nach den Roamingtarifen im Ausland. Bei t-mobile beispielsweise erfährt Mann dann recht freundlich: 0,47 Cent pro KB. Das klingt auf den ersten Blick nicht nach viel bis man nachrechnet. Bei normaler Benutzung seines iPhones kommt man dann beim Überschlagen schnell auf über 1000 Euro in ein paar Tagen. Inakzeptabel. Die wollen mein Geld einfach nicht. Es gibt auch kein Datenpaket dass man fürs Ausland buchen könnte.

Also ist die einzige Lösung, das iPhone zu entsperren und eine lokale Datenkarte zu besorgen.

In den USA bietet AT&T als einziges einen brauchbaren Datentarif an. Für 19.95$ bekommt man 100MB. In einem AT&T Shop gibt es die Karte, die man am besten gleich mit dem Datentarif aufladen lässt. Alternativ kann man ein GoPhone in so gut wie jedem Elektronikladen kaufen und das Handy dann einfach weg werfen – denn es ist natürlich geSIMlockt. Die Karte ist auch auf das Handy gelockt, was aber durch einen Anruf bei der Servicehotline aufgehoben werden kann (ja, man muss es einfach nur wissen und machen).

Für das iPhone kommt jetzt der spannende Teil (mal davon ausgegangen, dass man es einsperrt hat): Eintrag des APN. Dazu braucht man ein WiFi und folgende Webadresse: http://www.unlockit.co.nz
Diese ruft man mit dem Browser des iPhones auf! Dort kann man den APN eintragen. Dieser lautet

APN: wap.cingular
User: WAP@CINGULARGPRS.COM (groß/klein beachten)
Passwort: CINGULAR1 (groß/klein beachten)
 

Auf keinen Fall den von AT&T nehmen! Sonst funktioniert kein 3G!

Viel Spass beim Surfen!

 
 

Promocodes um einen US-iTunes Account zu erstellen

20 Mrz

Ich habe gerade eben für jemandem einen Promo-Code für unsere neue App gesendet. Er wollte diese im (deutschen) Appstore einlösen und stieß auf folgende Fehlermeldung:

Dieser Code ist nur für Kunden des Stores für Vereinigte Staaten gültig

Erst hat mich das gerärgert, da ich die App gerne auf deutsch im deutschen Store gezeigt hätte. Nach einer weile Suchen im Netz bin ich jedoch auf diesen Artikel gestoßen, der beschreibt, wie man mit einem Promo-Code einen US-Account erstellt. Eigentlich gar nicht so blöd! Da könnte man ja zwei Fliegen mit einer Klappe schlagen! Als ich vor einiger Zeit das, auf TechCrunch “gehypte” Spiel MyTown ausprobieren wollte, was es nur in dem US-Store gibt, besorgte ich mir extra einen US-Gutschein um einen neuen Account an zu legen, was mich fast 10 Euro kostete (nur um eine kostenlose App herunter zu laden). Das hätte ich mir mit einem Promo-Code sparen können…

Also, wenn jemand einen US-Account braucht könnt ihr bei uns gerne einen Promo-Code für unsere App kriegen. Würde uns natürlich freuen, wenn ihr diese dann mit einem kurzen Kommentar auf englisch eine gute Bewertung geben würdet.

 
No Comments

Posted in iphone

 

Zweite iPhone App im Store: XML-Viewer

20 Mrz

Als wir an unsrer ersten App bzw. unserem App-Framework gebastelt haben, habe ich natürlich die App immer wieder auf dem iPhone getestet. Wie das so bei der Softwareentwicklung ist, ist man viel damit beschäftigt, Fehlern auf den Grund zu gehen um sie ausmerzen zu können. Unser Framework baut sehr intensiv auf XML-Dateien auf, die von dem korrespondierenden Server geladen werden. Das passiert bei der initialen Befüllung der App mit Daten, bei den verschiedensten Updatevorgängen und demnächst bei dem neuen Feature der Kommentarfunktion.

Wenn viel mit XML gearbeitet wird und die XML-Struktur auch selber “zusammen geschustert” wird, ist es unabdingbar, diese als valides XML zu testen, bzw. zu sehen, sonst braucht man gar nicht weiter nach Fehlern zu suchen, bzw. weiter zu entwickeln.

Irgendwann wollte ich die XML-Struktur auch mal auf dem iPhone ansehen und musste fest stellen, dass es dafür überhaupt keine Möglichkeit gibt! Der hauseigene Browser zeigt nur den Text innerhalb der Tags an, was natürlich völlig unbrauchbar ist.

Als musste eine eigene App für diesen Zweck her.

Und hier ist sie nun: http://itunes.apple.com/de/app/xml-viewer/id360965979?mt=8

XML-Viewer (Word-Wrapped)

Syntax-Highlighting

Bookmarks anlegen

Word-Wrap ausschalten

 
 

Wordpress auf dem iPhone

17 Mrz

Blogposts auf dem iPhone lesen ist für mich in letzter Zeit Ersatz für Zeitung lesen geworden. Auch unsere lokale Tageszeitung musste wegen dieser Tendenz auf ihren morgendlichen Platz im Briefkasten verzichten. Um so ärgerlicher ist es, wenn Blogposts nicht an die “neuen Gegebenheiten” angepasst werden. Ganz besonders ärgerlich war es bei TechCrunch von dessen Blog man als “Tech-Innovator” doch eigentlich eine angepasste Version erwarten würde. Seit heute ist das passé und auch sie haben eine “mobile-optimzed-version”.

Bei mir funktioniert das nun auch – und – es ist eine Angelegenheit von 5 Minuten, dies auf einem Wordpress-Blog nach zu rüsten. Das Zauberwort heißt “Plugin”: Unter http://www.bravenewcode.com/products/wptouch findet man das Plugin WPTouch das die Ausgabe des eigenen WordPress-Blogs für iPhone & co. optimiert sobald dieser von einem solchen aufgerufen wird. Sollte eigentlich in jeder neuen WordPress- Installation standardmäßig vorhanden sein.

Dieser Blog aufgerufen mit einem iPhone - Startseite

Dieser Blog aufgerufen mit einem iPhone - Startseite

Ein Blogartikel dieses Blogs aufgerufen mit einem iPhone

Ein Blogartikel dieses Blogs aufgerufen mit einem iPhone

 
1 Comment

Posted in iphone

 

Lösung: Vom iPhone gesendete Mails nicht in Entourage lesbar

14 Mrz

Wenn man einen Exchange Server verwendet um sein iPhone (oder einen beliebigen anderen active-sync-client) zu synchornisieren und von dort über ein Exchange-Konto Mails zu verschicken werden sie unter “Gesendeten Nachrichten” nicht richtig angezeigt. Das sieht dann ungefähr so aus:

entourage_iphone_email_sent-1

Das Problem ist seit langem bekannt, wird jedoch von Microsoft nicht behoben (auch in der aktualisierte Version von Excange-Server 2008).

Ein Script kann die Mails nachträglich in das richtige Fromat bringen. Hier der Link:
http://rs871.rapidshare.com/files/358399141/Fix_iPhone_Sent_Mail.scpt.zip

Nach dem Entpacken legt man es in das Verzeichnis “[Dokumente]/Microsoft-Benutzerdaten/Entourage Script Menu Items”. Im Entourage erscheint dann im Skript-Menü ein Eintrag, der “Fix iPhone sent mail” heißt.

Script Menü "fix iPhone"

Script Menü "fix iPhone"

Man klickt dann die Mails an, die man im “Gesendeten Ordner” nicht lesen kann und das Script repariert diese.

Will man alle auf einmal reparieren lassen, dann sucht man am besten in dem Verzeichnis “Gesendete Nachrichten” nach einem Text-String, der nur in diesen Nachrichten vor kommt, z.B. “Content-Type: multipart/mixed”, dann bekommt man nur die nicht lesbaren Nachrichten angezeigt und kann sie alle auf einmal markieren.

Viel Erfolg!

 
2 Comments

Posted in Tech-Talk