8.11.12

Einstieg in die Android-Programmierung

Irgendwann muss man ja mal anfangen ;)

Nachdem Android sich langsam aber sicher zum Quasi-Standard der Mobilfunkbetriebssysteme durchsetzt, möchte ich mich etwas näher mit der App-Programmierung befassen.

Was brauche ich, um Android-Apps zu programmieren?

Hier habe ich eine schöne Anleitung gefunden, die einiges, was für den Anfang wichtig erscheint, erklärt.
Allerdings möchte ich aus alter Verbundenheit lieber weiterhin Netbeans für die Entwicklung nutzen.

Um das zu gewährleisten, scheint diese Seite eine gute Anleitung zu geben.
  • Installation des Java SDK
    Bevor Netbeans eingesetzt werden kann, muss von der Oracle Seite das Java SDK herunterladen und installiert werden.
  • Installation von Netbeans
    Unter netbeans.org die neueste Version herunterladen (im Moment 7.2 - allerdings nur auf Englisch)
  • Neues Update-Center unter Plugins/Settings eintragen: http://nbandroid.org/release72/updates/updates.xml
  • Installation des Android SDK
  • Wenn die Umgebungsvariable JAVA_HOME nicht gesetzt ist, kann es Probleme geben. Dann gem. dieser Anleitung den richtigen Pfad setzen.

Weiteres folgt.....

4.11.12

Internet über UMTS-Stick ZTE MF112 und die FritzBox

Dieser Artikel passt eigentlich nicht so richtig zum Thema Programmieren, doch soll meine intensive Webrecherche in Zukunft auch anderen zur Verfügung stehen.

Ausgangslage:
  • UMTS-Stick MF112 vom Hersteller ZTE (die chinesische Firma, die im Moment mit Smartphones auf den deutschen Markt prescht), Simlock auf einen ausländischen Provider
  • FritzBox 7240

Ziel:
Internetzugang über Sim-Karte eines deutschen Providers.

Zunächst einmal ist festzustellen, dass ohne einen entsprechenden Patch der Stick, der im Ausland erworben wurde, für deutsche Mobilfunknetze nutzlos ist.
Also gilt es, den Simlock zu deaktivieren. Nach einigen Recherchen und dem Fund von zumeist kostenpflichtigen Angeboten (10€ für das Unlocken) habe ich in einem Forum diese Software gefunden.
Ein kurzer Check bei Virustotal.com ergab zwar Hinweise darauf, dass es sich um einen Trojaner handeln könnte. Aufgrund der Zeitstempel halte ich das jedoch für fragwürdig.
Dennoch: Wer sicher gehen möchte, sollte an dieser Stelle aufhören!


Weiter gehts: Modem eingesteckt (mit Sim-Karte!),  die dem Stick schon beiliegende Software gestartet, damit er erkannt wird, gleich wieder beendet und dccrap.exe gestartet.






Nach Einstellen der Firma und Klick auf den Suchen-Button sollte das Modem gefunden werden. Nun noch noch auf Unlocking und das Simlock (den Simlock?)  aufheben.

Nach dieser Prozedur war mit der mit der auf dem Stick installierten Software weiterhin kein Verbindungsaufbau möglich, denn diese war (natürlich) auf das eigene Netz ausgerichtet.

Darum diese Software entfernen und die Standardsoftware (von dieser Seite) installieren. Bei dieser Gelegenheit habe ich auch den Standardtreiber von hier installiert.

Nun nochmal ausprobiert und schon funktioniert auch eine andere Sim-Karte in dem Stick!
Also ab damit in den USB-Port der FritzBox:


Leider erfolglos, nur der USB-Speicher wird richtig erkannt, im Menüpunkt "Internet" der FritzBox taucht kein Eintrag "Mobilfunk" auf.
Also wieder einmal gegooglet und nach dem Abgrasen einiger Seiten endlich die Lösung in diesem Forum gefunden:


