<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>FelixZett</title><description>Here I record stuff I dont want to forget, such as short instructions, recipes or my travel-logs. All the information is mostly for me, but I felt like some of these could be useful for other people too.</description><link>https://felixzett.de/</link><item><title>Unter Windows ein bootbares Linux-System von einem USB-Stick entfernen</title><link>https://felixzett.de/articles/live-usb-stick-mit-windows-bereinigen</link><guid isPermaLink="true">https://felixzett.de/articles/live-usb-stick-mit-windows-bereinigen</guid><description>Wie man einen USB-Stick mit einem Linus-Live-System unter Windows wieder in den Urzustand zurückversetzt</description><pubDate>Mon, 23 Nov 2020 16:50:00 GMT</pubDate><content:encoded>Vor kurzem habe ich einige Linux-Distributionen ausprobiert indem ich Live-Systeme auf einen meiner USB-Sticks gespielt habe.

Diesen Stick unter Windows wieder in seinen Originalzustand zurückzuversetzen entpuppte sich allerdings als etwas komplizierter.

Nach einer Internetrecherche habe ich den folgenden Weg gefunden, der mit Windows-Bordmitteln funktioniert.

&lt;!--more--&gt;

1. Drücke `Windowstaste`+`R` und gib `diskpart` ein um die Windows-Partitionierungswerkzeuge zu öffnen.
2. Wenn nach Adminrechten gefragt wird, muss zugelassen werden.
3. `list disk` zeigt die aktuell am Computer angeschlossenen physikalischen Datenträger.
4. `select disk #` ersetze `#` mit der Nummer deines USB-Sticks. Die Größe des Datenträgers ist meist der beste Hinweis welcher der Richtige ist.
5. Versichere dich dass dies auf jeden Fall der richtige Datenträger ist, sonst könnte es zu Datenverlust kommen!
6. `clean` entfernt nun alle Partitionen auf dem gewählten Datenträger.
7. `create partition primary` erzeugt eine neue primäre Partition.
8. `active` markiert die neue Partition als aktiv.
9. `format fs=fat32 quick` formatiert deinen USB-Stick mit dem FAT32 dateisystem. Alternativ kannst du `ntfs` wählen wenn du primär unter Windows arbeitest und Dateien mit mehr als 4GB auf den Stick speichern möchtest.
10. `exit` schließt die Partitionswerkzeuge.
11. Fertig

Diese wenigen Schritte versetzen den USB-Stick wieder in den Urzustand, und das ohne externe Werkzeuge installieren zu müssen.

Viel Erfolg beim Ausprobieren,

Felix</content:encoded></item><item><title>Minimales Beispiel einer Maven-Kotlin-Querydsl-Integration</title><link>https://felixzett.de/articles/minimales-maven-kotlin-querydsl-beispiel</link><guid isPermaLink="true">https://felixzett.de/articles/minimales-maven-kotlin-querydsl-beispiel</guid><description>Ein minimales Beispiel von QueryDSL Integration in ein Maven-Kotlin-Spring-Boot Projekt</description><pubDate>Tue, 04 Feb 2020 14:30:11 GMT</pubDate><content:encoded>QueryDSL ist ein praktisches Werkzeug für das Vereinfachen von Datenbankzugriffen in JVM-Programmen. In diesem Beispiel habe ich QueryDSL in ein Kotlin-basiertes Spring Boot Projekt mit Maven eingebaut.

&lt;!--more--&gt;

