Mit einem PowerShell Script möchte ich alle Login/Logoff basierten Events eines Computers auflisten und gut lesbar in eine Textdatei schreiben. In meinem konkreten Fall filtere ich nur das Entsperren heraus.

Hier das PowerShell Script:

# Connects to the security eventlog of a remote computer and retrieves successful login events ( event ID 528 ) and what type of login took place 
# Information about login types found at http://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=528 
# 
# 22.09.2009 Konráð Hall 
# 2013 - edited by Hannes Schurig for newer systems (vista/7/server 2k8) and filter in german/english
cls

"Starte Tool..."
 
$events =  Get-EventLog -ComputerName Hannes-PC -LogName "Security" -newest 1000 | Where { $_.eventid -eq 4624 }

# english: $logonTypeText = "Logon Type:    "
# german:
$logonTypeText = "Anmeldetyp:			"

"Starte Eventverarbeitung..."

foreach ($event in $events) {
    
    if (($event.message | Select-String $logonTypeText+"2")){ 
        "LogonType 2 (Interactive Login);"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } <#
    if (($event.message | Select-String $logonTypeText+"3")){ 
        "LogonType 3 (Network Login)    ;"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } 
    if (($event.message | Select-String $logonTypeText+"4")){ 
        "LogonType 4 (Batch Login)      ;"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } 
    if (($event.message | Select-String $logonTypeText+"5")){ 
        "LogonType 5 (Service Login)    ;"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } #>
    if (($event.message | Select-String $logonTypeText+"7")){ 
        "LogonType 7 (Computer Unlocked);"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } <#
    if (($event.message | Select-String $logonTypeText+"8")){ 
        "LogonType 8 (Network Cleartext Login);"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } 
    if (($event.message | Select-String $logonTypeText+"9")){ 
        "LogonType 9 (NewCredentials)   ;"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } 
    if (($event.message | Select-String $logonTypeText+"10")){ 
        "LogonType 10 (RDP Login)       ;"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } 
    if (($event.message | Select-String $logonTypeText+"11")){ 
        "LogonType 11 (Cached Credentials Login);"+ $event.TimeGenerated.DateTime + ";" +$event.UserName >> "C:\logins.txt"
    } #>
}

original script by Konrad Hall

Das, ursprünglich von Konrad Hall stammende, Script habe ich etwas angepasst. In Zeile 9 muss der gewünschte Computername eingefügt werden.

Um die Funktionsweise zu verstehen sollte man in Erfahrung bringen welche verschiedenen Anmeldeereignisse und Anmeldetypen es gibt und welche EventIDs sie haben. Es gibt unterschiedliche EventIDs in XP/Server<2k3 und Vista/7/Server>2k3.
Ein Beispiel: erfolgreiche Anmeldungen werden mit der EventID 528 in Server 2k3 und mit 4624 in Server 2k8 geloggt.
tecchannel schreibt zu den vielen IDs auch noch etwas.
Mit ultimatewindowssecurity.com lässt sich das aber überblicken. Meine Beispiele beziehen sich auf Windows 7.

Wenn man sich alle Events des Security Logs anzeigen lässt, ist das eine ganze Menge:
anmeldeereignisse-mit-PowerShell-auslesen-all-events

Es kommt also drauf an, was man loggen möchte. Dann kommt es drauf an, welche EventIDs dieses Event auslöst. Daraus bastelt man sich den EventID Filter.
Mit

| Where { $_.eventid -eq 4624 }

(528 bei XP/2k3) am Ende des Befehls filtere ich erfolgreiche Anmeldungen heraus:
anmeldeereignisse-mit-PowerShell-auslesen-all-logins-4624

Das gleiche geht bei Abmeldungen mit der EventID 4634 (538 bei XP/2k3):

| Where { $_.eventid -eq 4634 }

oder eine Art Range Filter für Login und Logoff:

| Where { $_.eventid -ge 4624 -AND $_.eventid -le 4634 }

anmeldeereignisse-mit-PowerShell-auslesen-logins-and-logoffs

Nun sind also alle Events gefiltert. Diese werden dann in dem Script ab Zeile 17 noch einmal gefiltert. Hier kommen die Anmeldetypen ins Spiel. Diese sind aber bei allen Windows Versionen gleich.
Beispiel: „Normale“ Anmeldungen haben den Typ 2, Netzwerkanmeldungen 3, Entsperren die 7.

