Ralf Eisenreich

SQLBlog.DE | ..things to remember

April 19th, 2006

HTML Forms & php

1 Comment, IT, by Ralf.

Wie man den Status von HTML Forms mit php abfragt zeigt folgendes Beispiel:

Checkbox

HTML:


<input type="checkbox" onclick="do();" name="chkTest" />

php:

// get checkbox status
if (array_key_exists('chkTest', $_POST) && $_POST['chkTest'] != null):
$value = 1;
else:
$value = 0;
endif;

Radiobutton

HTML:


<input type="radio" onclick="do();" value="1" name="radTest" />
<input type="radio" onclick="do();" value="2" name="radTest" />
<input type="radio" onclick="do();" value="3" name="radTest" />

php:

// get checkbox status
if (array_key_exists('radTest', $_POST) && $_POST['radTest'] != null):
$value = $_POST['radTest'];
endif;

April 17th, 2006

Mercedes-Benz Stern

No Comments, by the way, by Ralf.

Mercedes-Benz Stern

Wie ist eigentlich der Mercedes-Stern (oder auch “Dreizack”) entstanden?

Das Logo, das in drei verschiedene Himmelsrichtungen zeigt, symbolisiert die Idee von Gottfied Daimler, Motorisierungen für Fahrzeuge auf dem Wasser, zu Lande und in der Luft herzustellen; der Überlieferung zufolge malte er den “Dreizackstern” erstmals auf eine an seine Familie gerichtete Postkarte mit dem Zusatz “und dieser Stern wird einmal segenreich über meinem Werke stehen”.

[Quelle: Markenlexikon]

April 14th, 2006

Ahnenforschung: Geogen

No Comments, by the way, by Ralf.

Geogen ist ein interessantes Projekt (von Christoph Stöpel), dass die Verteilung der Familiennamen in Deutschland anhand der Telefonanschlüsse kartiert.

Geogen steht für “geographische Genealogie”, was so viel bedeutet wie ortsbezogene Ahnenforschung. Auf dieser Seite können Sie Landkarten über die Verbreitung von Familiennamen in Deutschland erstellen lassen. Besonders auffällige Konzentrationen können auf den Ursprungsort des Namens oder der Familie hindeuten.

Danach gibt es meinen Familiennamen durchschnittlich häufig in Deutschland – vor allem in Bayern gibt es ein höheres Aufkommen, wie folgende Karte zeigt:

Geogen Familiennamenverteilung
Ist doch ein interessantes Projekt!

April 12th, 2006

Microsoft Update: Bug in Update fuer Office?

No Comments, IT, Windows, by Ralf.

Nach dem heutigem Patch-Day (14 Luecken wurden geschlossen) kann ich ploetzlich nicht mehr meine verschluesselten Office-Dokumente oeffnen.

Nach einer kleinen Fehlersuche habe ich entdeckt, dass einige Kryptoprovider nach dem Update nicht mehr in der Liste auftauchen.
Unter Optionen (Menue) -> Sicherheit (Tab) -> Advanced (Button) befindet sich naemlich standardmaessig eine gut gefuellte Liste zur Auswahl der Verschluesselung. Diese hat sich nach dem Update stark verkleinert (auf nur noch 4 Eintraege). Beispielsweise fehlt der “strong encryption”-Provider. Betreffen wird das sicherlich alle Office-Produkte (Word, Excel, Access, Powerpoint, ..)
Fazit: Die Dokumente, die nicht mit einer Standard-Verschluesselung abgespeichert worden sind, koennen nun nicht mehr entschluesselt werden.

Hat jemand daselbe Problem festgestellt?

Ein Versuch, diesen (ich denke doch) Bug an Microsoft zu uebermitteln brachte folgendes Ergebnis:

Microsoft Feedback Error

Schade auch.

UPDATE:

Okay, Ursache und Loesung sind nun gefunden. Das Problem war nicht das Update, sondern eine Aufforderung zum Passwortwechseln der Domaene. Aus irgendeinem unerklaerlichen Grund wurde dieser Wechsel auf dem lokalen System nicht richtig vollzogen. Eine erneute Passwortaenderung hat das Problem nun behoben. Das Loeschen der Microsoft Office Verzeichnisse in lokale Einstellungen und Anwendungsdaten (unter Dokumente und Einstellungen) wuerde das Problem ebenfalls loesen.
Very strange.

April 9th, 2006

SQL Server: Integration Services

No Comments, .Net, IT, VBA, by Ralf.

Die SQL Server Integration Services erlauben das Zusammenfuehren von Daten aus heterogenen Datenquellen. Um den Ueberblick zu behalten wird der gesamte Datenfluss grafisch dargestellt und modelliert.

Das finde ich klasse, denn gerade wenn man ein Projekt an eine weitere Person uebergeben muss oder selbst an mehreren Projekten arbeitet, behaelt man durch diese kleine Hilfe den Ueberblick besser.

SQL Server Integration Services

An manchen Stellen wird es trotzdem notwendig sein, Programmierfaehigkeiten mitzubringen. Dazu kann dann die Scriptkomponente benutzt werden. Mit folgendem Script kann man auf die Datenquellen in seinem Projekt zugreifen. Aber Achtung es muss eine OLEDB-Verbindung definiert werden!


' initialize connection
Me.myConnection = DirectCast(Dts.Connections("SERVER.Database.root.ADO").AcquireConnection(Dts.Transaction), SqlClient.SqlConnection)
' -- open connection to database --
Try
If Not (myConnection.State.Open = ConnectionState.Open) Then
myConnection.Open()
End If
Catch ex As Exception
MsgBox("Could not open connection to DataBase: " & ex.Message.ToString)
End Try
' -- define data tables --
Dim tblTabelle As New Data.DataTable
' -- define SQL-commands --
Dim cmdSQLTblTabelle As New SqlClient.SqlCommand
cmdSQLTblTabelle.CommandText = "SELECT * FROM tblTabelle;"
cmdSQLTblTabelle.Connection() = myConnection
' -- define DataAdapters --
Dim myDATblTabelle As SqlClient.SqlDataAdapter(cmdSQLTblTabelle)
' -- get data from tables --
myDATblTabelle.FillSchema(tblTabelle, SchemaType.Mapped)
myDATblTabelle.Fill(tblTabelle)
' generate InsertCommand automatically with Commandbuilder
Dim myCommandBuilder As New SqlClient.SqlCommandBuilder(myDATblTabelle)
' show rows of query
msgbox("rows: " & tblTabelle.Rows.Count)

