Martin Lantzsch
Software Entwickler
22. Mai 2012

Sencha Touch 2 – Tab Panel wird nicht angezeigt?

22. Mai 2012 - Geschrieben von Martin - Keine Kommentare

Stundenlanges suchen, frustrierendes herumprobieren und nun bin ich dahinter gekommen, warum mir nach dem Update auf die neuste Version von Sencha Touch 2 ein Tab in der Tab Bar fehlt. Dem Panel, das als Tab herhalten sollte, war eine „fullscreen“ Property zugeordnet die auf „true“ gesetzt war. Deshalb hat Sencha Touch diesen Tab beim Rendern aus der Tab Bar geworfen.

Eigentlich ganz logisch – Im Nachhinein. Fullscreen und Tab beißen sich nunmal.

3. Mai 2012

PHP SOAP-ERROR: Encoding: Violation of encoding rules

3. Mai 2012 - Geschrieben von Martin - Keine Kommentare

Gestern ist dieses Problem bei mir aufgetreten, und ich habe keine Lösung gefunden. Wahrscheinlich liegt es am WSDL, welches von Lotus Domino generiert wurde. Dies beinhält komplexe Strukturen an denen die Standard PHP SOAP Extension wohl scheitert.

So sah mein Code bis dahin aus:

<?php
$client = new SoapClient('http://meinsoapserver.de/?WSDL');
$response = $client->__soapCall('getArticles');

Leider warf er immer folgenden Fehler:

SOAP-ERROR: [Client] Encoding: Violation of encoding rules

Mehr oder weniger aus Verzweiflung habe ich dann mal die „NuSOAP“ Bibliothek getestet, welche SOAP ohne die PHP Extension implementiert und darüberhinaus noch Caching, usw. was mich aber in dem Moment nicht interessiert hat ;-)

<?php
$client = new nusoap_client('http://meinsoapserver.de/?WSDL', true);
$response = $client->call('getArticles');

Taterataaa, und schon gehts.

16. April 2012

WordPress RSS Feed mit SimpleXML parsen und in JSON ausgeben

16. April 2012 - Geschrieben von Martin - Keine Kommentare

Ein kleines „Abfallprodukt“ aus einem App Server, den ich eben geschrieben habe.

<?php
$url = 'http://linux-doku.de/feed';
$feed = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);
 
$final = array();
foreach($feed->channel->item as $post) {
	$final[] = array(
		'id' => (string)$post->guid,
		'title' => (string)$post->title,
		'date' => date('d.m.Y', strtotime((string)$post->pubDate)),
		'text' => (string)$post->children('http://purl.org/rss/1.0/modules/content/')->encoded,
		'link' => (string)$post->link
	);
}
echo json_encode($final);

13. April 2012

Sencha Touch 2 DetailCard automatisch hochscrollen

13. April 2012 - Geschrieben von Martin - Keine Kommentare

Ich arbeite gerade an einer Multiplattform App mit dem Sencha Touch 2 Framework, welche eine NestedList enthält, um Daten aufzulisten.

Klickt man auf ein Item der NestedList, so wird das Event „nestedListLeafItemTap“ aufgerufen, in dem ich dynamisch Inhalt in die DetailCard dieser List lade. Wenn der Inhalt nun z.B. 2 Bildschirmseiten lang ist, der Benutzer ganz nach unten scrollt, zurück geht und den nächsten Eintrag antippt, öffnet sich die DetailCard wieder ganz unten an alter Position. Nun müsste man wieder hochscrollen, was Usability Technisch gesehen Schmarren ist.

Um automatisch nach dem befüllen der Daten nach oben zu scrollen, holen wir uns in der „nestedListLeafItemTap“ Methode die DetailCard und greifen auf das „Scrollable“ zu. Das interne Handling für Scrollbare Elemente und scrollen darüber ganz nach oben. Natürlich so damit es dem User nicht ins Auge fällt:

var detailCardScroller = nestedlist.getDetailCard().getScrollable().getScroller();
detailCardScroller.refresh();
detailCardScroller.scrollToTop(false);

9. März 2012

Sencha Designer einer Component eine Objekt Property hinzufügen

9. März 2012 - Geschrieben von Martin - Keine Kommentare


Wenn man eine Eigenschaft hinzufügt und keinen Wert mitgibt, wird diese automatisch ein String. Will man nun aber ein Objekt haben, weil man z.B. zu einer NestedList Komponente eine „detailCard“ hinzufügen möchte, so benötigt man allerdings ein Objekt.

Dieses kann man mit folgender Notation hinzufügen:

detailCard: {}

dann auf „Add“ klicken und schon ist es hinzugefügt, auch wenn man es nicht direkt sieht, da die Eingabeform ja zugeleich ein Filter ist. Nun einfach „detailCard“ eintippen und da ist es.

9. März 2012

CodeIgniter und die Leerzeichen

9. März 2012 - Geschrieben von Martin - Keine Kommentare


Wie ich gestern feststellen musste, mag CodeIgniter keine Leerzeichen in der URL. Hat man ein solches, wie ich in „Resigame 2.0“ so wirft es einfach eine stupide 404 Fehlerseite.

404 Page Not Found
 
The page you requested was not found.

26. Februar 2012

C# Keyboard Delay ändern

26. Februar 2012 - Geschrieben von Martin - Keine Kommentare

Der Keyboard Delay ist die kurze Verzögerung zwischen drücken und halten einer Taste, bis das System akzeptiert das die Taste gehalten wird und das Signal weitergibt.

Das kann zu Problem führen, wenn man wie ich ein Spiel programmieren möchte, welches per halten einer Taste sofort eine Aktion ausführen soll, und nicht erst nach ein paar hundert Millisekunden. Deshalb ändern wir die Property KeyboardDelay auf 0. Leider ist diese via „SystemInformation.KeyboardDelay“ nur Lesbar, deshalb lösen wir das ganze über einen Win32 API Call.

Dazu fügen wir zu unserem Projekt folgendes using hinzu, um DLLs einbinden zu können:

using System.Runtime.InteropServices;

nun gehen wir an den Anfang unserer Klasse und fügen folgendes hinzu um die „user32.dll“ zu laden und als Einstiegspunkt legen wir „SystemParametersInfo“ fest.

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]

danach binden wir die Methode „SystemParametersInfoSet“ aus der DLL ein:

public static extern bool SystemParametersInfoSet(uint action, int param, int vparam, uint init);

Nun suchen wir uns bei MSDN die IDs der Propertys raus, welche wir ändern wollen. Dann brauchen wir noch „SPIF_SENDCHANGE“ mit der ID 2 um die Änderungen ins Profil schreiben zu können.
Hierzu legen wir uns 2 Konstanten an:

const uint SPI_SETKEYBOARDDELAY = 23;
const uint SPIF_SENDCHANGE = 2;

Jetzt können wir mit folgendem Methodenaufruf den KeyboardDelay ändern:

int newDelay = 0;
SystemParametersInfoSet(SPI_SETKEYBOARDDELAY, newDelay, 0, SPIF_SENDCHANGE);

UND BITTE vergesst nicht vorher den aktuellen Wert mit „SystemInformation.KeyboardDelay“ auszulesen und wegzuspeichern, damit ihr ihn beim schließen des Programms wiederherstellen könnt!