Der Code ist verfügbar [auf Github](https://github.com/FelixZett/minimal-maven-kotlin-querydsl-example)

## Vorraussetzungen

Für dieses Beispiel habe ich ein Projekt mithilfe des [Spring Initilizr](https://start.spring.io) generiert und Kotlin und JPA Module ausgewählt.

Füge die aktuelle [QueryDSL Bibliothek](https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa) zur pom.xml hinzu.

```xml
&lt;dependency&gt;
    &lt;groupId&gt;com.querydsl&lt;/groupId&gt;
    &lt;artifactId&gt;querydsl-jpa&lt;/artifactId&gt;
    &lt;version&gt;4.3.1&lt;/version&gt;
&lt;/dependency&gt;
```

## Das Entity

Ich brauchte ein simples Entity welches ich zum Testen der Generierung der Q-Klassen von QueryDSL verwende. Dafür habe ich den Kotlin data-class Syntax verwendet um ein simples JPA kompatibles Entity mit wenig Zeilen zu erstellen.

```kotlin
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id

@Entity
data class TestEntity (
        val name: String,
        val value: Double
) {
        @Id @GeneratedValue
        val id: Int? = null
}
```

## Das Repository

Spring Data bietet einfache Möglichkeiten zum Zugriff auf Datenbank-Entities via Repositories, die dann auch QueryDSL Support haben.

```kotlin
import org.springframework.data.querydsl.QuerydslPredicateExecutor
import org.springframework.data.repository.CrudRepository

interface TestEntityRepository:
        CrudRepository&lt;TestEntity, Int&gt;,
        QuerydslPredicateExecutor&lt;TestEntity&gt;
```

Der `QuerydslPredicateExecutor` definiert welches Entity wir benutzen um unsere fortgeschrittenen Datenbankabfragen zu formulieren.

## Die Konsumenten

Ich habe einen einfachen Service erstellt in welchen das Repository mit Dependency-Injection injiziert wird. Der Service wird nicht benutzt sondern dient dazu beim Kompilieren eine Verwendung der Q-Klassen zu generieren. Wenn die Q-Klassen zur Zeit des Kompilierens nicht generiert waren gibt es einen Fehler. Normalerweise würde erst der Test die Q-Klassen verwenden und es könnte sein dass die Q-Klassen-Generierung zwischen die `compile` und `test-compile` Maven-Phasen rutschen, das wiederum zurfolge hätte dass die Klassen zur normalen Kompilierzeit nicht zur Verfügung stehen.

```kotlin
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

@Service
class TestEntityService @Autowired constructor(
        private val testEntityRepository: TestEntityRepository
){

    fun getTestEntityByName(name: String): TestEntity? {
        return testEntityRepository.findOne(
                QTestEntity.testEntity.name.eq(name)
        ).get()
    }
}
```

Zusätzlich habe ich einen Test erstellt der den QueryDSL Support auf einer H2-Datenbank testet.

```kotlin
import junit.framework.TestCase.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner

@RunWith(SpringRunner::class)
@SpringBootTest
class TestEntityRepositoryTest {
    @Autowired
    private lateinit var testEntityRepository: TestEntityRepository

    @Before
    fun setup() {
        testEntityRepository.save(TestEntity(&quot;test&quot;, 8.0))
    }

    @Test
    fun test() {
        val testEntities = testEntityRepository.findAll()
        assertEquals(1, testEntities.count())
    }
}
```

## Änderungen am Maven-Skript

Ich musste die Maven-Plugins so anpassen, dass der Kotlin Annotation Processor mit QueryDSL die Q-Klassen generiert bevor der Rest des Programms kompiliert wird.

```xml
&lt;plugins&gt;
    &lt;plugin&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
        &lt;groupId&gt;org.jetbrains.kotlin&lt;/groupId&gt;
        &lt;artifactId&gt;kotlin-maven-plugin&lt;/artifactId&gt;
        &lt;configuration&gt;
            &lt;compilerPlugins&gt;
                &lt;plugin&gt;jpa&lt;/plugin&gt;
                &lt;plugin&gt;spring&lt;/plugin&gt;
            &lt;/compilerPlugins&gt;
            &lt;args&gt;
                &lt;arg&gt;-Xjsr305=strict&lt;/arg&gt;
            &lt;/args&gt;
        &lt;/configuration&gt;
        &lt;executions&gt;
            &lt;execution&gt;
                &lt;id&gt;compile&lt;/id&gt;
                &lt;phase&gt;process-sources&lt;/phase&gt;
                &lt;goals&gt;
                    &lt;goal&gt;compile&lt;/goal&gt;
                &lt;/goals&gt;
            &lt;/execution&gt;
            &lt;execution&gt;
                &lt;id&gt;kapt&lt;/id&gt;
                &lt;phase&gt;generate-sources&lt;/phase&gt;
                &lt;goals&gt;
                    &lt;goal&gt;kapt&lt;/goal&gt;
                &lt;/goals&gt;
                &lt;configuration&gt;
                    &lt;sourceDirs&gt;
                        &lt;sourceDir&gt;src/main/kotlin&lt;/sourceDir&gt;
                    &lt;/sourceDirs&gt;
                    &lt;annotationProcessorPaths&gt;
                        &lt;annotationProcessorPath&gt;
                            &lt;groupId&gt;com.querydsl&lt;/groupId&gt;
                            &lt;artifactId&gt;querydsl-apt&lt;/artifactId&gt;
                            &lt;version&gt;${querydsl.version}&lt;/version&gt;
                            &lt;classifier&gt;jpa&lt;/classifier&gt;
                        &lt;/annotationProcessorPath&gt;
                    &lt;/annotationProcessorPaths&gt;
                &lt;/configuration&gt;
            &lt;/execution&gt;
            &lt;execution&gt;
                &lt;id&gt;test-compile&lt;/id&gt;
                &lt;phase&gt;test-compile&lt;/phase&gt;
                &lt;goals&gt;
                    &lt;goal&gt;test-compile&lt;/goal&gt;
                &lt;/goals&gt;
                &lt;configuration&gt;
                    &lt;sourceDirs&gt;
                        &lt;sourceDir&gt;src/test/kotlin&lt;/sourceDir&gt;
                        &lt;sourceDir&gt;target/generated-sources/kapt/test&lt;/sourceDir&gt;
                    &lt;/sourceDirs&gt;
                &lt;/configuration&gt;
            &lt;/execution&gt;
        &lt;/executions&gt;
        &lt;dependencies&gt;
            &lt;dependency&gt;
                &lt;groupId&gt;org.jetbrains.kotlin&lt;/groupId&gt;
                &lt;artifactId&gt;kotlin-maven-noarg&lt;/artifactId&gt;
                &lt;version&gt;${kotlin.version}&lt;/version&gt;
            &lt;/dependency&gt;
            &lt;dependency&gt;
                &lt;groupId&gt;org.jetbrains.kotlin&lt;/groupId&gt;
                &lt;artifactId&gt;kotlin-maven-allopen&lt;/artifactId&gt;
                &lt;version&gt;${kotlin.version}&lt;/version&gt;
            &lt;/dependency&gt;
        &lt;/dependencies&gt;
    &lt;/plugin&gt;
&lt;/plugins&gt;
```

Das wars! Nach diesen Änderungen kann man QueryDSL mit Spring-Data-Repositories benutzen.
Der Test sichert die Integration ab und bietet ein kleines Beispiel der Benutzung.</content:encoded></item><item><title>Den Windows 10 Sperrbildschirm deaktivieren</title><link>https://felixzett.de/articles/windows-10-sperrbildschirm-deaktivieren</link><guid isPermaLink="true">https://felixzett.de/articles/windows-10-sperrbildschirm-deaktivieren</guid><description>Deaktiviere den nervigen Sperrbildschirm von Windows 10</description><pubDate>Mon, 23 Nov 2020 11:11:20 GMT</pubDate><content:encoded>An sich bin ich mit Windows 10 sehr zufrieden. Mit einer SSD bootet das System manchmal schneller als der Bildschirm die richtige Quelle finden kann, vor allem wenn der PC aus dem Standby oder Ruhezustand aufwacht. In diesem Fall gebe ich das Passwort für meinen Windows Benutzeraccount blind ein. Das mache ich bereits seit Windows XP regelmäßig, aber mit Windows 10 wurde dieses Unterfangen leider etwas unangenehmer. Windows 10, mit einem größeren Fokus auf Tablets, hat einen Sperrbildschirm mit zufälligen Hintergrundbildern bekommen. Diesen muss man zunächst durch einen Tastendruck auf Maus oder Tastatur &quot;entsperren&quot; bevor man sein Passwort eingeben darf.

![image of windows 10 lockscreen](/assets/lockscreen.png)

Gebe ich nun mein Passwort blind ein weiß ich nicht ob der Lockscreen schon weg ist, denn zwischen Klick und Passworteingabe dauert es einen Moment.

Glücklicherweise lässt sich in Windows 10 eine Menge konfigurieren, wenn auch nicht durch die lächerliche neue Einstellungsoberfläche. Die Registry bietet hier deutlich mehr Möglichkeiten für Benutzer mit etwas mehr technischem Verständnis.

Wie wird man nun diesen lästigen Sperrbildschirm los?

## Methode 1

Einfach das Registry-Skript herunterladen. Doppelklicken, die Sicherheitsabfragen bestätigen, fertig.
Zur Sicherheit solltet ihr Registry-Skripte immer mit einem Texteditor eurer Wahl öffnen und prüfen dass keine unerwünschten Änderungen in der Registry vorgenommen werden.

[Sperrbildschirm deaktivieren](/downloads/disable_lockscreen.reg)

[Sperrbildschirm wieder aktivieren](/downloads/enable_lockscreen.reg)

## Methode 2

Wer die Änderung lieber selbst vornimmt öffnet den Registry-Editor mit `WINDOWSTASTE + R` und `regedit`, und ändert einfach im Verzeichnis

```
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization
```

den Schlüssel `NoLockScreen` zu einem `DWORD`-Wert von `1`

![image of windows 10 lockscreen](/assets/regedit.png)

Wenn du den Sperrbildschirm wieder aktivieren willst, setze den Wert auf `0` oder lösche den Schlüssel.</content:encoded></item></channel></rss>