April 8th, 2006

DRM: sinnvolle Rechte oder sinnlose Einschränkung?

No Comments, IT, by Ralf.

Eben bin ich über einen kurzen Artikel (bei CW) über DRM gestolpert, wo überlegt wird ob DRM sinnvoll ist oder nicht:

Anlass war die Rede eines RealNetworks-Managers auf der Linuxworld in Boston. Er warnte, Linux werde als Medienplattform außen vor bleiben, falls es nicht ebenfalls auf DRM-Kurs einschwenke.

Georg Greve von der Free Software Foundation Europe (FSFE) sieht das ganz anders und glaubt eher, dass die Nutzer DRM überhaupt nicht wollen und gerade deswegen verstärkt auf Linux wechseln werden, wo es ihnen erspart bleibt.

Also meine Meinung ist, dass die Musik- und Filmindustrie am Ende mehr Einnahmen hätte, wenn sie die Preise für ihre Produkte senken würde. Denn dann würden viele Leute eher mal eine CD kaufen, als sie sich aus dem Netz zu “besorgen” oder gar nicht zu kaufen. Und die viele Negativpresse um die Kopierschutzmechanismen, die einfache Anwender verärgern und Brenn-Profis trotzdem nicht stören, hätte es gar nicht erst gegeben.
Eigentlich reguliert sich vieles von selbst – so auch die Medienpreise glaube ich. Das sollte man hier mal andenken, als wie mit komplizierten Methoden, Beschränkungen zu setzen..
Es wurden Gesetze und Strafen bestimmt – das sollte reichen. Jeder kann entscheiden, ob er ein Risiko eingeht. Aber dem ehrlichen Anwender werden mit DRM einfach nur die Fesseln angelegt und diese Entscheidung verwehrt.

April 8th, 2006

Microsoft SQL Server 2005 (MSSQL)

No Comments, Business Intelligence, by Ralf.

Ein wichtiger Faktor im Tagesgeschäft ist die angemessene und nützliche Berichtserstattung. Oftmals gibt es gerade hier noch viel Optimierungspotential, einfach durch den Einsatz neuer Softwaretechnologien oder -produkte.
Hier kommt der SQL Server 2005 ins Spiel. Für mich ist er eine echte Benchmarkentwicklung aus dem Microsoft-Imperium.
Gerade wenn vorher viel Reporting über Excel-Sheets oder gar Datenbanken verteilt über Excel-Sheets Einsatz gefunden haben, ist der SQL Server eine gute Alternative.

Hat man das Ziel, einen Bericht zu erstellen, dann beginnt man zunächst mit der Anbindung der Datenquellen. MSSQL bietet dazu viele Möglichkeiten (beispielsweise OLEDB, ODBC, Flat Files, Excel Sheets, CSV Files). Greift man auf Daten aus heterogenen Datenquellen zurück, finden die sog. Integration Services ihren Einsatz. Ein großartiges Tool, da zahlreiche Elemente zur Vefügung stehen, um auch sehr verwüstete Files in den Data-Flow einzubinden.
Hat man die Daten in der Datenbank bietet MSSQL die Analysis Services an, mit denen man (auch grafisch) Abfragen formulieren kann und sich dann automatisch den passenden Berichts erzeugen lassen kann. Außerdem werden Data Mining Methoden zur Verfügung gestellt, die nach Mustern in den Datensätzen suchen können.
Als nächstes legt man das Layout und die Art des Berichts fest: MSSQL bietet dazu entweder den Report Builder oder direkt Visual Studio an, wobei immer zahlreiche Tools und Kontrollelemente zur Verfügung gestellt werden. Es gibt außerdem verschiedene Berichts-Arten (Listen, Charts, Matrizen und multidimensionale Berichte).
Die Verteilung der Berichte wird durch die Reporting Services unterstützt. Dabei können Berichte auf einen sogenannten Reporting Server (unter IIS) geladen und von Benutzern abgerufen werden. Diese Berichte können dann dynamisch (ad hoc) vom Benutzer verändert werden und in vielen Formaten (html, pdf, xls) heruntergeladen werden.

Alles in allem ist der neue SQL Server eine gelungene und runde Sache, die einen sehr kompletten Funktionsumfang aufweist. Gerade für kleinere Firmen oder Niederlassungen kann der SQL Server eine Alternative zu komplexeren und kostenintensiveren Varianten (beispielsweise SAP, ORACLE) sein.

Ist selbst der SQL Server zu groß bemessen, sollte man entweder auf MS Access (ein sehr gutes Tool für kleinere Anforderungen) zurückgreifen, bei seinen Excel Sheets bleiben oder mal im Open-Source Bereich Ausschau halten.

OpenSource: sehr gute Software sind für mich Pentaho (enterprise-class reporting, analysis, dashboard, data mining and workflow capabilities) und BIRT (Business Intelligence and Reporting Tools von Eclipse und Actuate).
:-)

April 8th, 2006

MS Access: Multiselect in Queries

28 Comments, IT, VBA, by Ralf.

In MS Access verwendet man in den Benutzerschnittstellen gern Listen mit Multiselect-Funktion, um dem Anwender flexiblere Auswahlmöglichkeiten zu bieten.

In Queries ist es jedoch etwas schwierig diese Optionen abzufragen. Folgende VBA-Funktion schafft da Abhilfe:

