apple,development,life & more
Sunday, January 28. 2007
Pause!
Jetzt gehts rund
Für 2 Wochen wird es hier sehr ruhig werden, da ab Mittwoch meine Prüfungen losgehen.
Für danach sind einige interessante Artikel in der Pipeline
so stay tuned!
Für danach sind einige interessante Artikel in der Pipeline
so stay tuned!
Emails verschlüsseln und signieren mit Apple Mail und GPG
Als erstes benötigt man die Tools die man unter http://macgpg.sourceforge.net/de/ findet.
Für die Erstellung der digitalen Identität benötigt man den "GNU Privacy Guard",
der allerdings nur in Version 1.4.5 als Binary verfügbar ist. Es ist allerdings eine
verbesserte Version die ein Sicherheitsleck behebt unterwegs (1.4.6)
Nachdem "GNU Privacy Guard" installiert wurde muss man die Konsole öffnen.
Die findet man bekanntlich als Terminal bei den Dienstprogrammen.
Als erstes geben Sie dann folgendes zum erstellen des Schlüssels ein:
Da wir sowohl Verschlüsselung als auch Signieren können möchten, wählen
wir Option 1, DSA and Elgamal.
Sie sollten die höchst mögliche Schlüsselgröße nehmen, das wäre in dem
Fall 4096.
Und wir möchten dass der Schlüssel nicht abläuft.
Daher wählen Sie hier die Option "key does not expire".
Nun müssen Sie noch Name und ähnliche Kleinigkeiten eingeben.
Dann wird der Schlüssel erzeugt, es wird empfohlen dass man währenddessen
die Maus bewegt, und sonstige Aktivitäten macht um mehr "Zufall" in die
Sache zu bringen
Dann einige Minuten später sollte der Key erzeugt sein.
Als nächstes sollten Sie GPGPreferences installieren. Das Programm
finden Sie unter der obigen URL oder hier
Sie sollten wenn Sie einen Intel Mac haben mindestens die Version 1.2.1
einsetzen.
Nun haben Sie in den Systemeinstellungen das den Eintrag GnuPG, und den
rufen Sie auf.
Nun sehen sie folgene Meldung und klicken auf ändern.

Nun wählen Sie unter "Schlüssels..." den Schlüsselserver wwwkeys.de.pgp.net,
und machen einen Haken bei "Schlüssel automatisch während der Verifizierung
vom Schlüsselserver holen". Dann sind die Systemeinstellungen erstmal erledigt.
Als nächstes fahren Sie mit der Installation von GPGKeys fort. Dies ist eine
grafische Oberfläche für die GnuPG Schlüsselverwaltung. Sie ist nicht zwingend
notwendig, allerdings erhöt dies den Bedienkomfort. GPGKeys ermöglicht die
Verwaltung der GPG und sogar PGP Keys. Dies umfasst den Export, Import, das
Schlüssel erstellen, bearbeiten, signieren, aktualisieren und das laden der
Keys auf einen öffentlichen Keyserver. Auf der deutschen Seite heisst
das Programm "GPG Schlüsselbund".
Dieses Programm kopieren Sie einfach in Ihr Programmverzeichnis. Es wird keine
Installationsroutine benötigt. Nun starten Sie das Programm.

Sie sehen dort sofort Ihren zuvor angelegten Schlüssel. Nun senden Sie den
Schlüssel zum Schlüsselserver. Natürlich senden Sie den öffentlichen Schlüssel,
da der private niemals weitergegeben werden sollte. Auch das Passwort das
Sie bei der Schlüsselerstellung eingegeben haben sollten Sie nie weitergeben.
Daran erkennen Sie, ib der Schlüssel gesendet wurde. Gibt es dabei Probleme,
können Sie den Schlüssel auch von Hand hochladen. Sie markieren in
dem Programm GPG Schlüsselbund Ihren Schlüssen und drücken [apfel] + [umschalt] + [e].
In dem sich nun öffnenden Fenster geben Sie einen Dateinamen an und sie müssen
bei der Option "ASCII Hülle" einen Haken setzen.
Die nun erstellte Datei öffnen Sie mit einem Texteditor und kopieren den Inhalt
in die Zwischenablage. Dann rufen Sie die Seite http://wwwkeys.de.pgp.net/ im
Browser auf. Dort kopieren Sie den Inhalt des Zertifikates in die Textarea,
und danach klicken Sie auf "Submit this key to the keyserver!"
Unter http://wwwkeys.de.pgp.net/ können Sie auch überprüfen ob Ihr Schlüssel
erfolgreich hochgeladen werden konnte, in dem Sie nach dem Schlüssel suchen.
Finden Sie Ihren Schlüssel hier ist soweit alles in bester Ordnung.
Nun kommen wir zum spannenden Teil, der Einbindung der ganzen Geschichte in Mail.
Beenden Sie nun Apple Mail. Danach beginnen Sie mit der Installation.
Dazu benötigen wir das Programm GPGMail.
Dieses laden Sie von der Webseite herunter. Nun öffnen Sie die dmg Datei und
klicken auf "Install GPGMail". Ist die Installation erfolgreich verlaufen
sehen Sie danach folgendes Fenster.

