Magento mit aktueller PHP Version 5.4.+

Magento hat Probleme mit der aktuellen PHP Version um PDF’s für Rechnungen erzeugen zu können. Um diesen Fehler zu beheben muss im Zend Framework eine File angepasst werden.

Resultat: Funktioniert! 🙂

Auszug aus StackOverflow

This an incompatibility issue between PHP Version 5.4.4 and zend Framwork .

Fixed it by change in this function lib/Zend/Pdf/FileParserDataSource.php.

change

<code><span class="kwd" style="color: #00008b;">abstract</span><span class="kwd" style="color: #00008b;">public</span><span class="kwd" style="color: #00008b;">function</span><span class="pln" style="color: #000000;"> __construct</span><span class="pun" style="color: #000000;">();</span></code>

to

<code><span class="kwd" style="color: #00008b;">abstract</span><span class="kwd" style="color: #00008b;">public</span><span class="kwd" style="color: #00008b;">function</span><span class="pln" style="color: #000000;"> __construct</span><span class="pun" style="color: #000000;">(</span><span class="pln" style="color: #000000;">$filePath</span><span class="pun" style="color: #000000;">);</span></code>

Crossfit Games 2014

Bald ist es so weit. Crossfit Games 2014 starten in die nächste Runde. Nachdem 2013 schon überaus beeindruckend war gibt es noch ein paar Impressionen aus dem letzen Jahr.

In ein paar Tagen geht es die die nächste Runde. Games 2014, ich werde mir auf jeden Fall den Livestream reinziehen. Hier der Channel von Crossfit.

Weitere Informationen zu den Games, Athleten und co findet ihr auch unter games.crossfit.com

Crossfit – Schienbein offen

So ein Scheiß. Normalerweise beginnt man damit keine Sätze aber dieses mal trifft es voll zu. Enthusiasmus muss sein, Begeisterung bei Sport und körperlicher Ertüchtigung. Ich liebe es mich zu bewegen. Laufen, Springen, Gewichtheben oder seit knapp 8 Monaten Crossfit in „The Box“- Kulmbach.

Ralf Müller unser Crossfit Coach ist klasse, und die Mitstreiter die jeden Tag aufs neue Ihre Grenzen kennen lernen wollen. Einfach eine Klasse Mannschaft. Nächste Jahr greifen wir so richtig an. Egal ob CMAR, Crossfit Games oder andere Events die uns eine Herausforderung bietet.

Zurück zum eigentlichen Thema. Wie blöd darf/kann man sein. Boxjumps, so einfach wie es sich anhört sollte man meinen kann’s doch nicht anders sein. Hoch- Runter- von der Box, immer wieder und wieder. Aber irgendwann verlässt einem die Konzentration, innerhalb von Bruchteilen einer Sekunde rutscht man ab. Und dann?! … Offen… das Schienbein. Kurz fluchen, Schweiß aus dem Gesicht wischen und weiter gehts. Die letzen Reps werden durchgezogen. Danach ist Zeit nach dem Bein zu sehen.

Entkräftet und Fertig am Boden liegend begutachtet man sein Bein und stellt, mal wieder fest … offen. Selbe Stelle wie vor ein paar Wochen. Da gings aber gut aus. Nach 2- 3 Tagen war ein Grint gewachsen und man konnte sich wieder dem Crossfit und seinem eigenen Schweinehund widmen. Aber dieses mal war es anders. Mein offenes Bein, immer noch am siffen. Nach knapp 2 Wochen. Ich könnte verrückt werden. Letzte Woche Antibiotika, diese Woche Antibiotika. Gesund kann das auch nicht sein aber man versucht alles um schnell wieder fit zu werden. Entgegen dem eigenen Drang sich bewegen zu wollen sitzt man Stunden auf der Couch ab. Manche sind ganz froh darüber den Couchpotatoe zu mimen aber mich nervt’s nur.

Morgen geht’s wieder zur Ärztin. Mal sehen was dieses mal dabei raus kommt. Bisher hat weder der Chirurg noch die Hausärztin eine wirkliche Diagnose gestellt, die ich verstehen würde. 😉 Kopf hoch und keep on… Auf das die Tragödie bald rum ist. Ich freue mich wieder auf die Truppe.

Kleines Update, nichts für schwache nerven.
image

Android – HowTo Intent Service

