Archiv nach Monaten: Oktober 2010

grub reparieren nach Windows Installation

Windows möchte das System nicht teilen und schreibt nur sich selbst in den MS-Bootloader im MBR.
Die grub-Einstellung kann ubuntu reparieren.

Anleitung gemäß ubuntuusers.de:

Mitzugehöriger Ubuntu Live CD booten
Ein Terminal öffnen
Mit:

sudo fdisk -l

Partitionen der Festplatte anzeigen.
Dier Linux-Partition mounten:

sudo mount /dev/sda1 /mnt

(sda1 mit der angezeigten Partition austauschen)

(Wenn Sytem mit separater Boot-Partition muss diese auch gemounted werden:

sudo mount /dev/sda2 /mnt/boot

)

sudo grub-install --root-directory=/mnt /dev/sda1

(sda1 wieder mit der angezeigten Partition austauschen)

Neustart und Test, dann

sudo update-grub

weitere Methoden auf:

http://wiki.ubuntuusers.de/grub_2/reparatur
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Eee PC 1101HA Grafiktreiber Ubuntu

Grafiktreiber für den Asus Eee PC 1101 HA wird bei Ubuntu benötigt, um die Auflösung von 1024×768 auf die unterstützen 1366×768 zu bringen.  Dazu müssen folgende Befehle in das Terminal eingegeben werden:

sudo add-apt-repository ppa:gma500/ppa
sudo apt-get update
sudo apt-get install poulsbo-driver-2d poulsbo-driver-3d poulsbo-config

Danach Neustart

Für Natty:

sudo add-apt-repository ppa:gma500/emgd
sudo apt-get update
sudo apt-get install xorg-emgd emgd-dkms
sudo emgd-xorg-conf

Danach Neustart

Informationen gefunden: https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo#karmic

VN:F [1.9.22_1171]
Rating: 4.7/5 (3 votes cast)
VN:F [1.9.22_1171]
Rating: -1 (from 1 vote)

riesige Verknüpfungspeile in Windows 7 komplett entfernen

Die Datei „blank.ico“ nach C:\Windows kopieren.
Dann in regedit, unter

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer

gehen, dort den neuen Schlüssel Shell Icons anlegen. In diesem Ordner dann die Zeichenfolge mit dem Namen 29 erstellen und ihr den Wert

%SystemRoot%\blank.ico,0

geben.
Dann Neustart oder Abmelden oder explorer.exe killen und neu ausführen und die Pfeile sind weg

Blank in riesige Verknüpfungspeile in Windows 7 komplett entfernen <= Icon File um die Verknüpfungspeile in Windows 7 zu entfernen