Hier klicken Sie auf "Launch Mail". Apple Mail startet nun wie gehabt.
Nun müssen Sie noch die Einstellungen bearbeiten, dazu drücken sie [apfel] + [,].
Sie haben nun bei den Einstellungen den neuen Reiter PGP. Diesen öffnen Sie.
Im darin zu findenden Reiter Schlüssel können Sie nun Ihren Standardschlüssel
auswählen. Haben Sie mehrere geheime Schlüssel, setzen Sie den Haken
"Schlüssel des entsprechenden Emailkontos verwenden". Aktivieren Sie auch
die Option "Immer das Kennwort abfragen".
Zusätzlich können Sie unter verfassen die Optionen für ausgehende Mails einstellen.
Ansich sollten Sie mit den Standardoption ausreichend bedient sein.

Wenn Sie nun eine Mail verschlüsseln und oder signieren möchten schreiben
Sie eine neue Mail. Nun sehen Sie bereits die PGP Symbolleite innerhalb von Mail.
Zusätzlich können Sie noch die Symbolleiste anpassen indem Sie 2 Icons von
hinzufügen, Verschlüsselt und Signiert. Dann sehen Sie sofort wie die Nachricht
übermittelt wird.
Schreiben Sie nun wie gewohnt eine Mail. Möchten Sie die Mail nun signieren,
machen Sie einfach den Haken bei signieren. Möchten Sie eine Mail verschlüsseln
benötigen Sie auch den Key des Empfängers.
Dazu tragen Sie die Mail Adresse ein, dann klicken Sie den haken bei verschlüsseln.
Haben Sie den Public Key des Empfängers noch nicht, dann sehen Sie ein kleines
Warndreieck in der Liste. Sie klicken nun einfach auf die Liste neben verschlüssen
und wählen laden. Nun wird versucht über einen Keyserver den PUB Key des Empfängers
zu beziehen. Sie sehen dann wenn einer oder mehrere gefunden wurden, eine Liste
und Sie können die Keys importieren. Danach öffnen Sie die Liste nochmal und klicken
auf Auswählen. Dann können Sie das Zertifikat auch laden, sofern dies noch nicht
automatisch geschehen ist.

So sollte das dann alles aussehen, und nun können Sie Ihre Mails verschlüsselt
oder sogniert übermitteln.
Für die Erstellung der digitalen Identität benötigt man den "GNU Privacy Guard",
der allerdings nur in Version 1.4.5 als Binary verfügbar ist. Es ist allerdings eine
verbesserte Version die ein Sicherheitsleck behebt unterwegs (1.4.6)
Nachdem "GNU Privacy Guard" installiert wurde muss man die Konsole öffnen.
Die findet man bekanntlich als Terminal bei den Dienstprogrammen.
Als erstes geben Sie dann folgendes zum erstellen des Schlüssels ein:
CODE:
gpg --gen-key
Da wir sowohl Verschlüsselung als auch Signieren können möchten, wählen
wir Option 1, DSA and Elgamal.
Sie sollten die höchst mögliche Schlüsselgröße nehmen, das wäre in dem
Fall 4096.
CODE:
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Und wir möchten dass der Schlüssel nicht abläuft.
CODE:
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Daher wählen Sie hier die Option "key does not expire".
Nun müssen Sie noch Name und ähnliche Kleinigkeiten eingeben.
Dann wird der Schlüssel erzeugt, es wird empfohlen dass man währenddessen
die Maus bewegt, und sonstige Aktivitäten macht um mehr "Zufall" in die
Sache zu bringen
Dann einige Minuten später sollte der Key erzeugt sein.
CODE:
gpg: /Users/peterrehm/.gnupg/trustdb.gpg: trustdb created
gpg: key 1D02E24F marked as ultimately trusted
public and secret key created and signed.
gpg: key 1D02E24F marked as ultimately trusted
public and secret key created and signed.
Als nächstes sollten Sie GPGPreferences installieren. Das Programm
finden Sie unter der obigen URL oder hier
Sie sollten wenn Sie einen Intel Mac haben mindestens die Version 1.2.1
einsetzen.
Nun haben Sie in den Systemeinstellungen das den Eintrag GnuPG, und den
rufen Sie auf.
Nun sehen sie folgene Meldung und klicken auf ändern.

Nun wählen Sie unter "Schlüssels..." den Schlüsselserver wwwkeys.de.pgp.net,
und machen einen Haken bei "Schlüssel automatisch während der Verifizierung
vom Schlüsselserver holen". Dann sind die Systemeinstellungen erstmal erledigt.
Als nächstes fahren Sie mit der Installation von GPGKeys fort. Dies ist eine
grafische Oberfläche für die GnuPG Schlüsselverwaltung. Sie ist nicht zwingend
notwendig, allerdings erhöt dies den Bedienkomfort. GPGKeys ermöglicht die
Verwaltung der GPG und sogar PGP Keys. Dies umfasst den Export, Import, das
Schlüssel erstellen, bearbeiten, signieren, aktualisieren und das laden der
Keys auf einen öffentlichen Keyserver. Auf der deutschen Seite heisst
das Programm "GPG Schlüsselbund".
Dieses Programm kopieren Sie einfach in Ihr Programmverzeichnis. Es wird keine
Installationsroutine benötigt. Nun starten Sie das Programm.