An dieser Stelle könnt ihr das Script beliebig anpassen um nur einen oder bestimmte Anmeldetypen zu filtern.
In dem Beispielscript oben sind alle Anmeldetypen bis auf den normalen („interaktiven“) Login auskommentiert. Hier 2 Beispiellogs für Entsperrungen und Entsperrungen+Logins:
anmeldeereignisse-mit-PowerShell-auslesen-logs
Achtung! Auf englischen Systemen müsst ihr die Kommentierung von Zeile 11 und 13 vertauschen, da sonst die Filterung Exceptions schmeißt. Ich habe das ja schon soweit vorbereitet.

Mit diesen Grundlagen könnt ihr beliebig in den Computerlogs (es gibt ja nicht nur die Security Logs) lesen, filtern, exportieren und mehr.

Letztens schrieb ich über interessante Kameratechniken des Mars Rovers Curiosity. Nun trumpft das Kamera Team der NASA wieder auf: es wurde ein 1,3 Gigapixel (1300 Megapixel) Panoramafoto der Mars Oberfläche geschossen! Weitere hochauflösende Fotos der Roverumgebung wurden ebenfalls aus vielen hundert Einzelbildern aufgenommen.
Ich weiß; 1,3 Gigapixel sind bei den heutigen Rekorden lächerlich. Für einen ferngesteuerten Rover auf einem anderen Planeten in (aktuell) ungefähr 367 Millionen Kilometer Entfernung ist das allerdings eine geniale Leistung.
bild-vom-mars-mit-1300-megapixel-mars-data

Die Ergebnisse sind interessant, wenn man für (an sich langweiliges) Gestein fremder Planeten etwas übrig hat.
bild-vom-mars-mit-1300-megapixel-overview

Wie schon bei anderen Gigapixel Bildern kann man auch hier in die Tiefen der Details eintauchen; bei 1,3 Gigapixel hält sich das natürlich schon in Grenzen.

bild-vom-mars-mit-1300-megapixel-stein

bild-vom-mars-mit-1300-megapixel-vogel

bild-vom-mars-mit-1300-megapixel-objekt

Manchmal möchte man nur kleine Ausschnitte von Youtube Videos einbetten/verlinken, nicht das komplette Video von Anfang an zeigen. Hier verschiedene Wege, wie das zu erreichen ist:

Für die Harten im Garten: Do It Yourself

seriously...Heißt so viel wie: das komplette Youtube Video herunterladen, mit einem Videoschnittprogramm die gewünschte Stelle freistellen, exportieren und zu einem Videoportal (Youtube beispielsweise) hochladen. Dieses Video (also den Ausschnitt des ehemaligen Videos) wieder einbetten. Okay… seriously?!

Startzeit setzen

Das ist relativ einfach schon direkt bei Youtube machbar. Video öffnen und hinten an die URL&t=2m34s“ oder „#start=2:34“ (für ein Start bei 2:34min) anhängen. Beispiel:
http://www.youtube.com/watch?v=e_8TxZokE9Y&t=17m38s
http://www.youtube.com/watch?v=e_8TxZokE9Y#start=17:38
Das Video startet an der gewünschten Stelle. Obwohl es auch einen end Parameter gibt hat der bei mir noch nie funktioniert.

Start und Ende setzen

Was man mit Parametern wohl nicht erreicht können Webservices umso besser: Start- UND Endzeit des Videos setzen.

Am besten und einfachsten finde ich TubeChop. Leicht zu bedienen, am Ende gibt es einen kurzen Embed Code, Link und mehr.
ausschnitte-von-youtube-videos-einbetten-verlinken-tubechop

Ich sah letztens ein nettes Video über Curiosity’s Kameras und eine Stelle fand ich sehr verblüffend:
wie macht der Mars Rover solche Fotos?

Definitiv ein Selbstportrait des Rovers. Wie wurde es gemacht? Der Rover stellt ja nicht mal eben so ein Stativ mit Kamera auf den Marsboden, stellt den Selbstauslöser ein und positioniert sich brav.

Nein, dieses Foto wurde mit einem der Arme des Rovers gemacht. Dass dieser Arm auf dem Foto nicht zu sehen ist, wurde mit einem ziemlich cleveren Verfahren erreicht:
http://www.tubechop.com/watch/1256728

jquery-animationen-zeitversetzt-mit-callback-delay-queue

jQuery Animationen sind einfach:

animation()

,

fadeToggle()

und

slideToggle()

