Archive | Studium

23 November 2009 ~ 6 Comments | ÄHNLICHE ARTIKEL

Herr Bachelor of Science

Tjaha! Nach nun mehr 3 Jahren Studium wurde mir letzten Freitag im mannheimer Rosengarten offiziell mein erster akademischer Grad – der Bachelor of Science – verliehen! :D

Bachelor-Urkunde Bachelor-Urkunde

Bachelor-Urkunde

Damit darf ich nun das Kürzel B.Sc. tragen, was sich auch bereits im Impressum niedergeschlagen hat ;-) .

Allerdings wird es dabei wahrscheinlich nicht bleiben – ich überlege nämlich neben dem Beruf ein Master-Studium aufzunehmen und dieses dann später um ein PhD-Studium zu erweitern. Das ist jedoch alles noch Zukunftsmusik: Erst einmal muss ich mich an meine neue Arbeit gewöhnen und sehen, wieviel Zeit nebenbei für ein Studium bliebe.

Als nächstes erwartet mich eine kleine Überraschung aus England, über die ich natürlich berichten werde, sobald sie aktuell werden sollte. :-)


Akademische Grüße, Kenny B.Sc.

Für die Verleihung habe ich übrigens im Park Inn Hotel in Mannheim übernachtet. Es war zwar nicht das billigste Hotel oder das, das am nächsten am Wasserturm liegt, aber dafür war es dort sehr schön, sauber, ruhig und gemütlich :-) ! Ich hatte sogar ein Wannenbad und ein riesiges Doppelbett für mich allein :D . Deshalb ist es in meinen Augen durchaus zu empfehlen ;-) .




Natürlich wollen auch Schwangere im Winter warm verpackt und gegen Schnee und Kälte geschützt sein. Winterjacken, speziell hergestellt für Schwangere sind etwas ganz Besonderes und nicht leicht zu erwerben, da man auf die Frage, ob es Winterjacken für Schwangere gibt, häufig nur ein genervtes "Nein, haben wir nicht bekommt. Jetzt ist es wieder so weit Die neue Schwangerschaftsmode ist da! Wunderbar lang geschnitten, um den Bereich um Hüften und Po, sowie den Bauch vor Kälte zu schützen. Alle Modelle sind mit zahlreichen Taschen versehen, sodass Sie auch einige Accessoires für Sie und Ihr Baby einpacken können. Jedes Modell gibt es in mehreren Farben und auch in großen Größen.
Einige Winterjacken haben Kapuzen, die Sie vor jedem Wind schützen und durch ihren raffinierten Schnitt können einige Jacken sogar nach der Schwangerschaft getragen werden, ohne dass etwas auffällt. So kann die Jacke auch später noch verwendet werden und man muss für den nächsten Winter keine neue Jacke kaufen.



15 September 2009 ~ 3 Comments | ÄHNLICHE ARTIKEL

Eeendlich Urlaub!

Kaum zu glauben, wir haben nun bereits Mitte September und das Ende des Studiums steht kurz bevor. Gestern habe ich die letzten Unterlagen per Post an die Duale Hochschule abgeschickt: Meine Studienarbeit I (Archivkopie), meine Studienarbeit II (Archivkopie und Bewertungskopie) und meinen letzten Praxisbericht.
Habe schlappe 12,20€ bei der Post für 4 Einwurfeinschreiben zurückgelassen, aber um endlich alle Dokumente aus dem Haus zu haben, war mir das Wert. :-)

Da das doch einige Seiten waren und zumindest die Bewertungskopie der Studienarbeit II gebunden werden musste, habe ich vorher dem Kopierlanden an der Frankfurter Allee mal wieder einen Besuch abgestattet. Seit die mir dort – auf gut Deutsch – den Arsch bei meiner Bachelorthesis gerettet haben, sind meine Familie und ich dort sozusagen Stammkunde.
Kleine Anekdote am Rande: Meine Bachelorthesis musste damals Samstag gedruckt und gebunden werden, um am Montag abgegeben werden zu können. Hatte mir dazu einen Copyshop in Kreuzberg ausgesucht, der allerdings schon geschlossen – trotz anders besprochener Öffnungszeiten. Sind dann auf dem Rückweg am Kopierlanden vorbeigekommen, die zehn vor acht noch 200 Seiten gedruckt und zwei Buchbindungen gemacht hatten.

Und nun ist es soweit: Ich habe derzeit nichts mehr zu tun, habe Urlaub und liege in meinem gemütlichen Bettchen in Berlin. :-)


Urlaubige Grüße, Kenny

25 August 2009 ~ 4 Comments | ÄHNLICHE ARTIKEL

Der Schrecken der Nacht: Consulting + Marketing + Sales

Heute habe ich mit den – für mich – schlimmsten Themen meines Studiums abgeschlossen: Consulting, Marketing und Sales. Zwar wurde uns eindrucksvoll gezeigt, dass das ganze in der Realität doch nicht so schlimm ist, eine theoretische Klausr ist dann allerdings doch noch einmal was anderes. Was ich in der Klausur haben werde, weiß ich noch nicht – da habe ich etwas gemischte Gefühle. Allerdings wollte ich meine Lösung zu einer der Aufgaben nicht vorenthalten: Da es die letzte Aufgabe war und ich danach noch ein bisschen Zeit hatte, habe ich mir die Freiheit genommen, die Lösung noch einmal für mich abzuschreiben.

