Zum Inhalt

Just notes... Posts

Java: Vergleich von Strings

Will man in Java zwei Strings miteinander vergleichen, so muss hierbei aufpassen bzw. sollte eigentlich immer nur einen Weg verwenden. Schauen wir uns aber zunächst ein einfaches Beispiel in Java an.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class StringTest {
	public static void main(String[] args) {
		String vsTest1 = "Hallo";
		String vsTest2 = new String("Hallo");
		String vsTest3 = new String("Erst das");
		vsTest3 = "Hallo";
 
		System.out.println("");
		System.out.println( " vsTest1: " + vsTest1 );
		System.out.println( " vsTest2: " + vsTest2 );
		System.out.println( " vsTest3: " + vsTest3 );
		System.out.println("");
 
		if ( vsTest1 == vsTest2 )
			System.out.println (" '==' Vergleich: vsTest1 und vsTest2 sind gleich ");
		else
			System.out.println (" '==' Vergleich: vsTest1 und vsTest2 sind nicht gleich ");
 
		if ( vsTest1.equals(vsTest2) )
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest2 sind gleich ");
		else
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest2 sind nicht gleich ");
		System.out.println("");
		if ( vsTest1 == vsTest3 )
			System.out.println (" '==' Vergleich: vsTest1 und vsTest3 sind gleich ");
		else
			System.out.println (" '==' Vergleich: vsTest1 und vsTest3 sind nicht gleich ");
 
		if ( vsTest1.equals(vsTest3) )
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest3 sind gleich ");
		else
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest3 sind nicht gleich ");
	}
}

Führt man dieses Programm nun aus, so erhält man die folgende Ausgabe:

1
2
3
4
5
6
7
8
9
 vsTest1: Hallo
 vsTest2: Hallo
 vsTest3: Hallo
 
 '==' Vergleich: vsTest1 und vsTest2 sind nicht gleich
 'equals' Vergleich: vsTest1 und vsTest2 sind gleich
 
 '==' Vergleich: vsTest1 und vsTest3 sind gleich
 'equals' Vergleich: vsTest1 und vsTest3 sind gleich

Für den geübten Java Programmierer wird dies jetzt keine Neuigkeit sein, für Einsteiger aber wahrscheinlich schon.
Schauen wir uns es nun aber Schritt für Schritt an.

Obwohl alle drei String Variablen den gleichen Inhalt haben (Zeile 1-3 der Ausgabe), so schlägt zumindest der „==“-Vergleich bei vsTest1 und vsTest2 fehl bzw. erkennt eine nicht Gleichheit. Wie kommt es hierzu?

Da für vsTest2 ein neues Objekt mittels ’new String(„Hallo“)‘ erzeugt wurde, schlägt die Prüfung mittels „==“-Vergleich fehl, da dieser Vergleich einfach einen Vergleich der Objekte und nicht der Werte durchführt.

Als Fazit hieraus kann man nur ziehen, dass ein Vergleich von zwei Strings immer nur mittels ‚equals‘ oder ‚compareTo‘ vornehmen sollte. Weiterführende Informationen findet man in den Links, wobei besonders Link 3 eine schöne Zusammenfassung bietet.

Weiterführende Informationen:

  1. Methode ‚equals (Object)‘
  2. Methode ‚compareTo(String)‘
  3. Java: ==, .equals(), compareTo(), and compare()

Hörempfehlung

Heute bin ich dazu gekommen, die letzte Folge von Alternativlos zu hören. Grundsätzlich sollte man sich diesen Podcast eh regelmäßig anhören.

Dieses Mal finde ich ihn aber besonders interessant, weil es einem Denkanstöße für eine alternative Sichtweise auf die aktuelle Berichterstattung rund um Wikileaks und Julian Assange gibt.

Spotlight für Windows – Launchy