erledigen die Arbeit schnell und unkompliziert. Es kann jedoch kompliziert werden, wenn man Animationen nacheinander abarbeiten möchte.
Generell werden Animationen „gleichzeitig“ ausgeführt, außer sie betreffen das selbe Objekt.
Verschiedene Objekte zeitverzögert zu animieren kann schon schwierig werden.

Ausgangssituation

2 Objekte mit je einer Animation:

$('#a').animate({
	width: '-=10px',
	height: '-=10px'
}, 2000, function() {
	// callback
});
$('#b').animate({
	width: '-=20px',
	height: '-=20px'
}, 2000, function() {
	// callback
});

2 Objekte, die gleichzeitig animiert werden obwohl der Code dies nicht vermuten lässt.

Demo

DEMO

Es gibt verschiedene Herangehensweisen für dieses Problem.

Lösung? callback()!

callback()

‚, oder auch

complete()

in der jQuery API Doc (Beispiel

animate()

), ist eine Funktion, die beim erfolgreichen Beenden einer Animation ausgeführt wird.
Ein Beispiel:

$('#b').animate({
	width: '-=10px',
	height: '-=10px'
}, 2000, function() {
	$('#a').animate({
		width: '-=20px',
		height: '-=20px'
	}, 2000, function() {
		// callback
	});
});

In der

callback()

Funktion können weitere Befehle folgen, die nach der beendeten Animation ausgeführt werden sollen.

Demo

DEMO

Alternative? delay()!

Den meisten jQuery Animationen kann man durch die Verwendung von

delay()

eine Pause anhängen. Die folgenden Befehle beziehen sich somit auf das selbe Objekt, sind aber zeitlich verzögert. Diese Methode ist nur auf Animationen anwendbar, die die Browser ‚effects queue‘ (auch ‚fx-queue‘ genannt) verwenden.

$('#a')
 .animate({
	width: '-=20px',
	height: '-=20px'
 }, 2000)
 .delay(2000)
 .fadeToggle()
 .delay(2000)
 .fadeToggle();
$('#b')
 .animate({
	width: '-=10px',
	height: '-=10px'
 }, 500)
 .delay(500)
 .slideToggle()
 .delay(500)
 .slideToggle();

Die verschiedenen Animationen sind nun zeitlich verzögert.

Demo

http://public.hannes-schurig.de/LocationMapDemo/map.php
Nach einem

objectA.delay()

Befehle folgen zu lassen, die auf ein anderes Objekt wirken sollen, geht meines Wissens nach nicht. Zwei Objekte zeitlich verzögert animieren geht damit also nicht. Dafür hilft aber die nächste Lösung!

Nun kommt es in jQuery jedoch oft vor, dass Befehle keine Animationen sind und somit weder ein callback besitzen noch ein delay verstehen. Solche Funktionen sind beispielsweise

html()

,

append()

,

css()

,

addClass()

oder

removeClass()

. Mit der folgenden Lösung lassen sich auch solche Funktionen zeitlich verzögert abarbeiten!

Lösung? queue()!

Die Funktion

queue()

erstellt eine ‚effects queue‘ Befehlskette, die beliebig gefüllt und dann abgearbeitet werden kann. Wie oben erklärt kann man das Ausführen von Befehlen innerhalb einer ‚effects queue‘ durch Anwendung von

delay()

zeitlich verzögern.

queue().delay()

ermöglicht es damit beliebige Befehle zeitlich verzögert auszuführen.

Der grobe Aufbau sieht wie folgt aus:

$(object).queue(function(param) {
	// Befehle
$(param).dequeue();
}).delay(1000).queue(function(param) {
	// Befehle nach 1 Sekunde Pause
$(param).dequeue();
});

Das Finale!

Hier das obrige Beispiel leicht angepasst: erst verändert sich Block #a in mehreren Schritten und erst danach Block #b:

$('#a').queue(function(next) {
	// 2 Sekunden Pause vor dem ersten Befehl
	$(next).dequeue();
}).delay(1000).queue(function(next) {
	$(this).css("background-color", "red");
	$(next).dequeue();
}).delay(1000).queue(function(next) {
	$(this).addClass("test");
	$(next).dequeue();
// block #b wird nun verändert:
}).delay(1000).queue(function(next) {
	$('#b').css("background-color", "red");
	$(next).dequeue();
}).delay(1000).queue(function(next) {
	$('#b').addClass("test");
	$(next).dequeue();
}).delay(1000).queue(function(next) {
	$('#b').animate({
		top: '+=150px'
	}, 1000);
	$(next).dequeue();
});
Demo