Ich sage nur: Viel Spaß beim Bullshit-Bingo! ;-)

Produktkommunikation ist – im Gegensatz zu Public Relations, das auch zur Imageverbesserung des Unternehmens dient – rein produktspezifisch. Sie findet nicht nur in der Werbung statt, sondern befindet sich auch auf der Verpackung, dem Beipackzettel und wird – z.B. bei verkaufsfördernden Maßnahmen (wie Verkaufsständen im Supermarkt) – durch Verkäufer und Promoter als Teil ganzheitlicher Marketingkonzepte dem Kunden nähergebracht.
Es werden jedoch auch – manchmal ungewollte – Marktmechanismen aktiv, wenn die Kundenzufriedenheit ausreicht, um die Erstkaufrate zu steigern, ohne, dass weitere absatzfördernde Maßnahmen notwendig wären. Dieses virale Marketing (Kaufanimierung durch Kunden) ist vor allem in Zeiten des Internets eine treibende Kraft, da es sehr leicht möglich ist – z.B. über Google – herauszufinden, welche Bedarfe alles gedeckt werden könnten. Dies ist bereits soweit gewachsen, dass Amazon in Teilen Amerikas bereits Verbrauchsgüter des täglichen Bedarfs per Onlinebestellung anbietet. In Deutschland würde dies wahrscheinlich am 14-Tage-Rückgaberecht bei Fernabsatzgeschäften scheitern.

(Kevin Niehage, 25.08.2009)



Schreckliche Grüße, Kenny

19 August 2009 ~ 9 Comments | ÄHNLICHE ARTIKEL

[Update] Studienarbeit: Erste Lebenszeichen

Hachja! Ist das schön, wenn man an einem Projekt arbeitet und irgendwann endlich mal irgendeine Reaktion der Anwendung verzeichnen kann. ;-)

Gerade arbeite ich mal wieder an meiner Studienarbeit und sehe das erste Mal, das auch wirklich etwas passiert – einfach grandios! :D

PESD: First Impression

PESD: First Impression


Was das sein soll?! Das kann man doch erkennen: Ein Forum!

Was man auf dem Bild sehen kann, sind die ersten Lebenszeichen der Template-Engine: Anstatt im Quelltext direkt zu hinterlegen, wie die Seite aussehen soll, werden die einzelnen Teile aus Template-Dateien gelesen und entsprechend umgesetzt.

Alle Nachrichten können bereits über deren Message-ID abgefragt werden. Dabei wird geguckt, ob eine Nachricht eine Kategorie darstellt, oder eine echte Frage (bzw. eine Antwort auf eine Frage) ist! :-)

Was man sieht, ist der merkwürdige Benutzername MISSING – das kommt daher, dass intern noch nicht alles verdrahtet ist. Genauer gesagt: Das Forum ist noch nicht an das eigentliche System – PESD – gekoppelt.

PESD ist das Akronym für PHP: Enhanced Security for Databases. Dabei handelt es sich um ein Framework für die Erstellung sicherer Datenbankanwendungen in PHP. Sicher bedeutet hier, dass, auch wenn der Quelltext der Anwendung kompromitiert wird, ein Angreifer immernoch keinen Vollzugriff auf die darunter liegende Datenbank erhalten kann.

Dafür wird im Quelltext lediglich der Zugang zu einem Minimalaccount hinterlegt, der über eine Stored Procedure für den Login die Zugangsdaten für höherwertige Accounts abrufen und sich dann dadurch mehr Rechte verschaffen kann.
Auch die Datenbankabfragen und -manipulationen höherer Accounts sind durch (automatisch erzeugte) Stored Procedures gekapselt, sodass intern ein Data-Ownershipmodell durchgesetzt werden kann.

Wünscht mir Glück, dass ich die primären Ziele bis zum 11.09.2009 erreiche ;-) . Ich werde euch inzwischen auf dem Laufenden halten!


Update:
Beinahe vergessen es zu erwähnen: Ein massiver Vorteil von PESD gegenüber anderen – oder garkeinen – Systemen ist, dass die Anwendung gegen SQL-Injections abgehärtet wird! :-D
Dadurch, dass im Normalbetrieb (z.B. Foreneinträge lesen) keine höheren Privilegien gebraucht werden, werden auch keine schadhaften Änderungen zugelassen oder der Zugriff auf sensitive Daten bereitgestellt.


Lebendige Grüße, Kenny

Anmerkung an mich selbst: Da für Benutzer der gleichen Ebene derselbe Datenbank-Account verwendet wird, muss ein anderer Weg gefunden werden, um im Backend mit Sicherheit feststellbar sein, wer gerade den Account verwendet. Lösungsidee ist das verwenden einer Unique ID, die während dem Login zurückgegeben wird. Diese ist zeitlich begrenzt gültig und wird bei weiteren Calls anstelle der User-Credentials übergeben, um den tatsächlichen Benutzer zu bestimmen.