Function InMultiSelect(frms, ctrl As String, col As Integer, data As Variant, ParamArray OtherArgs()) As Boolean
'Checks whether a Variant (data or OtherArgs) is included in the specified column (col) of a ListBox (ctrl)
'in a certain Form (frms)
On Error GoTo Error_InMultiSelect
Dim varItm As Variant
Dim index As Integer
Dim ctl As Control
Dim frm As Form
Set frm = Forms(frms)
Set ctl = frm.Controls(ctrl)
InMultiSelect = False
For Each varItm In ctl.ItemsSelected
If InMultiSelect = True Then Exit For
If CStr(data) = CStr(ctl.Column(col, varItm)) Then InMultiSelect = True
For index = LBound(OtherArgs) To UBound(OtherArgs)
If InMultiSelect = True Then Exit For
If CStr(OtherArgs(index)) = CStr(ctl.Column(col, varItm)) Then InMultiSelect = True
Next index
Next varItm
Exit Function
Error_InMultiSelect:
InMultiSelect = False
Exit Function
End Function

In den Abfragen (Queries) selbst wird diese Funktion dann beispielsweise so aufgerufen:


SELECT *
FROM [tblTabelle]
WHERE InMultiSelect("[frmFormMitMultiSelectAuswahl]","[lstListeMitMultiSelectAuswahl]",0,[tblTabelle].[Spalte]))<>False);

April 8th, 2006

MS Access: IF EXISTS DROP TABLE

1 Comment, IT, VBA, by Ralf.

Leider ist es in MS Access nicht ohne weiteres möglich das Vorhandensein einer Tabelle abzufragen.

Dies wird gerade wenn man mit temporären Tabellen arbeitet zum Problem.

Eine Abhilfe liefert folgende VBA-Funktion:

' check if a table exists
Function tableExists(tableName As String) As Boolean
On Error GoTo Error_tableExists
Dim strTableName
' assign tableName to String
strTableName = CurrentDb.TableDefs(tableName)
' if no error occurs then set tableExists to true
tableExists = True
Exit_tableExists:
On Error Resume Next
Exit Function
Error_tableExists:
Select Case Err.Number
Case 3265 'Item not found in this collection
tableExists = False
Resume Exit_tableExists
Case Else
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical
Resume Exit_tableExists
End Select
End Function

March 22nd, 2006

Half-Life & Counterstrike: failed to lock vertex buffer in cmeshdx8

18 Comments, by the way, by Ralf.

Bei einigen Grafiktreibern tritt der Fehler “failed to lock vertex buffer in cmeshdx8” auf.

Lösung:

  1. in den Ordner “../SteamApps/{steam username}/counter-strike source/bin” gehen
  2. Datei vidcfg.bin löschen
  3. leere Textdatei mit Notepad anlegen und unter vidcfg.bin im selben Ordner speichern
  4. Datei vidcfg.bin schreibgeschützt setzen

That’s all!

March 1st, 2006

unix: user spezifischer zugriff auf gemountete fat laufwerke

No Comments, IT, Unix, Windows, by Ralf.

mount fat16 fat32

einleitung
wer windows und linux auf einem rechner installiert hat, möchte natürlich unter beiden betriebssystemen auf seine daten zugreifen. am besten eignet sich dazu eine partition mit dem fat-datei-system.
dazu wird einfach ein eintrag in die mount-datei “/etc/fstab” gesetzt und man kann die gewünschte partition unter linux einbinden. windows bindet soundso alle laufwerke für die es unterstützung hat ein.
beispiel für mount-eintrag (partiitionsnummer 5, 2. festplatte):

/dev/hdb5  /mnt/fat  vfat  0 0

user-spezifisch mounten
möchte man jedoch den zugriff auf das fat-laufwerk user-spezifisch gestalten, damit man für andere benutzer einschränkungen treffen kann, so muss kann man folgendes tun:
- als root anmelden:

su

- anlegen einer neuen gruppe (z.b. name = fat):

groupadd fat

- auflisten der bisherigen gruppen des users:

groups user

- hinzufügen der authorisierten nutzer zur gruppe (=fat):

usermod -G fat,..(bisherige gruppen des users).. user

- mount-eintrag anpassen:

/dev/hdb5  /mnt/fat  vfat  users,gid=fat,umask=0007  0 0

damit wird der mount eintrag an die gruppe “fat” gebunden und es darf nur noch von mitgliedern dieser gruppe von dieser partition gelesen werden.
gid weißt die gruppe “fat” dem mount-eintrag zu.
umask gibt nun das muster für die einschränkung an.

falls schwierigkeiten beim einbinden von fat-laufwerken auftreten, sollte unbedingt noch folgendes angegeben werden:

..umask=0007,iocharset=iso8859-15,code=437

iocharset und code geben noch zusätzliche sprachinformationen über die daten auf dem laufwerk an.

ich hoffe, dass manchen diese information weiterhilft ;-)

March 1st, 2006

unix – windows: zeilenumbrüche zwischen dokumenten konvertieren

17 Comments, IT, Unix, Windows, by Ralf.

einleitung
es ist sicherlich schon jedem begegnet: eine ascii-datei (zum beispiel eine simple textdatei), die unter windows abgespeichert wird, hat unter unix diese hässlichen “^M” am Ende jeder Zeile und umgekehrt hat eine datei von einem unix-system unter windows keine zeilenumbrüche mehr (alles steht in einer zeile). es muss also konvertiert werden, falls man keinen guten editor zur hand hat, wie zum beispiel ultraedit unter windows oder quanta unter unix.

ursache
die zeilenumbrüche werden unter windows und linux unterschiedlich dargestellt:
- unix verwendet: LF (=line feed)
- win verwendet: CR LF (=carriage return & line feed)

CHAR ASCII PROG

LF   10   'n'

CR   13   'r'

konvertieren
abhilfe schaffen 2 möglichkeiten:
1) man benutzt für die jeweilige konvertierung folgende programme:
- unix2dos (unter /usr/bin/unix2dos)
- dos2unix (unter /usr/bin/unix2dos)