Was ist ein IntentService?

Ein Intent Service ist eine abgekapselte Art des Services. Viel kleiner und schlankter als der ServiceLayer und somit einfacher zu bedienen.

Wozu benötige ich einen IntentService?

Der IntentService wird benötigt um z.B. einfache Downloads bzw. Uploads zu starten. Wenn nur eine Aktion ausgeführt werden soll ohne die Activity zu verlassen. z.B. Downloaden von Bibiliotheken, Bilder oder ähnlichen Aktionen ohne die Applikation dabei zu verlassen. Der Service wird beendet sobald onPause oder onStop ausgeführt wird.

Wie setzte ich einen IntentService ein / HowTo Setup an IntentService?

Prepare ActivityView

Um einen IntentService aufrufen zu können benötigt man relativ wenig Vorbereitung. Da der Service nur gebunden zu einer Activity aufgerufen werden kann wird er ähnlich einer Activity gestartet.

Es können dem Service per Extra werte übergeben werden die anschließend ausgelesen werden.

Intent intent = new Intent(this, IntentTestService.class);
intent.putExtra(IntentTestService.EXTRA_TEST,"test");
startService(intent);

 

Prepare IntentService

 

package de.good.study.app.android.service;

import android.app.Activity;
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;

/**
 * Created by jkoeber on 06.03.14.
 */
public class IntentTestService extends IntentService {
    private static final String CLASS_NAME = IntentTestService .class.getName();
    public static final String CUSTOM_INTENT = IntentTestService .class.getName()+".Receiver";
    public static final String RESULT = "serviceResult";
    public static final String STATUS = "serviceStatus";
    public static final int STATE_FINAL = 20;

    public DatabaseService() {
        super("IntentTestService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        int i = 0;

        Log.i(CLASS_NAME,"==> Service Started!");
        long endTime = 2*1000;
        while (i < STATE_FINAL) {
            synchronized (this) {
                try {
                    i += 1;
                    publishStatus(i);
                    wait(endTime);
                } catch (Exception e) {
                    Log.e(this.getClass().getName(),"Error by executing the service");
                }
            }
        }
    }

    /**
     * publish status
     * @param status
     */
    private void publishStatus(int status) {
        Intent intent = new Intent(CUSTOM_INTENT);
        intent.putExtra(STATUS, status);

        if(status == STATE_FINAL) {
            intent.putExtra(RESULT, Activity.RESULT_OK);
        } else {
            intent.putExtra(RESULT, Activity.RESULT_CANCELED);
        }

        sendBroadcast(intent);
    }
}

 

Response konsumieren

 

Die Activity kann anschließend den Response vom Service verarbeiten und abfangen über einen BroadcastListener. Hier ein Beispiel

    /**
     * BroadcastReceiver will execute IntentService and handle Reponse
     */
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            Log.i(CLASS_NAME,"Receive from Broadcast!");
            if (bundle != null) {
                int resultCode = bundle.getInt(IntentTestService.RESULT);
                int resultStatus = bundle.getInt(IntentTestService.STATUS);

                mProgressbar.setProgress(resultStatus);
                if (resultCode == RESULT_OK) {
                    Log.i(CLASS_NAME, "RESULT IS 100%, redirect to next Activity!");
                    Intent overviewIntent = new Intent(MainActivity.this, NextActivity.class);
                    startActivity(overviewIntent);
                }
            }
        }
    };

Raspberry PI armHF und Samsung

Zu meinem POST: raspberry-pi-als-druckerserver-mit-samsung-treibern

Leider eine schlechte Nachricht für alle Samsung Drucker Besitzer. Samsung hat mit seinem neuen Universal Treiber die installation auf den armhf unterbunden. Auch wenn man die Installationsscripte im umgeht und hinzufügt wird zwar der Drucker sauber installiert aber nicht durchgestartet. Er reagiert einfach nicht auf die eingehenden Signale.

Ich werde weiter versuchen eine lauffähige Variante zu erstellen.

Raspberry PI als VPN Server

Nachdem der Zwerg immer noch Power hat und kein Problem damit neben den bekannten Installationen auch noch als VPN Server zu agieren habe ich mich kurzerhand dazu entschlossen einen VPN aufzusetzen um ins Heimische Netzwerk zu gelangen. OpenVPN bietet hierfür eine super Möglickeit und eine ausführliche Anleitung findet ihr hier:

http://jankarres.de/2013/05/raspberry-pi-openvpn-vpn-server-installieren/

Einzig das gepackte .tar.gz Paket für den Client solltet ihr nochmal nachsehen. Mir ist aufgefallen das in der .ovpn alle Werte in einer Zeile abgespeichert wurden. Somit hatte ich ein Problem bei der erstmaligen Initialisierung.

dev tun
client
proto udp
remote dyndns.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3

Sobald die Werte korrekt hinterlegt wurden solltet ihr ebenfalls die Portfreigabe an eurem Router hinterlegen. z.B. 1194 auf UDP Basis.
Viel Erfolg!

Raspberry PI mit SVN Sync

Raspberry ist bekannt dafür ziemlich viel Leistung aus dem kleine 3,5 Watt Gerät heraus zu kitzeln. Ich finde es immer wieder spannend neue Tools auszuprobieren und auch unser SVN zu synchronisieren.  Zum einen geht es ziemlich schnell und per Cronjob auch dauerhaft.

Schritt 1  – Installation SVN auf dem Raspberry

Um SVN auf den Raspberry zu installieren geht’s mal wieder flott über apt-get oder aptitude. In meinem Fall nutze ich meistens aptitude auch wenn es oft nicht nötig ist.

sudo aptitude install svn

Nach ein paar Minuten ist SVN installiert und kann verwendet werden.

Schritt 2 – Anlegen eines SVN- Verzeichnisses

Ich verwende für meinen svn meistens ein Verzeichnis unter var

sudo mkdir /var/svn/

Anschließend erstellen wir per svnadmin unsere repositories die wir synchronisieren wollen.

cd /var/svn/
mkdir repo1
svnadmin create repo1

Schritt 3 – Initialisierung der Repositories

Fürs synchronisieren muss anschließend das Repository dem externen Server bekannt gemacht bzw. initialisiert werden. Hierfür habe ich ein kleine Script geschrieben und über den ersten Parameter wird der Reponame übergeben.

#!/bin/sh

REPO=$1
SRC_PATH=/var/svn
SERVER=svn://SERVERADDRESS
LOG=/var/svn/log
AUTH="--source-username USER --source-password PASS --sync-username USER --sync-password PASS"

echo "CREATE: $SRC_PATH/$REPO"
mkdir $SRC_PATH/$REPO

echo "SVNADMIN CREATE $REPO"
svnadmin create $SRC_PATH/$REPO

echo "COPY Hooks"
touch $SRC_PATH/$REPO/hooks/pre-revprop-change
chmod +x $SRC_PATH/$REPO/hooks/pre-revprop-change
echo '#!/bin/sh' > $SRC_PATH/$REPO/hooks/pre-revprop-change

echo "INIT: $REPO"
svnsync init $AUTH file://$SRC_PATH/$REPO $SERVER/$REPO >> $LOG/init_$REPO.log
./initRepo.sh repo1

Schritt 4 – Sync der Repositories

Fürs synchronisieren habe ich ebenfalls ein kleines Script geschrieben. Hierbei sind aber die Repos in der Datei vorhanden.

#!/bin/sh

SERVER=svn://SERVERADDRESS
LOG=/var/svn/log
AUTH="--sync-username USER--sync-password PASS"
DATE=$(date -d today)

echo "-----------------------";
echo "Start Sync: $DATE";

REPO=repo1
echo "Sync: $REPO"
svnsync sync $AUTH file:///var/svn/$REPO >> $LOG/sync.log

DATE=$(date -d today)
echo "End Sync at $DATE";
echo "--------------------------";
./sync.sh

Dieses Script verwende ich anschließend auch für den cronjob.

Schritt 5 – Cronjob einrichten

crontab -e
0 1 * * sudo /var/svn/sync.sh >> /var/svn/crontab.log

Raspberry PI als Druckerserver mit Samsung Treibern

Schon seit längerem bin ich stolzer Besitzer eines RaspberryPi. Ich finde das 30€ Gerät super und durch die SD- Karte ist es möglich ziemlich schnell ein neues System zu auszusetzen. Für mich habe ich den Raspberry als Druck, VPN, SVN- Backup und Nagios- Server installiert.