19 August 2009 ~ 0 Comments | ÄHNLICHE ARTIKEL

Termine, Termine, Termine

Soderle! Nachdem ich nun langsam aus den Augen verloren habe, was in der nächsten Zeit alles ansteht, habe ich nun endlich mal meinen Terminkalender auf den neusten Stand gebracht.

Wie man rechts in der Leiste sehen kann, ist das doch schon einiges. Oberste Priorität haben zur Zeit die Klausuren – davon stehen nächste Woche noch 3 Stück an: Interaktive Systeme, Consulting und Advanced Interculturual Communication. Danach ist das letzte Theoriesemester meines Bachelorstudiums gelaufen! :D

Nächsthöhere Priorität haben dann die einzelnen Arbeiten, die noch erledigt werden wollen: Ein E-Learning zum Thema Mobile Commerce, meine Studienarbeit mit dem Thema PESD (PHP: Enhanced Security for Databases), sowie der Praxisbericht zum letzten Praxiseinsatz.

Die Sales-Schulung vom 31. August bis zum 4. September und die SAP-Schulung vom 9. September bis 11. September läuft da eher nebenbei. Das schöne: Ab dem 14. September bis zum 30 September habe ich dann Urlaub! :D
In diesen fällt dann auch der Studienabschluss bei meiner Ausbildungsfirma und mein Rück(um)zug nach Berlin. :-)

Ihr glaubt garnicht, wie froh ich bin, wenn ich am 1. Oktober meine neue Arbeit aufnehme und weiß, dass nach dem Feierabend dann auch wirklich Feierabend ist! :D

Kein Lernen, keine Projekte, einfach nur freeeiii… ;-)


Terminierende Grüße, Kenny

12 August 2009 ~ 4 Comments | ÄHNLICHE ARTIKEL

Es geht voran…

Heute habe ich so viel getan und trotzdem ist kein Ergebnis für’s Studium bei rausgekommen. Aber es war trotzdem wichtig, wertvoll und wird mir in ein paar Wochen genau diese Zeit ersparen. ;-)

Zuerst einmal war ich heute morgen bei der Post und habe ein Einwurfeinschreiben losgeschickt – nach Meckenheim. Inhalt war mein Arbeitsvertrag, der gestern Mittag nach Wochen des Wartens endlich eingetrudelt war. Es hatte mich ein bisschen gewundert: Damals der Vertrag für das Duale Hochschulstudium benötigte nur eine einzige Unterschrift :-D ! Dieses Mal waren es geradezu Berge an Papieren und Formularen mit allen möglichen Erklärungen und Angaben.

Vertragsunterlagen

Vertragsunterlagen

Tja, wie das Leben halt manchmal so spielt: Eine Stunde, nachdem ich den Vertrag bei der Post abgegeben hatte, rief mich eine Abteilung aus Stuttgart an. Diese hatte mich schon einmal vor über 4 Wochen um einen Termin gebeten, da sie sich vorstellen konnten, mich einzustellen. Damals wussten sie allerdings noch nicht, ob sie überhaupt die Freigabe bekommen würden, einen Vertrag auszustellen.
Lange Rede, kurzer Sinn: Diese Abteilung sollte heute endlich die Freigabe für das Ausstellen eines Arbeitsvertrags erhalten – leider zu spät, um mich an Board zu holen. ;-)

Tjoah, nun aber weiter im Tagesgeschehen: Nachdem der Vertrag also schonmal auf dem Weg war, habe ich mich um weitere Dokumente gekümmert. Zum einen benötigt mein neuer Arbeitgeber eine Mitgliedsbestätigung meiner Krankenkasse – das ganze war in ein paar Minuten erledigt: Die schicken das Schreiben sogar direkt an die Firma – dadurch spare ich mir Zeit und Portokosten! Sehr schön zu sehen ist auch, dass einige Firmen immernoch normaler Festnetznummern angeben – das spart einem bei einer Festnetzflat einiges an Schotter.

Neben dieser Bestätigung benötigt die Firma zudem (vorerst) eine Kopie meiner Lohnsteuerkarte. Leider Gottes hat die zur Zeit natürlich mein derzeitiger Arbeitgeber. Also in meinem zuständigen Sekretariat in Mainz angerufen, zur Personalabteilung nach Berlin weitervermittelt worden und von dort in die Buchhaltung in Stuttgart abgeschoben worden. Dort wurde mir dann endlich gesagt, dass man sich mit so etwas am besten per Mail an die Gehaltsabrechnungsstelle wendet. Auf deren Antwort warte ich nun. ;-)

Danach wollte ich mich noch um die Kündigung meines Stromanschlusses für Ende September kümmern. Also bei der MVV Energie angerufen: Dort erzählte man mir, dass man einfach nur nach dem Auszug dort anrufen und den letzten Zählerstand angeben müsse. Die Endabrechnung würde dann an die neue Adresse geschickt werden. Na wenn das mal kein unkomplizierter Kündigungsvorgang ist, dann weiß ich auch nicht mehr! :D