DEMO
BHAM! Zeitlich verzögerte Verarbeitung von beliebigen Befehlen von mehreren Objekten!

Update:
Mit der Javascript Funktion

setTimeout()

lassen sich auch extrem easy beliebige Elemente/Befehle zeitversetzt ausführen:

$("#signup-form input").addClass("success");
setTimeout(function (){
	$('#signup-carousel').carousel("next");
}, 2000);

Schande auf mein Haupt, dass ich das damals nicht schon kannte.

Die

queue()

Funktion kann man dabei direkt von dem Element aufrufen, dass animiert oder verändert werden soll, und innerhalb der

queue()

dann

$(this)

benutzen. Alternativ kann man auch ein globaleres Objekt benutzen, zum Beispiel

$(window).queue()

.

Damit sollte ich das Thema zeitverzögerte Animationen zu genüge beleuchtet haben. Bei meinem letzten Webprojekt spielte dieses Thema eine große Rolle und ich musste viel rumprobieren und testen bis ich die richtigen Einsatzgebiete und teils seltsamen Verhalten dieser Funktionen erkannt hatte. Wer sich also mit dem Thema auskennt, Fehler findet, weitere Möglichkeiten kennt, immer her damit!

Was ist heutzutage besonders nervig und trifft immer mehr Menschen? Die (teils extrem) kurze Akkulaufzeit von Smartphones! Viele Apps versprechen Abhilfe und längere Akkulaufzeiten. Stattdessen kann es passieren, dass die Akkulaufzeit nicht spürbar verlängert wird und zusätzlich unangenehme Nebeneffekte auftreten. Vor allem die Netzwerkfunktionen (mobiles Netzwerk, WLAN, VPN), Bluetooth, GPS und NFC verbrauchen einiges an Strom und werden deshalb von manchen Apps beeinträchtigt.
Einige einfache Tipps können die Akkulaufzeit auch schon stark erhöhen ohne ungewollte Störungen mitzubringen. Die Punkte sind nicht sortiert, einfach nur zusammengetragen.

