Building Handwired Dactyl Manuform Keyboard

In this guide, I’ll walk you through every step of building my Dactyl Manuform keyboard, from soldering diodes to flashing firmware. This was my very first keyboard build, so I didn’t go fancy with customization or aesthetics (I didn’t even use a bottom plate, as I’ll explain in the Post-Mortem Analysis section).

Why my website looks like "shit" and a bit more about TCP

So the current total size of my website is 7.46 KB, to be exact

Its served on github pages and it uses content-encoding zstd by default, transferring only 4.17KB with compression.

When you open up can.kurttekin.com on your browser the server has no idea about the amount of data can be transmitted per second (bandwith)
Sending huge amount of data right off can cause packet loss, router owerwhelming etc.

So there is a method 
TCP Congestion Control is a set of strategies that TCP uses to prevent overloading the network.

Sockets explained

They act as endpoints in a two-way communication channel.
For communication of two machines or applications each app/machine creates a socket.
Each socket is associated with IP and port. 

OSI
Sockets operate at layer 4 - transport layer.
Application layer calls down the socket api, for example browser, backend server etc

Types of Sockets:
- TCP(Transmission Control Protocol)
Connection oriented and responsible for ensuring reliable, ordered, error checked, non duplicate data transmission.
Before data is sent a three way handshake is performed to establish the connection.(exchange of SYN and ACK packets)
        - Client sends a SYN(synchronize) packet to initiate a connection.
        - SYN-ACK server responds with a SYN-ACK packet, acknowledging the receipt of SYN and sending its own SYN request.

USB C Modding Old Tech

 I will be adding the things i usb c-fied in my life to this post, i am too lazy to write tutorial but one day i might edit this.
Starting with my Natural Ergonomic Keyboard 4000.

 


Domain Models

In this blog post, we’ll dive into the concept of domain models, explore the differences and discuss how these choices impact your software design.

WTH is a Domain Model?
Instead of saying something like "the term domain model refers to an abstraction that represents the real-world concepts and behaviors of a system" i find that stackoverflow reply more helpful:

If you were to take your program and strip away the gui and the DBMS, and replace it with a command line interface, and a MySQL server instance, then port the whole thing to a different platform with different system calls and file system access api calls, the part that you didn't change in that process is the domain model.


Types of Domain Models

Repurposing Android Phone as UMPC

 

I will be sharing  details and files in my GitHub repo so you can build yourself.
https://github.com/cankurttekin/umpc-phone
 

Lenovo Erratic Touchpad Fix

My touchpad felt laggy and jumpy on my Lenovo Yoga 7 after a week i bought it. It starts with finger rubbing and it is not OS related doesnt go away if i dont press to hard on it to make it contact with something on the body and release the static energy. I opened up the laptop and observed the issue and its grounding problem. 

On the left side there is squishy conductor, its almost went deep inside and doesnt make contact with touchpad. I tried poking it with screwdriver to reform to its original shape. This fixed problem but after couple days it looses that squishy form again and problem starts again.  I added aluminium foil to right one, i made a bit thicker where it contacts squishy thing so when touchpad screwed in to place it should contact.

Dependency Injection

When you have different objects and services that does different things and developed by different teams how do you connect them becomes an issue.

DI is a design pattern that aims to decouple object from their dependencies. Instead of creating their own dependencies internally, object receive them from an external source. By using DI we can configure as needed at runtime; with DI dependencies injected at runtime rather than at compiling.

Dependency injection works together perfectly with SOLID principles.
Single Responsibility Principle - DI can help you isolate responsibility of class.
Open-Closed Principle - With new functionalities we can inject new dependencies instead of changing code base.
Dependency Inversion Principle - Dependencies depend on interfaces instead of concrete classes.

There are three types of DI: Constructor Injection, Setter Injection and Interface Injection.

I will give examples as POJO classes, this pattern can be applied to any language and there are solutions in Spring and .NET.

I will build an awesome(?) music lister that lists your musics from particular artist.

How To Secure Your Spring Application

When developing an API for a business, one of the key requirements often revolves around managing different user types and their respective permissions. In this scenario, we'll focus on three user types: admin, individual user, and corporate user.

User Roles Overview:

  • Admin: Has all the privileges of the individual and corporate users, plus additional administrative capabilities.
  • Individual User: Accesses standard user features.
  • Corporate User: Similar to the individual user but may have access to additional resources or features tailored for corporate use.

In this post, we’ll focus on implementing the authentication and authorization mechanisms necessary to enforce these roles, ensuring the system adheres to the statelessness principle of REST.

Understanding Authentication and Authorization

Authentication vs Authorization: What's the Difference? - javatpoint
Authentication vs Authorization image from javatpoint.com 
 

Event Sourcing Pattern

An architectural pattern that models the state changes made by applications as an immutable sequence or “log” of events. Instead of modifying the state of the application in-place.



Generally with crud applications we hold only current state not how we got there. That might be issue for some applications. For example lets think an online banking application. If only thing they can see is current balance not how they got to that balance, no withdrawal, deposit or fee history.