Martin Lantzsch
Software Entwickler
6. Juli 2013

SQL für Fortgeschrittene

6. Juli 2013 - Geschrieben von Martin - Keine Kommentare

Eine Zeile ohne Kollisionen durch andere möglicherweise Zeitgleiche Abfragen ändern und zugleich noch die ID dieser bekommen?

SET @update_id := NULL;
UPDATE residata_jobs_jobs AS job
SET
	job.inProgress = TRUE,
	job.id = (SELECT @update_id := job.id)
WHERE
	job.id = (
		SELECT id FROM (
			SELECT subjob.id
			FROM residata_jobs_jobs AS subjob
			WHERE
				subjob.inProgress = FALSE
			ORDER BY subjob.queueTime ASC
			LIMIT 1
		) AS T
	);
SELECT @update_id;

Jetzt muss ich das nur noch per Native Query in Doctrine2 einbauen… DQL (Doctrine Query Language) habe schon abgeschrieben als ich festgestellt habe, dass anonyme Subquerys nur sehr sehr eingeschränkt funktionieren.

26. Juni 2013

Mein Storage verliert nichts

26. Juni 2013 - Geschrieben von Martin - Keine Kommentare

\\nas\share\Backup\T400 - 64Bit\Documents\Android\Backup\17.01.2012\SD

Lang gesuchte Daten wiedergefunden :-) Lebet hoch rekursive Backups.

PS: am besten Zugangsdaten zu Shares unten auf das Laufwerk schreiben bevor man es in den Schrank legt!

26. Juni 2013

Dieser Netzwerkordner ist bereits unter Verwendung eines anderen Namens und Kennwortes verbunden

26. Juni 2013 - Geschrieben von Martin - Keine Kommentare

Fehlermeldung
Das bekommt man zu Gesicht wenn man sich auf einem SMB Storage mit einem User einloggt und einen Share mit einem anderen Öffnen möchte. Das ist leider nicht möglich, hierzu muss erst per CMD oder PowerShell das NAS ausgehängt werden.

Powershell:

C:\Users\Martin>net use
Neue Verbindungen werden gespeichert.
 
 
Status       Lokal     Remote                    Netzwerk
 
-------------------------------------------------------------------------------
OK                     \\nas\IPC$                Microsoft Windows Network
Der Befehl wurde erfolgreich ausgeführt.
 
C:\Users\Martin>net use \\nas\IPC$ /delete
\\nas\IPC$ wurde erfolgreich gelöscht

anschließend kann mit neuem User auf das Laufwerk zugegriffen werden.

26. Juni 2013

Tickets to Berichtsheft

26. Juni 2013 - Geschrieben von Martin - Ein Kommentar

Diese grandiose Idee sollte ich mal mit in meine *To-Develop-List* aufnehmen. Würde sicher vielen Auszubildenden da draußen helfen, die im Ticket Strom untergehen und aufgrund eng gesteckter Deadlines keine Zeit zum Berichtsheft schreiben haben.

6. Juni 2013

Umlaute über MySQL Query fixen

6. Juni 2013 - Geschrieben von Martin - Keine Kommentare

Fehlerhafte Kodierungen wie ü oder ö können direkt im Query folgendermaßen korrigiert werden:

CONVERT(BINARY CONVERT([FIELD] USING latin1) USING utf8)

28. Mai 2013

Finde die SSD

28. Mai 2013 - Geschrieben von Martin - Keine Kommentare

TaskManager
Ich ziehe gerade von Datenträger 1 (SATA II HDD) und Datenträger 2 (USB 2.0) eine Sicherung auf Datenträger 0 (SATA II SSD). Die Auslastung der jeweiligen Datenträger zeigt ganz schön wie schnell die Datenträger angebunden sind, und die SSD obwohl sie am meisten belastet wird scheint gar nichts zu tun.

27. Mai 2013

PlayFramework 2.1 use Global in the complete application

27. Mai 2013 - Geschrieben von Martin - Keine Kommentare

While building the new Resigame game server I noticed, that I need a persistent Class for the complete lifetime of my application for storing tasks and other useful things like cached objects (e.g. socket connection to internal communication backend).

So I used the „Global“ class for this purpose. The only steps I had to do was adding the Global.java to a package (otherwise you can’t import it).
Global.java
Afterwards I added a reference to the application.conf:

application.global=core.Global

Now the Global object is accessible in all parts of my application. For example I added a static property called tasks for an object of my TaskScheduler, which is instantiated on application startup.

public class Global extends GlobalSettings {
    public static TaskScheduler tasks;
    public void onStart(Application app) {
        // start task scheduler
        Global.tasks = new TaskScheduler();
        Global.tasks.add(new UserSessionEndExpired());
        Global.tasks.start();
    }
}

this TaskScheduler is now controllable by my REST API:

public static Result stop(Integer taskId) {
    JsonResult result = new JsonResult();
    if(Global.tasks.stop(taskId))
        result.status = 200;
    else
        result.status = 400;
    return result.send();
}

6. Mai 2013

Die verbleibende Übertragungsrate von 384 KBit/s macht eine zeitgemäße Nutzung des Internets unmöglich

6. Mai 2013 - Geschrieben von Martin - Keine Kommentare

Soeben auf Golem in einem Beitrag über die Telekom Drosselung gelesen:

„Die verbleibende Übertragungsrate von 384 KBit/s macht eine zeitgemäße Nutzung des Internets unmöglich. Während die Geduld der Kunden bereits beim Aufruf von Internetseiten oder dem Versenden von E-Mails oder Dateien auf eine harte Geduldsprobe gestellt wird, sind manche Onlinedienste praktisch nicht mehr nutzbar. So dürfte ein unterbrechungsfreies Anschauen von Internetvideos regelmäßig scheitern und auch das Musikhören oder Telefonieren via Internet nicht mehr ohne Qualitätseinbußen möglich sein. Greifen wie üblich mehrere Anwendungen des Endgeräts gleichzeitig auf das Internet zu oder nutzen gar mehrere Endgeräte gleichzeitig den Internetanschluss, droht die Verbindung an der Drosselung zu ersticken“

mit meinem DSL Lite Anschluss ist also eine zeitgemäße Nutzung des Internets unmöglich. Und dennoch baut die Telekom in meinem Dorf weder DSL noch Mobilfunk oder LTE aus (andere Anbieter eingeschlossen). Nach der garantierten – gedrosselten – Geschwindigkeit von 384 KBit/s würde ich mir die Finger lecken, denn es gibt selten einen Tag bei dem mein Anschluss konstant mit der garantierten Bandbreite läuft. Mit schwammigen 20KB/s rumdümpeln ist Standard.

Was die Drosselung angeht – lästert ihr nur weiter über 75GB die euch viel zu wenig sind, holt euch einen T-Business Anschluss wenn ihr schon die Möglichkeit habt und heult nicht so rum.