VN:F [1.9.22_1171]
Rating: 4.0/5 (4 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

z-index bug im IE 7

wenn man ein CSS-Menü hat, und darunter einen div-Container, der mit

position: absolute;

ausgerichtet ist, kann man das im IE wie hier (http://jonathanstegall.com/2009/01/15/ie-z-index-bug-with-css-dropdown-menu/) sehr schön beschrieben beheben.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

wichtige Befehle für OSM

a Einfügen Wege zeichnen oder durch Doppelklick einen Punkt zeichen
s Selektieren Mit SHIFT können mehrere Objekte selektiert werden, mit STRG können Selektierte wieder „entfernt“ werden
q rechtwinklig Unter Bearbeiten/Einstellungen dann Karteneinstellungen (3. von oben) die Projektionsmethode auf Merkator stellen. Wenn zusätzlich zu einem Gebäude noch zwei Punkte ausgewählt werden, wird dieses zu den Punkten ausgerichtet
p Wege trennen Weg anklicken, zusätzlich den Punkt an dem der Weg getrennt werden soll
c Wege verbinden beide Wege makieren (mit SHIFT)
g Punkte trennen makierter Punkt wird getrennt (alle Punkte liegen dann übereinander) Achtung: erst Selektion aufheben, dann die Punkte auseinanderschieben
j Punkte verbinden alle Punke makieren, die miteinander verbunden werden sollen
m Punkte aufeinanderlegen Sehr nützlich an Grenzen von Städten/Land, immer erst Punkt makieren, der bewegt werden soll, dann das Ziel makieren
SHIFT+STRG drehen ein Objekt drehen
o Kreis rund machen einfach alle Punkte von z.B. einem Kreisverkehr makieren und paar mal „o“ drücken
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

MYSQL – LEFT JOIN nicht immer notwendig

früher habe ich alle meine MYSQL-Abfragen nur mit LEFT JOINS gemacht, aber nach einiger Zeit stellte sich für mich heraus, dass das eigentlich garnicht notwendig ist.

hier mit LEFT JOIN

SELECT p.name, p.alter, w.ort
FROM personen p
LEFT JOIN wohnort w
ON p.person_id = w.person_id

das geht aus so:

SELECT p.name, p.alter, p.ort
FROM personen p, wohnort w
WHERE p.person_id = w.person_id
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

C/C++ unter Eclipse installieren

man muss g++, make und eclipse installieren, dann Eclipse starten und unter Help/Install New Software, bei work with folgenden Link auswählen:
http://download.eclipse.org/tools/cdt/releases/galileo

danach auf Add, alles herunterladen. Nach Abschluss der Installation Eclipse neu starten und es müsste alles funktionieren

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Netzlaufwerk & NTFS Partition automatisch einbinden

Netzlaufwerk auf Samba-Freigabe

ich habe lange gesucht um das zu finden was ich hier poste. Es ist mir mit der Ubuntu Version 10.10 das erste Mal gelungen ein Netzlaufwerk auf ein Samba-Laufwerk automatisch zu mounten und zusätzlich noch beim Start die NTFS-Partition meiner Windows-Installation zu mounten.
Ein Problem war die Anmeldung mit Benutzerdaten. Es ist unschön, wenn man bei jedem Start die Benutzerdaten eingeben muss – einfach nur nervig. Abhilfe schafft hier folgender Trick:
Es wird eine Datei angelegt, bei hat sie den Namen .credentials in dieser Datei stehen die Benutzerdaten. Damit die Sicherheit gewährt bleibt werden die Rechte noch verändert, sodass nur noch root auf diese Datei zugreifen kann.

Als erstes muss ein Programm installiert werden. Das geht ganz einfach über das Hauptmenü, dann auf Ubuntu Software-Center. Hier sucht man nach smbmount, man findet dann ein Programm mit dem Namen smbfs. Dieses installieren, damit unten beschriebene Anleitung funktioniert.

so muss die Datei .credentials aufgebaut sein:

username=NAME
password=PASSWORT

Die Datei habe ich in meinem Homeverzeichnis abgelegt (/home/lukas/.credentials). Jetzt müssen die Rechte der Datei noch geändert werden, damit die Sicherheit gewährleistet ist:

sudo chmod 600 .credentials

jetzt geht es an die fstab – Datei

//IP-ADRESSE/FREIGABE-ORDNER /MOUNTPATH cifs uid=BENUTZERNAME,credentials=PFAD-ZUR-CREDENTIALS-DATEI,dir_mode=0777,file_mode=0777 0 0

IP-ADRESSE: IP-Adresse des Servers oder Rechners mit der Freigabe
FREIGABE-ORDNER: Names des Freigegeben Ordners
MOUNTPATH: absoluter Pfad zum Einhängepunkt
BENUTZERNAME: Benutzer, mit dem Sie sich anmelden
PFAD-ZUR-CREDENTIALS-DATEI: hier den PFAD eintragen, ich habe sie in /home/BENUTZER/.credentials abgelegt.

Der Befehl dir_mode=0777 beschreibt die Rechte an dem gemouteten Ordner, hier ist lesen und schreiben erlaubt. Das Gleiche gilt auch für Dateien, hierfür ist der Befehl file_mode=0777.

NTFS-Partition mounten

zuerst muss herausgefunden werden welche Festplatte gewählt werden soll. Ich habe es über das Hauptmenü und dann unter System/Systemverwaltung/Laufwerksverwaltung herausgefunden.
Ich wollte die Windows-Partition in den Ordner /Windows einhänge, also muss erst einmal der Ordner angelegt werden, danach noch die Rechte angepasst werden:

sudo mkdir /Windows
sudo chmod 0775 /Windows

jetzt kann man in der fstab (/etc/fstab) folgendes eintragen:

/dev/sda2 /Windows ntfs-3g defaults 0 0

wie man sieht ist bei mir die Partition unter /dev/sda2 zu finden.

um das ganze jetzt ohne Neustart zu aktivieren muss noch die fstab-Datei neu geladen werden, das funktioniert so:

mount -a

Jetzt hab ich mir noch ein besonderes Schmankerl eingerichtet. Da ich ja auch Daten unter Windows habe, habe ich mir einen Ordner in Windows angelegt (C:/Daten).
Jetzt wollte ich aber nicht immer über /Windows/Daten darauf zugreifen, sondern direkt über /Daten. Die Lösung geht mithilfe eines Links:

ln -s /Windows/Daten /Daten

wenn man jetzt im Hauptmenü unter Orte geht findet man den Ordner Daten.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

search while typing

Auf fast jeder Homepage gibt es ein Suchfeld. Wenn man dort was eingibt ist man sich oft nicht wirklich sicher wie man den gesuchten Begriff schreibt. Google bietet ein Feld an, das während der Eingabe schon anfängt zu suchen und bietet einem Vorschläge.
Hierfür wird Javascript benötigt. Mit Hilfe von Javascript kann mittels AJAX eine PHP – Datei angesprochen werden, die z.B. eine MYSQL – Datenbank anspricht und von dort die Vorschläge holt.

Überwachen des Eingabefeldes

wir wollen Feststellen, ob eine Eingabe gemacht wurde. Sobald das erste Zeichen in dem Eingabefeld ladet soll auch schon nach Vorschlägen gesucht werden. Leider wie so oft muss für den Internet Explorer mal wieder eine gesonderte Version existieren siehe hierzu unter addEvent (fixed im Internet Explorer das Kommando „addEventListener“)

Hier unsere erste Funktion die das Eingabefeld überwacht:

var input_keywords;
function init()
{
	var input_keywords = document.getElementById("keywords");
	addEvent(input_keywords,"keyup",search);
}

über der Funktion wurde noch die Variable input_keywords definiert, sie muss hier global sein, weil sie später noch in mehreren Funktionen verwendet werden soll. Die Funktion init() sollte aufgerufen werden, sobald die Seite fertig geladen ist. Am einfachsten realisiert man das, indem man den HTML-Tag body wie folgt anpasst:

In der zweiten Zeile von der Funktion „init“ wird ein Event-Listener auf das Eingabefeld gesetzt. Dieses hat hier die id „keywords“, es wird beim loslassen einer Taste die Funktion search aufgerufen.

AJAX um die Vorschläge zu erhalten

ich verwende immer folgenden Code um ein AJAX – Object zu erstellen:

function erzXMLHttpRequestObject()
{
	var resObjekt = null;
	try
	{
		resObjekt = new ActiveXObject("Microsoft.XMLHTTP");			//Internet Explorer
	}
	catch(Error)
	{
		try
		{
			resObjekt = new ActiveXObject("MSXML2.XMLHTTP");
		}
		catch(Error)
		{
			try
			{
				resObjekt = new XMLHttpRequest();
			}
			catch(Error)
			{
				alert("Erzeugen eines XMLHttpRequest-Objekts ist fehlgeschlagen. Ajax ist nicht möglich");
			}
		}
	}
	return resObjekt;
}

um jetzt aber AJAX zu verwenden und unsere Vorschläge zu holen, brauchen wir noch folgenden Code:

function search(keywords)
{
        var http = null;
        http = erzXMLHttpRequestObject()
        if (http != null)
        {
           http.open("GET", "/search_while_typing.php?keywords=" + keywords, true);
           http.onreadystatechange = ausgeben;
           http.send(null);
        }
        function ausgeben()
        {
                if (http.readyState == 4)
                {
                        if(http.responseText.length > 0)
                        {
                                document.getElementById("search_result").innerHTML = http.responseText;
                                document.getElementById("search_result").className = "show";
                        }
                        else
                        {
                                document.getElementById("search_result").className = "hide";
                        }
                }
        }
}

wie man sieht sollen die Vorschläge in einem DIV-Container landen, der die id „search-result“ trägt. Die beiden Befehle mit dem className =“hide“|“show“; sprechen zwei CSS Klassen an, die den DIV verstecken oder bei Erfolg zeigen.
Der PHP-Datei werden die Suchbegriffe per URL übergeben. Die Variable trägt den Namen „keywords“

Die PHP Datei

um Vorschläge zu bekommen muss jetzt eine PHP – Datei vorhanden sein (hier: search_while_typing.php) die z.B. eine Verbindung zu einer Datenbank aufbaut und dort die nötigen Suchbegriffe sucht und an unsere Vorschlagsliste zurückgibt.

		

ganz oben werden mithilfe von „trim“ Leerzeichen und Zeilenumsprünge von dem Suchstring am Anfang und Ende entfernt. Danach werden Sonderzeichen „escaped“ mit Hilfe von Backslashes. Mit dem Befehl „preg_split“ wird der Suchstring an den Leerzeichen aufgespalten und in ein Array gespeichert.
Jetzt muss noch überprüft werden, ob die einzelnen Suchworte länger sind als ein Zeichen. Die Funktion „array_splice“ lässt hier nur eine maximale Anzahl von 4 Suchbegriffen zu. (In diesem Beispiel wird nur das erste Wort behandelt, es lässt sich aber einfach mit „AND“ und „OR“ in der MYSQL – Abfrage auf 4 zu suchende Wörter ‚aufstocken‘.
Nicht vergessen noch eine Datenbankverbindung aufzubauen. Jetzt können mit dem Beispiel- MYSQL-Befehl die Vorschläge gefunden werden. Diese werden dann weiter unten über die „while“-Schleife ausgegeben.

Optimierung und eigene Anpassung – Ideen zur Erweiterung

man könnte die Ausgabe in den Vorschlags-DIV in eine Liste umwandeln, ich hoffe man versteht was ich meine, also <ul> und <li>. Solche Listen lassen sich prima mit CSS formatieren.
Durch diese Liste könnte man zum Beispiel mit den Cursortasten rauf und runter navigieren und so einen bestimmten Vorschlag wählen. (die keycodes sind: UP: 38; DOWN: 40)
Des weiteren könnte man die Vorauswahl mit der Entertaste abschicken und dann an das eigentliche Suchscript der Seite weitergeben (keycode von Enter: 13)

Hier der Javascript-Code zum Abfragen einer Taste:

function check_key(event)
{
	event = event || window.event;
	if(event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13)
	{
	    ...
	}
}

Denkbar wäre bei „…“ eine Switchabfrage die dann die einzelnen Tasten behandelt.

<?php $keywords = $_GET[„keywords“]; if(trim($keywords)) { if(!get_magic_quotes_gpc()) $keywords = addslashes($search); if(strlen($keywords) < 50) { $searcharray = preg_split(‚/\s+/‘,$keywords); foreach($searcharray as $keyword) { if(strlen($keyword) > 1) { $search[] = $keyword; } } if(count($search) > 0) { array_splice($search,4); } //Hier muss noch eine Datenbankverbindung aufgebaut werden mysql_query(“ SELECT word FROM search_words WHERE word LIKE ‚%“.utf8_encode($keywords[0]).“%‘ ORDER BY word“); if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_array($result)) { echo htmlentities($row[„word“]).“<br/>“; } } } } ?>
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

addEventListener cross Browser

Diese Funktion behebt das Problem, dass der Internet Explorer den Befehl addEventListener nicht kennt und somit einen Fehler ausspuckt. Mit Hilfe dieser Funktion sollte es in allen Browsern, die Javascript unterstützen problemlos funktionieren.

function addEvent(obj,type,fn)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(type,fn,false);
		return true;
	}
	else if (obj.attachEvent)
	{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function() { obj['e'+type+fn]( window.event );}
		var r = obj.attachEvent('on'+type, obj[type+fn]);
		return r;

	}
	else
	{
		obj['on'+type] = fn;
		return true;
	}
}
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)