Den restlichen Kram konnte ich dann leider nicht mehr telefonisch oder online klären. Also ab durch die Hecke zur Sparkasse. Dort habe ich mich beraten lassen, wie ich am besten mit meinem Girokonto verfahre. Schlussendlich habe ich mich dazu entschieden, das Dingen erstmal zu behalten (ist bis 28 kostenlos) und nur die Adresse, auf die das Konto läuft, auf meine berliner Adresse umschreiben zu lassen.
So kann ich dann später – wenn ich wieder hauptsächlich mein berliner Konto nutze – sehen, welche Lastschriftaufträge dort noch auflaufen und diese dann entsprechend auf mein berliner Konto umbiegen.

Abschließend war ich sogar noch beim Bürgeramt und habe mich dort abgemeldet – vordatiert auf Ende September natürlich. So spare ich mir später diesen Behördengang.

Als nächstes werde ich dann noch meine McFit-Migliedschaft kündigen (es gibt ein Sonderkündigungsrecht, wenn man umzieht) und meine Verträge, die auf meine mannheimer Adresse laufen, umschreiben lassen. Damit sollte der Umzug dann so gut wie fertig sein.

Achja! Da fällt mir eine Kleinigkeit ein: Die Post bietet einen sogenannten Nachsendeauftrag an. Durch diesen werden Postsendungen, die an die alte Adresse geschickt werden, automatisch auf die neue Adresse umgeleitet. Allerding sollte man aufpassen: Die Post ist mit einem Adressverkäufer verbandelt, der diese Daten natürlich gerne an zahlende Kundschaft weitervertickt.
Deswegen sollte man am besten nur den temporären Auftrag (geht max. 6 Monate, afaik) einreichen – ich denke mal, so wird evtl. angenommen, dass die alte Adresse aktuell bleibt. Ich hoffe es zumindest! ;-)


Dokumentarische Grüße, Kenny

08 August 2009 ~ 4 Comments | ÄHNLICHE ARTIKEL

[Update] Die Zukunft der IT… vielleicht…

Da wären wir endlich beim Artikel des Monats August. Lange hat’s gedauert – und Schuld daran ist mein zukünftiger Arbeitgeber ;-) . Wie ich ja angekündigt hatte, wollte ich eigentlich alle 8 Bücher im Gewinnspiel unter die Leute bringen, wenn ich endlich meinen Vertrag unterschrieben habe.

Nun, erstens kommt es immer anders und zweitens als man denkt. Denn eigentlich hätte ich den Vertrag längst in meinen Händen, wenn… ja wenn die Firma es geschafft hätte, das zu tun, worum ich sie gebeten hatte – nämlich den Vertrag nach Mannheim zu schicken, da ich ja zur Zeit Vorlesungen habe. Aber nein… irgendwer hat anscheinend mal wieder geschlafen und so bekam ich am Freitag einen Anruf von meinen Eltern, dass Unterlagen von der Firma in Berlin angekommen seien.
Jetzt haben sie den Umschlag gestern noch zur Post gebracht, weshalb ich gehofft hatte, dass er heute ankommen würde. Die Postfrau kam, aber sie hatte keinen Brief für mich :-( . Allerdings will ich nur noch ungern bis Montag mit der Veröffentlichung des Artikels warten. Nunja, weiter im Text…

Ich möchte noch einmal ein Dankeschön an Hannes Schurig loswerden, der noch einmal kurz vor Schluss die Werbetrommel für mich rühren wollte und damit das Gewinnspiel um einen Tag verlängert hatte. ;-)

Die Bekanntgabe des Gewinners wird, wie beim letzten Mal, in einem seperaten Artikel erfolgen.

Da bei mir zur Zeit alles in Richtung Ende des Studiums und zum neuen Arbeitsplatz verläuft, habe ich mal Überlegungen angestellt, wie meine Arbeit sich wohl in den nächsten 40 Jahren verändern könnte. Welche Hardware werden wir im Alltag verwenden? Wie wird die dazugehörige Software aussehen? Wie werden wir mit der Technik interagieren?

Gleich am Anfang möchte ich mich gegen einen Trend aussprechen: Das Internet. Ja, das Internet ist toll, ich verbringe selbst eine Menge Zeit im WWW und bin auch politisch aktiv, um (u.a.) die Bürgerrechte in diesem noch recht jungen Medium zu stärken. Mit dem Web 2.0 ist es für jeden möglich geworden, Inhalte zu publizieren und für deren Verbreitung zu sorgen.
Und das sage ich nicht einfach so: Ich habe schon früh erste Gehversuche mit eigenen Webseiten gemacht und es war nie sonderlich leicht, einen halbwegs passablen Kommunikationskanal zu öffnen. Oft blieb es dabei, dass nur wenige Leute Notiz von den eigenen Inhalten genommen haben – meist blieb die Webseite im reinen Freundeskreis. Erst jetzt ist es auch für den kleinen Bürger möglich, Netzwerke zu knüpfen, Ideen zu verbreiten und wirklich gefunden zu werden.

Das ist toll und ich denke, dass uns das Internet auch weiterhin als Informationsquelle und als Grundlage unserer Kommunikationswege erhalten bleiben wird.
Was ich allerdings nicht glaube oder – vielleicht eher – hoffe, ist, dass das Internet die Antwort auf die Frage sein wird, wo zukünftig Anwendungen ausgeführt werden. Das mag durchaus einher gehen mit meiner Einstellung zum Cloud Computing.