oder

2) ein kleines einzeiler script:

perl -pi -e 's/rn/n/g' #win to unix

perl -pi -e 's/n/rn/g' #unix to win

am besten werden die scripte als sog alias in die konfiguration der shell-umgebung eingegeben. damit sind sie als befehl aufrufbar, ohne dass eine datei angelegt wurde.

- kommandozeile öffnen und in einem editor die anpassungen vornehmen:

ee /home//.bashrc

- nun kopieren sie folgenden code:

alias w2u="perl -pi -e 's/rn/n/g'"

alias u2w="perl -pi -e 's/n/rn/g'"

achten sie darauf, dass am ende der datei wieder eine leerzeile stehen sollte. möchten sie diese aliase auch benutzen, wenn sie sich von einem entfernten rechner anmelden, müssen sie die einträge auch in der datei .bash_profile vornehmen.
falls sich die datei .bashrc nicht öffnen lässt, sollte sie mit ‘touch .bashrc’ erstellt werden. ausserdem müssen sie die shellumgebung bash benutzen, andernfalls müssen die einträge in eine andere datei gemacht werden (und ggf verändert werden).

die konvertierung erfolgt nun durch:

w2u  #win to unix

u2w  #unix to win

March 1st, 2006

siemens handy mit linux / unix synchronisieren

1 Comment, IT, Unix, by Ralf.
sync myhandy?

einleitung
dieser artikel richtet sich an besitzer eines siemenshandys der neueren generation. unter linux ist es leider immer noch sehr umständlich zugriff auf das Handy zu bekommen, zumal z.z. von siemens nur software für das windows-betriebssystem angeboten wird.
Für folgende geräte kann man in diesem artikel unterstützung finden:
- SL55
- SL45i / SL45
- SL 42
- S55
- S45i / S45
- S40
- ME45
- MT50
- M50
- M35i / M35
- CL55 / C55
- C45
- A55
- A50

es kommt auf die neue modemfunktionalität an, die zum austauschen / synchonisieren von daten verwendet wird.
auf den flexible-memory (wird z.b. für java-programme und bilder genutzt) kann außerdem zugegriffen werden.

durch eine recherche findet man einiges an programmen, die den gewünschten zweck erfüllen sollen. doch leider wird man bei manchen programmen auch enttäuscht feststellen, dass nicht alles gold ist was glänzt.

was brauche ich?
um daten (adressbuch / telefonbuch / kalender / ..) zu synchronisieren braucht man eigentlich nur ein tool, welches die modemfunktionalität des handys beherrscht. (z.b. über irda, serielles kabel, usb)

um auf den flexible-memory (bilder, töne, java-programme) zuzugreifen, benötigt man ein tool, das eine serielle verbindung zum handy herstellen und den speicher des handys auslesen kann. um java-games auf dem handy zu installieren ist diese verbindungsart notwendig.


kandy

kandy wird bereits dem kde-paket mitgeliefert. leider ist es bisweilen sehr umständlich eine funktionsfähigkeit mit siemens-handys herzustellen, da man die modembefehle selbst bearbeiten und diese für siemens-handys anpassen muss.
eins geht auf jeden fall – man kann statusinformationen vom handy abrufen.

die verbindung wird auf dem folgenden weg hergestellt
- handy und computer durch das serielle kabel verbinden
- im menü unter kandy einrichten die serielle schnittstelle bestimmen:
– für COM1 – “/dev/ttyS0″ und für COM2 – “/dev/ttyS1″
- im menü modem die verbindung herstellen

ich bin gespannt auf die nächste version, die hoffentlich einige neuerungen mitsichbringt.

scxx


scmxx mit gscmxx

scmxx ist ein kommandozeilen-tool, welches beim testen mit mehreren siemens-handys sehr gut funktioniert hat. damit ist dieses tool auch mein persönlicher favourit.
die installation ist eigentlich auch sehr einfach:
- programm hier downloaden
- kommandozeile öffnen (z.b. xterm)
- datei (in ein verzeichnis) extrahieren:

tar zxf *.tar.gz

- in das neue verzeichnis wechseln

cd verzeichnis

- folgenden befehl ausführen:

perl Makefile.PL

- wenn keine fehler gemeldet wurden:

make

- als root anmelden:

su

- wenn keine fehler gemeldet wurden:

make install

- ausführen (als normaler user) mit:

scmxx

gscmxx ist das grafische frontend zu scmxx. dieses tool zeichnet sich durch eine sehr bedienungsfreundliche oberfläche aus und eignet sich vor allem für kommandozeilen-scheue user.
die installation ist ebenfalls ganz leicht auszuführen. folgen sie einfach den anweisungen von oben oder nutzen sie die informationen auf der homepage.

die verbindung wird auf dem folgenden weg hergestellt
- handy und computer durch das serielle kabel verbinden
- bei verwendung von scmxx folgenden parameter angeben (com1):

scmxx -d /dev/ttyS0

- bei verwendung von gscmxx einfach unter einrichten den richtigen anschluss wählen:
– /dev/ttyS0 für com1 und /dev/ttyS1 für com2

achtung! mit diesem tool können sie ihr adressbuch, telefonbuch, sms-speicher, betreiber-logo, … bearbeiten. jedoch bekommen sie keinen zugriff auf den flexible-memory ihres siemens-handys. dazu finden sie weiter unten ein tool mit dem namen “siefs”.

viel spass beim handy hacken ;-)
kandy


sieFS – mounten des fexible-memorys

für das syncronisieren habe ich ihnen nun schon ein paar tools vorgestellt. doch um an das dateisystem des siemens-handy heranzukommen, benötigen sie ein weiteres tool, das es erlaubt den flexible-memory ihres telefon als dateisystem in ihr system einzubinden (tolle sache wie ich finde).

sieFS ist eine software die das kernel-modul fuse benutzt, das datei-systeme erzeugen kann. nach dem herunterladen muss nur noch kompiliert werden und nach einem mount-eintrag, kann das handy abgerufen werden.