Sie sehen dort sofort Ihren zuvor angelegten Schlüssel. Nun senden Sie den
Schlüssel zum Schlüsselserver. Natürlich senden Sie den öffentlichen Schlüssel,
da der private niemals weitergegeben werden sollte. Auch das Passwort das
Sie bei der Schlüsselerstellung eingegeben haben sollten Sie nie weitergeben.
- Dazu klicken Sie auf das Register "Öffentlich"
- Hier markieren Sie Ihren angelegten Schlüssel
- Im Menüpunkt "Schlüssel" klicken Sie auf "Schlüssel zum Schlüsselserver senden"
- Nun sollten Sie eine Meldung in folgender Form erhalten
CODE:
gpg: success sending to 'wwwkeys.de.pgp.net' (status=200)
Daran erkennen Sie, ib der Schlüssel gesendet wurde. Gibt es dabei Probleme,
können Sie den Schlüssel auch von Hand hochladen. Sie markieren in
dem Programm GPG Schlüsselbund Ihren Schlüssen und drücken [apfel] + [umschalt] + [e].
In dem sich nun öffnenden Fenster geben Sie einen Dateinamen an und sie müssen
bei der Option "ASCII Hülle" einen Haken setzen.
Die nun erstellte Datei öffnen Sie mit einem Texteditor und kopieren den Inhalt
in die Zwischenablage. Dann rufen Sie die Seite http://wwwkeys.de.pgp.net/ im
Browser auf. Dort kopieren Sie den Inhalt des Zertifikates in die Textarea,
und danach klicken Sie auf "Submit this key to the keyserver!"
Unter http://wwwkeys.de.pgp.net/ können Sie auch überprüfen ob Ihr Schlüssel
erfolgreich hochgeladen werden konnte, in dem Sie nach dem Schlüssel suchen.
Finden Sie Ihren Schlüssel hier ist soweit alles in bester Ordnung.
Nun kommen wir zum spannenden Teil, der Einbindung der ganzen Geschichte in Mail.
Beenden Sie nun Apple Mail. Danach beginnen Sie mit der Installation.
Dazu benötigen wir das Programm GPGMail.
Dieses laden Sie von der Webseite herunter. Nun öffnen Sie die dmg Datei und
klicken auf "Install GPGMail". Ist die Installation erfolgreich verlaufen
sehen Sie danach folgendes Fenster.

Hier klicken Sie auf "Launch Mail". Apple Mail startet nun wie gehabt.
Nun müssen Sie noch die Einstellungen bearbeiten, dazu drücken sie [apfel] + [,].
Sie haben nun bei den Einstellungen den neuen Reiter PGP. Diesen öffnen Sie.
Im darin zu findenden Reiter Schlüssel können Sie nun Ihren Standardschlüssel
auswählen. Haben Sie mehrere geheime Schlüssel, setzen Sie den Haken
"Schlüssel des entsprechenden Emailkontos verwenden". Aktivieren Sie auch
die Option "Immer das Kennwort abfragen".
Zusätzlich können Sie unter verfassen die Optionen für ausgehende Mails einstellen.
Ansich sollten Sie mit den Standardoption ausreichend bedient sein.

Wenn Sie nun eine Mail verschlüsseln und oder signieren möchten schreiben
Sie eine neue Mail. Nun sehen Sie bereits die PGP Symbolleite innerhalb von Mail.
Zusätzlich können Sie noch die Symbolleiste anpassen indem Sie 2 Icons von
hinzufügen, Verschlüsselt und Signiert. Dann sehen Sie sofort wie die Nachricht
übermittelt wird.
Schreiben Sie nun wie gewohnt eine Mail. Möchten Sie die Mail nun signieren,
machen Sie einfach den Haken bei signieren. Möchten Sie eine Mail verschlüsseln
benötigen Sie auch den Key des Empfängers.
Dazu tragen Sie die Mail Adresse ein, dann klicken Sie den haken bei verschlüsseln.
Haben Sie den Public Key des Empfängers noch nicht, dann sehen Sie ein kleines
Warndreieck in der Liste. Sie klicken nun einfach auf die Liste neben verschlüssen
und wählen laden. Nun wird versucht über einen Keyserver den PUB Key des Empfängers
zu beziehen. Sie sehen dann wenn einer oder mehrere gefunden wurden, eine Liste
und Sie können die Keys importieren. Danach öffnen Sie die Liste nochmal und klicken
auf Auswählen. Dann können Sie das Zertifikat auch laden, sofern dies noch nicht
automatisch geschehen ist.