Nachdem ich nun zu Hause schon einige Zeit einen Mac mini stehen habe und diesen auch von Zeit zu Zeit mal benutze, vermisse ich eine Funktion unter Windows am meisten. Und zwar Spotlight zum Starten von Programmen.
Unter Mac OS X einfach »Apfel-Leertaste« betätigt, Programmname eingegeben und »Enter« betätigt. Schon ist das gewünschte Programm gestartet.

Unter Windows kann man dies ganz einfach mit Launchy erreichen. Der Vorteil hierbei ist, dass im Gegensatz zum Mac hier nicht wie bei Spotlight alle Verzeichnisse überwacht werden, sondern Launchy nur für die in den Einstellungen definierten Verzeichnisse einen Index erstellt und somit nicht permanent eine Systemlast erzeugt.

Für den Zweck das einfachen Programmstart also genau richtig.

Wiederherstellungsmodell bei allen Datenbanken ändern

Will man alle Datenbanken, bspw. auf einem Testserver, in den Wiederherstellungsmodell »Einfach« versetzen, so kann man das ganz einfach per TSQL Statement vornehmen

use master  
SELECT 'ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE' from master..sysdatabases where name not in ('master','model','msdb','tempdb')

Der obige SELECT erzeugt die Statements, die man dann ausführen muss, um das Wiederherstellungsmodell zu verändern.

Alternativ kann man so die Datenbank auch in die anderen beiden Wiederherstellungsmodi versetzen. Hierfür muss »SIMPLE« im obigen Statement nur durch »FULL« oder »BULK_LOGGED« ersetzt werden. Will man diesen Vorgang automatisieren, so kann man hierfür bspw. eine Stored Procedure erstellen, die Nachts automatisch als Auftrag vom SQL Server ausgeführt wird. So könnte hier ein simples Beispiel aussehen:

CREATE PROCEDURE SetRecoveryMode
AS
BEGIN
 
	SET NOCOUNT ON
 
	DECLARE @ToDo TABLE 
	( 
		ID int IDENTITY PRIMARY KEY,
		Statement nvarchar(max),
		Completed bit
	)
 
	INSERT INTO @ToDo (Statement, Completed)
	SELECT 'ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE', 0
	from master..sysdatabases where name not in ('master','model','msdb','tempdb') 	
 
	DECLARE @CurrentID int
	DECLARE @CurrentStatement nvarchar(max)
 
	WHILE EXISTS (SELECT * FROM @ToDo WHERE Completed = 0)
	BEGIN
		SELECT TOP 1 @CurrentID = ID,
					 @CurrentStatement = Statement
		FROM @ToDo
		WHERE Completed = 0
		ORDER BY ID ASC
 
		EXEC (@CurrentStatement)
 
		UPDATE @ToDo
		SET Completed = 1
		WHERE ID = @CurrentID
	END
 
	SET NOCOUNT ON
END

Inhalt von HTML Hilfe wird nicht angezeigt

Wird beim Aufruf einer Hilfedatei, die auf einem Netzlaufwerk abgelegt ist, unter Windows kein Inhalt dargestellt, so liegt dies in der Regel an zwei Sicherheitsupdates von Microsoft.

Dieses Problem tritt auf, da die Sicherheitsupdates 896358 und 890175 verhindern, dass HTML-Inhalt außerhalb der lokalen Zone eine Instanz des ActiveX-Steuerelements für die HTML-Hilfe erstellt. Diese Änderung sollen Sicherheitsanfälligkeiten in der HTML-Hilfe reduzieren. Quelle: Microsoft Support Center

Da es aber häufig Sinn macht bzw. Client/Server Programme die Dateien auch einfach auf dem Server ablegen, gibt es auch eine Möglichkeit die Inhalte wieder anzeigen zu lassen. Dazu muss man nur die folgenden Änderungen in seine lokale Registry importieren.

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000004
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\HHRestrictions\]
"MaxAllowedZone"=dword:00000004

Ein Neustart des Rechner oder Ab-/Anmelden ist im Anschluss nicht nötig. Lediglich der Internet Explorer, sollte falls geöffnet, einmal neu gestartet werden.

Im Anschluss werden auch wieder die Inhalte von HTML Hilfedateien über ein Netzlaufwerk korrekt angezeigt.


