Posts

The Digital Nomad in IT: Redefining Work-Life Balance

Image
The Digital Nomad in IT: Redefining Work-Life Balance In the ever-evolving world of technology, location is no longer a limitation. As an IT professional specializing in web design and AI/ML development, I’ve experienced firsthand how digital tools and remote work have transformed not only how we work but where we can work. When I decided to pursue self-employment, I knew flexibility would be key. IT is a field that thrives on innovation, and being confined to one location felt at odds with the limitless potential of technology. Today, I find myself working from Zambia—a place that, while thousands of miles away from Germany, has become a hub for creativity, collaboration, and personal growth. The Power of a Borderless Profession The beauty of working in IT is its portability. Whether you’re building websites or training AI models, your workspace can be as simple as a laptop and an internet connection. This freedom enables professionals like me to: Collaborate with clients worldwide, r...

Sway - as a snap reaches alpha state

Additional Settings for Kernel Hardening

 Additional Settings for Kernel Hardening Restrict Core Dumps Prevents core dumps from being created by processes, which can expose sensitive information: fs.suid_dumpable = 0 Randomize Address Space Layout (ASLR) Enables randomization of memory addresses to make attacks like buffer overflows more difficult: kernel.randomize_va_space = 2 Disable IPv6 (if not needed) If your system does not use IPv6, disable it to reduce attack surface: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 Enable ExecShield (for older systems) Provides protection against some buffer overflow exploits (useful on older kernels): kernel.exec-shield = 1 Protect Hard and Soft Links Prevents users from creating links to files they do not own, mitigating certain privilege escalation attacks: fs.protected_hardlinks = 1 fs.protected_symlinks = 1 Limit Rate of Connections Prevents abuse of new connections by setting rate limits: net.ipv4.tcp_max_...

How to Create Debian Packages

To create Debian packages, follow these steps: Create a Debian directory : $ mkdir debian Initialize the changelog : Create a changelog for your package by running the following commands: $ dch --create $ dch --append $ dch -v1.2 $ dch -r Edit the control file : Use a text editor to modify the control file in the debian directory: $ vim debian/control Example content for the control file: Source: pony Maintainer: Sascha Dewald <sdewald (at) googlemail.com> Architecture: any Package: pony Copy rules from dh_make : Copy the Debian rules file to your debian/rules : $ cp /usr/share/debhelper/dh_make/debians/rules.dh7 debian/rules Edit the rules file : Modify the rules file: $ vim debian/rules Create source directory : Make a source directory in the debian folder: $ mkdir debian/source Specify source format : Edit the debian/source/format file: $ vim debian/source/format Add the following line: 3.0 Check the package with Lintian : Run...

F# - Common Hash Functions Explained

F# - Common Hash Functions Explained When working with data, hashing is a common technique used to generate a unique identifier (or "hash") for a given input. In this post, we’ll look at how to implement some common hash functions in F#—namely MD5, SHA-1, SHA-256, and SHA-512. These are widely used for tasks like checking data integrity or creating digital signatures. We'll focus on converting strings to their respective hash values, and converting the resulting hash into a readable hexadecimal format. Code Breakdown: module HashSum = open System open System.Security.Cryptography open System.Text // Convert string to byte array using UTF-8 encoding let encode (s: string) = UTF8Encoding().GetBytes(s) // Convert a byte to its hexadecimal representation let toHexDigit (n: byte) = if n < 10uy then char (n + 0x30uy) // For values 0-9 else char (n + 0x37uy) // For values 10-15 (A-F) // Convert byte array to ...

Essential Linux Kernel Security Settings

Essential Linux Kernel Security Settings Below are some important security-related kernel settings for Linux. These can be configured in /etc/sysctl.conf or by adding files to /etc/sysctl.d/ . IPv4 Networking Settings TCP SYN Cookie Protection Protects against SYN flood attacks by enabling TCP SYN cookies. This kicks in only when net.ipv4.tcp_max_syn_backlog is reached: net.ipv4.tcp_syncookies = 1 Time-Wait Assassination Protection Drops RST packets for sockets in the TIME-WAIT state to prevent TCP time-wait assassination hazards. Although not widely supported outside Linux, this conforms to RFC standards: net.ipv4.tcp_rfc1337 = 1 TCP Timestamps Pros: Protects against sequence number wrapping at gigabit speeds and provides round-trip time calculations. Cons: Adds overhead and allows uptime detection by tools like Nmap. Enable for gigabit speeds: net.ipv4.tcp_timestamps = 0 #net.ipv4.tcp_timestamps = 1 Source Address Verification Helps prevent spoofing...

A Human-Friendly Git Workflow

A Human-Friendly Git Workflow Managing Git can be simpler and more intuitive with a streamlined workflow. Below is a guide to using a human-friendly Git toolkit to make common tasks easier and faster: Key Commands Switch branches: git switch <branch> Quickly switch to another branch. Any unstaged changes are automatically stashed and restored afterward. Synchronize branches: git sync Brings the current branch up to date by automatically merging or rebasing changes from the remote repository. Handles stashing and unstashing as needed. Publish a branch: git publish <branch> Push your branch to the remote server, making it available to others. Unpublish a branch: git unpublish <branch> Remove a branch from the remote server. Harvest changes: git harvest <branch> Automatically merge or rebase commits from another branch into the current branch. Create a new branch: git sprout <branch> Start a new branch based on your current bra...