anleitung
- auf der sieFS-seite das paket siefs-0.x.tar.gz downloaden
- ausserdem benötigen sie das fuse-paket (fuse-1.x.tar.gz)
- kommandozeile öffnen (z.b. xterm)
- beide dateien (in je ein verzeichnis) extrahieren:

tar zxf *.tar.gz

- beginnen sie nun mit dem paket fuse und machen sie dann das gleiche mit dem anderen paket
- in das neue verzeichnis wechseln

cd verzeichnis

- stellen sie sicher, dass sie den kernel-source installiert haben (gewöhnlich unter “usr/src/linux”)
- folgenden befehl ausführen:

./configure

- wenn keine fehler gemeldet wurden:

make

- als root anmelden:

su

- wenn keine fehler gemeldet wurden:

make install

- nun muss unter “/lib/modules/kernel-xx/kernel/fs/fuse/” das modul “fuse.o” existieren
- falls dem nicht so ist, dann muss diese datei von hand aus dem source-verzeichnis kopiert werden (fuse.o)
- nun sind noch ein paar kleine einträge in der mount-datei nötig:
- als root anmelden mit

su

- die datei “/etc/fstab” in einem editor öffnen:

ee /etc/fstab

- folgenden eintrag am ende hinzufügen (für com1):

/dev/ttyS0   /mnt/mobile   siefs   noauto,user   0 0

- achtung: am ende der datei muss immer eine leerzeile (enter) stehen!
- nun muss noch das mount-verzeichnis “/mnt/mobile” erstellt werden:

su
mkdir /mnt/mobile

die verbindung wird dann so hergestellt:
- falls sie nicht neu booten, müssen sie zuerst das kernel-modul fuse laden:

su
insmod fuse

- handy und computer durch das serielle kabel verbinden
- die kommandozeile öffnen und folgenden befehl eingeben:

mount /mnt/mobile

anmerkung: auf manchen systemen kann der fehler “couldn’t execute modprobe.old” auftreten. abhilfe dazu schafft ein symlink, der unter /bin/modprobe.old angelegt wird und auf /sbin/modprobe.old zeigt. ich denke es ist ein bug.

mit diesem tool können sie nun auf ihren flexible-memory zugreifen. bei den java-fähigen handys können so nun ganz leicht java-programme installiert werden durch kopieren der entsprechenden datei in das verzeichnis “/mnt/mobile/Java/jam/”.

viel spass!

March 1st, 2006

unix: 5-tasten maus unter x11 installieren

17 Comments, IT, Unix, by Ralf.

einleitung
unter unix kann die unterstützung für die eingabegeräte durch den prozess für die grafische ausgabe erfolgen (den x11). dieser prozess verarbeitet dann also auch mauseingaben. alternativ können aber auch andere programme verwendet werden (zum beispiel gpm). damit man eine maus mit den x11-treibern benutzen kann, muss eine notwendige einstellung in der konfigurationsdatei “/etc/X11/XF86Config” für den x11 gemacht werden. folgende einträge sind zum beispiel für eine intelli maus (mit 5 tasten) von microsoft notwendig:

#Auszug aus der /etc/X11/XF86Config

Section "InputDevice"

Driver  "mouse"

Identifier  "Mouse[1]"

Option  "ButtonNumber" "7"

Option  "Device" "/dev/mouse"

Option  "Name" "Autodetection"

Option  "Protocol" "ExplorerPS/2"

Option  "Vendor" "Sysp"

Option  "ZAxisMapping" "6 7"

EndSection

InputDevice gibt an, dass es sich um ein eingabegerät handelt,
Driver “mouse” legt fest, dass es sich um eine maus handelt,
Identifier gibt einen beliebigen namen an,
ButtonNumber: linke, rechte, mittlere, seitlich linke, seitlich rechte, scoll-up und scroll-down taste,
Protocol (maustreiber) ist wohl der wichtigste eintrag,
ZAxisMapping gibt an, auf welche tasten das scrollrad definiert ist.

achtung! wenn sie änderungen an konfigurationsdateien vornehmen, vergessen sie bitte nicht, stets sicherheitskopien anzulegen, z.b. als root:

cp /etc/X11/XF86Config /etc/X11/XF86Config.backup

nach jeder änderung an der dieser konfigurationsdatei müssen sie ihr grafisches system neu booten. dies können sie zum beispiel mit der tastenkombination strg+alt+backspc tun. falls das grafische system nicht erneut bootet (auch “startx” nicht funktioniert), ist ein fehler aufgetreten und sie sollten ihre sicherheitskopie wiederherstellen.

wenn sie die grafische oberfläche wieder erfolgreich gestartet haben, können sie mit dem programm “xev” (einfach aus der konsole ausführen) die funktionalität der tasten testen.

scrollrad
damit das scrollrad funktioniert ist ein tool namens “imwheel” notwendig. damit werden bestimmte tastenereignisse (nämlich die vom scrollrad) auf die aktionen scrollen-hoch und scrollen-runter abgebildet.
wenn sie dieses tool noch nicht auf diesem system haben sollten sie es hier downloaden und den dortigen installationsanweisungen folgen.
damit jetzt noch die richtigen tasten für das scrollen an imwheel gesendet werden ist noch eine letzte einstellung notwendig. unter /home/user muss eine datei namens “.Xmodmap” erstellt werden, falls sie noch nicht existiert, und folgender eintrag gemacht werden:

pointer = 1 2 3 6 7 4 5

damit wird nun noch das richtige tastenereignis an imwheel gesendet.

March 1st, 2006

unix: 2 mäuse unter x11 installieren

17 Comments, IT, Unix, by Ralf.

einleitung
unter unix kann die unterstützung für die eingabegeräte durch den prozess für die grafische ausgabe erfolgen (den x11). dieser prozess verarbeitet dann also auch mauseingaben. alternativ können aber auch andere programme verwendet werden (zum beispiel gpm). damit man eine maus mit den x11-treibern benutzen kann, muss eine notwendige einstellung in der konfigurationsdatei “/etc/X11/XF86Config” für den x11 gemacht werden.