Disclaimer

Bevor Änderungen an der Registry vorgenommen werden, sollte in jedem Fall ein Backup der Registry erstellt werden. Außerdem sollte geprüft werden, ob im Bedarfsfall ein Restore durchgeführt werden kann. Die unkorrekte Verwendung des Registry-Editors kann zu schwerwiegenden Problemen führen, die eine Neuinstallation des Betriebssystem erfordern.

Microsoft KB 141377: Differences between Regedit.exe and Regedt32.exe

Microsoft KB 322756: How to back up and restore the registry in Windows

Update vom 18.09.2013: Auch unter Windows 8 ist dieses Vorgehen leider noch erforderlich, um den Inhalt anzeigen zu können.
Update vom 04.12.2013: Die Kommentar und Pingback Funktion ist für diesen Beitrag ab sofort deaktiviert, weil dieser aus einem nicht bekannten Grund eine unglaublich hohe Anzahl an Spam-Kommentaren anzieht.

Uptime unter Windows ermitteln

Will man ermitteln, wann ein Windows System zum letzten Mal gestartet wurde, so kann man hierzu den folgenden Befehl verwenden:

net statistics server

Dieser Befehl wird einfach in der Eingabeaufforderung eingegeben und liefert dann eine Ausgabe im folgenden Format.

How to find Windows uptime?

Logon Screensaver deaktivieren

Ob der Logon Screensaver (Bildschirmschoner) angezeigt wird oder nicht kann über einen Schlüssel in der Registry beeinflusst werden.

Key: HKEY_USERS\.DEFAULT\Control Panel\Desktop
Entry: ScreenSaveActive
Type: REG_SZ
Value: 0 (Decimal)

Dieser Registry-Schlüssel wird ab Windows 2000 SP 1 unterstützt.

Microsoft KB 141377: Differences between Regedit.exe and Regedt32.exe

Microsoft KB 322756: How to back up and restore the registry in Windows


Disclaimer

Bevor Änderungen an der Registry vorgenommen werden, sollte in jedem Fall ein Backup der Registry erstellt werden. Außerdem sollte geprüft werden, ob im Bedarfsfall ein Restore durchgeführt werden kann. Die unkorrekte Verwendung des Registry-Editors kann zu schwerwiegenden Problemen führen, die eine Neuinstallation des Betriebssystem erfordern.

Microsoft KB 141377: Differences between Regedit.exe and Regedt32.exe

Microsoft KB 322756: How to back up and restore the registry in Windows

Passwort in Terminalserver Sitzung ändern

Um das Kennwort in einer Terminalserver Sitzung zu ändern, kann nicht wie sonst die Tastenkombination »STRG + ALT + ENTF« verwendet werden, da diese Kombination dann am Hostrechner ausgeführt wird. Um das Passwort zu ändern muss in diesem Fall die Tastenkombination »STRG + ALT + ENDE« verwendet werden.

Standardport für RDP-Verbindungen ändern

Wenn man den Standardport für RDP Verbindungen ändern möchte, so kann man das über die Registry von Windows machen.

Der entsprechende Schlüssel heißt:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber

Hier einfach den gewünschten Port in dezimaler Schreibweise eingeben. Nach einem Neustart des Rechners ist eine Verbindung über den Standardport 3389 nicht mehr möglich, sondern nur noch über den zuvor eingegebenen Port.

___

via Microsoft Support Datenbank


Disclaimer

Bevor Änderungen an der Registry vorgenommen werden, sollte in jedem Fall ein Backup der Registry erstellt werden. Außerdem sollte geprüft werden, ob im Bedarfsfall ein Restore durchgeführt werden kann. Die unkorrekte Verwendung des Registry-Editors kann zu schwerwiegenden Problemen führen, die eine Neuinstallation des Betriebssystem erfordern.

Microsoft KB 141377: Differences between Regedit.exe and Regedt32.exe

Microsoft KB 322756: How to back up and restore the registry in Windows