Ja, es gibt Ansätze wie z.B. Prism (ein WebApp-Container) und auch Google versucht, mit seinem (zur Zeit in der Entwicklung befindlichen) Betriebssystem Chrome OS eine Plattform zu schaffen, auf der sich Anwendungen im Web abspielen. Wirklich repräsentativ ist das allerdings nicht. Ich meine: Was will denn Mozilla – als überwiegender Browsergigant – sonst großartiges machen, außer ein neues Browserkonzept auszuprobieren? Und Google erst – was anderes als Marktmacht im Internet haben sie doch kaum. Da ist es doch klar, dass sie darauf drängen, Anwendungen ins Web zu verlagern!

Ich persönlich denke, dass das Web die Desktopanwendungen nicht ablösen wird. Hier und da wird es evtl. kleinere Formate geben, die ihre Funktionalität ausschließlich durch Webapplikationen erlangen. Solange man immer im Internet unterwegs ist, mag das praktikabel sein – zumindest so lange, bis man sich Gedanken darüber macht, wer denn nun noch alles Zugriff auf die eigenen Dateien (Briefe, etc.) hat.
Vor allem für unterwegs – wo es auch mal vorkommen kann, dass man eben kein Internet hat – würde so ein Konzept jedoch nicht tragfähig sein. Man stelle sich mal vor, man macht eine Dienstreise in die Pampa und plötzlich hat man keine seiner Dokumente mehr oder kann die Präsentation nicht halten, weil man kein Impress auf dem Rechner hat. ;-)

Aber da wir gerade beim unterwegs sein sind: Ich denke, dass das Handy eine immer größer werdende Rolle spielen wird. Es liegt zwar noch ein Stückchen vom Weg vor uns, aber den Großteil haben wir, denke ich, schon geschafft! :-)

Wenn ich mit Leuten – abgesehen von JHB – darüber rede, dass es in naher Zukunft möglich sein wird, den Rechner (z.B. das Laptop) durch ein Handy zu ersetzen, kommt meist die Aussage, dass die Geräte doch noch viel zu leistungsschwach sind. Das mag stimmen, jedoch sind wir auf dem Weg der Besserung – die 1GHz Marke haben wir schon erreicht!

Was bisher fehlt, sind ordentliche Bedien- und Darstellungskonzepte für das Handy – und damit meine ich nicht herausziehbare Tastaturen oder Touchscreens. Es muss eine Möglichkeit gefunden werden, dass man das Handy wirklich wie einen PC benutzen kann: Und dabei geht es mir vor allem um die Effizienz. Natürlich, man kann mit der Bildschirmtastatur des iPhone arbeiten, aber dabei ist man weit davon entfernt, so schnell zu arbeiten, wie mit einer echten Tastatur. Ebenso ist der Bildschirm für eine längere Arbeitsphase viel zu klein.

Projektoren im Handy könnten eine Lösung für dieses Problem darstellen, doch auch ein einfacher (kleiner) Monitoranschluss am Handy, der meinetwegen eine Auflösung von 1024×768 Pixel liefert, sollte für den Anfang ausreichen. In Verbindung mit einer Bluetooth-Tastatur oder gar einer Projektionstastatur könnte man die Bedienbarkeit (und damit die Effizienz) des Handy massiv steigern.

Die Basistechniken sind vorhanden – wir müssen sie nur noch geschickt zusammenfügen. Es mag hier und da zwar Leute geben, die sagen, sie würden es nicht nötig haben, dass ihr Handy so viel mehr kann als jetzt schon. Aber wenn man zeigen kann, dass sie durch diese Entwicklung garkein anderes Gerät mehr benötigen, dann würde mich mal interessieren, wie die Entscheidung ausfällt. :-)

Was denkst du? Könntest du dir vorstellen, dein Handy als PC-Ersatz zu verwenden? Wie siehst du die zukünftige Entwicklung von Webanwendungen?


Update:
Wie ich gerade im Nokia N95 Blog gelesen habe, ist es schon seit 2 Jahren möglich, das N95 per Cinch mit dem Fernseher zu verbinden. Da sage ich nur: Wow! :D
Da der Artikel doch schon etwas älter ist, habe ich mal geguckt, ob man so ein Kabel heute auch noch kaufen kann. Ergebnis: Bei Handyersatzteil.ch kann man das Dingen immernoch finden. ;-)


Zukünftige Grüße, Kenny

P.S.: Dieser Text wurde auf einem Laptop mit 1.2GHz-Prozessor und einer Auflösung von 1024×768 verfasst. Es sollte einem zu denken geben. ;-)

07 August 2009 ~ 0 Comments | ÄHNLICHE ARTIKEL

Kleine Zwischenmeldung…

…Aus gegebenem Anlass verschiebt sich die Veröffentlichung des Artikel des Monats auf morgen den 08.08.2009. Was genau los ist und wieso die Entwicklung zwar positiv, aber gleichzeitig auch negativ ist, hört ihr dann morgen.