möchte man eine zweite maus zusätzlich anschließen, ist folgende konfiguration notwendig:

#Auszug aus der /etc/X11/XF86Config

Section "InputDevice"

Identifier  "Mouse1"

Driver  "mouse"

Option  "Device" "/dev/mouse"

Option  "Protocol" "PS/2"

Option  "Emulate3Buttons" #linke+rechte Taste gleichzeitig=mittlere

Option  "EmulateWheel" "true" #emuliere Mausrad..

Option  "EmulateWheelButton" "2" #..durch mittleren Taste

Option  "EmulateWheelInertia" "20" #Mausrad scrollt .. Zeilen

EndSection

Section "InputDevice"

Identifier  "MouseUSB"

Driver  "mouse"

Option  "Device" "/dev/usbmouse"

Option  "Protocol" "imPS/2"

Option  "ZAxisMapping" "4 5" #Scrollrad ansprechen

EndSection

#[...]

Section "ServerLayout"

Identifier  "Layout1"

Screen  "Screen0"

InputDevice  "Keyboard1" "CoreKeyboard"

InputDevice  "Mouse1" "CorePointer"

InputDevice  "MouseUSB" "SendCoreEvents"

EndSection

notebook besitzer werden häufig diese lösung für das problem der 2 mäuse suchen.

InputDevice gibt an, dass es sich um ein eingabegerät handelt,
Driver “mouse” legt fest, dass es sich um eine maus handelt,
Identifier gibt einen beliebigen namen an,
Protocol (maustreiber) ist wohl der wichtigste eintrag,
ZAxisMapping gibt an, auf welche tasten das scrollrad definiert ist.

achtung! wenn sie änderungen an konfigurationsdateien vornehmen, vergessen sie bitte nicht, stets sicherheitskopien anzulegen, z.b. als root:

cp /etc/X11/XF86Config /etc/X11/XF86Config.backup

nach jeder änderung an der dieser konfigurationsdatei müssen sie ihr grafisches system neu booten. dies können sie zum beispiel mit der tastenkombination strg+alt+backspc tun. falls das grafische system nicht erneut bootet (auch “startx” nicht funktioniert), ist ein fehler aufgetreten und sie sollten ihre sicherheitskopie wiederherstellen.

wenn sie die grafische oberfläche wieder erfolgreich gestartet haben, können sie mit dem programm “xev” (einfach aus der konsole ausführen) die funktionalität der tasten testen.

March 1st, 2006

linux: papierkorb (libtrash)

No Comments, IT, Unix, by Ralf.

einleitung: papierkorb unter linux?title
vielen linux-usern passiert es: es wird eine datei gelöscht und diese ist *(fast) unwiderruflich weg, weil es keinen papierkorb gibt.

zwar hat der windowmanager kde auf seinem desktop einen papierkorb, doch können nur kde-programme diesen nutzen und die wenigsten tun dies auch. also müsste ein tool her, welches schon von grund auf den papierkorb implementiert. ich denke die beste lösung haben hier die entwickler von libtrash gefunden.

*(fast): man kann mit hilfe von speziellen kommandos eine festplatten-wiederherstellung starten und hoffen, dass die gelöschte datei wiederhergestellt wird. dies ist im allgemeinen nur möglich, wenn der computer sofort ausgeschaltet wird und auf der platte nicht wieder neue informationen den wichtigen bereich auf der platte überschreiben.

libtrash
libtrash ist eine shared library (gemeinsam genutzte bibliothek), die wenn sie geladen ist, auf linux-systemen die papierkorb-funktion implementiert.

installation
sie können entweder den installationsanweisungen auf der libtrash-seite folgen oder ein fertiges paket installieren – es beliebt ihnen. für schnelle, die kurzanleitung:
- herunterladen der neusten version
- die heruntergeladene datei entpacken und ggf kompilieren (dazu README lesen)
- die datei ‘libtrash.so.xx’ nach ‘/lib/libtrash.so.xx’ kopieren
-

konfiguration
die konfiguration wird nun wie folgt vorgenommen:
- die konfigurationsdatei für libtrash downloaden (siehe unten)
- die kommandozeile öffnen und als root anmelden

su

- die heruntergeladene datei nach /etc kopieren

cp libtrash.conf /etc/libtrash.conf

- ggf die datei anpassen, indem sie mit einem editor geöffnet wird

ee /etc/libtrash.conf

- sie sollten, falls noch nicht geschehen, wieder als normaler user arbeiten (nicht als root)

exit

- folgende dateien anpassen, falls sie existieren:
.bashrc – wird ausgeführt wann immer eine shell gestartet wird
.bash_profile – wird ausgeführt, wenn man sich von einem entfernten rechner einloggt
.profile – wird ausgeführt, wenn sich der user lokal anmeldet

ee /home//

- in die dateien muss nun folgender eintrag gemacht werden:

export LD_PRELOAD=/lib/libtrash.so.1

damit ist die konfiguration abgeschlossen und nach einem ab-/anmelden steht die volle papierkorb-funktion zur verfügung.

benutzung
unter dem verzeichnis /home//Trash befinden sich jetzt alle veränderten oder gelöschten dateien. sie können diese von dort wiederherstellen, indem sie einfach die gewünschte datei dorthin kopieren, wo sie sie benötigen. falls sie die vorgeschlagene konfiguration benutzt haben, hat das papierkorb-verzeichnis zwar keinen schreibzugriff (sie können dann den papierkorb nicht einfach so leeren), aber eine wichtige absicherung dafür, falls sie einmal ihr home-verzeichnis löschen sollten, nicht der papierkorb mit gelöscht wird und alle daten doch unwiederruflich weg wären. den papierkorb leeren können sie entweder als root (dann haben sie immer schreibrechte) oder mit hilfe eines einfachen scriptes automatisch. dabei werden alle dateien die älter als xx tage sind aus dem papierkorb entfernt. sie müssen das script herunterladen und einfach in das Verzeichnis /etc/cron.daily/clear_libtrash kopieren:

su

cp clear_libtrash /etc/cron.daily/clear_libtrash

beachten sie, dass sie das script natürlich ausführbar machen müssen und dem user root zuordnen:

chmod uga+x clear_libtrash
chown root:root clear_libtrash

zum schluss muss nur noch ihr home-verzeichnis angegeben werden. dazu öffnen sie die das script in einem editor:

ee /etc/cron.daily/clear_libtrash

- und ändern in zeile 15 den vorgegebenen pfad in ihren trash-pfad ab

TRASH_HOME="/home//Trash"

- übrigens, möchten sie für mehrere user den papierkorb automatisch leeren, können sie – getrennt mit leerzeichen – mehrere pfade angeben
- standardmäßig ist eine zeit von 7 tagen angegeben, nach der dateien gelöscht werden. sie können diese zeit beliebig verändern unter zeile 18:

MAX_DAYS_IN_TRASH="x"

ist doch toll dieser papierkorb ;-)

March 1st, 2006

linux kernel selbst kompilieren

1 Comment, IT, Unix, by Ralf.
make kernel?

einleitung
die vorteile, sich einen eigenen kernel zu bauen liegen eigentlich klar auf der hand:
- performance
- system wird auf die plattform abgestimmt
- unterstützung für besondere hardware
- unnötige balast kann entfernt werden
- macht spass

was brauche ich?
um einen kernel selbst zu kompilieren wird folgendes benötigt:
- kernel-source (z.b.: von kernel.org)
- compiler gcc
- tool make

ok, alles vorhanden, wie geht’s nun los?
- zuerst als root anmelden:

su

- den kernel-source in das verzeichnis “/usr/src/” verschieben

mv kernel.tar

- den kernel-source entpacken:

tar xvzf kernel.tar

- einen symlink anlegen (oder falls vorhanden ändern) mit “/usr/src/linux” -> “/usr/src/new_kernel_dir“:

ln -s /usr/src/linux /usr/src/new_kernel_dir

- in das source verzeichnis wechseln:

cd /usr/src/new_kernel_dir

- die kernel-konfiguration starten, hier gibt es verschiedene varianten
– möchte man eine neue konfiguration aus der vorhandenen ableiten:

make cloneconfig

– möchte man eine neue konfiguration aus der konsole erstellen (ncurses ist installiert):

make menuconfig

– möchte man eine neue konfiguration aus der konsole erstellen (geht immer):

make config

– möchte man eine neue konfiguration mit einer grafischen oberfläche erstellen:

make xconfig

- nun müssen die abhängigkeiten (dependencies) erstellt werden:

make dep

- alte build-dateien löschen:

make clean

- kernelimage:

make bzImage

- neuen kernel installieren:

make install

- module bauen:

make modules

- module installieren:

make modules_install

- ist das alles ohne fehler abgelaufen – dann glückwunsch!
- achtung! jetzt muss noch lilo ausgeführt werden, sonst kann es passieren, dass linux nicht mehr startet:

lilo

- wird ein anderer bootmanager als lilo benutzt, sollte man in dessem manual nachschlagen, ob eine neukonfiguration notwendig ist!
- und zu guter letzt neu starten ;-)

March 1st, 2006

crc – fehlererkennung

1 Comment, IT, by Ralf.
einsatz

die zyklische redundanzprüfung (crc – cyclic redundany check) wird vor allem bei der verarbeitung von bitfolgen (übertragung, speicherung) genutzt.
dabei wird einer bitfolge eine fcs (frame check sequence) angehangen, die meist 12, 16 oder 32 bit lang ist.
damit soll sichergestellt werden, dass die emfangenen daten auch tatsächlich fehlerfrei sind und nicht durch störungen auf dem übertragungsweg (z.b. rauschen der leitung) bitfehler aufgetreten sind.
diese fehlererkennungsmethode ist viel leistungsfähiger als paritätsbits oder fehlerprüfsummen, d.h. man kann also mehr bitfehler oder bitfehlerfolgen (fehlerbursts) erkennen.
ein weiterer vorteil von crc ist, dass man nur wenige bits (ingesamt bilden diese die fcs) hinzufügen muss, es entsteht also wenig redundanz.
(redundanz entsteht immer dann wenn einer bitfolge für die datensequenz “wertlose” bits hinzugefügt werden.)
bei einem ethernet werden zum beispiel an frames, die 12000bit groß sind nur 32bit (fcs) angehangen, trotzdem ist die erkennung von fehlern bei der fcs als sehr hoch einzuschätzen.
erkennt der empfänger einer datensequenz einen übertragungsfehler, wird die entsprechende einheit verworfen und eine erneute übertragung beim sender angefordert.

grundlage

das crc-verfahren basiert auf einer bitweisen (also ohne überträge!) binärarithmetik modulo 2 (was einer xor-operation entspricht).
es gilt also für addition und subtraktion:

0 + 1 = 1   1 + 0 = 1   0 - 1 = 1   1 - 0 = 1
0 + 0 = 0   1 + 1 = 0   0 - 0 = 0   1 - 1 = 0

multiplikation wird als sukzessive (bitweise) addition und division als sukzessive subtraktion ausgeführt:

1100101        0110001

+ 1010100      - 1010100

--------       --------

0110001        1100101

der algorithmus basiert nun darauf, dass man die zu übertragende bitfolge (folge von 0en und 1en) als polynome mit den koeffizienten 0 und 1 interpretiert. bei m bits hat man dann m terme — von b^(m-1) bis b^0.

hierzu ein beispiel:

0101101 --> 0 + b^5 + 0 + b^3 + b^2 + 0 + b^0
0101101 -->     b^5   +   b^3 + b^2   +   b^0
0101101 -->     b^5   +   b^3 + b^2   +   1
funktion