Aber zuerst ein kleines Tutorial für euch um den Raspberry als Druckserver einzurichten. Es gibt zwar einige Tutorials zum Installieren des Raspberry Pis als Printserver aber meistens mit herkömmlichen Druckern die aktuelle Treibersetze liefern für ARM. Samsung hat da bisher immer etwas geschlafen. Seit ein paar Wochen gibt es jetzt aber auch aktuell ARM treiber für den PI.

Eine gute Anleitung für den Printserver findet ihr hier:

http://thomas-leister.de/allgemein/raspberry-pi-als-printserver/

Anschließend erkläre ich euch noch wie ihr die aktuellen Samsung Treiber installiert um den Raspberry zum drucken zu bekommen. Da hatte ich ein paar Startschwierigkeiten.Bildschirmfoto 2013-11-17 um 10.05.17

Ladet euch zum einen die aktuellen Linux Treiber von Samsung für euren Drucker. Ich glaube zur Zeit liefert Samsung eine gaze Library  Universal Driver für die Systeme in der alle möglichen Treiber hinterlegt sind.

Ladet euch die drei Pakete auf den Pi entpackt das ganze z.B. in euer /home/pi directory. Dabei bekommt ihr über das entpackte ULD V1.00.06 Paket den Ordner uld im Homedirectory angezeigt.

Jetzt müsst ihr die Datei bearbeiten:

root@raspberrypi:/home/pi/uld# nano noarch/packet.sh

Geht in die Zeile 59 und fügt euren Raspberry ARM Architektur Typ hinzu. In meinem Fall: armhf

        elif [ "$ARCH" = "arm" -o "$ARCH" = "armhf" ]; then
                ARCH=$ARCH_ARM
        else

Anschließend könnt ihr über ./install.sh das Setup starten. Im Normalfall sollte das Setup die aktuellen Treiber installieren und anschließend über die CUPS Oberfläche auswählbar sein. Alle anderen Treiber von CUPS sind veraltet und werden nicht funktionieren, so meine Erfahrung.

Anschließend geht ihr noch in das Verzeichnis: /udl/arm/ und kopiert alle files in das cups/library dir um dem DruckerService die rastertospl verfügbar zu machen.

root@raspberrypi:/home/pi/uld/arm# cp * /usr/lib/cups/filter/

Anschließend den CUPS Server neu starten. Sobald ihr jetzt den Drucker dem Service hinzufügt sollte das Ding auch laufen.

root@raspberrypi:/home/pi/uld/arm# /etc/init.d/cups restart

HTC One X Reparatur

Um euch alle auf den aktuellen Stand zu bringen. Mein HTC One X erfreut sich aller bester Gesundheit. Es ist uns zwar nicht gelungen ausschließlich das Glass zu tauschen aber nachdem wir die Display- Kompletteinheit getautscht haben ist es wie neu. Das Orginal HTC One X Display haben wir von einem Kompetenten Deutschen Händler auf eBay erhalten. Ledglich 8€ teurer als der Konkurrent aus „Taiwan“ 😉 … Da gebe ich lieber ein paar Cent mehr aus.

Nach ca. 45 Minuten vorsichtigen Einbaus haben wir das Gerät erfolgreich starten lassen. Leider habe ich vergessen ein paar schöne Bilder zu schießen aber ich denke die wichtigsten Infos habt ihr jetzt. 😉

HTC One X gescheiterte Reparatur

Ach ja, mein schönes HTC One X. Mit dem neuen Update auf eine relativ neue Android Version hat sich mein One X zu einem schönen Smartphone geupdated für den täglichen gebrauch. Egal ob Feed oder auch mein Kalender meine täglichen Telefonate und das wirklich intensiv gebrauchte Headset haben mir gut gedient. Leider ist es mir letzte Woche aus der Tasche gefallen und auf die Kante. Das Resultat daraus könnt ihr euch ja denken.

DSCN0178 DSCN0177 DSCN0176 DSCN0169 DSCN0168 DSCN0167 DSCN0179

 

 

Jetzt kommt das fatale Ende, wir haben es nicht geschafft. Das LCD- Display ist gebrochen und ausgelaufen. Jetzt kommt Lösungsschritt zwei. Die Kombi- Einheit von Glass und Display ist bestellt und kommt hoffentlich rechtzeitig.

Ciao, bis die Tage. :((