Bis dahin: Nehmt doch ruhig noch am Gewinnspiel teil, das ebenfalls bis morgen weiterläuft! :-D


Meldende Grüße, Kenny

07 August 2009 ~ 9 Comments | ÄHNLICHE ARTIKEL

[Update] WP Mobile Edition und Subdomains

Nachdem ich letztens darüber geschrieben habe, dass ich nun auf WordPress Mobile Edition umgestiegen bin und dort auch erwähnt habe, dass man die Funktionsweise hinter Subdomains verstecken könne, kam die Frage auf, wie man das denn genau machen könne.
Nachdem meine Variante jedoch als nicht allzu toll bezeichnet wurde, habe ich versprochen, mir das ganze nochmal genauer anzusehen.

Wie das, was ich gleich zeigen werde, in der Praxis aussieht, kann man sich testhalber einmal auf Mobile.WeizenSpr.eu/m/ ansehen. Bitte denkt dabei jedoch daran, dass das Theme nicht an den Test angepasst wurde – deshalb funktioniert der “Exit the Mobile Edition”-Link nicht. Diese kleine Änderung sollte jedoch jeder hinkriegen, der diesem Tutorial hier folgen kann.

Fangen wir zuerst einmal mit der Veränderung des Plugins an. In der wp-mobile.php gibt es ein paar tiefere Änderungen zu erledigen:
Bisher ist es so, dass das Plugin durch den Parameter ?cf_action=show_mobile erstmal nur einen Wert in einem Cookie setzt und danach die Seite neu lädt. Bei dem Reload wird dann das Cookie gelesen und erkannt, dass die mobile Seite benötigt wird. Wir müssen nun dafür sorgen, dass nicht nur das Cookie gesetzt wird, sondern auch direkt die mobile Seite zurückgegeben wird!

Hierfür gehen wir zuerst einmal in die Funktion cfmobi_check_mobile() und gehen runter bis zur letzten Zeile:

1
return apply_filters('cfmobi_check_mobile', $mobile);

Direkt über dieser fügen wir folgenden Code-Schnipsel ein:

1
2
3
4
5
6
7
8
9
10
if (!empty($_GET['cf_action'])) {
  switch ($_GET['cf_action']) {
    case 'reject_mobile':
      $mobile = false;
      break;
    case 'show_mobile':
      $mobile = true;
      break;
  }
}

Um nun zu verhinden, dass der Redirect stattfindet, gehen wir anschließend in die Funktion cfmobi_request_handler() und kommentieren dort folgenden Codeblock aus:

1
2
3
4
5
6
7
8
9
if ($redirect) {
  if (!empty($_SERVER['HTTP_REFERER'])) {
    $go = $_SERVER['HTTP_REFERER'];
  } else {
    $go = get_bloginfo('home');
  }
  header('Location: '.$go);
  die();
}

Nachdem wir diese Änderungen vorgenommen haben, können wir anfangen, unsere Subdomain entsprechend zu gestalten. Hierfür benötigen wir zuerst einmal eine .htaccess Datei, die bei mir wie folgt aussieht:

1
2
3
4
5
6
RewriteEngine on
Options +FollowSymLinks
RewriteBase /m/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]

Wichtig ist die RewriteBase. Diese gibt an, in welchem Unterverzeichnis eure mobile Fassung aktiv werden soll. Wenn ihr direkt im Hauptverzeichnis arbeiten wollt, dann ändert diese einfach in ein einzelnes Slash / um. ;-)