die fcs (frame check sequence) wird mit hilfe eines generator-polynoms berechnet, das sender und empfänger definieren.
für die weitere betrachtung definieren wir folgendes:
- das generatorpolynom g(b) besteht aus g bits
- das daten-polynom m(b) besteht aus m bits
- r ist der grad der generator-polynoms g(b)
- das daten-polynom t(b) mit fcs besteht aus t bits

einem zu übertragenden rahmen (frame) wird nun die fcs angehangen (man nennt diese auch trailer, anhang). dabei ist der rahmen (der die datenbits enthält) durch m bits so zu ergänzen, dass das polynom aus datenbits und fcs durch das generatorpolynom teilbar ist.

–> der algorithmus:
1.)
anhängen von r 0-bits an das ende des zu übertragenden frames m(b)
der neue rahmen hat jetzt also (m + r) bits, was folgendem polynom entspricht: b^r * m(b)

2.)
dividiere die bitfolge b^r * m(b) durch die bitfolge des generator-polynoms g(b) gemäß modulo-2-arithmetik

3.)
der divisionsrest (< = r bits) ist die fcs. diese wird jetzt der zu übertragenden nachricht m(b) angehangen.
das resultat ist die neue zu übertragende bitfolge (frame + fcs) t(b).

–> anmerkung:
die fcs werden in der praxis einfach mit shift- und xor-registern berechnet.

beispiel

· daten-frame: 1101011011
· generator-polynom: b^4 + b + 1

–> daraus folgt
· daten-polynom: b^9 + b^8 + b^6 + b^4 + b^3 + b^1 + b^0
· generator-frame: 10011

–> also

Frame:              1 1 0 1 0 1 1 0 1 1

Generator:          1 0 0 1 1

–> hinzufügen von r=4 (grad des generators) 0-bits

Frame mit 0-Bits:   1 1 0 1 0 1 1 0 1 1  0 0 0 0

–> division durch generator-polynom g(b)

Division:

1 1 0 1 0 1 1 0 1 1 0 0 0 0  /  1 0 0 1 1  =  1 1 0 0 0 0 1 0 1 0

1 0 0 1 1 ------------------------------------+ | |             |

---------                                       | |             |

1 0 0 1 1                                     | |             |

1 0 0 1 1 ------------------------------------+ |             |

---------                                       |             |

0 0 0 0 1                                     |             |

0 0 0 0 0 ------------------------------------+    . . .    |

---------                                                   |

0 0 0 1 0                                                 |

0 0 0 0 0                                                 |

---------                                                 |

0 0 1 0 1                                               |

0 0 0 0 0                                               |

---------                                               |

0 1 0 1 1                                             |

0 0 0 0 0                                             |

---------                                             |

1 0 1 1 0                                           |

1 0 0 1 1                                           |

---------                                           |

0 1 0 1 0                                         |

0 0 0 0 0                                         |

---------                                         |

1 0 1 0 0                                       |

1 0 0 1 1                                       |

---------                                       |

0 1 1 1 0                                     |

0 0 0 0 0 ------------------------------------+

---------

1 1 1 0  =  Rest

–> es entsteht der frame mit prüfsumme t(b)

1 1 0 1 0 1 1 0 1 1  1 1 1 0

–> kontrolle
der empfänger erhät nun die bitfolge t(b) und kann dann, indem er t(b) durch g(b) dividiert (rechnung äquivalent zu oben) überprüfen, ob der frame korrekt übertragen wurde. das ergebnis muss dann nämlich einen rest von 0 haben.

fehlererkennung

nehmen wir an, die übertragung wird gestört und es wird statt des erwarteten frames t(b) der fehlerhafte frame t(b) + e(b) empfangen.
jedes 1-bit in e(b) entspricht einem bitfehler, wobei ein einzelnes 1-bit ein singlebitfehler ist und eine 1 gefolgt von 0 oder 1 und wieder 1 ein burst, (alle anderen bits in e(b) sind 0).

folgende bitfehler können also erkannt werden:
1.) singlebitfehler: e(b) = b^i
für die erkennung muss g(b) mindestens 2 terme haben!

2.) 2 singlebitfehler: e(b) = b^i + b^j mit i > j
g(b) darf nicht durch b^k + 1 teilbar sein für k=1..m (framelänge)

3.) ungerade anzahl von bitfehlern:
g(b) muss den faktor b + 1 enthalten!

4.) burstfehler:
ein polynom des grads r erkennt alle burstfehler einer länge < = r.
dazu muss g(b) einen b^0-term enthalten. bursts der länge r+1 werden mit einer wahrscheinlichkeit von 0.5^(r-1) nicht erkannt.
die gesamtwahrscheinlichkeit, dass ein gestörter frame durchkommt, ist 0.5^r, unter der voraussetzung, dass alle bitmuster gleichmässig verteilt sind.

standardpolynome
hier ist eine auflistung getesteter standard polynome:

· crc-8:     b^8 + b^2 + 11 (atm)

· crc-10:    b^10 + b^9 + b^5 + b^4 +b^1 + 1 (atm)

· crc-12:    b^12 + b^11 + b^3 + b^2 + b^1 + 1

· crc-16:    b^16 + b^15 + b^2 + 1

· crc-ccitt: b^16 + b^12 + b^5 + 1 (hdlc)

· crc-32:    b^32 + b^26 + ... + b^2 + b^1 + 1 (ethernet, fddi)

January 30th, 2003

zufallszahlengeneratoren

No Comments, Studies, by Ralf.

zufallszahlengeneratoren – random number generators

dieses projekt ist im rahmen des bachelor studiums network computing für die lehrveranstaltung stochastische modellierung entstanden.
aufgabe war eine ressource über zufallszahlengeneratoren für studenten, lehrkräfte und interessierte zu erstellen. die ressource basiert auf links (verweisen) zu hilfreichen seiten im internet.

ich habe dieses projekt januar 2003 fertiggestellt und die benotung 1.0 dafür erhalten.

zu der zufallszahlengeneratoren homepage->