ich konnte das Problem lösen

Anleitung:

-Putty downloaden
-UMTS-Stick am PC anschließen und die Software des Anbieters schließen (Task Manager)
-im Gerätemanager unter Modems auf den entsprechenden Eintrag klicken und nach dem COM-Port suchen
-Putty starten, auf Serial umstellen und COM-Port eingeben, auf open klicken
-ATZ eingeben ->Enter, als Antwort kommt OK
-ATI eingeben ->Enter, es kommen Infos zum Stick
-AT+ZCDRUN=8 eingeben ->Enter, nun ist das CD-Laufwerk deaktiviert (mit AT+ZCDRUN=9 kann man es wieder aktivieren
-sobald man den Stick nun an der Fritzbox ansteckt wird er erkannt

Auf der Fritzbox-Oberfläche erscheint jetzt der Punkt Mobilfunk. Hier wählt man:

Mobilfunk-Betreiber: anderer Anbieter
Zugangspunkt: drei.at
Einwahlnummer: *99#
Benutzername:
Kennwort:

Fritzbox neu starten




Und nun:
Die Unlocker-Software soll übrigens auch auch mit vielen anderen UMTS-Sticks funktionieren.

2.11.12

RDP - Remote Desktop geht nicht (Windows Server 2003)

Nachdem RDP einige Zeit problemlos lief, konnte auf einmal keine Verbindung mehr hergestellt werden.

Was nun?
Ich hätte gedacht, dass es reichen würde, unter

Start -> Einstellungen -> Systemsteuerung -> System im Reiter "Remote"
das Häkchen "Remotedesktop auf diesem Computer aktivieren" manuell zu löschen und dann neu zu setzen.

Doch weiterhin war keine Verbindung möglich, auch nicht von der Konsole mit

telnet server 3389

Ein netstat -ano ergab keinen Prozess, der auf Port 3389 (Standardport für RDP) lauscht.
Also schien der entsprechende Prozess nicht gestartet zu sein.

Ein

tasklist/svc 
bestätigte diese Vermutung.  Der entsprechende Dienst "TermService" war nicht zu finden.

Unter Verwaltung -> Dienste war zu sehen, dass die Terminaldienste (aus welchen Gründen auch immer) nicht gestartet waren. Also schnell manuell starten und......

Bingo! RDP funktioniert wieder!

29.10.12

XML Ausgabe mit MySQL

Eher durch Zufall bin ich auf eine Funktion in MySQL gestoßen, mit der man Daten als XML ausgeben kann.

Dazu kann man sich in der Konsole einloggen mit:

mysql -uroot -p --xml;

Jetzt erfolgen alle Ausgaben auf Selects, showdatabases etc. im XML-Format:

show databases;

<?xml version="1.0"?>

<resultset statement="show databases;" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
        <field name="Database">information_schema</field>
  </row>
  <row>
        <field name="Database">mysql</field>
  </row>

  <row>
        <field name="Database">performance_schema</field>
  </row>
</resultset>

26.10.12

Header nur auf erster Seite bei TCPDF

TCPDF ist eine sehr schöne Klasse, um mit PHP PDF-Dateien zu generieren.
Was ich allerdings bei den Beispielen nicht finden konnte ist die Möglichkeit, einen Header nur auf der ersten generierten Seite anzeigen zu lassen.

Doch das ist ziemlich einfach, nach dem Includieren von TCPDF wird die Klasse erweitert mit

class MYPDF extends TCPDF
{

Dann könnte man eine Variable definieren, mit der man je nach Anwendungsfall das Generieren des Headers auf jeder Seite  ein- oder abschalten kann:

public $showHeaderOnlyOnFirstPage = true;

Anschließend wird die Header-Funktion modifiziert:

public function Header()
    {
       
        if($this->showHeaderOnlyOnFirstPage &&  $this->page>1) return;

 Danach folgen die weiteren Anweisungen für den Header, wie beispielsweise:

// Logo
        $logo = K_PATH_IMAGES . PDF_HEADER_LOGO;
        $wappen = K_PATH_IMAGES . PDF_HEADER_LOGO_NDS;
        //echo $logo; echo "<br>" . $wappen;
        $this->Image($logo, 25, 10, 25, '', 'JPG', '', 'T', false, 250, '', false, false, 0, false, false, false);
        $this->Image($wappen, 170, 10, 16, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
        // Set font
        $this->SetFont('helvetica', '', 16);
        // Title
        $this->SetXY(65, 15);
        $this->Cell(10, 15, PDF_HEADER_TITLE, 0, false, 'M', 0, '', 0, false, 'M', 'M');
........

Einfach, oder??



25.10.12

Formulardaten auswerten aus WYMeditor

Der WYMeditor ist ein  WYSIWYM (What You See Is What You Mean) XHTML Editor, welcher sehr leicht in die eigene Webanwendung implementiert werden kann.

Mein Problem war, dass die Formulardaten aus einer Textarea nicht so einfach zu erhalten waren.
Nach einer Google-Suche fand ich dann die Lösung:

$.wymeditors(0).update();
Anschließend kann das Formular versendet werden und die entsprechenden Daten werden per POST übertragen.
Eine Ajax-Funktionalität ist auch sehr leicht möglich.
Nach dem o.a. Update einfach den Text per ID selektieren (JQuery erforderlich - ansonsten document.getElementById......):
 // Text selektieren (nach Update!)
    var text = $('#meineTextarea').val();   
// Aktion definieren
var aktion = {
        "aktion" : "editNotice",
        "editnoticearea" : text
    }
// Daten per Ajax Request versenden
    var ajaxRequest = $.post("PHP-SCRIPT.PHP", aktion, function(data) {
 // hier könnten weitere Befehle stehen....... })
// Wenn erfolgreich -> führe nächste Funktion aus
    .success(function(data) {  responseReceived(data);    })
    .error(function() { alert("Ein Fehler ist aufgetreten");    });

22.10.12

Linux: Große Dateien finden

Liste die 20 größten Dateien auf:
du -m | sort -n | tail -n 20

 Zeige Dateien größer als 10MB:

 ls -lahS $(find / -type f -size +10000k)


Nur Gesamtgröße auflisten:

du -hs


Große Verzeichnisse auflisten:

du -h -a /home/user | sort -hr | head -n 20

10.10.12

JQuery - Werte von Radio-Buttons verarbeiten

Problem:
Mehrere Radio-Buttons mit unterschiedlichen Werten.
Ziel: Auf Klick soll der Wert des selektierten Buttons übergeben werden.

Lösung:
// Es wurde etwas geändert (Klick auf Radio-Button)
$('#personen-wrapper input:radio').change(function(){

        alert($('input[name=personen]:radio:checked').val());
       
      
    })

25.9.12

Unterschiede von "altem" JS und JQuery


Javascript:

 
var Msg="abc";
document.getElementById('msg').value = Msg;
document.getElementById('sp_100').checked = true;
 
 

JQuery:

 
var msg = 'abc';
$('#msg').val(msg);
$('#sp_100').attr('checked', 'checked');

 
 

19.9.12

Jquery - Post statt Get

Nachdem ich mich nun entschlossen habe in Zukunft Jquery und JQuery-ui als Javascript-Framework einzusetzen, stand ich vor dem Problem, dass die in der Anleitung beschriebene autocomplete-Funktion die Daten per GET überträgt. Ich möchte sie jedoch per POST versenden.

Nach etwas Googlen die Lösung:

Einfach vorher

$.ajaxSetup( { type: "post" } );


 einfügen.

17.9.12

Was tun, wenn die Festplatte scheinbar defekt ist?

Nachdem aus unerfindlichen Gründen (nach Einstecken eines HDMI-Kabels ans Laptop) Windows 7 nicht mehr startete, habe ich alles Möglich ausprobiert, den Rechner wieder zum Laufen zu bewegen.

Natürlich kennt mittlerweile jeder die Option "Letzte als funktionieren bekannte Konfiguration wiederherstellen".
Allerdings hat auch das nicht gefruchtet. Windows verabschiedete sich beim Booten weiterhin in einer Endlosschleife.
Also weiter das ein- und andere ausprobiert mit den Ergebnis, dass nichts klappte und zum Schluss nach Löschen und Neuanlage der Systempartition weder Windows 7 nocht eine Ubuntu Version installiert werden konnte. Windows brauchte angeblich einen CD/DVD-Treiber (was ich aber ausschließen konnte, denn die vorherige Installation klappte auch so) und auch Ubuntu verabschiedete sich mit einem I/O Fehler.
Auch Windows XP zeigte bei der Installation lediglich einen Blue-Screen.
Was half, waren dann Hilfsmittel aus dem Linux-Bereich.

Es gibt eine Gparted-Live-CD, mit der man ein Mini-Linux mit ein paar hilfreichen Tools booten kann.
Allen voran Gparted, fdisk und die auch einzeln erhältlichen SmartMonTools.

Letztlich, nach Löschen aller vorhandenen Partitionen (natürlich nach erfolgter Sicherung), konnte ich wieder eine Partition anlegen, die sowohl von Windows als auch von Linux fehlerfrei erkannt wurde.
Hilfreich für Fdisk auch die folgende Anleitung.

Da die SmartMonTools (Anleitung auf deutsch) bei einem Kurztest Fehler aufzeigten, werde ich mich schon einmal nach einer neuen Festplatte umsehen. Vermutlich erfolgt ein Umstieg auf SSD.


11.9.12

Imap: Maximale Anzahl der Verbindungen hochsetzen

Da es bei mir immer wieder vorkam, dass Thunderbird meckerte, die maximal zulässige Anzahl an Verbindungen sei überschritten, hier ganz kurz die Lösung.

In

 /etc/courier-imap/imapd

die Zeile

##NAME: MAXPERIP:0
#
#  Maximum number of connections to accept from the same IP address

MAXPERIP=20

suchen. Dort einfach die Anzahl entsprechende hochsetzen. Fertig!

7.9.12

Formulare erstellen mit der Formbuilder Klasse

Den Source-Code gibt es hier:

php-form-builder-class


Aktuell ist Version 3.0, Beispiele zum einfachen Einbau in die eigene Seite sind dort ebenfalls zu finden.
Mein Problem war folgende Fehlermeldung:

 PHP Fatal error:  Class 'Element_HTMLExternal' not found in ........

Irgendwie gab es diese Klasse in dem heruntergeladenen Paket nicht.
Lösung: selber anlegen
class Element_HTMLExternal extends Element_HTML {}
oder in den Scripten die Zeilen mit

new Element_HTMLExternal
in
new Element_HTML
ändern.

6.9.12

TCPDump - auf die Schnelle

icmp type == 0 etc.

tcpdump -D (zeige alle Netzwerkadapter)
tcpdump -i (+Nr. des Interfaces)
-n = keine Namensauflösung
-v (vv) = mehr Mitteilungen / verbose
-e = MAC-Adressen mit anzeigen
-s 2000 = Maximale Paketgröße
-w = Schreibe in Datei
port not 80 = keine Aufzeichnung Port 80
Alles protokollieren mit Payload:
tcpdump -nnvvXSs 1514 

Wireshark-kompatibel den Netzwerkverkehr mitschneiden:
tcpdump -i <interface> -s 65535 -w <some-file>

Wireshark Filter auf UDP
Dst Host
udp.port == 161

Src Host
nmap -sU -p 161 192.168.178.156

Dateien von der Konsole versenden

uuenview ist im Paket:

uudeview-0.5.20-0.rh90.dag.i386.rpm

Syntax:
uuenview -b -s „Betreffzeile“ -m name@domain.de /path/to/file

Parameter: -s „Betreffzeile“: Betreffzeile übertragen
-b base64-Codierung
-m name@domain.de Nachricht wird an sendmail weitergereicht

Oder so:

uuencode access.log access.log | mail -s “Hier kommt die Datei“ user@domain.de

………..^^ - Name der Datei
……………………^^ Name, der beim Empfänger erscheint



Alternativ:
 mail --attach=[Datei] [Empfänger] -r [Rücksendeadresse] -a "From:Absender<Absendermail>"

Oder:

echo "Das ist ein Test" | mutt -s "Mail mit Anhang" -a datei.zip -- recipient@example.org

Absender ändern in mutt:

Inhalt von .muttrc:

set from = "user@domain.com"
set realname = "Realname of the user"

5.9.12

Dateigröße von Ordnern ermitteln in C#

Weil ich das immer wieder mal brauche, hier ein Codeschnipsel:

FileInfo[] FI = new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories);
            foreach (FileInfo F1 in FI)
            {
                size += F1.Length;
            }
            return size;

17.8.12

Cronjobs und was zu beachten ist....

Eigentlich ist alles ganz einfach.
Ich möchte, dass ein bestimmtes Script jede Stunden aufgerufen wird.
Flugs ein Shell-Script erstellt und in den Ordner /etc/cron.hourly/ geschoben.

Was ist passiert? Nichts!

Erst nach mehreren Google-Suchen in Foreneinträgen die Begründung gefunden:

  • Die Datei muss ausführbar sein (chmod +x -> war schon klar)
  • Die Datei darf keine Unterstriche, Punkte und keine Großbuchstaben enthalten!

Die Zeiten, wann die Scripte aufgerufen werden sind in der Datei /etc/crontab aufgeführt.

Alles klar?

15.8.12

failed to load session ubuntu

Weil ich auch das schon hatte, folgende Anleitung:

Repair attempt.
Please open tty (virtual console, text mode only): ctrl+alt+f1
Enter:
sudo apt-get update
sudo apt-get install ubuntu-desktop
sudo apt-get -f install
sudo dpkg-reconfigure ubuntu-desktop
sudo reboot
If above wasn’t sufficient try:
sudo apt-get install gnome-session
sudo apt-get install lightdm
sudo apt-get install unity-greeter
sudo dpkg-reconfigure lightdm


Von: http://riveridea.wordpress.com/2012/03/22/how-to-solve-failed-to-load-session-ubuntu/

Oder auch:

A little digging on the internet and the solution which worked for me was to install unity-2d:
sudo apt-get install unity-2d
Then i just restarted GDM:
sudo restart gdm
 

Whois für PHP einrichten (Ubuntu 12)



Installation:


apt-get install php-net-whois
&
apt-get install  php-net-socket

 Apache neu starten

 Aufruf:

require_once 'Net/Whois.php';
$nw = new Net_Whois;
echo $nw->query ("linux.ie");

GeoIP für Ubuntu einrichten

apt-get install php5-geoip
Download von GeoLiteCity.dat von Maxmind.com  und kopieren nach
/usr/share/GeoIP/GeoIPCity.dat (<- Umbenennen!).


Aufruf:
$geo = geoip_record_by_name($ip);

Linux: Installierte Pakete anzeigen (Ubuntu...)

dpkg -l

Unter Linux den Hostnamen ändern

Weil ich es immer wieder vergesse:

https://wiki.ubuntuusers.de/Rechnername/

/etc/hosts
127.0.1.1       meinrechnername
 
/etc/hostname
 
hostname -F /etc/hostname
 



Openhab und Ecoflow Max - API Anbindung

 Ich wollte die neu erworbene Powerstation in Openhab einbinden, um den aktuellen Status (Ladestand etc.) über Openhab auswerten zu können. ...