So sollte das dann alles aussehen, und nun können Sie Ihre Mails verschlüsselt
oder sogniert übermitteln.
Tuesday, January 23. 2007
OSX's Vorschau
speichert bei PDF's die letzte Position. Superpraktisch!
iStat Update mit Temperaturanzeige
Das Update von iStat auf Version 3.3 bringt ein Software Update mit sich, so dass Sich nun auch auf den Intel Mac Book Pros die Temperatursensoren auslesen lassen.
Thursday, January 18. 2007
CSV Dateien in MySQL importieren
Ich musste gerade eine Reihe Postleitzahlen importieren, daher habe ich eine Quick & Dirty Lösumg geschrieben um CSV Dateien zu importieren.
Aufgrund den anstehenden Prüfungen verzichte ich auf das erklären des Codes, das müsste man auch so verstehen können
CODE:
<?php
class csv2mysql
{
/**
* DB Host
*/
var $host='';
/**
* DB User
*/
var $user='root';
/**
* DB Pass
*/
var $pass='';
/**
* DB Name
*/
var $db;
/**
* Table Name
*/
var $table;
/**
* CSV Separator
*/
var $separator=';';
/**
* Filename to import
*/
var $filename;
/**
* DB Handle
*/
var $db_handle;
/**
* File Handle
*/
var $file_handle;
/**
* Max Line length in CSV File
*/
var $max_line_length=1000;
/**
* Insert Count
*/
var $count=0;
/**
* Konstruktor to set the options
*
* options: dbname,tablename,separator
*/
function csv2mysql($options)
{
if(empty($options['dbname']))
{
die("you have to enter a database name!");
} else {
$this->db=$options['dbname'];
}
if(empty($options['table']))
{
die("you have to enter a table name!");
} else {
$this->table=$options['table'];
}
if(empty($options['filename']))
{
die("you have to enter a filename!");
} else {
$this->filename=$options['filename'];
if(!file_exists($this->filename))
{
die("file does not exist");
}
}
if(!empty($options['separator']))
{
$this->separator=$options['separator'];
}
$this->db_handle=mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db,$this->db_handle);
return;
}
function convert()
{
$this->file_handle=fopen($this->filename,"r");
if($this->file_handle && $this->db_handle)
{
while($data=fgetcsv($this->file_handle,$this->max_line_length,$this->separator))
{
$res=mysql_query("INSERT INTO ".$this->table."
VALUES (".join($data,',').")",$this->db_handle) or die(mysql_error());
if($res)
{
$this->count++;
}
}
echo $this->count;
} else {
die("could not open file or database");
}
}
}
$imp=new csv2mysql(array('filename'=>'/www/test.csv',
'dbname'=>'plzdb',
'table'=>'plz'));
$imp->convert();
?>
class csv2mysql
{
/**
* DB Host
*/
var $host='';
/**
* DB User
*/
var $user='root';
/**
* DB Pass
*/
var $pass='';
/**
* DB Name
*/
var $db;
/**
* Table Name
*/
var $table;
/**
* CSV Separator
*/
var $separator=';';
/**
* Filename to import
*/
var $filename;
/**
* DB Handle
*/
var $db_handle;
/**
* File Handle
*/
var $file_handle;
/**
* Max Line length in CSV File
*/
var $max_line_length=1000;
/**
* Insert Count
*/
var $count=0;
/**
* Konstruktor to set the options
*
* options: dbname,tablename,separator
*/
function csv2mysql($options)
{
if(empty($options['dbname']))
{
die("you have to enter a database name!");
} else {
$this->db=$options['dbname'];
}
if(empty($options['table']))
{
die("you have to enter a table name!");
} else {
$this->table=$options['table'];
}
if(empty($options['filename']))
{
die("you have to enter a filename!");
} else {
$this->filename=$options['filename'];
if(!file_exists($this->filename))
{
die("file does not exist");
}
}
if(!empty($options['separator']))
{
$this->separator=$options['separator'];
}
$this->db_handle=mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db,$this->db_handle);
return;
}
function convert()
{
$this->file_handle=fopen($this->filename,"r");
if($this->file_handle && $this->db_handle)
{
while($data=fgetcsv($this->file_handle,$this->max_line_length,$this->separator))
{
$res=mysql_query("INSERT INTO ".$this->table."
VALUES (".join($data,',').")",$this->db_handle) or die(mysql_error());
if($res)
{
$this->count++;
}
}
echo $this->count;
} else {
die("could not open file or database");
}
}
}
$imp=new csv2mysql(array('filename'=>'/www/test.csv',
'dbname'=>'plzdb',
'table'=>'plz'));
$imp->convert();
?>
Aufgrund den anstehenden Prüfungen verzichte ich auf das erklären des Codes, das müsste man auch so verstehen können
Steve Ballmer lacht über das iPhone
mal kucken ob ihm das Lachen nicht noch vergeht.
Der Sturm Ticker! Hallo Kyrill!
Dass man immer auf dem laufenden ist hat Wetter Online einen Sturm Ticker eingerichtet.
http://www.wetteronline.de/feature/2007/01/18_tk.htm
http://www.wetteronline.de/feature/2007/01/18_tk.htm
Monday, January 15. 2007
Zahlungsverfahren - DTA Dateien per PHP erzeugen
DTA ist ein in Deutschland existierender Standard für die Abwicklung
von Zahlungen. Die DTA Dateien können von jeder Bank oder per Banking Software
und unter anderem per HBCI verarbeitet werden.
Es gibt einige Szenarios, in denen man mit den DTA Dateien arbeiten könnte.
Z.b. für die Eigenentwicklung einer Finanzsoftware, in der die eingehenden
Rechnungen verwaltet werden. Aus den eingegeben Rechnungen kann man dann
automatsich per DTA Datei die Bezahlung einleiten. Dies wird in einigen großen
Buchhaltungslösungen so eingesetzt.
Es kann aber auch ein Lastschrifteinzug mit einer DTA Datei abgewickelt werden.
So kann man eine Vereinssoftware entwickeln, bei der die Monatsbeiträge per Lastschrift
eingezogen werden.
Wichtig ist, dass in einer DTA Datei entweder nur Überweisungen oder nur Lastschriften
stehen dürfen. Beides vermischt geht nicht!
Diese Dateien kann man sehr einfach mit dem PEAR Package Payment_DTA erzeugen.
Wir fassen nun das Beispiel mit den einzugebenden und zu bezahlenden Rechnungen aus.
Wir geben bei jeder Rechnung die Zahlmodalitäten ein, in dem Fall das Fälligkeitsdatum.
Wurde eine Rechnung bar bezahlt oder bereits überwiesen wird in der Datenbank das
Feld "is_paid" auf 1 gesetzt.
Die Datenbankstruktur sieht wie folgt aus
Diese Datenstruktur ist nur ein Beispiel und hab ich nur kurz für den
Eintrag hier geschrieben.
Hier nun eine Beispielanwendung, die mit obiger Datenbankstruktur
arbeitet.
Achtung Nimmt man DTA_DEBIT, also das Lastschriftverfahren ist der Sender der der
das Geld erhält. Bei DTA_CREDIT ist es der von dessen Konto Geld überwiesen wird.
Dies muss beachtet werden, und erscheint etwas unlogisch. Allerdings ist der Sender
so immer in der Regel der fixe Wert, da alles auf mein Konto überwiesen wird, oder
ich Lastschriften auf mein Konto einziehe.
von Zahlungen. Die DTA Dateien können von jeder Bank oder per Banking Software
und unter anderem per HBCI verarbeitet werden.
Es gibt einige Szenarios, in denen man mit den DTA Dateien arbeiten könnte.
Z.b. für die Eigenentwicklung einer Finanzsoftware, in der die eingehenden
Rechnungen verwaltet werden. Aus den eingegeben Rechnungen kann man dann
automatsich per DTA Datei die Bezahlung einleiten. Dies wird in einigen großen
Buchhaltungslösungen so eingesetzt.
Es kann aber auch ein Lastschrifteinzug mit einer DTA Datei abgewickelt werden.
So kann man eine Vereinssoftware entwickeln, bei der die Monatsbeiträge per Lastschrift
eingezogen werden.
Wichtig ist, dass in einer DTA Datei entweder nur Überweisungen oder nur Lastschriften
stehen dürfen. Beides vermischt geht nicht!
Diese Dateien kann man sehr einfach mit dem PEAR Package Payment_DTA erzeugen.
Wir fassen nun das Beispiel mit den einzugebenden und zu bezahlenden Rechnungen aus.
Wir geben bei jeder Rechnung die Zahlmodalitäten ein, in dem Fall das Fälligkeitsdatum.
Wurde eine Rechnung bar bezahlt oder bereits überwiesen wird in der Datenbank das
Feld "is_paid" auf 1 gesetzt.
Die Datenbankstruktur sieht wie folgt aus
CODE:
--
-- Tabellenstruktur für Tabelle 'bank'
--
CREATE TABLE bank (
bank_id int(11) NOT NULL default '0',
bank_name text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'bills'
--
CREATE TABLE bills (
number text NOT NULL,
creditor int(11) NOT NULL default '0',
amount float NOT NULL default '0',
is_paid int(1) NOT NULL default '0',
payment_date int(11) NOT NULL default '0',
transaction_info text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'creditor'
--
CREATE TABLE creditor (
creditorID int(11) NOT NULL auto_increment,
company text NOT NULL,
bank_account int(11) NOT NULL default '0',
bank_id int(11) NOT NULL default '0',
PRIMARY KEY (creditorID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- Tabellenstruktur für Tabelle 'bank'
--
CREATE TABLE bank (
bank_id int(11) NOT NULL default '0',
bank_name text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'bills'
--
CREATE TABLE bills (
number text NOT NULL,
creditor int(11) NOT NULL default '0',
amount float NOT NULL default '0',
is_paid int(1) NOT NULL default '0',
payment_date int(11) NOT NULL default '0',
transaction_info text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'creditor'
--
CREATE TABLE creditor (
creditorID int(11) NOT NULL auto_increment,
company text NOT NULL,
bank_account int(11) NOT NULL default '0',
bank_id int(11) NOT NULL default '0',
PRIMARY KEY (creditorID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Diese Datenstruktur ist nur ein Beispiel und hab ich nur kurz für den
Eintrag hier geschrieben.
Hier nun eine Beispielanwendung, die mit obiger Datenbankstruktur
arbeitet.
CODE:
<?php
/**
*
* DTA Example in a small Application
*
*/
include("Payment/DTA.php");
$conn=mysql_connect('localhost','root');
$res=mysql_select_db('financedev',$conn);
$mode="download"; // valid: download,display,server
if($mode=='download')
{
header('Content-type: text/plain;');
header('Content-Disposition: attachment; filename="DTAUS0"');
}
$res=mysql_query("SELECT *
FROM bills
INNER JOIN creditor
ON bills.creditor=creditor.creditorID
INNER JOIN bank on creditor.bank_id=bank.bank_id
WHERE is_paid=0",$conn);
if(count($res)>0)
{
/**
* Erstellt eine neue DTA Datei, für die Überweisung von Beträgen
* Für Lastschrift der Klasse DTA_DEBIT üebergeben.
*/
$dta_file = new DTA(DTA_CREDIT);
/**
* Absender von den Überweisungen, hier müssen die eigenen Daten angegeben werden,
*/
$dta_file->setAccountFileSender(array(
"name" => "Max Mustermann",
"bank_code" => 60069860,
"account_number" => 12345
));
while($row=mysql_fetch_array($res))
{
/**
* Transaktionen hinzufügen
*/
$dta_file->addExchange(
array(
"name" => $row['company'], // Kontoinhaber
"bank_code" => $row['bank_id'], // BLZ
"account_number" => $row['bank_account'], // Kontonummer
),
$row['amount'], // Betrag
array( // Verwendungszweck
(!empty($row['transaction_info']) ? $row['transaction_info'] : $row['number'] ),
"---"
)
);
}
/**
* Speichert Datei
*/
if($mode=='server')
{
$dta_file->saveFile("DTAUS0");
} else {
/**
* Gibt Inhalt aus
*/
echo $dta_file->getFileContent();
}
} else {
return;
}
?>
/**
*
* DTA Example in a small Application
*
*/
include("Payment/DTA.php");
$conn=mysql_connect('localhost','root');
$res=mysql_select_db('financedev',$conn);
$mode="download"; // valid: download,display,server
if($mode=='download')
{
header('Content-type: text/plain;');
header('Content-Disposition: attachment; filename="DTAUS0"');
}
$res=mysql_query("SELECT *
FROM bills
INNER JOIN creditor
ON bills.creditor=creditor.creditorID
INNER JOIN bank on creditor.bank_id=bank.bank_id
WHERE is_paid=0",$conn);
if(count($res)>0)
{
/**
* Erstellt eine neue DTA Datei, für die Überweisung von Beträgen
* Für Lastschrift der Klasse DTA_DEBIT üebergeben.
*/
$dta_file = new DTA(DTA_CREDIT);
/**
* Absender von den Überweisungen, hier müssen die eigenen Daten angegeben werden,
*/
$dta_file->setAccountFileSender(array(
"name" => "Max Mustermann",
"bank_code" => 60069860,
"account_number" => 12345
));
while($row=mysql_fetch_array($res))
{
/**
* Transaktionen hinzufügen
*/
$dta_file->addExchange(
array(
"name" => $row['company'], // Kontoinhaber
"bank_code" => $row['bank_id'], // BLZ
"account_number" => $row['bank_account'], // Kontonummer
),
$row['amount'], // Betrag
array( // Verwendungszweck
(!empty($row['transaction_info']) ? $row['transaction_info'] : $row['number'] ),
"---"
)
);
}
/**
* Speichert Datei
*/
if($mode=='server')
{
$dta_file->saveFile("DTAUS0");
} else {
/**
* Gibt Inhalt aus
*/
echo $dta_file->getFileContent();
}
} else {
return;
}
?>
Achtung Nimmt man DTA_DEBIT, also das Lastschriftverfahren ist der Sender der der
das Geld erhält. Bei DTA_CREDIT ist es der von dessen Konto Geld überwiesen wird.
Dies muss beachtet werden, und erscheint etwas unlogisch. Allerdings ist der Sender
so immer in der Regel der fixe Wert, da alles auf mein Konto überwiesen wird, oder
ich Lastschriften auf mein Konto einziehe.
Posted by Peter Rehm
in PHP
at
22:55
| Comments (3)
| Trackbacks (0)
Defined tags for this entry: dta, zahlungsverfahren
Sunday, January 14. 2007
Fibonacci Zahlen und die Rekursive Berechnung
Mit den Fibonacci Zahlen un deren Rekursiver Berechnung habe ich mich in den letzten Tagen ausführlich beschäftigt. Eine sehr umfangreiche Dokumentation findet sich hier:
Fibonacci Zahlen - Empirische Untersuchung
Ein paar Lücken hat das Dokument noch, aber ich sollte mich mal wieder um die Prüfungsvorbereitung kümmern.
Fibonacci Zahlen - Empirische Untersuchung
Ein paar Lücken hat das Dokument noch, aber ich sollte mich mal wieder um die Prüfungsvorbereitung kümmern.
Posted by Peter Rehm
in Studium
at
16:57
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: fibonacci
Strafzettel
Das war der Teuerste Bäckereinkauf meines Lebens.
Seele 1,10 € + Parken 15,00 € = 16,10 €
Naja das Geld habe ich umgehend überwiesen
Man muss ja die Stadt Bad Buchau unterstützen..
Seele 1,10 € + Parken 15,00 € = 16,10 €
Naja das Geld habe ich umgehend überwiesen
Posted by Peter Rehm
in Verschiedenes
at
13:40
| Comment (1)
| Trackbacks (0)
Defined tags for this entry: kontoauszug, stadtkasse
Wednesday, January 10. 2007
Apple Mail Plugin für Widescreens
In dem Zeitalter der Widescrren Displays kann man sich den Luxus gönnen und die Vorschau der Mails in eine eigene Spalte verschieben.
Das geht mit dem Plugin Letterbox.
Das geht mit dem Plugin Letterbox.
Sunday, January 7. 2007
Backupplan
Als letzte Anmerkung zu dem ganzen Backup Thema noch mein Backup Plan.
Täglich: Datensicherung der geänderten Dateien per rsync. [anleitung]
Monatlich: Datensicherung über Carbon Copy Cloner. [anleitung]
Ich denke das ist ein vernünftige und einfach zu handhabende Datensicherung, so dass ich dem totalen Supergau hoffentlich immer entrinnen kann. Vorbei ist es nun mit dem Blogmarathon über Backups
Täglich: Datensicherung der geänderten Dateien per rsync. [anleitung]
Monatlich: Datensicherung über Carbon Copy Cloner. [anleitung]
Ich denke das ist ein vernünftige und einfach zu handhabende Datensicherung, so dass ich dem totalen Supergau hoffentlich immer entrinnen kann. Vorbei ist es nun mit dem Blogmarathon über Backups
Festplatte klonen mit Carbon Copy Cloner
Der nun letze Teil der Backup Serie behandelt das Spiegeln der gesamten Platte. Dies ist meine zusätzliche Sicherung,
dass ich im Extremfall einfach von der Firewire HDD booten kann.
Ich hab meine Firewire HDD in mehrere Partitionen unterteilt, unter anderem 100GB für die tägliche Sicherung,
wo per rsync die geänderten Dateien kopiert werden. Die andere Partition hat 120GB und die soll das Ziel werden
für die geklonte Version. Dieses Laufwerk heisst treffend "Cloned"
Als erstes solltet Ihr euch CCC (Carbon Copy Cloner) downloaden, SuperDuper wäre eine Alternative.
Das Programm installiert Ihr und startet es. Eure Firewire HDD solltet Ihr mit einer geeigneten Partition,
also so groß wie die Interne bereithalten. Tipp: Partitionieren könnt ihr mit dem Dienstprogramm "Festplatten-Dienstprogramm".

Ihr seht nun etwas wie oben, nachdem Ihr als Quelle eure Macintosh HD ausgewählt habt.
Als Ziel nehmt Ihr die Partition auf eurer Firewire HDD, auf der Ihr sichern möchtet.
Dann müssen nur noch die Einstellungen bearbeitet werden.

Wichtig ist nur, dass Ihr den Haken bei bootfähig macht.
Dann kommt noch ein kniffligerer Teil. Wir möchten ja nicht, dass die gesicherten Platten auch von Spotlight indiziert werden.
Daher soll der Index für die Partition ausgeschaltet sein. Dafür benötigen wir ein kleines Shell Skript.
Das heisst Ihr legt eine Textdatei mit der Endung .sh in einem Verzeichnis eurer Wahl an.
Bei mir ~/scripts/ also /Users/peterrehm/scripts/. In die Textdatei kommt folgender Inhalt:
Dann öffnet Ihr den Terminal, wir müssen dem Skript noch die richtigen Rechte geben.
Gebt dazu im Terminal folgendes ein
"no_index.sh" Ist der Name des Skripts, dem wir hier die Rechte zum Ausführen geben.
Nun können wir das Skript unter den fortgeschrittenen Einstellungen eintragen.

Wir tragen es unter "post-Action" ein, das bedeutet, das Programm wird nach dem Kopieren
ausgeführt. Damit sollte das Problem mit Spotlight unterbunden sein.
Nun sind wir mit den Einstellungen fertig.
Um nun beginnen zu können müssen wir dem Programm erst das Admin Passwort
geben, dass es auch alle Dateien kopieren kann.
Dazu klickt man auf das kleine Schloß.

Danach muss man das Passwort eingeben

Nun ist alles soweit und man kann auf "klonen" klicken.

Das dauert nun eine ganze Weile, danach hat mein ein bootbares OSX auf seiner
Firewire HDD.
Tipp: Um von der Firewire HDD booten zu können, muss man während dem Startvorgang
die Taste "alt" drücken.
dass ich im Extremfall einfach von der Firewire HDD booten kann.
Ich hab meine Firewire HDD in mehrere Partitionen unterteilt, unter anderem 100GB für die tägliche Sicherung,
wo per rsync die geänderten Dateien kopiert werden. Die andere Partition hat 120GB und die soll das Ziel werden
für die geklonte Version. Dieses Laufwerk heisst treffend "Cloned"
Als erstes solltet Ihr euch CCC (Carbon Copy Cloner) downloaden, SuperDuper wäre eine Alternative.
Das Programm installiert Ihr und startet es. Eure Firewire HDD solltet Ihr mit einer geeigneten Partition,
also so groß wie die Interne bereithalten. Tipp: Partitionieren könnt ihr mit dem Dienstprogramm "Festplatten-Dienstprogramm".

Ihr seht nun etwas wie oben, nachdem Ihr als Quelle eure Macintosh HD ausgewählt habt.
Als Ziel nehmt Ihr die Partition auf eurer Firewire HDD, auf der Ihr sichern möchtet.
Dann müssen nur noch die Einstellungen bearbeitet werden.

Wichtig ist nur, dass Ihr den Haken bei bootfähig macht.
Dann kommt noch ein kniffligerer Teil. Wir möchten ja nicht, dass die gesicherten Platten auch von Spotlight indiziert werden.
Daher soll der Index für die Partition ausgeschaltet sein. Dafür benötigen wir ein kleines Shell Skript.
Das heisst Ihr legt eine Textdatei mit der Endung .sh in einem Verzeichnis eurer Wahl an.
Bei mir ~/scripts/ also /Users/peterrehm/scripts/. In die Textdatei kommt folgender Inhalt:
CODE:
#!/bin/bash
sudo mdutil -i off /Volumes/Cloned
sudo mdutil -E /Volume/Cloned
sudo mdutil -i off /Volumes/Cloned
sudo mdutil -E /Volume/Cloned
Dann öffnet Ihr den Terminal, wir müssen dem Skript noch die richtigen Rechte geben.
Gebt dazu im Terminal folgendes ein
CODE:
chmod 755 /Users/peterrehm/scripts/no_index.sh
"no_index.sh" Ist der Name des Skripts, dem wir hier die Rechte zum Ausführen geben.
Nun können wir das Skript unter den fortgeschrittenen Einstellungen eintragen.

Wir tragen es unter "post-Action" ein, das bedeutet, das Programm wird nach dem Kopieren
ausgeführt. Damit sollte das Problem mit Spotlight unterbunden sein.
Nun sind wir mit den Einstellungen fertig.
Um nun beginnen zu können müssen wir dem Programm erst das Admin Passwort
geben, dass es auch alle Dateien kopieren kann.
Dazu klickt man auf das kleine Schloß.

Danach muss man das Passwort eingeben

Nun ist alles soweit und man kann auf "klonen" klicken.

Das dauert nun eine ganze Weile, danach hat mein ein bootbares OSX auf seiner
Firewire HDD.
CODE:
Clone operation completed at: Sonntag, 7. Januar 2007 19:22:50 Uhr
Elapsed time: 75,583333333333 minutes
Elapsed time: 75,583333333333 minutes
Tipp: Um von der Firewire HDD booten zu können, muss man während dem Startvorgang
die Taste "alt" drücken.
Subversion Repository sichern und wieder einrichten
Irgendwann kommt man immer mal in die Situation seinen Rechner neuzuinstallieren.
Als Mac User meist dann, wenn man etwas zuviel im System gespielt hat. Und daher
ist die Frequenz entscheidend geringer als bei den Windows Maschinen.
Man will auch möglichst wenig Daten zurück lassen, und daher muss man alles möglich
sichern. Unter anderem auch Subversion.
Als erstes erzeugt Ihr einen Dump eures Repositories
Wobei "/Users/peterrehm/Library/svn/cms/" der Pfad zum Repository ist.
Mit der erstellten Dump Datei kann man das Repository wiederherstellen. Und zwar genau so.
Auf dem neu installierten System erzeugt Ihr ein neues Repository
Nun kann man die Daten wieder einspielen
Danach solltet Ihr wieder wie gewohnt arbeiten können. Zumindest wenn man es mit meiner
Installationsanleitung installiert hat.
Evtl. muss man noch Permissions setzen, auf den Benutzer/Group der das Repository verwaltet.
Das habe ich aber bisher noch nie gebraucht.
Nähere Informationen findet man hier.
Als Mac User meist dann, wenn man etwas zuviel im System gespielt hat. Und daher
ist die Frequenz entscheidend geringer als bei den Windows Maschinen.
Man will auch möglichst wenig Daten zurück lassen, und daher muss man alles möglich
sichern. Unter anderem auch Subversion.
Als erstes erzeugt Ihr einen Dump eures Repositories
CODE:
svnadmin dump /Users/peterrehm/Library/svn/cms/ >
/Volumes/Backup/backup_sync/svn_cms.dump
/Volumes/Backup/backup_sync/svn_cms.dump
Wobei "/Users/peterrehm/Library/svn/cms/" der Pfad zum Repository ist.
Mit der erstellten Dump Datei kann man das Repository wiederherstellen. Und zwar genau so.
Auf dem neu installierten System erzeugt Ihr ein neues Repository
CODE:
svnadmin create /path/to/new/repos
Nun kann man die Daten wieder einspielen
CODE:
svnadmin load /path/to/new/repos < /Volumes/Backup/backup_sync/svn_cms.dump
Danach solltet Ihr wieder wie gewohnt arbeiten können. Zumindest wenn man es mit meiner
Installationsanleitung installiert hat.
Evtl. muss man noch Permissions setzen, auf den Benutzer/Group der das Repository verwaltet.
Das habe ich aber bisher noch nie gebraucht.
CODE:
chown -R svn:svnusers /path/to/new/repos
chmod -R g+w /path/to/new/repos/db/
chmod -R g+w /path/to/new/repos/db/
Nähere Informationen findet man hier.
Posted by Peter Rehm
in Verschiedenes
at
17:30
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: backup, subversion
MySQL Backups
Nur der vollständigkeit halber auch eine Kurzanleitung zum erstellen eines MySQL Dumps.
So werden alle Datenbanken von der MySQL Datenbank localhost in die eine Datei gedumpt.
Man hat auch hier vielfältige Optionen, um das alles genauer einzustellen.
Wichtig ist noch, wenn man ein Passwort für den Benutzer Root gesetzt hat, dass man
dann die -p Option benötigt.
Und mit dem Parameter -h kann man den Hostname bestimmen. In der Regel wird localhost
verwendet, wenn man nichts angibt.
CODE:
mysqldump -u root --all-databases > /Volumes/Backup/backup_sync/all_db_dump.sql
So werden alle Datenbanken von der MySQL Datenbank localhost in die eine Datei gedumpt.
Man hat auch hier vielfältige Optionen, um das alles genauer einzustellen.
Wichtig ist noch, wenn man ein Passwort für den Benutzer Root gesetzt hat, dass man
dann die -p Option benötigt.
CODE:
mysqldump -u root -p --all-databases > /Volumes/Backup/backup_sync/all_db_dump.sql
Und mit dem Parameter -h kann man den Hostname bestimmen. In der Regel wird localhost
verwendet, wenn man nichts angibt.
(Page 1 of 2, totaling 16 entries)
» next page
Inhalt
Calendar
Google Werbung
Archives
Categories
Syndicate This Blog
Getaggte Artikel
Top Referers
diabetdietaw.client.jp (9)
dietawfp.withsex.com (9)
istyle.my3gb.com (9)
dietawfp.withsex.com (9)
istyle.my3gb.com (9)
Statistiken
letzter eintrag: 2008-01-02 11:16
154 geschriebene einträge
103 kommentare wurden erstellt
© Copyright 2006, nerdwg.org design by Luka Cvrk, port for s9y by nerdwg.org