Hinweis: Wenn ich im Pfad zu einer bestimmten Einstellung Klammern benutze, liegt das an der unterschiedlichen Menüstruktur verschiedenster Android UIs. Manchmal sind die Menüpunkte auch anders benannt oder vielleicht in anderen Menüpunkten eingebettet. Die Menüpfade müssen also nicht bei jedem Smartphone zu 100% stimmen.

  • stromsparen-android-tipps-statt-apps-akkuverbraucherAndroidnutzer erhalten einige Statistiken über Akkustatus und -verbraucher in den Einstellungen -> Power (Akku) -> Akkuverbrauch.
    In den meisten Fällen wird die Bildschirmhelligkeit ganz oben stehen, oftmals mit großem Abstand zu anderen Verbrauchern.
    Daher als ersten Tipp: achtet auf eure Bildschirmhelligkeit! Wenn euer Smartphone automatische Bildschirmhelligkeit stromsparen-android-tipps-statt-apps-automatische-helligkeit anbietet, solltet ihr das unbedingt nutzen. Ansonsten manuell: je dunkler das Display, desto geringer der Akkuverbrauch. In dunklen Räumen gleich runterstellen, in hellen Räumen so hell einstellen, dass ihr gerade so gut sehen könnt.
    Dafür eignet sich das Helligkeits-Widget, stromsparen-android-tipps-statt-apps-helligkeitswidgetmit welchem man schnell zwischen 3 Helligkeitsstufen wechseln kann.
  • Display Timeout runterstellen. Wenn das Display nach 15 bis 30 Sekunden automatisch ausgeht, spart das auf Dauer sehr viel Akkupower. Einzustellen unter Einstellungen -> Anzeige -> Display-Timeout/Ruhezustand. Ebenso ist es empfehlenswert nach der Benutztung des Smartphones das Display per Druck auf die Power Taste direkt in den Ruhezustand zu schalten, anstatt es vom Timeout abdunkeln zu lassen. Diese zwei kleinen Hinweise summieren sich über den Tag enorm.
  • stromsparen-android-tipps-statt-apps-widgetsAnimierte Bildschirmhintergründe sind wahre Stromfresser, deaktivieren! Einfache Hintergrundbilder taugen auch. Ein einfaches schwarzes Hintergrundbild spart am meisten. Ebenso animierte Widgets, die mit tollen Animationen beispielsweise das Wetter anzeigen. Vor allem Social Widgets, die neben Animationen auch die Netzwerkverbindung belasten. Weg damit.
  • Gerade nicht benötigte Features, wie Bluetooth, WLAN, GPS, Synchronisierung, mobiles Netzwerk, Hotspot usw deaktivieren. Aktiviert die Dienste nur, wenn ihr sie gerade benötigt. Das erhöht neben der Akkuleistung auch die Sicherheit des Geräts.
  • Gerade nicht benötigte Apps beenden. Viele Apps bleiben im Hintergrund offen, da sie beim Druck auf die Home Taste nicht beendet, sondern nur „pausiert“ werden. Es gibt mehrere Möglichkeiten diesen Stromfresser entgegenzutreten: entweder schließt man die Apps selbstständig regelmäßig oder man installiert sich automatische Taskkiller, wie beispielsweise den kostenlosen Advanced Task Killer.stromsparen-android-tipps-statt-apps-letzte-apps-loeschen Manuell beenden geht über den letzte-Apps-Manager; auf vielen Smartphones über den htc-last-apps-button Button erreichbar, bei manchen Modellen durch längeren Druck auf die Home Taste, meistens aber auch über die Einstellungen -> Apps/Anwendungen -> „Nur ausgeführte“ listet alle aktiven Programme. Schließt vor allem große Programme wie Spiele ordentlich. Taskkiller Apps sind für diesen Job aber auch zu empfehlen.
  • Wenn das Internet mal nicht so wichtig ist gibt es 2 Stromspartipps: entweder die mobile Datenverbindung komplett deaktivieren oder den GSM statt WCDMA Netzwerkmodus einstellen. stromsparen-android-tipps-statt-apps-gsm-netzwerkmodusLetzterer aktiviert eine langsamere Internetverbindung, die aber weniger Akku benötigt als die standardmäßig aktivierte schnelle 3G/HSDPA Verbindung. Beides ist zu finden in den Einstellungen (-> Drahtlos und Netzwerke ->) Mobile Netzwerke -> Netzmodus. Manchmal steht da auch „3G-Netzwerke“ und „2G-Netzwerke“, dann zum Stromsparen hier 2G-Netzwerke einstellen. Manchmal auch „UMTS“ und „GSM“, dann „GSM“ zum Stromsparen.
  • Besseren/neuen Akku kaufen! (Nur für diejenigen, die noch ein Smartphone mit abnehmbarer Rückseite und somit austauschbarem Akku haben…) Für viele Smartphones gibt es bessere Akkus als die standardmäßig eingebauten, einfach mal nach dem Handymodell und „Akku“ googeln oder in spezialisierte Akkushops wie akkuline.de schauen.
    stromsparen-android-tipps-statt-apps-akku-kaufenBeispiel: Das HTC Desire Z wird mit einem 1300mAh Akku ausgeliefert, bei Amazon gibts für ein paar Euro einen 1600mAh Akku, also 23% mehr Leistung!
    Akkus werden mit der Zeit übrigens schwächer. Dieser Effekt ist in modernen Akkus relativ gering, trotzdem haben die meisten Smartphone Akkus nach 2 Jahren einen beträchtlichen Teil ihrer Leistung verloren. Ein neuer Akku bewirkt Wunder.

Zeit für eine Dokumentation nebenbei? Ein bisschen Staunen während man andere Dinge am PC macht?
Schaut euch die N24 Dokumentation zur Öresundverbindung an, sie ist noch 1 Woche lang online. Die Öre…was? Um N24 zu zitieren:

Diese Dokumentation führt den Zuschauer von Dänemark nach Schweden, wo die längste Brücke ihrer Art der Welt steht: die Öresundverbindung. Ihre Besonderheit: Sie verbindet die dänische Hauptstadt Kopenhagen mit Malmö in Schweden. Genau genommen ist sie sogar der Mittelpunkt dreier Projekte: Extreme Arbeitsgeräte, gigantische Bauteile und innovatives Design waren nötig, um die 16 Kilometer lange Verbindung zu schaffen, die die Landschaft von Skandinavien radikal verändert hat.

Dieses Projekt ist eine Ansammlung von Weltrekorden und Superlativen. Es war eine planerische, gestalterische und technologische Meisterleistung.

Meine Empfehlung: N24 Dokumentation zur Öresundverbindung

öresund-banner