Nun kommt erstmal ein dicker Batzen an Quelltext – den ich danach näher erklären werde. Es handelt sich dabei um den Inhalt der index.php:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
  //++ CONSTANTS
  $urlBefore = "http://mobile.weizenspr.eu/m";
  $urlAfter  = "http://weizenspr.eu";

  $usrAgent= "mobile.weizenspr.eu/m/";
  //-- CONSTANTS

  //++ FUNCTIONS
  // taken from http://www.addedbytes.com/php/querystring-functions/
  function add_querystring_var($url, $key, $value) {
    $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
    $url = substr($url, 0, -1);
    if (strpos($url, '?') === false) {
      return ($url . '?' . $key . '=' . $value);
    } else {
      return ($url . '&' . $key . '=' . $value);
    }
  }

  function get_Server($name) {
    $result = null;
    if (isset($_SERVER[$name])) {
      $result = $_SERVER[$name];
    }

    return $result;
  }

  function get_is_SSL() {
    return ((get_Server("HTTPS") == 1) ||
            (get_Server("HTTPS") == 'on') ||
            (get_Server("SERVER_PORT") == 443));
  }

  function get_current_URL($appendQueryString = true) {
    $protocol = "http";
    if (get_is_SSL()) {
      $protocol = $protocol . "s";
    }
    $protocol = $protocol . "://";

    $port = "";
    if (!get_is_SSL() && (get_Server("SERVER_PORT") != 80)) {
      $port = "" . get_Server("SERVER_PORT") . "";
    }

    $serverName = get_Server("SERVER_NAME");
    $requestURI = get_Server("REQUEST_URI");

    $result = $protocol . $serverName . $port . $requestURI;
    if ($appendQueryString !== true) {
      $queryString = get_Server("QUERY_STRING");
      $position    = strpos($result, $queryString);
      if ($position !== false) {
        if ($result[$position-1] == "?") {
          $result = substr($result, 0, $position-1);
        }
      }
    }

    return $result;
  }

  function get_real_URL($currentURL, $realURL) {
    $result = get_current_URL(true);
    $result = str_replace($currentURL, $realURL, $result);
    $result = add_querystring_var($result, "cf_action", "show_mobile");

    return $result;
  }

  function get_Cookies($cookieArray) {
    $result = "";

    foreach ($cookieArray as $name=>$value) {
      $result .= urlencode($name) . "=" . urlencode($value) . ";";
    }

    return $result;
  }
  //-- FUNCTIONS

  //++ IMPLEMENTATION
  $mobileURL = get_real_URL($urlBefore, $urlAfter);

  $options = array(
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_COOKIE         => get_Cookies($_COOKIE),
//    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HEADER         => false,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $_POST,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_USERAGENT      => $usrAgent,
    CURLOPT_VERBOSE        => 1
  );
  $mobileAccess = curl_init($mobileURL);
  curl_setopt_array($mobileAccess, $options);
  $mobileContent = curl_exec($mobileAccess);
  $mobileHeader  = curl_getinfo($mobileAccess);
  curl_close($mobileAccess);

  $textType = "text";
  if (strpos($mobileHeader["content_type"], $textType) !== false) {
    $mobileContent = str_replace($urlAfter, $urlBefore, $mobileContent);
  }

  header("Content-Type: " . $mobileHeader["content_type"]);
  print($mobileContent);
  //-- IMPLEMENTATION
?>

Ich würde sagen, ich fange bei der Erklärung oben an und arbeite mich nach unten. Wie man sehen kann, gibt es mehrere Abschnitte: CONSTANTS, FUNCTIONS und IMPLEMENTATION.

Für den Endanwender wichtig ist lediglich der Abschnitt CONSTANTS. Dort sind alle Werte hinterlegt, die man eventuell ändern muss:

  • Die Variable $urlBefore gibt an, wie der Anfang sämtlicher mobiler URLs aussieht. Wichtig ist, zu wissen, dass am Ende ein 1:1 Mapping zwischen mobiler und normaler URL stattfindet.
  • Die Variable $urlAfter gibt den Anfang der normalen URL an. In meinem Fall werden alle URLs der Form http://mobile.weizenspr.eu/m$1 auf http://weizenspr.eu$1 umgeschrieben.
  • Die Variable $usrAgent gibt an, unter welchem Namen die Seite vom Originalserver geladen wird. Das kann zum Beispiel bei der Fehlersuche interessant sein, wenn man sich durch die Serverlogs wuseln darf.

Im Abschnitt FUNCTIONS werden einige Funktionen definiert, die später in der Programmlogik benötigt werden:

  • Die Funktion add_querystring_var() habe ich mir von hier ausgeliehen. Sie dient dazu, später an die abgefragte URL den Parameter ?cf_action=show_mobile anzufügen.
  • Die Funktion get_current_URL() dient dazu, die aktuelle URL herauszufinden. Es wäre auch möglich gewesen, in der .htaccess dafür zu sorgen, dass die aktuelle URL als GET-Parameter an die index.php gegeben wird – allerdings hätte es dann evtl. Probleme gegeben, wenn die eigentliche Seite ebenfalls Parameter benötigt.
  • Die Funktion get_real_URL() dient dazu, aus den angegebenen Konstanten die eigentliche mobile URL zu erzeugen, wie sie von WP Mobile Edition erwartet wird.
  • Die Funktion get_Cookies() dient abschließend dazu, aus den zur Verfügung stehenden Cookie-Informationen einen Cookie-String für cURL zu generieren.

Nun zur eigentlichen IMPLEMENTATION: So banal es klingen mag, aber im Grunde implementieren wir hier einen Proxy in PHP. Wir holen uns die angeforderte Adresse durch den Querystring der aktuellen Seite, generieren daraus die Adresse der Zielseite, rufen diese mit Hilfe der cURL-Bibliothek ab und geben diese aus. Es gibt lediglich 3 Feinheiten, die wir beachten müssen:

  1. Wir müssen darauf achten, dass wir die Dateien mit dem richtigen Dateityp weiterreichen. Wenn wir z.B. ein Bild vom fernen Server abrufen, dann müssen auch wir die Datei als Bild weiterreichen und nicht etwa als Textdatei.
  2. Weiterhin ist es wichtig, dass wir nicht vergessen, die POST-Informationen, die an den Proxy geschickt werden, auch wirklich an die Ursprungsseite weitergeleitet werden. Ansonsten können wir keine Kommentare schreiben oder anderweitig über Formulare mit der eigentlichen Webseite aggieren.
  3. Zudem müssen wir dafür sorgen, dass wir alle Links auf die eigentliche Originalseite (in $urlAfter) auf die mobile Seite (in $urlBefore) umbiegen. Ansonsten würden wir bei einem Klick auf einen (Artikel-) Link automatisch zur Originalseite geleitet werden. Das wäre jedoch abträglich für die Illusion von einer vollkommen eigenständigen Subdomain.

Eine wichtige Änderung muss unbedingt noch vorgenommen werden. In der Datei wp-comments-post.php von WordPress werden die eintrudelnden Kommentare verarbeitet. Das funktioniert soweit ganz gut, bis auf eine kleine Ausnahme: Eigentlich wird man nach dem Absenden des Kommentars genau dorthin weitergeleitet. Dies geschieht über diesen Aufruf ganz am Ende des Quelltextes:

1
wp_redirect($location);

Diese Weiterleitung funktioniert über den Proxy leider nicht. Ich weiß noch nicht genau weshalb, werde mir das ganze aber in ruhiger Stunde einmal ansehen. Jedenfalls können wir das Problem durch ein Stück eigenen PHP-Code umschiffen. Dafür fügen wir nach besagter Zeile noch folgenden Quelltext ein:

1
2
3
4
5
6
7
8
9
10
  print("<html>");
  print("  <head>");
  print("    <title>Comment saved.</title>");
  print("    <meta http-equiv=\"refresh\" content=\"0;url=" . $location . "\">");
  print("  </head>");
  print("  <body>");
  print("    Your comment has been saved.<br/>");
  print("    You will be redirected immediately: <a href=\"" . $location . "\">LINK</a>");
  print("  </body>");
  print("</html>");

Damit bieten wir dem Proxy (und damit dem mobilen Client) die Möglichkeit, den Redirect selber durchzuführen. :-)

Die einzige Änderung, die man nun noch vornehmen könnte, wäre die, dass mobile Surfer, die auf der Originalseite auftreffen, auf die mobile Subdomain weitergeleitet werden. Wer sich gemerkt hat, dass es in der Datei wp-mobile.php die Funktion cfmobi_check_mobile() gibt, ist bereits einen großen Schritt näher, die Lösung für dieses Problem zu finden. Ich will euch ja schließlich nicht sämtlichen Spaß nehmen. ;-)

Nundann, ich hoffe, diese ausschweifende Beschreibung hat einigen von euch geholfen, ihre mobile Seite noch ein bisschen zu verschönern. Allen, die das ganze absolut nicht interessiert hat, verspreche ich, dass es auch wieder normalere Artikel geben wird. :-D

Und nicht vergessen: Ich hafte nicht für Schäden an Software, Hardware oder für Vermögensschäden, die durch Anwendung dieser Änderungen entstanden sind oder entstehen könnten. ;-)


Update:
Gerade sind die ersten Errorlogs eingetrudelt, deswegen habe ich noch ein wenig optimiert: Wichtig ist, dass CURLOPT_FOLLOWLOCATION nicht erlaubt ist, wenn der SafeMode von PHP aktiviert ist. Zudem habe ich die Funktionen get_is_SSL() und get_current_URL() umgeschrieben und habe die Funktion get_Server() eingeführt. Auf meinem Server ist die Variable $_SERVER["HTTPS"] nicht definiert, weshalb bei jedem Aufruf 2 Fehler ausgeworfen wurden.


Update:
Es ist nun möglich, Kommentare über den Proxyclient zu senden. Hierfür ist leider eine kleine Änderung an der WordPress-Datei wp-comments-post.php notwendig.


Subdomainige Grüße, Kenny

26 Juli 2009 ~ 1 Comment | ÄHNLICHE ARTIKEL

Windows und die Streams

Manchmal kann Windows selbst mich noch mit mir unbekannten Funktionen beeindrucken. Dieses Mal habe ich mich ein wenig mit den Standard-Streams von Windows beschäftigt.

Das Problem war, dass der Text, den ein Programm A in die Standardausgabe schreibt, einem anderen Programm B als Eingabe dienen soll. Leider Gottes kann Programm B die Daten nur über eine serielle Schnittstelle einlesen.
Die Idee war nun, die Ausgabe von Programm A direkt in einen COM-Port umzuleiten und dann Programm B auf die andere Seite dieses Ports zu setzen, damit es die Daten direkt erhält.
Ob man es glaubt oder nicht: Es hat funktioniert!

Mit Hilfe des Virtual Serial Ports Emulator von Eterlogic konnte ich ein sogenanntes Pair-Device erstellen – dieses besteht aus zwei virtuellen COM-Ports, die direkt miteinander verbunden sind. Alles, was in den einen Port A geschrieben wird, kann man über den anderen Port B auslesen. Das ganze funktioniert natürlich auch andersherum.

Angenommen, man hat die beiden Ports COM20 und COM21 angelegt, so kann man nun die Ausgabe von Programm A mit diesem zusätzlichen Parameter in den einen COM-Port – sprich COM20 – umleiten:

1
> \\.\COM20

Anschließend kann man Programm B so konfigurieren, dass es seine Daten aus dem anderen COM-Port – also COM21 – erhält. Fertig ist der Lack!

Wieder mal habe ich gemerkt: Man lernt doch nie aus!


Streamende Grüße, Kenny

145
no-www.org extra-www.org

Datenbank: 44 Abfragen in 0.9210.921 Sekunden