Jump to content

Blogger

Blog Bot
  • Joined

  • Last visited

    Never

Blog Entries posted by Blogger

  1. by: Abhishek Kumar



    DeepSeek has taken the AI world by storm. While it's convenient to use DeepSeek on their hosted website, we know that there's no place like 127.0.0.1. 😉

    Source: The Hacker News
    However, with recent events, such as a cyberattack on DeepSeek AI that has halted new user registrations, or DeepSeek AI database exposed, it makes me wonder why not more people choose to run LLMs locally.
    Not only does running your AI locally give you full control and better privacy, but it also keeps your data out of someone else’s hands.
    In this guide, we'll walk you through setting up DeepSeek R1 on your Linux machine using Ollama as the backend and Open WebUI as the frontend.
    Let’s dive in!
    📋
    The DeepSeek version you will be running on the local system is a striped down version of actual DeepSeek that 'outperformed' ChatGPT. You'll need Nvidia/AMD graphics on your system to run it.
    Step 1: Install Ollama
    Before we get to DeepSeek itself, we need a way to run Large Language Models (LLMs) efficiently. This is where Ollama comes in.
    What is Ollama?
    Ollama is a lightweight and powerful platform for running LLMs locally. It simplifies model management, allowing you to download, run, and interact with models with minimal hassle.
    The best part? It abstracts away all the complexities, no need to manually configure dependencies or set up virtual environments.
    Installing Ollama
    The easiest way to install Ollama is by running the following command in your terminal:
    curl -fsSL https://ollama.com/install.sh | sh
    Once installed, verify the installation:
    ollama --versionNow, let's move on to getting DeepSeek running with Ollama.
    Step 2: Install and run DeepSeek model
    With Ollama installed, pulling and running the DeepSeek model is really simple as running this command:
    ollama run deepseek-r1:1.5bThis command downloads the DeepSeek-R1 1.5B model, which is a small yet powerful AI model for text generation, answering questions, and more.
    The download may take some time depending on your internet speed, as these models can be quite large.

    Once the download is complete, you can interact with it immediately in the terminal:

    But let’s be honest, while the terminal is great for quick tests, it’s not the most polished experience. It would be better to use a Web UI with Ollama. While there are many such tools, I prefer Open WebUI.
    12 Tools to Provide a Web UI for Ollama
    Don’t want to use the CLI for Ollama for interacting with AI models? Fret not, we have some neat Web UI tools that you can use to make it easy!
    It's FOSSAnkush Das

    Step 3: Setting up Open WebUI
    Open WebUI provides a beautiful and user-friendly interface for chatting with DeepSeek. There are two ways to install Open WebUI:
    Direct Installation (for those who prefer a traditional setup)
    Docker Installation (my personal go-to method)
    Don't worry, we'll be covering both.
    Method 1: Direct installation
    If you prefer a traditional installation without Docker, follow these steps to set up Open WebUI manually.
    Step 1: Install python & virtual environment
    First, ensure you have Python installed along with the venv package for creating an isolated environment.
    Run the following command:
    sudo apt install python3-venv -y
    This installs the required package for managing virtual environments.
    Step 2: Create a virtual environment
    Next, create a virtual environment inside your home directory:
    python3 -m venv ~/open-webui-venv and then activate the virtual environment we just created:
    source ~/open-webui-venv/bin/activate
    You'll notice your terminal prompt changes, indicating that you’re inside the virtual environment.
    Step 4: Install Open WebUI
    With the virtual environment activated, install Open WebUI by running:
    pip install open-webui
    This downloads and installs Open WebUI along with its dependencies.
    Step 5: Run Open WebUI
    To start the Open WebUI server, use the following command:
    open-webui serve
    Once the server starts, you should see output confirming that Open WebUI is running.
    Step 6: Access Open WebUI in your browser
    Open your web browser and go to: http://localhost:8080
    You'll now see the Open WebUI interface, where you can start chatting with DeepSeek AI!
    Method 2: Docker installation (Personal favorite)
    If you haven't installed Docker yet, no worries! Check out our step-by-step guide on how to install Docker on Linux before proceeding.
    Once that's out of the way, let's get Open WebUI up and running with Docker.
    Step 1: Pull the Open WebUI docker image
    First, download the latest Open WebUI image from Docker Hub:
    docker pull ghcr.io/open-webui/open-webui:main
    This command ensures you have the most up-to-date version of Open WebUI.
    Step 2: Run Open WebUI in a docker container
    Now, spin up the Open WebUI container:
    docker run -d \ -p 3000:8080 \ --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main Don’t get scared looking at that big, scary command. Here’s what each part of the command actually does:
    Command
    Explanation
    docker run -d
    Runs the container in the background (detached mode).
    -p 3000:8080
    Maps port 8080 inside the container to port 3000 on the host. So, you’ll access Open WebUI at http://localhost:3000.
    --add-host=host.docker.internal:host-gateway
    Allows the container to talk to the host system, useful when running other services alongside Open WebUI.
    -v open-webui:/app/backend/data
    Creates a persistent storage volume named open-webui to save chat history and settings.
    --name open-webui
    Assigns a custom name to the container for easy reference.
    --restart always
    Ensures the container automatically restarts if your system reboots or if Open WebUI crashes.
    ghcr.io/open-webui/open-webui:main
    This is the Docker image for Open WebUI, pulled from GitHub’s Container Registry.

    Step 3: Access Open WebUI in your browser
    Now, open your web browser and navigate to: http://localhost:8080 .You should see Open WebUI's interface, ready to use with DeepSeek!

    Once you click on "Create Admin Account," you'll be welcomed by the Open WebUI interface.
    Since we haven't added any other models yet, the DeepSeek model we downloaded earlier is already loaded and ready to go.

    Just for fun, I decided to test DeepSeek AI with a little challenge. I asked it to: "Write a rhyming poem under 20 words using the words: computer, AI, human, evolution, doom, boom."
    And let's just say… the response was a bit scary. 😅
    Here's the full poem written by DeepSeek R1:

    Conclusion
    And there you have it! In just a few simple steps, you’ve got DeepSeek R1 running locally on your Linux machine with Ollama and Open WebUI.
    Whether you’ve chosen the Docker route or the traditional installation, the setup process is straightforward, and should work on most Linux distributions.
    So, go ahead, challenge DeepSeek to write another quirky poem, or maybe put it to work on something more practical. It’s yours to play with, and the possibilities are endless.
    For instance, I recently ran DeepSeek R1 on my Raspberry Pi 5, while it was a bit slow, it still got the job done.
    Who knows, maybe your next challenge will be more creative than mine (though, I’ll admit, that poem about "doom" and "boom" was a bit eerie! 😅).
    Enjoy your new local AI assistant, and happy experimenting! 🤖
  2. by: Community



    If you're a developer or a power user, you probably understand the importance of having an efficient and organized workflow.
    Whenever I get to work with a Windows-based system, I really miss the terminal emulator along with the ability to quickly switch between different terminal sessions. Not to mention, sometimes I need to gather 2-3 command sessions in a single view. There are many scenarios where I need to run multiple commands simultaneously. 
    Sure, we have the command prompt, or Windows terminal to use, but it is not enough for a similar experience.
    💡
    Windows 11 Terminal does provide you the ability to create multiple panes within a tab. You can use the shortcut Alt + Shift + - and Alt + Shift + + to create horizontal and vertical panes, respectively.
    With Linux, I had access to terminal multiplexers like tmux and screen.
    But, wait, there is a solution on Windows 10 and Windows 11 that can work as a terminal multiplexer and a text editor – all in one!
    Enter Emacs 🤩
    Why Use Emacs as a Terminal Multiplexer?
    While I have already mentioned why we are looking at a solution like Emacs, let me give highlight some more reasons you want to try this out (apart from the fact that it is open source and super awesome):
    1. Less is More
    Emacs is an all-in-one solution. It can work as a terminal, text editor, file manager, email client, calculator, a text-based web browser. All these features are packed in a 150 MB zipped file. Pretty crazy, right? You won't know all this until you give it a try!
    2. Powerful Customization
    Emacs is famously customizable. You can tweak almost everything: keybindings, window layouts, themes, and even the behavior of your terminal sessions. This allows you to tailor the environment to your exact needs, providing a highly efficient experience.
    3. Integrated Shell Support
    Emacs allows you to open a shell session inside a buffer, and with its support for eshell, shell, you can run shell commands, manipulate files, and perform operations right alongside your text editing. 
    4. Flexibility with Windows
    Emacs is great at handling multiple buffers in a single window. You can split your window into multiple panes (or "windows," as Emacs calls them), just like with tmux, enabling you to work on different tasks simultaneously without feeling cluttered.
    Using Emacs as Terminal Multiplexer
    Now that you know the benefits, to help you use it, let me give you a walkthrough on using Emacs as a terminal multiplexer.
    Step 1: Install Winget
    Winget comes as a part of the App Installer package. So, you need to first install the App Installer from Microsoft Store:

    Step 2: Install Emacs on Windows 11 or Windows 10
    Winget makes it super simple to install Emacs. Simply run this command:
    winget install emacsStep 3: Open Emacs 
    Open Emacs from the Windows 11 Start menu.
    Step 4: Run shell
    Within emacs, press Alt + X, and type shell and hit Enter to get the interactive user interface.

    💡
    In Emacs terminology, the Alt key is often referred to as M, and Ctrl is referred to as C. I have used C, and M to represent the same throughout the article.
    Now, with Emacs, you will realize the following benefits:
    A nice auto-completion system
    Ability to edit any previous command at a point
    Quickly jump between different command sessions.

    Autocomplete selection
    To see autocomplete in shell buffer, simply type in 'a' and then hit Tab, you’ll be presented with a list of options. You can select one of the options with a mouse click as shown above.

    📋
    If you see terms like C-s, or C-u, or Alt-x, read it as Ctrl + s/u or Alt + x.
    To search for previous commands and outputs, hit C-s <your-term>. This is what I referred to when I mentioned consistent keybindings for all of your workflow. Within your Emacs environment, C-s will do a forward search everywhere unless you modify it.

    To edit your previous commands, move your cursor to the previous command or do a quick search, make the necessary adjustments, and hit enter. 
    If you want to open another shell, press C-u keys, and then Alt-x to open another shell.
    By default, this buffer will be named “Shell 2”. And you can navigate between these different shells by C-x b and Tab. Use the mouse for selection. We’ll make it more efficient in the next section.
    Terminal Multiplexing
    Now here comes the magic. If you want to create two vertical layouts, simply use the keybinding C-x + 3. Then, if you want two horizontal layouts, use the shortcut C-x + 2.

    For navigation to other panes, you can use your mouse or use Emacs shortcut
    C-x + o
    Auto-completion and multi-window layouts
    Another quick tip. With just one line configuration, Emacs can provide useful completions based on your action with ido-mode. 
    Save the line below in a new .emacs file usually located at your user C:/Users/YourUser/AppData/Roaming. After saving, you don’t need to restart Emacs.
    (ido-mode 1)Let’s enable winner-mode as well to undo and redo multi-window layouts. Add the line below to the config file like you did above:
    (winner-mode 1)Finally, save this two-line configuration
    Simply, do Alt + x and then type eval-buffer.

    Now with ido-mode, you can simply switch to shell 2 buffer using C-x b 2.

    With winner-mode in place, if you want to get a full preview of a single pane, press C-x + 1, and then to go back to the previous layout, run
    winner-undoYou can save yourself time by mapping a keybinding for winner-undo and winner-redo commands.
    Keybindings Cheatsheet
    Here’s a list of all keybindings we used throughout this tutorial.
    Keybinding Shortcut
    What it does
    C-x C-s
    Saves the file
    Alt-x
    Opens mini prompt to enter interactive commands
    C-s
    Forward Search
    C-u Alt-x
    Run another instance of the command
    C-x b
    Navigates between the buffer
    C-x 2
    Splits into two horizontal layouts
    C-x 3
    Splits into two vertical layouts
    C-x o
    Move to another pane
    C-x 1
    Get a full view of a particular pane
    💬Do you love having multiple terminal sessions as well? Let me know your thoughts in the comments!
    Author Info

    Bhuwan Mishra is a Fullstack developer, with Python and Go as his tools of choice. He takes pride in building and securing web applications, APIs, and CI/CD pipelines, as well as tuning servers for optimal performance. He also has passion for working with Kubernetes.
  3. by: Abhishek Kumar



    From the title, you might be thinking: yet another clickbait post. But I mean it when I say this, ArmSoM has truly delivered something special.
    ArmSoM, yet again, has sent us their Compute Module 5 (CM5) with its IO board for review. Last time, I tested and reviewed their AIM7 board, and my head was blown by its sheer performance. With an RK3588 SoC, 8GB of RAM, and 32GB of storage, it was a beast.
    This time around, we’re looking at the CM5, powered by the RK3576, a slight step down from the RK3588 but still impressive.
    It comes with 8 GB of RAM (though a 16 GB version is available) and 64 GB of onboard eMMC storage. On paper, it’s shaping up to be a serious contender in the world of compute modules.
    In this review, I’ll walk you through its hardware specifications, software support, benchmarks, AI capabilities, and my personal thoughts.
    Let’s dive in!
    CM5 Specifications

    Source: ArmSoM
    The ArmSoM Compute Module 5 is a compact powerhouse built around the RK3576 SoC, an octa-core processor that’s both fast and efficient.
    With support up to 16GB of LPDDR5 RAM and up to 128GB of onboard eMMC storage, it offers twice the memory and storage options of the Raspberry Pi CM4.
    What makes it even better? It uses the same 100-pin connector as the CM4, making it compatible with Raspberry Pi IO boards.
    Plus, it supports 4K@120fps video output, giving you ultra-smooth visuals for high-resolution displays.
    Specification
    ArmSoM CM5
    Processor
    RK3576 SoC
    CPU Architecture
    Quad-core ARM Cortex-A72 & Quad-core Cortex-A53
    GPU
    ARM Mali G52 MC3 GPU
    Memory
    Up to 16GB LPDDR5
    Storage
    eMMC storage (optional capacities)
    Display Output
    1x HDMI 2.1, 1x DP
    Video Resolution
    Supports 4K@120fps
    Network Interface
    1x Gigabit Ethernet port
    USB Ports
    1x USB3.0,1x USB2.0
    GPIO
    40-pin GPIO
    Expandability
    2x PCIe/SATA/USB 3.0 SS
    Camera Interface
    1x 4-lane MIPI CSI, 1x 2-lane MIPI CSI
    Display Interface
    1x 4-lane MIPI DSI
    Power Input
    5V
    Dimensions
    55mm x 40mm
    Operating System Support
    Debian, Android, Ubuntu, etc.
    CM5-IO board Specifications

    Source: ArmSoM
    The CM5-IO board is designed to make the most of the CM5 module. It features an HDMI output for 4K displays, four USB 3.0 ports for peripherals, and a Gigabit Ethernet port with PoE support.
    There’s also an SD Card slot and an M.2 slot for adding fast storage or PCIe devices.
    With dual MIPI CSI camera interfaces and a 40-pin GPIO header, it’s perfect for projects that demand flexibility.
    It’s compact, functional, and pairs seamlessly with the CM5 module to deliver a complete development platform.
    Specifications
    1x HDMI output
    4x USB 3.0 Type-A
    Gigabit Ethernet RJ45 with PoE support
    Firmware flashing and device mode via USB Type-C
    GPIO: 40-PIN header
    Power connector: DC Barrel jack for 12V power input
    Expansion: M.2 (M-key, supports PCIe), microSD
    MIPI DSI: 1x 4-lane MIPI DSI, supports up to 4K@60fps (x4)
    MIPI CSI0: 1x 4-lane MIPI CSI, each lane up to 2.5Gbps
    MIPI CSI1: 1x 2-lane MIPI CSI, each lane up to 2.5Gbps
    Others: HPOUT, FAN, VRTC
    Dimensions: 100 x 80 x 29 mm (3.94 x 3.15 x 1.14 inches)
    Unboxing and first impression
    The CM5 and its IO board arrived fully assembled, tucked neatly inside a sturdy, no-nonsense package. While the box wasn’t flashy, it did its job well, everything was secure and free of unnecessary fluff.

    Sorry for the potato looking image quality
    The first thing I noticed was the compactness of the CM5 module. It’s small, yet it feels solid in hand, like it means business. Looking closely, you can immediately spot the essentials: the RK3576 SoC sitting at the heart of the module, flanked by the eMMC storage chip and LPDDR5 RAM.

    The layout is efficient and clean, with every component neatly placed. Even the tiny antenna connectors for Bluetooth and WiFi are exposed, ready to connect to external antennas for better wireless performance.
    Flipping it over, the 100-pin connector on the back stands out.

    The CM5 is designed to work seamlessly with Raspberry Pi IO boards, making it an excellent choice for anyone looking to upgrade their Pi-based projects.

    ArmSoM CM5 supports Raspberry Pi IO board | Source: ArmSoM
    The IO board, which came paired with the module, is equally impressive. It’s larger than the CM5 itself but just as well-built.

    Ports and connectors are thoughtfully arranged, from the HDMI output and USB 3.0 ports and 40-pin GPIO header.

    and don't forget that this IO board also has an M.2 slot unlike Raspberry Pi 500, which came in news with its unpopulated M.2 slot.

    Setting it up
    Getting started with the CM5 was refreshingly simple. The module slid perfectly into the IO board, just look for the markings on the board.

    And to my surprise, this time I didn't have to rely on other sources, as ArmSoM has provided a great documentation for setup and links to all the OS images.

    OS Installation & first boot
    If you are coming from Raspberry Pi ecosystem, you might find it difficult to flash OS images into CM5 but during my experience with AIM7, it was an ease for me.

    RKDevTool is required to flash an OS image in Rockchip devices.

    Flashing Android 14 image to CM5 using RKDevTool
    Debian
    The CM5 came pre-installed with ArmSoM’s custom Debian image, which saved me the hassle of flashing an OS right out of the box.
    When I powered it on, the board booted into Debian in under 30 seconds, thanks to the onboard eMMC storage.

    However, there was a small hiccup: the default locale was set to Chinese. While this threw me off for a moment, Google Translate came to the rescue. I’ve covered a detailed guide on how to change locales in Debian.
    Once the language barrier was out of the way, everything ran smoothly. The system felt responsive, and the ArmSoM image came with just the right balance of pre-installed utilities to get started without feeling bloated.
    Android 14
    ArmSoM doesn’t just stop at Debian; they also provide an Android 14 image for the CM5, and I couldn’t resist the idea of running Android on this tiny yet powerful board.
    Installing it was straightforward, though slightly different from the usual process. Instead of burning the image to an SD card or eMMC, you need to flash it as firmware using the RKDevTool utility.
    The process was smooth, and once the flashing was complete, I rebooted the system.
    I was greeted with the Android boot animation, and in no time, the familiar Android home screen appeared. Interestingly, the display was in portrait mode, which felt a bit odd on my monitor but didn’t hinder functionality.
    The Android image was barebones - just the essentials, nothing more. I scrolled through the settings, checked out the "About" section, and explored the file manager. It felt snappy and responsive, but that was about it.
    One noticeable omission was the absence of the Google Play Store. If you’re keen on having it, you can install it using Open GApps Project.
    However, since I was pressed for time, I skipped that step and instead sideloaded Geekbench for Android from APKMirror to get straight to benchmarking.
    Performance testing
    Now comes the most awaited section, the benchmarks!
    It’s one thing to talk about specs on paper, but how does the CM5 actually perform in real-world tests? To keep things simple, here’s what I tested:
    Geekbench Performance: Evaluating CPU and overall system power.
    AI Capabilities: Testing the NPU for AI-related workloads.
    YouTube Playback: Checking video performance and hardware acceleration.
    📋
    The Geekbench test was conducted using the Geekbench Android app. For AI testing, I used the pre-installed Debian image. YouTube performance was tested in the Chromium browser inside Debian as well, with hardware acceleration enabled.
    Geekbench results
    The Geekbench results gave us a good glimpse of the CM5's raw power. With a Single-Core Score of 321 and a Multi-Core Score of 1261, the CM5 delivers solid performance.

    The single-core score of 321 might seem modest, but it’s adequate for basic tasks like file compression (54.9 MB/sec) and lightweight navigation (2.34 routes/sec).

    If you’re planning to use the CM5 for simple applications, like hosting a lightweight server or running scripts, this score is sufficient.
    However, for tasks that demand high single-threaded performance like intensive image processing or compiling large programs, you might notice some lag.

    The multi-core score of 1261 is where the RK3576 shines. This score reflects the strength of its eight cores working together, making it ideal for multitasking and workloads that can leverage parallel processing.
    AI workload
    The CM5’s 6 TOPS NPU is designed to handle AI inference efficiently, just like its big sibling, the AIM7.
    It supports RKNN-LLM, a toolkit that enables deploying lightweight language models on Rockchip hardware with optimized performance.

    Source: RKNN-LLM
    To test its capabilities, I ran the TinyLLAMA model with 1.1 billion parameters, and the results were consistent with the AIM7.
    The NPU achieved a throughput of 13 or 14 tokens /second , showcasing its ability to handle lightweight AI workloads with ease.

    With NPU handling AI tasks, the GPU stays free for other workloads. This makes CM5 ideal for edge AI projects where efficient resource use is key.
    YouTube playback
    YouTube playback is my favorite test for any SBC because it’s where many boards, including the Raspberry Pi (even the Pi 5), still stumble.
    Playing 1080p consistently is a challenge for most, and 4K? Forget about it. But the CM5 completely shattered my expectations.
    Running Chromium on Debian with hardware acceleration enabled, I tested videos at 1080p, 1440p, and 4K. The CM5 didn’t just handle it, it crushed it.
    Even at 4K resolution, the playback was smooth, with less than 10 dropped frames throughout the video. That’s right, 4K on an SBC, and it worked beautifully.
    What’s more impressive is how efficiently it handled the load. Thanks to hardware decoding, CPU usage stayed low, leaving the board cool and responsive.
    I even recorded a video of the CM5 playing a 4K YouTube video to showcase its capabilities.
    If you’re considering the CM5 for a media server or as a replacement for your Android TV box, this performance makes it an easy choice. It’s rare to see this level of multimedia smoothness on an SBC, and the CM5 delivers it effortlessly.
    What about Raspberry Pi CM5?
    I don't want to sugarcoat it, the Raspberry Pi CM5 outperforms the ArmSoM CM5 in raw processing power, and the benchmarks make that crystal clear.

    In single-core performance, the Raspberry Pi CM5 delivers a stellar 804 compared to the ArmSoM CM5’s modest 321. That’s a difference of 39.9%, and it’s noticeable in tasks that rely on single-threaded performance, like browsing, lightweight applications, or running certain server processes.
    The gap widens further in multi-core performance, where the Pi CM5 scores an impressive 1651, leaving the ArmSoM CM5 trailing at 1261 a 76.4% lead that makes the Pi CM5 the clear choice for CPU-intensive tasks.
    That said, the ArmSoM CM5 isn’t trying to play the same game. It’s built with a different focus, and its strengths lie elsewhere.
    The 6 TOPS NPU on the ArmSoM CM5 is a game-changer for AI workloads, allowing it to handle tasks like language models or image recognition with ease, something the Raspberry Pi CM5 lacks entirely.
    Final thoughts
    After spending time with the ArmSoM CM5, it’s clear that this little board has carved out its niche.
    It may not outshine the Raspberry Pi CM5 in raw CPU benchmarks, but it brings its own strengths to the table.
    The built-in NPU, seamless 4K playback, and thoughtful design make it a compelling choice for AI-driven edge projects, media servers, or even as a replacement for an Android TV box.
    What impressed me most was its support for Raspberry Pi IO boards.
    I feel that, the ArmSoM CM5 isn’t trying to be a Raspberry Pi killer. Instead, it’s a specialist board that excels in areas where the Pi falters.
    As I wrap up this review, I'm also thinking about running some emulators on the CM5 to dive deeper into its GPU performance and for the fun of it.
    Recently, many retro game emulation videos have been popping up in my feed, and they’re tempting me to dip my toes in.
    If you want to see that, let me know in the comments section! 🕹️
  4. by: Abhishek Prakash



    One of the issues I encountered after dual booting Windows with Linux is the missing Windows entry from the grub menu.
    Here's the scenario. Windows was present on the computer. I installed CachyOS alongside Windows. I selected to install the Grub bootloader that allows booting into Linux, Windows (and any other OS present on the system) along with the option to access UEFI.
    Only this time, Grub did not show Windows in the menu 😔

    Missing Windows from Grub bootloader
    That was disappointing but not surprising because I am aware that this is a feature.
    Let me show you how you can fix this by enabling os-prober feature in Grub and then updating it.
    Step 1: Enable os-prober in grub
    Grub config file is located at /etc/default/grub. If you open it via Nano or some editor, you'll see at the end of this file that os-prober is disabled by default sighting security reasons.

    If you are familiar with any terminal-based text editor, use it to uncomment the line # GRUB_DISABLE_OS_PROBER=false by removing the # at the beginning of the line.
    However, if you are absolutely new to the command line, you can use this command in the terminal:
    echo "GRUB_DISABLE_OS_PROBER=false" | sudo tee -a /etc/default/grubIt will ask for your password. It should be the same account password you use to log in to the system.
    🚧
    When you type the password in Linux terminal, nothing is reflected on the screen. It feels as if your system is hanged, as there is no visible feedback. Don't worry. It's a security feature and most Linux terminals won't even show asterisks (*) as you enter the password. Just type it in and enter.
    With os-prober enabled, Grub will look for the presence of other operating systems in EFI folder and will add them in the bootloader menu.
    There is one little problem. The config changes won't take place unless you update grub.
    Step 2: Update grub
    On Ubuntu and some other distributions, there is a dedicated command to update grub:
    sudo update-grubHowever, on Arch and some other distributions, you'll end up with update-grub command not found error.
    That's because update-grub is not a standard command. It is just la stub for this command:
    sudo grub-mkconfig -o /boot/grub/grub.cfgRun the above command if your system doesn't have update-grub.
    It should show an output like this:

    And as you can see in the above output, grub is probing for other OS and has found Windows boot manager. This is an indication that when you reboot the system, grub should show Windows in the available option.

    And Windows is back in Grub
    Still no Windows boot manager?
    See, this method only works when dual boot succeeded properly and you have all EFI settings located in the same folder under the same ESP partition.
    If that's not the case, you could try accessing the UEFI settings, go to boot order. Windows boot manager should be present there and if you move it up the order, you can boot from it into Windows.
    This is not the most convenient option, I understand but it's a workaround until you figure out why Grub bootloader could not see Windows.
    💡 Bonus tip: The time synchronization issue
    Since we are discussing dual booting Windows and Linux, let me share another potential issue you'll encounter. You'll notice that system time changes when you switch between Windows and Linux. You can fix it, if you want.
    [Solved] Wrong Time in Windows 10 After Dual Boot With Linux
    If you dual boot Windows and Linux, you’ll notice that often one of them shows incorrect time. Here’s why that happens and what you can do to fix it.
    It's FOSSAbhishek Prakash

    💬 I hope this little trick helps you get a better dual booting experience. Let me know in the comments if you were able to get Windows back in Grub.
  5. by: Abhishek Prakash



    The brilliance and curiosity of some people amazes me. Take this person who managed to run Linux inside a PDF file 🫡
    Wow! You Can Now Run Linux Inside a PDF
    Yes, you read that right.
    It's FOSS NewsSourav Rudra

    💬 Let's see what else you get in this edition
    Debian logging off X/Twitter.
    Installing DeepSeek R1 locally on Linux.
    Doom running on Android 16's Linux Terminal.
    And other Linux news, tips and, of course, memes!
    This edition of FOSS Weekly is supported by PikaPods.
    ❇️ PikaPods: Enjoy Self-hosting Hassle-free
    PikaPods allows you to quickly deploy your favorite open source software. All future updates are handled automatically by PikaPods while you enjoy using the software. PikaPods also share revenue with the original developers of the software.
    You get a $5 free credit to try it out and see if you can rely on PikaPods.
    PikaPods - Instant Open Source App Hosting
    Run the finest Open Source web apps from $1/month, fully managed, no tracking, no ads, full privacy. Self-hosting was never this convenient.
    Instant Open Source App Hosting

    📰 Linux and Open Source News
    An official Arch Linux WSL image is in the works.
    Debian has stopped publishing content on X/Twitter and it created a controversy.
    Running Doom on Android 16's Linux Terminal is possible.
    Fedora's KDE Plasma Desktop has been promoted to Edition.
    The sole maintainer of the Linux wireless networking drivers has stepped down.
    GTK set to drop support for X11 and Broadway
    GTK Drops X11!
    And Broadway Support, Lays the Foundation for New Android Backend
    It's FOSS NewsSourav Rudra

    🧠 What We’re Thinking About
    The Video Game History Foundation is giving people early access to their archive of research materials on video game history.
    The VGHF Library opens in early access | Video Game History Foundation
    For free. For everyone. Wherever you are.
    Video Game History FoundationPhil Salvador

    Development of Serpent OS has slowed down considerably due to funding issues.
    🧮 Linux Tips, Tutorials and More
    It's FOSS Community member, Bhuwan, shares how you can use Emacs as your terminal multiplexer on Windows.
    Get started with Rust programming with our Rust Basics series.
    Linux books I own and recommend.
    A common issue these days is missing Windows from Grub in a fresh dual boot setup. The fix is easy.
    Missing Windows from Grub After Dual Boot? Here’s What You Can Do
    Can’t see Windows in Grub after successfully dual booting? That’s because os-prober is disabled. Here’s how to fix it.
    It's FOSSAbhishek Prakash

    👷 Maker's and AI Corner
    The ArmSoM CM5 is a compact powerhouse that's built around the RK3576 SoC.
    ArmSoM CM5: Powerful Replacement for Raspberry Pi CM4
    ArmSoM’s Compute Module 5 is an impactful Rockchip device with impressive hardware specs. And yes, it can support Raspberry Pi IO boards.
    It's FOSSAbhishek Kumar

    Also, learn to install DeepSeek locally on Linux.
    ✨ Apps highlight
    Bored of Chrome and Firefox? Maybe this browser can help:
    I tried this non-Chrome Open-Source Web Browser (And You Should Too!)
    It’s time we got to try an open-source browser not based on Chrome. Zen Browser is the hero we didn’t know we needed.
    It's FOSS NewsSourav Rudra

    🛍️ Deal You Would Love
    15 Linux and DevOps books for just $18 plus your purchase supports Code for America organization. Get them on Humble Bundle.
    Humble Tech Book Bundle: Linux from Beginner to Professional by O’Reilly
    Learn Linux with ease using this library of coding and programming courses by O’Reilly. Pay what you want & support Code For America.
    Humble Bundle

    📽️ Video I am creating for you
    Subscribe to It's FOSS YouTube Channel
    🧩 Quiz Time
    Ready to jog your memory of 90s video games?
    90’s Retro Rewind Memory Game
    Know the classics? See them and memorize the titles to uncover them as a pair.
    It's FOSSAnkush Das

    💡 Quick Handy Tip
    In Nautilus File Manager (GNOME Files), you can go up and down directories using Alt + Up/Down Arrow Keys.

    Similarly, you can use Alt + Left/Right Arrow Key to go back and forward.
    🤣 Meme of the Week
    The funny little penguin is why some of us switched to Linux! 🐧

    🗓️ Tech Trivia
    Ken Thompson, co-creator of UNIX, was born on February 4, 1943. UNIX was developed at AT&T Bell Labs and took inspiration from Multics, the first multi-user, multitasking OS. It quickly gained popularity among engineers and scientists.
    🧑‍🤝‍🧑 FOSSverse Corner
    Pro FOSSer, Jimmy, shares an interesting case where a popular animation-focused YouTuber has moved to Linux Mint years after being exploited by Adobe.
    Animator James Lee on dropping Adobe and switching to Linux
    Hey everyone! A few weeks ago I saw this video by James Lee, and I forgot to post it here. If you aren’t familiar, James Lee is an Australian animator who has been somewhat popular on Youtube. He’s probably most famous for a collaboration he did with streamer Cr1TiKaL, but I have watched several of his videos before and he’s very funny. Also, his animations have a very unique and striking art style that I really like. As a small warning, most of his videos have swear words. It personally does…
    It's FOSS CommunityAkatama

    ❤️ With love
    Share it with your Linux-using friends and encourage them to subscribe (hint: it's here).
    Share the articles in Linux Subreddits and community forums.
    Follow us on Google News and stay updated in your News feed.
    Opt for It's FOSS Plus membership and support us 🙏
    Enjoy FOSS 😄
  6. by: Abhishek Prakash



    Recently, I bought an Asus Zenbook and dual booted it with Ubuntu. But Ubuntu 24.04 didn't perform well on the new hardware and thus I removed Ubuntu from dual boot.
    This is typically done by moving the Windows boot manager up the boot order and deleting the Linux partition from within Windows.
    The annoyance is that Linux will still show up in the UEFI boot settings.

    Although it doesn't hurt to leave it there, it triggers some sort of OCD in me to get a pristine system without unnecessary stuff.
    And hence, I went out to 'fix this non-issue' and I am going to share how you can do the same if you like.
    The process is composed of these two steps:
    Mount the EFI system partition (ESP) in Windows (has to be command line)
    Delete the Ubuntu/Linux entry from the EFI folder using either command line or GUI
    📋
    Again, the Linux entry in the UEFI boot menu is not a blocking issue and you can leave it as it is to use only Windows on the system.
    Step 1: "Mount" the EFI partition in Windows
    Press the Windows start button and look for CMD. Right click on it and select "Run as administrator".

    Once the command prompt is open, start the disk partition utility by entering:
    diskpartType "list disk" to list all the disks present on your system and get the name of the disk where the EFI partition is located.
    list diskIf you have only one disk, it should show only one entry.

    Enter the disk to see all the partitions on this disk:
    select disk 0You should see 'Disk 0 is now the selected disk' in the ouput.
    Now, list all the partitions on this disk with:
    list partitionUsually, it is the system partition that is EFI partiton and as you can see in the screenshot below, it is the partition number 1.

    🚧
    Since my ESP (EFI System Partition) has assigned number 1, I'll select this partition. Yours could be different, so pay attention.
    select partition 1Now, assign it a drive letter. Since C, D, E etc are usually taken, let's go to the end of the alphabet and use the letter x here.
    assign letter x
    With the EFI partition getting a driver letter, you can now see it in the file explorer like C or D drives.

    Basically, all this hassle for mounting the ESP partition. Anyway, exit the disk partition tool:
    exitStep 2: Delete Linux folder from EFI
    Till here, we were not doing anything risky. But now, we have to delete the Ubuntu Linux folder from the EFI partition.
    This can be done via graphically as well as via command line. You used the command line above but for 'deleting' something, I would recommend using the graphical method.
    Method 1: Use GUI
    Open the task manager in Windows (Ctrl+Alt+Del) and here, click the 'Run new task':

    This will give you the option to create new task. What you have to do here is to click on the "browse" button:

    You can now browse the partitions and the files inside them. Using this, you can add or delete files and folders.
    Browse to drive X and the EFI folder. You should see ubuntu (or whichever distro you used) listed here. Select it first and then right click to see the option to delete it.

    I could not take a screenshot of it as Window's built-in tool didn't allow taking screenshots of the right-click context menu. Once you hit the delete option, a conformation dialogue box will pop up.

    Select yes and close the browser and then close task manager as well.
    Congratulations! Now if you access the UEFI settings from Windows, you won't see the Linux entry anymore.
    Command line warrior? Let's see the other method for you.
    Method 2: Use command line
    📋
    You need to perform all this in command prompt running as administrator.
    Use this command to enter the drive you had mounted earlier. Mind the colon after the drive letter.
    x:See the content of the directory with:
    dirIt should show a folder named EFI. Enter this directory:
    cd EFIAnd now look at the content of this folder:
    dirYou should see some folder belonging to Linux. It could be named Ubuntu, Fedora etc.

    The next step is to use the rd command (remove directory) with the Linux folder's name to delete it:
    rd ubuntu /sOnce done, exit the command prompt by typing exit.
    Conclusion
    The ESP partition mounted as drive X won't be there anymore when you restart the system. And neither will be the Linux boot entry.
    In a YouTube video, I discussed uninstalling Ubuntu from the dual boot system, I mentioned the fact that a leftover Ubuntu entry in the boot doesn't hurt. Still, a few comments indicated that they would like everything cleaned up. Hence, this tutorial.
    💬 Is it worth the hassle to clean up the Linux boot entry after removing it from dual boot? Share it in the comments, please.
  7. by: Sreenath



    On our Arch installation video, a viewer requested a tutorial on installing Arch but with BTRFS and with encryption enabled.
    And hence this tutorial came into existence.
    I am using the official archinstall script. Though a command line tool, this guided installer allows even a moderate system user to enjoy the "greatness" of Arch Linux.
    🚧
    The method discussed here wipes out the existing operating system(s) from your computer and installs Arch Linux on it. So if you are going to follow this tutorial, make sure that you have backed up your files externally, or else you’ll lose all of them. You have been warned!
    Requirements
    Here's what I recommend for this tutorial:
    An x86_64 (i.e. 64 bit) compatible machine
    Minimum 2 GB of RAM (recommended 4-8 GB, depending upon the desktop environment or window manager you choose)
    At least 10 GB of free disk space (recommended 20 GB for basic usage with a desktop environment)
    An active internet connection
    A USB drive with a minimum 4 GB of storage capacity
    Familiarity with the Linux command line
    Once you have made sure you have all the requirements, let’s install Arch Linux.
    Step 1: Download the Arch Linux ISO
    Download the ISO from the official website. Both direct download and torrent links are available.
    Download Arch Linux
    Step 2: Create a live USB of Arch Linux
    You will have to create a live USB of Arch Linux from the ISO you just downloaded.
    You may use the Etcher GUI tool to create the live USB. It is available for both Windows and Linux.

    Etcher Live USB creation
    Alternatively, if you are on Linux, you can use the dd command to create a live USB. Replace /path/to/archlinux.iso with the path where you have downloaded the ISO file, and /dev/sdx with your USB drive in the example below. You can get your drive information using lsblk command.
    dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync Basically, choose any live USB creation tool you like.
    Step 3: Boot from the live USB
    🚧
    Do note that in some cases, you may not be able to boot from live USB with secure boot enabled. If that’s the case with you, disable secure boot first.
    Once you have created a live USB for Arch Linux, shut down your PC. Plug in your USB and boot your system. While booting, keep pressing F2, F10 or F12 key (depending upon your system) to access UEFI boot settings.
    Here, select to boot from USB or removable disk. Once you do that and the system boots, you should see an option like this:

    UEFI Boot Screen
    Select Arch Linux UEFI (x86_64) option to start the live medium.
    📋
    Legacy BIOS users should select the x86_64 BIOS option.
    Step 4: Connect to Wi-Fi
    You need an active internet connection for installing Arch Linux.
    If you have wired connection, good. Else, you need to make some effort to connect to your Wi-Fi before starting the archinstall script.
    First, in the Arch Linux live prompt, enter the command:
    iwctl This Internet Wireless daemon control is used to enrol Wi-Fi connection to your system. As soon as you enter the command, you can see that the prompt has changed to iwd.
    Here, you need to list devices to get the name of your wireless hardware device.

    List network devices
    In the above screenshot, you can see the name of my Wi-Fi device is wlan0.
    Now, use this device to scan available Wi-Fi connections in the vicinity.
    station wlan0 scan station wlan0 get-networks
    Connect to a Wi-Fi
    This will print the name of the Wi-Fi services available. Note the “Network Name”.
    To connect to the network, use the command:
    station wlan0 connect "Network Name" This will ask you to enter the Wi-Fi password. Enter it and you should be now connected to internet.
    Exit the iwd prompt using CTRL+D.
    You can check if the network is functioning using the ping command:
    ping google.com
    Ping Google
    Step 5: Pacman download settings
    Before starting the archinstall script, let's change the download limit of pacman.
    Edit the pacman configuration using:
    nano /etc/pacman.conf Here, uncomment the parellelDownload option and set a value according to your internet speed.
    If you have a decent internet speed, set the parallel download count to 10.
    📋
    On my test system, I needed to run pacman -Sy and then pacman -S archlinux-keyring (install Arch Linux keyrings) before starting the installer. Otherwise, the installer crashed with some errors.
    You may also need to read carefully what the prompt error says.
    Step 6: Start Archinstall script
    With the network connection ready, let's start the archinstall script with the command below:
    archinstall This will start the text-based arch installation script.

    Archinstall script
    Set the installation language
    The first setting in the installer is the installation language. This option sets what language is used in the Terminal User Interface.
    The latest archinstall provides a percentage value corresponding to each language, that describes how much translation has been completed.

    Installation language
    I will be going with the default English.
    Locale Settings
    You should set your locale and keyboard settings. Here, if you are OK with the defaults, you can skip to the next setting.
    💡
    Some programs like Rofi launcher may not launch if your locale is different from en_US. So, adding en_US as a locale is a good thing to avoid future headaches.

    Set keyboard and locale settings
    To change a setting, press the enter key to go inside and select individual items.

    Inside locale settings
    Mirror settings
    Press the enter key on the Mirrors in the main menu of archinstall script. This will bring you to the mirror selection section.
    Enter the Mirror Region.

    Select the Mirror Region option.
    This will provide a list of countries. You can select a country near your location for a faster network.

    Mirror Countries (Click to expand the image)
    💡
    Use the "/" key to start a search. TAB key to select/mark an entry. Once multiple entries are marked, use the ENTER key to set those countries as mirrors.
    The mirrors from selected countries will be listed. Move to “Back” and click enter.

    Country-wise mirror list
    Disk Configuration
    Now, you need to partition your disk. The archinstall has a neat mechanism to help you here.
    On the main menu, select “Disk Partition”. Inside this, select “Partitioning”.

    Select Partitioning option
    Here, use the option “Use a best-effort default partition layout”.

    Best-effort partitioning
    In the next dialog, use the TAB key to select your hard disk device and press the ENTER key.

    Select Disk
    Choose a partition type. Here, I am going with BTRFS partition. You can pick EXT4, a very well-tested file system, or XFS, f2fs etc.

    Select BTRFS File System
    On the next screen, you will be asked to use a default subvolume structure or not.
    Let's say you select “Yes”.

    Create Subvolumes True
    You will be asked to pick compression or disable copy-on-write. It is advised to select Compression, to enable a Zstd compression.

    Use Compression option
    This will create a partition for you, with subvolumes for /, /home, /var/log, /var/cache/pacman/pkg, and /.snapshots.

    Subvolume listing (Click to expand the image)
    📋
    Subvolumes are beneficial for users who want a granular control and use features like snapshots extensively.
    If you are using a simple system, and not going to use such features, you can choose to avoid the subvolumes.
    For this, pick “No” for BTRFS default subvolumes.

    Subvolume choice
    On the next screen, you should select “Use Compression” option.
    Thus, you will get a simple partition for the system.

    Simple no-subvolume partition.
    Use the "Back" button to go to the installer main menu.
    Disk Encryption
    🚧
    Disk encryption may introduce slight performance delay to the system. If your system is a casual home PC or an alternative system with no critical data, you can ignore the encryption.
    Select the Disk Encryption option from the main menu. On the dialog box, select Encryption type and pick LUKS.
    This will enable two other fields; Encryption password and Partition.
    Fill the fields. Select the partitions that need to be encrypted using the TAB key.

    Encryption overview (Click to expand the image)
    🚧
    Do not forget the encryption password. If you do, you'll lose access to the data on disk and formatting the entire operating system will be the only option for you.
    Swap
    Swap on zram is enabled by default in the installer. If needed, you can disable it.
    Bootloader
    By default, it is set to systemd-boot. This is a simple bootloader for those who expect simplicity.
    If you require familar functionality, go for GRUB bootloader.

    Select Grub Bootloader
    Hostname
    You can configure hostname here. By default, it is archlinux.
    Root password
    Next is Root password. Select it using enter key. Then enter and confirm a strong root password.

    Root Password Setting
    User creation
    It is important to create a regular user account other than root account. This is for day-to-day purposes.
    On User section, select "Add a user" option.

    Click on "Add a user"
    Here, enter the username.

    Enter username
    Now, enter a password.

    Password for user
    Confirm it by entering again when prompted. You will be asked whether the user a superuser or not.
    Make the created user superuser (administrative privileges) by selecting the “Yes” option.

    Admin privileges to regular user
    Now, use the "Confirm and exit" option.

    Exit user creation
    Profile (Desktop selection)
    The “Profile” field in the installer is where we will set desktop environments.
    Select Profile → Type. Here, select the Desktop option.

    Select Desktop Option
    On the next screen, select a desktop (desktops) using the TAB key and press enter.
    🚧
    Try to avoid installing multiple heavy desktops in one system. Like KDE Plasma and GNOME in one system is not recommended.

    Select GNOME Desktop
    💡
    You can choose one desktop like GNOME/Plasma and then choose one tiling window manager, making it install two desktop options.
    Selecting a desktop and pressing enter will bring you to the driver selection settings.
    For the test system, the installer automatically assigned all open-source drivers.

    Driver packages
    You can enter the “Graphics driver” settings and decide appropriate driver packs.

    Available drivers are listed
    Normally, you should not be doing anything on the greeter, as it will be automatically selected (GDM for GNOME, SDDM for KDE Plasma etc.)
    Audio settings
    For Audio settings, you can select Pipewire or pulse audio.

    Select Pipewire
    Kernel
    You can either go with the default Linux kernel or select multiple kernels. Learn more about kernel options in Arch Linux.
    The screenshot below shows two kernels selected, linux and linux-lts.

    Kernel selection
    Network Configuration
    In the Network Configuration settings, select "Use NetworkManager" option.

    Use NetworkManager
    Additional Packages
    If you need to install additional packages to your system, you can do it at the installation stage itself.
    Press enter key on “Additional package” option in main menu.
    Now, just enter the proper name of the packages you want to install, separated with space.
    In the screenshot below, packages like firefox, htop, fastfetch, and starship are added.

    Specify additional packages
    Optional Repositories
    You can enable multilib repositories using this setting. Select items using the TAB key and press enter. Learn about various Arch repos here.

    Additional Repositories
    Timezone
    Search and set the timezone based on your location. Asia/Kolkata for Indian Standard Time, US/Central for central timezone etc.

    Timezone settings
    Automatic Time Sync with NTP will be automatically enabled, and no need to change.
    Start the actual install
    Once all the settings have been done, you can use the Install option to start the installation procedure.

    Use Install button
    You will be asked to verify the installation configurations you have set. Once satisfied, enter on “Yes” option.

    Confirm installation (Click to expand the image)
    The process will be started, and you need to wait for some time to finish all the downloads and installations.
    Step 6: Post Installation
    Once the archinstall script finishes, it will ask you to chroot into the system for further settings. You can give NO to the question if you have nothing planned to do.

    No chroot enter
    You can now shut down the system.
    shutdown now
    Shutdown the system
    Once the system is shut down, remove the USB device from the port and boot the system.
    This will bring you to the encryption page, if you have enabled encryption. Enter the password you have set.

    Enter encryption password
    You will reach the login page. Enter the password to log in to your system.

    Log in to the system
    Enjoy Arch Linux with BTRFS and encrypted drive.
  8. by: Abhishek Kumar



    Ever since I realized that AI was shaping the future, I’ve been fascinated by its endless possibilities.
    I’m someone who enjoys testing large language models (LLMs) on my devices, and the open-source approach to data has always been my preference.
    Why? Because open-source projects empower us to have control, privacy, and customization, which is essential in today's data-driven world.
    When I decided to explore AI image generation, it felt like a natural extension of this mindset. Why rely on proprietary models when open-source alternatives offer powerful features and flexibility?
    Now, I’ll admit - I don’t have the ideal hardware to run these models locally at blazing speeds, but where there’s a will, there’s a way! Sure, CPU inference is painfully slow, but it gets the job done eventually (and hey, patience builds character, right?).
    During my research, I stumbled upon several fascinating projects. Some are fully ripe and ready to use, while others are still budding and need more time to mature.
    This article is a combined list of some of the best open-source AI image generators that you can run locally. If I’ve missed any gems, feel free to let me know in the comments!
    1. Stable diffusion 1.5 (paired with stable-diffusion webui)

    Stable Diffusion WebUI | Source: AUTOMATIC1111
    Stable Diffusion v1.5 is a powerful latent text-to-image diffusion model designed to generate photo-realistic images from textual prompts.
    Developed as an evolution of earlier versions, it was fine-tuned on a large-scale dataset, "LAION-Aesthetics v2 5+", to enhance its capabilities.
    This model is particularly well-suited for artistic, creative, and research purposes, offering impressive results with minimal computational requirements.
    Key features
    Unlock high-quality text-to-image generation with its latent diffusion process, achieving impressive results with reduced computational overhead.
    Fine-tuned on a large-scale dataset to improve its ability to generate visually appealing images.
    Supports multiple platforms and tools, including Diffusers Library for seamless integration into Python workflows, ComfyUI, Automatic1111, SD.Next, and InvokeAI for local usage.
    Enjoy efficient weight options like EMA-only weights for inference or EMA + non-EMA weights for fine-tuning tasks.
    Leverage the Pretrained Text Encoder, inspired by Google's Imagen model, to robustly understand text prompts.
    Generate artwork, design prototypes, and educational visuals with its creative applications, ideal for artistic and research purposes.
    Stable Diffusion 1.5
    2. Invoke AI

    Source: InvokeAI
    InvokeAI is a robust, open-source image generation project that takes its inspiration from upon Stable Diffusion, offering users a highly customizable experience for creating unique visuals.
    Whether you're looking to generate artwork, photorealistic images, or something more abstract, InvokeAI provides a powerful toolkit with an easy-to-use interface.
    Its flexibility is perfect for those who want more control over the creative process, especially for those working with specific intellectual property or requiring tailored workflows.
    Key Features
    Create highly detailed prompts with options for both positive and negative guidance to guide the generation process.
    Generate images based on textual descriptions, with numerous customization options for finer control.
    Use an existing image as a reference to help guide the AI in maintaining specific colors, structures, or themes.
    Access a unified canvas that enables users to modify images by regenerating certain elements, editing content or colors (inpainting), and extending the image (outpainting).
    Experiment with different models, each trained to generate specific styles or outputs, providing flexibility to match your creative needs.
    Utilize advanced customization options like Low-Rank Adaptations (LoRAs) and Textual Inversion Embeddings to focus on specific characters, styles, or concepts.
    Customize the number of de-noising steps and choose from different schedulers to optimize the generation process for quality and speed.
    Invoke AI
    3. OpenJourney

    OpenJourney is a powerful, open-source text-to-image AI art generator that allows users to create stunning visuals from text prompts.
    Launched in November 2022 by PromptHero, it has quickly gained popularity as a free alternative to MidJourney.
    Built on Stable Diffusion, OpenJourney was trained using thousands of MidJourney images from its v4 update, as well as other AI models like DALL-E 2.
    OpenJourney excels at generating photorealistic and artistic images, and its open-source nature ensures it remains accessible to a wide audience.
    Key Features
    Create stunning visuals from text prompts with its powerful text-to-image generation capabilities.
    Enjoy photorealistic and artistic images, perfect for artists, designers, and anyone looking to generate high-quality content.
    Access a library of curated prompt ideas to inspire your creativity and get started with generating art.
    Customize the style and content of your generated images by crafting specific prompts that fit your vision.
    Benefit from OpenJourney's stable diffusion-based architecture and additional training on MidJourney images for enhanced capabilities.
    Take advantage of its wide accessibility, available for free download on Hugging Face as part of a broader ecosystem of open-source AI models.
    Openjourney
    4. LocalAI (all-rounder)

    This is an example of telegram-bot created using LocalAI | Source: LocalAI
    LocalAI is an open-source, free alternative to OpenAI that enables local AI inferencing on consumer-grade hardware.
    It acts as a drop-in replacement for OpenAI's API specifications, allowing you to run large language models (LLMs), generate images, audio, and more without the need for a GPU.

    LocalAI API WebUI | Source: LocalAI-frontend
    Created and maintained by Ettore Di Giacinto, LocalAI provides a flexible and cost-effective solution for running AI models on-premise.
    Key Features
    It offers compatibility with OpenAI API specifications, making integration straightforward for developers.
    The platform operates on consumer-grade hardware, eliminating the need for a GPU.
    Supports a wide range of models and platforms, including Llama, Hugging Face, and Ollama, for diverse applications.
    Enables advanced text generation using models like Llama.cpp and transformers.
    Allows users to generate images from text prompts for creative projects.
    Includes audio features such as text-to-audio and audio-to-text with whisper.cpp.
    Facilitates embedding generation for vector database tasks like semantic search.
    Offers peer-to-peer inferencing for distributed AI processing across multiple devices.
    Integrates voice activity detection using Silero-VAD for improved audio task accuracy.
    Provides an easy-to-use WebUI for managing models without technical expertise.
    Features a model gallery for browsing and downloading models directly from platforms like Hugging Face.
    Local AI
    5. Foocus (Editor's choice)

    Source: Fooocus
    Fooocus caught my attention as one of the most user-friendly and innovative open-source image generators out there.
    I was especially drawn to its ability to work on modest hardware(like mine, my poor laptop) and can handle diverse styles, having compatibility with various models.
    It’s like having a Swiss Army knife for image generation!
    Key features
    Fooocus boasts a proprietary inpainting algorithm that delivers superior results for editing and completing images.
    With the ability to use multiple prompts simultaneously, Fooocus enriches creative possibilities and output diversity, opening up new avenues of artistic expression.
    Fooocus supports a vast array of SDXL models, accommodating styles from artistic to photorealistic, giving users endless options for experimentation.
    Users can specify aspect ratios for tailor-made image generation, ensuring that every output meets their unique requirements.
    Advanced style controls, including contrast, sharpness, and color adjustments, empower users to fine-tune generated images with precision.
    Fooocus utilizes A1111's reweighting algorithm, enhancing the influence of specific elements within prompts for more targeted results.
    The platform incorporates InsightFace technology for precise face swapping, ideal for creating personalized avatars or modifications.
    Optimized for performance across a wide range of hardware configurations, Fooocus ensures accessibility and speed, regardless of the user's setup.
    Fooocus
    Conclusion
    And there you have it! From Stable Diffusion to Fooocus, these are some of the open-source projects you can host or deploy locally to create stunning images right on your hardware.
    While I won't dive into the murky waters of how these models get trained (support your favorite creators, and remember, stealing is bad!), I can tell you this: each project offers unique capabilities and tons of creative potential.
    I like exploring local AI tools. Take this list of open source AI tools for documents.
    5 Local AI Tools to Interact With PDF and Documents
    Interact with your documents but in private with these local AI tools.
    It's FOSSAbhishek Kumar

    Now, before I get lost in a sea of stunning visuals and my laptop's fan decides to take off, I have a tiny request for you.
    What do you think? Have any hidden gems that I missed? Do you agree with my not-so-secret affection for LocalAI and Fooocus?
    Dive into the comments section and let me know your thoughts. Who knows? Your suggestion might just be the next project I test out (if my CPU allows it, of course)!
    Until next time, keep generating and keep dreaming!
  9. by: Abhishek Kumar



    Earlier, I shared how you can use Cloudflare Tunnels to access Raspberry Pi outside your home network.
    A few readers suggested using Tailscale. And indeed, this is a handy tool if your aim is to ssh into your Raspberry Pi securely from outside your home network.
    In this article, I'll be covering how you can use Tailscale VPN to remotely connect to your Raspberry Pi without the hassle of complicated network setups.
    What is Tailscale?
    Tailscale is a zero-config VPN built on the WireGuard protocol, designed to securely connect devices across different networks as if they were on the same local network.
    It simplifies private networking by establishing a mesh VPN that routes traffic between your devices, no matter where they are.

    Tailscale is available for multiple platforms, including Linux, macOS, Windows, Android, and embedded devices like the Raspberry Pi, making it a versatile solution for remote access.

    How Tailscale Works
    At the heart of Tailscale is WireGuard, a fast and modern VPN protocol.
    Tailscale uses this protocol to create encrypted connections between your devices, while managing all the networking complexities behind the scenes.
    Its key mechanics include:
    Mesh Networking: Devices in your Tailscale network (or "tailnet") connect directly to each other where possible, creating a mesh of encrypted connections.
    End-to-End Encryption: All traffic is encrypted from one device to another, ensuring privacy and security.
    NAT Traversal: Tailscale automatically handles NAT traversal and firewall configurations, so you don’t need to worry about setting up port forwarding or exposing services.
    Auto-Routing: Once your devices are connected to the tailnet, Tailscale automatically routes traffic between them as needed.
    This makes it an excellent option for remotely accessing your Raspberry Pi or any other device, eliminating the hassle of configuring VPNs, firewalls, or DNS settings.
    Installing Tailscale on Raspberry Pi
    Tailscale can be installed easily on any Linux-based system, including the Raspberry Pi. Here’s how to set it up:
    Update your system:
    sudo apt update && sudo apt upgrade -yInstall Tailscale:
    curl -fsSL https://tailscale.com/install.sh | sh
    Authenticate and connect to Tailscale:
    sudo tailscale up
    This command will generate a URL. Open this URL in your browser to log in with your Tailscale account. Once authenticated, your Raspberry Pi will be connected to your tailnet.
    Access Your Raspberry Pi: Once your Pi is part of the tailnet, you can access it remotely using its Tailscale IP address.
    ssh pi@<tailscale-ip>
    Setting Up Your Tailscale Network (Tailnet)
    Once you’ve created your Tailscale account, you’ll need to set up your tailnet and connect devices to it.
    Tailnet Creation: The good news is that Tailscale automatically creates a tailnet for you when you log in.
    There's no need for manual network setup just install Tailscale on your devices and they’ll join the same tailnet.

    Tailnet IP Addresses: Every device that joins your tailnet gets its own private, secure IP address.
    These IP addresses are assigned automatically by Tailscale and can be used to remotely access your devices.

    Managing Devices: Once a device joins your tailnet, you can view and manage it from the Tailscale web dashboard.
    From here, you can see the connection status, IP address, and name of each device. You can also remove devices or disable connections if needed.

    With your tailnet set up, you’re ready to access your Raspberry Pi from anywhere in the world, securely and without any complicated network configurations.
    Pricing
    Tailscale offers a straightforward pricing structure, starting with a Free Tier that supports up to 100 devices and includes all the key features needed for secure remote access—no credit card required.
    For users needing more, the Personal Pro plan is $5 per user per month, with unlimited devices and 1 subnet router, while the Business Plan at $10 per user per month adds advanced features like ACLs and more subnet routers.
    The Enterprise Plan offers custom solutions for larger networks.
    For most personal projects, the Free Tier provides everything you need to get started easily.

    Conclusion
    Tailscale offers a simple solution for those needing simple, secure remote access to their Raspberry Pi or any other device.
    By leveraging WireGuard for fast and encrypted connections, and simplifying the complexities of VPN setup, Tailscale allows you to focus more on your projects and less on network configuration.
    The ease of installation, makes it an excellent choice for beginners, developers, and home automation enthusiasts alike.
    If you have any suggestions for other apps or services you’d like us to cover, or if you want to share what systems you use for remote access, feel free to comment below! We'd love to hear your thoughts and experiences.
  10. by: Community



    As a developer, you've likely seen many IDEs offering AI capabilities - from standalone editors like Cursor, Void editor, and Zed, to extensions like GitHub Copilot, Continue.dev, and Qodo.
    If you enjoy tinkering with open source tools and experimenting with different approaches, Flexpilot IDE might be just what you're looking for. 🔍
    Why Flexpilot IDE? ✨
    Here are my reasons for creating and using Flexpilot:
    Bring your own AI Model 🤖: Most developers already have API keys for various LLM services. Today's LLM providers offer generous free tiers - take Google Gemini or Azure OpenAI for instance. Instead of being locked into a specific subscription, Flexpilot lets you use these existing credentials and experiment with different models as you see fit.
    Use locally hosted models 🏠: Privacy concerns in AI development are real. With advances in small language models and quantization techniques, running AI locally for simple coding tasks has become increasingly practical. Flexpilot embraces this by supporting locally hosted models, giving you complete control over your code's privacy.
    GitHub Copilot Extension marketplace 🔌: The GitHub copilot extension marketplace is one of the largest growing Agentic Marketplace as of today. Flexpilot stands alongside VSCode (i.e., with GitHub copilot) as one of only two platforms that can tap into these extensions, opening up a world of specialized AI capabilities.
    Use it inside a browser instantly 🌐: For those of us who spend time exploring GitHub codebases, the default GitHub interface can feel limiting. While vscode.dev and github.dev offer better browsing experiences, they lack AI capabilities. Flexpilot fills this gap through ide.flexpilot.ai, providing a familiar IDE experience enhanced with AI features right in your browser.
    Uses native API interfaces ⚡: Most VS Code extensions rely on webviews for their chat interfaces, which can create unnecessary overhead. Flexpilot takes a different approach by using native APIs. Think of it like using a native app versus a web app - the difference might seem subtle at first, but the improved performance and additional capabilities become apparent as you use it.
    Forked from VS Code 🔱: If you're comfortable with VS Code, you'll feel right at home with Flexpilot. It maintains all the familiar VS Code features while adding seamless AI integration. This means you get the best of both worlds - a trusted development environment with enhanced AI capabilities.
    Use Flexpilot IDE in web browser 🌐

    📋
    While the browser version offers a streamlined experience, it operates as a minimal client-only version. Due to browser limitations, it can't access nodejs or native APIs, but it handles code browsing and AI features remarkably well.
    One of Flexpilot's standout features is its browser accessibility. Similar to vscode.dev or github.dev, but with integrated AI capabilities, you can start using it immediately without installation. Try it by clicking here to browser Flexpilot IDE's source code.
    To browse any GitHub repository, simply modify the URL with your desired repo details:
    https://ide.flexpilot.ai/?folder=web-fs://github/<repo-user>/<repo-name>/<branch> For example, to explore the flexpilot-ide repo's main branch, use:
    https://ide.flexpilot.ai/?folder=web-fs://github/flexpilot-ai/flexpilot-ide/main Use Flexpilot IDE on Linux desktop 🐧 💻
    It would be better to use Flexpilot on the desktop to use its full functionality.
    Step 1: Download and install
    Head over to flexpilot.ai to download the latest Desktop version. You'll find builds for Windows, Mac, and Linux, with options for both x64 and ARM architectures.
    For Ubuntu users, the installation process is straightforward. Once you download the appropriate .deb package, Open Terminal in your download directory and run:
    For x64 systems:
    sudo dpkg -i linux-x64.deb For ARM systems:
    sudo dpkg -i linux-arm64.deb Then install dependencies:
    sudo apt-get install -f Now you can launch Flexpilot through your Applications menu or by just typing flexpilot in the terminal.
    Step 2: Connect to GitHub

    When you first launch Flexpilot, you'll notice a chat panel on the right side of the screen with a GitHub sign-in option. This connection does more than just authentication - it personalizes your experience with your GitHub profile and automatically configures GitHub Models API access, giving you immediate access to AI features.
    Step 3: Configure AI Model (Optional during initial setup) ⚡

    While GitHub Models API is pre-configured after sign-in, you might want to set up additional AI providers. Access the command palette with Ctrl+Shift+P, type Flexpilot: Configure the Language Model Provider, and customize your model settings according to your needs.
    Step 4: Start chatting with your codebase using AI 💬
    Flexpilot offers several ways to interact with AI throughout your development workflow:
    Panel Chat

    The panel chat sits conveniently on the right side of your screen. Select your preferred model, add context by referencing files or symbols, and start your AI-assisted coding journey.
    Inline Chat

    Need to modify specific code sections? Select the code, press Ctrl+I, and describe your desired changes. The AI will suggest improvements while maintaining context.
    Terminal Chat

    Working in the terminal? Press Ctrl+I while in the integrated terminal to get AI-powered command suggestions and explanations.
    Additional Features
    Flexpilot's AI integration extends beyond chat interfaces. You'll find AI assistance in code completions, multi-file edits, quick chat, symbol renaming, commit message generation, and more. Check out the official documentation for a complete feature list.
    Step 5: Configure completions

    For those who enjoy predictive code completions, configure any OpenAI API compatible completion model providers through the command palette. Select Flexpilot: Configure the Language Model Provider and choose Edit Completions Config.
    💡
    Consider trying Codestral API by Mistral - they offer a generous free tier for code completions. Sign up at console.mistral.ai/codestral without requiring payment details.
    Extend AI capabilities with Copilot Extensions 🔌

    Flexpilot's extension system represents a significant step toward the future of AI development. Type @ in your chat to see installed agents and discover new ones through the marketplace. For instance, try the MongoDB extension - just start your questions with @mongodb for database-specific assistance.
    This extension ecosystem embodies the vision of collaborative AI agents working together to solve complex development challenges.
    Conclusion
    Flexpilot IDE brings a fresh perspective to AI-assisted development. While it's still evolving, its unique features and open approach make it a valuable tool for developers who want more control over their AI assistance.
    Looking to contribute? Visit GitHub repository and join the community in shaping the future of AI-native development.
    Happy coding! 🚀

    Author Info
    Mohankumar Ramachandran is a Gen AI enthusiast, turning caffeine into code. Creator of Flexpilot.ai and open source advocate who believes AI is not just hype - it’s the future.
  11. by: Abhishek Prakash



    When you think of essential Raspberry Pi accessories, you count a screen, monitor and mouse if you want to use it as a regular desktop computer.
    How about turning it into a laptop?
    There are a few projects that work on this one. Elecrow's CrowView Note is such a device that lets you attach your Raspberry Pi or Jetson Nano or other SBCs to a laptop like interface.

    This sounds interesting, right? Let me share my experience of using CrowView Note.
    Just so that you know, Elecrow sent me CrowView Note. The views expressed here are my own and not influenced by Elecrow.
    CrowView Note: What is it?
    The CrowView Note by Elecrow is a portable, all-in-one monitor with an integrated keyboard and trackpad designed to transform SBCs like Raspberry Pi into a laptop.
    Elecrow is a Hong Kong based company that creates and sells hardware for makers and tinkerers. If you are into Raspberry Pi and SBCs, you might have come across their CrowPi kit.
    CrowView Note features a 14-inch Full-HD (1920×1080) IPS display with built-in speakers and a 5000mAh battery. There is no CPU, HDD/SSD or even camera here.

    The good thing here is that CrowView is not just limited to Raspberry Pi. It's like an external screen with a keyboard and touchpad. You attach it to any single board computer using the Mini HDMI and USB cables.
    You can also connect it to your Android smartphone (thanks to features like DeX) and gaming consoles like Steam Deck etc. You should be able to use it with digital cameras, Chromecast like devices and Blu-ray/DVD players (if you still use them).

    It is powered by a 12V DC power supply to charge the 5000mAh battery. You can disconnect direct power and run it on battery like a regular laptop.
    Technical specifications
    Here are the specs that might interest you:
    Display: 14″ IPS (1920×1080), 100% sRGB, 60Hz refresh rate, 16:9 aspect ratio, 300 nit brightness
    Ports: 1x USB-C (full), 1x USB-C (power), 2x USB-A, 1x Mini HDMI
    Audio: 2W speakers, 3.5 mm audio jack, microphone
    Power: 12V DC charging and 5000 mAh battery
    Size: 33.5cm*22cm*1.7cm
    Weight: 1.2 Kg
    The device is priced at $169 excluding shipping and custom fee. More details can be found on its official page.
    Experiencing CrowView Note
    If you look at CrowView at a glance, it looks like a regular laptop. Not a premium one. Just a regular, entry-level, inexpensive but lightweight laptop.
    You pick it up and it feels light. My Asus ZenBook and Dell XPS are almost the same weight, I guess.
    Which made me curious because I was under an impression that there are not much hardware inside it. The Raspberry Pi is attached from the side, externally. So, there is no CPU, motherboard or graphics inside, or so I am guessing.
    I am so tempted to open it up and have a peek inside it. Perhaps I'll do that after a few weeks when I have explored all other aspects of this device.

    Bottom View of CrowView Note
    There are on-board speakers at the bottom that are not great with 2W of power and I am not complaining. You get the sound feature, at least. If you want something better, connect a headphone or speaker.
    So, it is a laptop-like device but there are no processors inside it. You attach a Raspberry Pi to its left side using a dedicated bridge board. This way, you don't need to separately power the Raspberry Pi.

    CrowView with a Raspberry Pi 5 attached to it
    This connector bridge is also available for NVIDIA Jetson Nano, purchased separately for $7.
    The bridge is not necessary. You can connect to Pi or other devices using mini HDMI and USB cables. The device needs to be powered separately in this case.
    My other Pi device inside the Pironman case got successfully connected this way.
    I also connected it to my ArmSoM Sige7 SBC and it worked the same without any issues.

    CrowView Note with ArmSoM Sige7
    Display
    CrowView Note features a 14 inches, full-HD (1080p) display and there is nothing to complain about it. The IPS display looks sharp and there is no noticeable glare. The 60Hz refresh rate is pretty standard.
    Although it looks like there is a webcam in the middle, that's not the case. Which is disappointing, to be honest. I would expect a laptop to have a functioning webcam.
    Keyboard
    The keyboard is fine. Not premium but fine. Again, I am not complaining. It is definitely better than the cheap Bluetooth keyboard people usually use with SBCs.
    In fact, I feel the keyboard felt better than the official Pi keyboard. The plastic on the keyboard feels a bit rough, just like the official Pi keyboard.
    There are dedicated function keys that provide additional features to the CrowView Note:
    F1 key lets you switch between devices if you are connected via Type C on the right and HDMI/USB on the left
    F7 key gives you OSD (On-screen display) to access color settings for the display
    F11 key quickly shows the battery status
    Other than that, there are function keys for volume, media and brightness control. There is a Num-Lock key to access the number pad on the same keyboard.

    Keyboard
    Touchpad
    Touchpad has invisible left and right click buttons at the bottom. I prefer tapping finger and thankfully, you can also tap to click here. Two finger tap for right click also works in Raspberry Pi OS.
    There is one thing that does bother me here. The double click actually takes three tap. You know, you double-click on a folder or file to open it. Two taps don't work. You have to quickly tap it three times. Surprisingly, the left click button at the bottom works fine with two clicks.
    There is a thin plastic film on the touchpad. I can see bubbles at the lower part, I am not sure if it is supposed to come out. I tried taking it out but I could not grab the edge. So I left it as it is. The touchpad works, so why bother unnecessarily?

    Touchpad close up
    CrowView is flexible till 180 degrees. I am not sure if that is very helpful for practical use cases. I let you decide that.

    CrowView Note stretched at 180 degrees
    Battery
    The on-board 5000 mAh battery is not much but it is decent enough to power your Raspberry Pi for a few hours comfortably.
    The minor inconveniences
    While I was able to connect CrowView Note to my ArmSoM Sige7 through mini HDMI and USB, I could not connect my Samsung Galaxy with it. I tried opening Dex but it was expecting either wireless or HDMI connection.
    Another minor annoyance is that when I shut down the Raspberry Pi from within the system, the CrowView still runs on battery. I can see the battery indicator on and Pi's power indicator stays red (meaning it is off but still connected to a power source).
    I am guessing it doesn't consume as much power but it is not completely shut down. It can be turned off completely by pressing the on-board power button.
    I have mentioned it earlier. Lack of webcam is certainly a disappointment.
    I was also wondering about all this bridge system to connect Pi to CrowView. A Pi attached to a laptop looks odd.
    Why on the side? Why not a box where it could be plugged in at the bottom? That will make it less weird. Perhaps Elecrow wanted to expose the GPIO pins. Plugging it in at the bottom will also heat it up as there will be no scope to put in a fan without increasing the thickness of the 'laptop'.
    Also, Elecrow already has a device like this in the form of the famous CrowPi. So this time, they took a different approach.
    Conclusion
    The one thing that I am glad CrowView Note it is not confined to just Raspberry Pi. You can use it with various devices and that is indeed a good thing. If you are spending $169 for a display-keyboard setup, it only makes sense that it works for all kinds of computers you have.
    In simpler words, it adds more value to the offering.
    It is a well-thought device, too. The function keys work irrespective of the devices and operating systems. At least, that's what I noticed in my experiment with it. The idea to add dedicated buttons for battery status and source change is excellent.
    Should you buy CrowView Note? That is really up to you. See if you need or even want a gadget like this and if it is well under your budget.
    For me, the device targets a specific set of users. And considering the fact that its Crowdfunded campaign attracted 27 times of its initial funding goal, I would say there is a significant interest in CrowView Note.
    More Details on CrowView Note
    💬 Your turn now. What do you think of Elecrow's CrowView Note? Is it something you need or want?
  12. by: Community



    A new (or perhaps old) way of enjoying music for the command-line enthusiasts.
    I've seen things... seen things that you people wouldn't believe... Linux developed by governments, Linux on mobiles, and terminal audio players.
    Yes, it could be funny, but it's real, you could play music from your command-line.
    And that's just one of the many unusual things you can do in the terminal.
    Subscribe to It's FOSS YouTube Channel
    Meet Kew
    When you use the terminal more often than the graphical tools, you would perhaps enjoy playing music from the terminal.
    I came across Kew, a terminal music player fully written in C. It's small (not more than 1 MiB), with a low memory profile. You can create and play your own playlists!

    Kew music player running in the terminal
    First things go first: Installation
    It's straightforward to install Kew because it's available in the repositories of the common Linux Distributions like Arch Linux, Debian, Gentoo., etc.
    For Debian and Ubuntu-based distros, use:
    sudo apt install kewYou can use an AUR helper for Arch-based distros. Let's you use yay:
    sudo yay -S kewFor openSUSE, use zypper:
    sudo zypper install kew Exploring music with Kew
    One of the most interesting and surprising things it's that kew can search in your music directory (usually ~/Music, or you could change it) only with one word:
    kew bruceAnd you're immediately listening to the Boss!!


    You can see the album cover while you're listening to it.
    You can make a playlist based on the content of a directory (and the others inside it recursively). The playlist can be edited/modified inside Kew in the Playlist view.
    You can play the songs from the playlist using:
    kew kew.m3uDirect Functions
    Kew provides some direct functions that you can type with kew:
    <none>: You go straight to the music library.
    dir <album name>: Play a full directory.
    song <song name>: Play only a song.
    list <playlist name>: Play a playlist that you could define.
    shuffle <album name>|<playlist name>: shuffles the album or playlist
    artistA:artistB:artistC: shuffles all 3 artists.
    Just to mention some of their fantastic functions. You could get all the commands here.
    Views
    There are different views for different functions that can be accessed via a function key.
    F2 : Current Playlist

    F3 : Library view

    F4 : Track View

    Kew music player running in the terminal
    F5 : Search view

    F6 : Help

    Press F6 to get the keyboard shortcuts info
    Key bindings
    If you decided to use Kew regularly, it would be much better to use and remember various keyboard shortcuts. You can surely configure your own.
    Press F6 and it will show the key bindings:
    + (or =), keys to adjust the volume.
    ←, → or h, l keys to switch tracks.
    space, p to toggle pause.
    F2 or Shift + z to show/hide the playlist.
    F3 or Shift + x to show/hide the library.
    F4 or Shift + c to show/hide the track view.
    F5 or Shift + v to search.
    F6 or Shift + b to show/hide key bindings.
    u to update the library.
    v to toggle the spectrum visualizer.
    i to switch between using your regular color scheme or colors derived from the track cover.
    b to toggle album covers drawn in ascii or as a normal image.
    r to repeat the current song.
    s to shuffle the playlist.
    a to seek back.
    d to seek forward.
    x to save the currently loaded playlist to a m3u file in your music folder.
    Tab to switch between views.
    gg go to first song.
    number + G, g or Enter, go to specific song number in the playlist.
    g go to last song.
    . to add current song to kew.m3u (run with "kew .").
    Esc to quit.
    Conclusion
    There are several terminal audio players like Cmus, MOC - Music on Console, Musikcube, etc. Kew can be placed in this list of terminal tools.
    Written in C, with a small memory blueprint, Kew is worth trying for a terminal dweller.
    If you give it a try, do share its experience in the comments.
    Author Info

    Jose Antonio Tenés
    A Communication engineer by education, and Linux user by passion. In my spare time, I play chess, do you dare?
  13. by: Abhishek Prakash



    Pay attention if you use Amazon Kindle. Starting 26th Feb, Amazon won't allow 'Download and transfer via USB' feature anymore. That's the feature people used to download the Kindle books they purchased and convert them to EPUB or PDF to read on other eBook readers like Kobo or their computers. In other words, your Kindle purchases will be restricted completely for Kindle devices.
    If you want the control of your Kindle purchased books, take action and download the books before the deadline, remove DRM and convert them to PDF or EPUB.
    Use Calibre to Remove DRM from Kindle Books and Convert to PDF
    Own your content by removing DRM from Kindle books with the help of open source tool Calibre.
    It's FOSSSagar Sharma

    If you have hundreds of Kindle books, there is a script that can be used to download them in bulk. I have not tested it yet.
    💬 Let's see what else you get in this edition
    GNOME's website getting a makeover.
    Fedora being threatened with a lawsuit.
    openSUSE making waves with recent moves.
    And other Linux news, tips, and, of course, memes!
    This edition of FOSS Weekly is supported by ANY.RUN.
    ❇️ Sandbox to Rescue
    Infosec head at an EU bank shared insights on how they:
    Prevent hundreds of potential security incidents every year  
    Stay lean and efficient with limited resources
    Help the business avoid cyber attacks and protect clients
    Must-read for all security professionals operating on a tight budget.
    How I Used a Sandbox to Strengthen Bank’s Security
    Discover how an investment bank cut threat response time in half and prevented hundreds of security incidents with ANY.RUN’s sandbox.
    ANY.RUN's Cybersecurity BlogName

    📰 Linux and Open Source News
    GNOME's website has received a complete revamp.
    AI-powered edit predictions have arrived on Zed editor.
    openSUSE has decided to ditch AppArmor for Tumbleweed.
    They are also considering dropping Legacy BIOS support for Leap and SLES.
    Nitrux has introduced a new kernel builder tool for Debian-based distros.
    Popular system stability testing and monitoring tool OCCT has arrived on Linux.
    And we gear up for the Ubuntu 25.04 release.
    Ubuntu 25.04 Features and Release Date: Here’s What You Need to Know
    Here are the best Ubuntu 25.04 features.
    It's FOSS NewsSourav Rudra

    🧠 What We’re Thinking About
    The string of dramas in the Linux space don't seem to stop, huh? This time, it is Fedora getting threatened with a lawsuit by OBS Studio.
    Open Sue! OBS Studio Threatens Fedora With Legal Action
    Another day, another Linux-related drama. This time, it’s OBS Studio and Fedora going at it.
    It's FOSS NewsSourav Rudra

    🧮 Linux Tips, Tutorials and More
    Setting up Conky on Ubuntu is quite straightforward.
    We debunk the most common myths surrounding Linux.
    Learn how to always keep a window on top in GNOME.
    Using the night light feature on Linux Mint.
    👷 Maker's and AI Corner
    Sharing my experience of using this unusual device that converts an SBC into a laptop.
    CrowView Note: Turning Raspberry Pi into a Laptop, Sort of
    A highly crowdfunded device to add a portable workstation to your Raspberry Pi and other SBCs.
    It's FOSSAbhishek Prakash

    And a little about running a LLM locally as a coding assistant in VS Code.
    ✨ Apps highlight
    Plank Reloaded is a modern successor to the beloved Plank dock.
    Plank Reloaded is a Fresh Take on the Classic Dock Experience
    Plank Reloaded aims to refine what the classic Plank dock offered by staying simple but with a modern take on it.
    It's FOSS NewsSourav Rudra

    Who needs a GUI to listen to music when you could use kew?
    🛍️ Deal You Would Love
    15 Linux and DevOps books for just $18 plus your purchase supports Code for America organization. Get them on Humble Bundle.
    Humble Tech Book Bundle: Linux from Beginner to Professional by O’Reilly
    Learn Linux with ease using this library of coding and programming courses by O’Reilly. Pay what you want & support Code For America.
    Humble Bundle

    📽️ Video We are Creating for You
    Subscribe to It's FOSS YouTube Channel
    🧩 Quiz Time
    Call yourself a Fedora buff? Prove it by beating this quiz.
    Fedora Trivia Quiz
    An enjoyable trivia quiz about Fedora Linux.
    It's FOSSAbhishek Prakash

    💡 Quick Handy Tip
    With the Extensions List GNOME extension, you can toggle extensions, access their settings, visit its home page, etc. right from the top panel. There is no need to open an additional extension app like Extension Manager.
    You can install the Extensions List extension and get started right away.

    🤣 Meme of the Week
    We all have that friend. 😆

    🗓️ Tech Trivia
    February 15, 1999, marked Windows Refund Day, when Linux users staged protests outside Microsoft offices in the San Francisco Bay Area. The event aimed to raise awareness of Microsoft’s practice of bundling Windows with PCs and not offering refunds.
    🧑‍🤝‍🧑 FOSSverse Corner
    Pro FOSSer Neville shares his experience with Meld. Have you used it before?
    Meld is very useful for programming work
    I have been editing some R code . I work in a temporary copy, in an R workspace. I have some modifications ready… I want to add them to the new version, but I cant simply copy in the .R files, because my temporary workspace is out of date. So I have to re-edit all the changes into the new version’s files. Here is how You can see my workspace screeen with a terminal for editing the new version on the left. On the right top you see a meld screen, comparing the new version file with the te…
    It's FOSS Communitynevj

    ❤️ With love
    Share it with your Linux-using friends and encourage them to subscribe (hint: it's here).
    Share the articles in Linux Subreddits and community forums.
    Follow us on Google News and stay updated in your News feed.
    Opt for It's FOSS Plus membership and support us 🙏
    Enjoy FOSS 😄
  14. Installing Add-ons and Builds in Kodi

    by: Abhishek Kumar



    Kodi is a versatile media player that can be customized to fit your needs, and one of the best ways to personalize your experience is by installing a Kodi build.
    These builds come pre-configured with skins, addons, and settings that make your Kodi experience even better.
    In this guide, I’ll walk you through the steps of installing a Kodi build, using the Diggz Xenon Build as an example. The same method is used for installing add-ons to Kodi.
    Whether you're using Kodi on a Raspberry Pi, PC, or even an Android Box, these steps will work across all devices.
    Step 1: Enable unknown sources
    Before we can install third-party builds, we need to allow Kodi to install from unknown sources. Here's how:
    Go to Kodi's Home Screen and click the Settings Cog (top-left corner).

    Select System from the options.

    Scroll down and choose Add-ons. On the right side, toggle the Unknown Sources option to On. A warning message will pop up; click Yes to confirm.

    We’re enabling this because Kodi doesn’t allow third-party sources by default for security reasons, but since we trust the source, we’ll proceed.
    Step 2: Add the repository source
    Now, we’ll add the source for the Team Crew Repository. This is where the HomeFlix and many other amazing Kodi builds reside.
    Go back to the Kodi home screen and open Settings again. Select File Manager.

    Click on Add Source.

    In the window that appears, click on <None>.

    Enter the build URL, in our case: https://team-crew.github.io and click OK.

    Name the source with any name you prefer), then click OK.

    Step 3: Install the build repository
    Now that the source is added, we’ll install the build repository.
    Return to the Kodi Settings page and click Add-ons.

    a
    Choose Install from Zip File.

    Select the source you just added.

    Click on the zip file named repository.thevrew-X.zip (X will be the version number).

    Wait for the notification that says The Crew Repository Add-on Installed.

    Step 4: Install the build wizard
    The next step is to install the build Wizard, which will allow us to install the specific build that we want.
    From the Add-ons menu, click Install from Repository.

    Open the Build Repository i.e Crew repo in my case.

    Select Program Add-ons.

    Click on build wizard i.e. The Crew Wizard

    and then select Install.

    A prompt will appear asking you to confirm the installation of dependent addons. Click OK.

    Wait for the installation to complete. This may take a couple of minutes.

    Step 5: Install the actual build
    Now we’re ready to install the actual build itself. I like Homeflix because if its familiar interface with Netflix, thus I'll be installing that.
    Return to the Kodi home screen and go to Add-ons.

    Select Program Add-ons

    and click on Chef Wizard

    Click on Build Menu.

    Find and select your preffered build, I'm selecting Homeflix.

    Click Continue and wait for the build to download and install. This may take a few minutes, so be patient.

    Once the installation is complete, click OK to force close Kodi.
    Step 6: Restart Kodi and Enjoy!
    After the installation, simply reopen Kodi, and you’ll be greeted with the HomeFlix Build. The interface will be customized with a sleek new look, and you’ll have access to a range of addons and features.

    Conclusion
    Personally, I love the Homeflix Build by Team-Crew because it gives me that Netflix-like experience, which I find really comfortable.
    It’s clean, visually appealing, and comes with tons of addo-ns pre-installed, including some premium ones like Debrid.
    If you’re using premium services, you might need to configure those, but the build itself is a great starting point for anyone looking to get a smooth Kodi experience.
    There are plenty of builds out there, each catering to different preferences. Whether you’re into movies, TV shows, live sports, or even gaming, there’s likely a Kodi build that fits your style.
    I’ve already listed my favorite Kodi builds in a separate article, so be sure to check that out for more recommendations.
    Best Kodi Builds to Spice Up Your Experience in 2025
    Pimp your Kodi with a new skin and additional features by using one of the Kodi builds of your preference.
    It's FOSSAbhishek Kumar

    Explore a few options, experiment with different builds, and find the one that enhances your Kodi experience the most.
    Now that you’ve got your build installed, sit back, relax, and enjoy a fully customized Kodi setup. Happy streaming!
  15. 7 Linux Terminals From the Future

    by: Abhishek Prakash



    Every Linux system comes with a terminal application, i.e. terminal emulators in correct technical terms.
    For many Linux users, it doesn't matter which terminal they use. I mean, you just run commands on it and it is the commands that matter, right?
    And yet, we have a huge number of terminals available.
    While the classics are focused on providing additional features like multiplexing windows, there is a new breed of terminals that offer GPU acceleration, AI and even flaunt that they are built on Rust 🦀
    🚧
    Modern solutions bring modern problems. Some of the options here are non-foss, some may even have telemetry enabled. I advise checking these things when you try any of the mentioned terminals here.
    1. Wave Terminal

    Wave terminal
    Wave is an open-source cross-platform terminal emulator, that offers several unique features like graphical widgets. It feels like you are using an IDE like VS Code and that is in the good sense.
    Oh! It comes baked in with AI as well.
    Features of Wave Terminal
    Integrated AI chat with support for multiple models
    Built-in editor for seamlessly editing local and remote files.
    Command Blocks for isolating and monitoring individual commands with auto-close options.
    File preview, that supports Markdown, images, video, etc.
    Custom themes, background images, etc.
    Inline Web browser.
    Overall, this terminal is the best fit for those who are looking for serious application development projects.
    Since most of the features are easily accessible, a relatively newer terminal user can also enjoy all the benefits.
    Install Wave Terminal
    Ubuntu users can install Waveterm from the snap store.
    sudo snap install --classic waveterm The project also provides DEB, RPM and AppImage package formats.
    Download Wave Terminal
    2. Warp

    Warp is a Rust-based terminal emulator, that offers built-in AI features and collaboration workflows.
    The AI agent answers your query and can even run commands for you.
    Like Wave, this too has an IDE-like feel, suitable for the new breed of developers and devops who dread the dark alleys of the command line.
    The workflow feature is useful for both individuals and teams. If you have different project scenarios where you must run one command after another, you can create workflows. It improves your efficiency.
    🚧
    Warp is not open source software.
    Features of Warp Terminal
    Built-in AI features like command lookup, AI autofill, command suggestions, chat with Warp AI, etc.
    IDE-like text editing, with mouse support.
    Markdown viewer with embedded command execution support.
    Collaboration workflow with Warp Drive.
    Extensive customization possibilities.
    Install Warp Terminal
    Warp provides DEB files for Ubuntu and other Debian-based systems.
    Download Warp Terminal
    There are also RPM and AppImage packages.
    3. Cogno
    Cogno is a free and open-source terminal emulator, that offers several handy features like self-learning autocomplete.
    It is cross-platform and supports multiple shells, while allowing the user to customize according to individual preferences.
    And there are tons of themes that can be used. Perfect for a beautiful desktop screenshot to share in the communities.
    Features of Cogno
    Context-aware autocompletion.
    Configurable shortcuts.
    Support for tabs, panes, and workspaces.
    Theme editor with preview function.
    Paste history, that allows to paste items that were pasted previously.
    Install Cogno
    DEB and RPM installers are available in the official project download page.
    Download Cogno
    4. Rio
    Rio is a hardware-accelerated GPU terminal emulator, written in Rust. It is intended to run as a native desktop application as well as a browser application.

    Rio Terminal
    Features of Rio Terminal
    Hardware-accelerated, fast and written using Rust.
    Multi-windows and Split panels
    Image support: iTerm2 and Sixel image protocols.
    Supports hyperlinks.
    Vi Mode
    Install Rio Terminal
    Rio offers separate DEB files for both X11 and Wayland. SO choose according to your specific needs.
    Download Rio Terminal
    There are installation instruction available for other distributions like Arch Linux, NixOS, etc. You can find those in the official installation instructions.
    5. Contour
    Contour is a GPU-accelerated modern terminal emulator with high-DPI support. This cross-platform terminal emulator focuses on speed, efficiency, and productivity.

    Contour Terminal
    Features of Contour
    GPU-Accelerated Terminal emulator with high-DPI support.
    Font ligature support.
    Complex Unicode support, including emojis.
    Runtime configuration reload
    Key binding customization
    VT320 Host-programmable and Indicator status line support
    Install Contour Terminal
    Ubuntu and Debian-based distribution users can download the DEB file from official releases page. There is an AppImage package available as well.
    Download Contour Terminal
    If you are a Fedora user, you can install it directly from the official repository.
    sudo dnf install contour-terminal There is a detailed installation instructions for other platforms on the official documentation.
    6. Alacritty
    Alacritty is a modern terminal emulator, that offers heavy configuration capabilities. It is a GPU-accelerated terminal emulator, written on Rust.

    Alacritty Terminal
    Features of Alacritty
    GPU accelerated terminal, written in Rust.
    Hyperlink support.
    Supports running multiple terminal emulators from the same Alacritty instance
    Vi mode
    Cross-platform support.
    Install Alacritty
    Alacritty is fairly popular among Linux users. It is available in the default repositories of most distributions. For latest Ubuntu releases, you can install it using the apt command:
    sudo apt install alacritty 7. Hyper
    Hyper is a terminal emulator, built on open web standards. Written in Typescript, this extensible terminal focuses on speed and stability.
    If nothing else, it does look good. The screenshot below may not do justice.

    Hyper Terminal
    Features of Hyper
    Functionality can be extended with plugins available on NPM.
    Keymap customization
    Cross-platform support
    Customization capabilities using JavaScript configuration file.
    Install Hyper Terminal
    Hyper offers DEB and RPM files for Debian-based and Fedora-based systems, respectively.
    Download Hyper
    There is also an AppImage package available.
    Bonus: Komandi
    Komandi is an AI-powered terminal command manager. Komandi is different from usual terminal emulators. This piece of software allows the user to create and store command snippets and run them on your preferred terminal emulator.
    🚧
    Komandi is not open source software. It requires you to purchase a license. I found it interesting and hence included it here.
    Conclusion
    I feel like I should have included Ghostty in this list of modern new terminal emulators. It's the talk of the terminal town, after all. However, I haven't tried it yet. I know, I am late to board the 'Ghost ship'.
    For a long time, the only new feature was often multiple terminal windows on the same screen and it was hard to believe that the scenario can be changed. It is interesting to see new terminals coming up with innovative features in the last few years.
    💬 Tell me. Are you sticking with the classic terminals, or have switched to one of these modern ones?
  16. by: Abhishek Prakash

    If you are starting to use and learn Linux, remember this:
    Linux is not magic 🪄
    It's sudo science 🔬
    Okay...sorry... my dad jokes urges get the better of me at times 😁
    💬 Let's see what else you get in this edition
    Cropping a video in VLC (no, seriously)
    Cloning SD card in Raspberry Pi
    Modern terminals with modern features
    And other Linux news, tips, and, of course, memes!
    This edition of FOSS Weekly is supported by PikaPods.
    📰 Linux and Open Source News
    DietPi's new release supports Pi-hole v6
    Nextcloud Hub 10 is available now
    Mozilla introduces 'terms of use' for Firefox
    Answering the difficult question. Is Linux any better for gaming in 2025?
    Is Linux Ready For Mainstream Gaming In 2025?
    Linux is quietly gaining ground on Windows in the gaming space. But how well does it actually perform? Here’s what I experienced.
    It's FOSS NewsSourav Rudra
    🧠 What We’re Thinking About

    The RSS feed matters more than ever.
    Why I Still Love and Use RSS Feeds in 2025
    RSS feeds are classic. And surprisingly, they are still relevant in 2025.



    It's FOSS NewsAbhishek

    🧮 Linux Tips, Tutorials and More

    Cropping a video in VLC: is that even a thing?
    See the devices connected to your local network on Linux
    Although I prefer using yay, here are some other AUR helpers, Arch users.
    Here are some modern Linux terminals with not-so-traditional features.
    7 Linux Terminals From the Future
    Just when I thought the terminals cannot be innovated, there is an influx of modern terminal emulators with interesting new features.
    It's FOSSAbhishek Prakash


    👷 Maker's and AI Corner

    The easiest way to back up your Raspberry Pi is by cloning it. Am I right?
    Clone Existing Raspberry Pi OS to a Bigger SD Card
    Need more space on your Pi? How about cloning it to a bigger SD card? Here’s how to do that.


    It's FOSSAbhishek Prakash
    ✨ Apps highlight

    Alright! Obsidian is not open source but it is awesome.
    Obsidian Review: Notion Alternative for the Markdown Pros
    This second brain tool has taken the first brain of Markdown lovers by storm.


    It's FOSSAbhishek Prakash
    🛍️ Deal Ending Soon

    And I know there is Logseq, its open source alternative. Between you and me, we have a tutorial series planned on Logseq, covering its features and tips on using it.
    15 Linux and DevOps books for just $18 plus your purchase supports Code for America organization. Get them on Humble Bundle.
    Humble Tech Book Bundle: Linux from Beginner to Professional by O’Reilly
    Learn Linux with ease using this library of coding and programming courses by O’Reilly. Pay what you want & support Code For America.
    Humble Bundle


    📽️ Video I am Creating for You
    It's a small topic but often confuses the Arch beginners.
    Subscribe to It's FOSS YouTube Channel
    🧩 Quiz Time
    Test your Linux file permission knowledge by taking this quiz.
    Linux File Permission
    The Linux file permission is an important concept to know about. Test your knowledge.

    It's FOSSAbhishek Prakash


    💡 Quick Handy Tip
    In Nautilus file manager (GNOME's file explorer), you can use the Shortcut CTRL + S to start a quick "Select Items Matching".
    In the dialog box, enter the glob pattern matching, like *.png to select all PNG files, or *.txt to match all txt files.




    🤣 Meme of the Week
    I laughed harder than I should have on this meme. If you know Linux Mint, you would laugh too.
    And if you are interested, learn the logic behind the codenames of popular distro releases.






    🗓️ Tech Trivia
    The first web browser was introduced by Tim Berners-Lee, the creator of the World Wide Web on 26th Feb 1991. It was named WorldWideWeb at first but renamed later to Nexus to avoid the confusion.


    🧑‍🤝‍🧑 FOSSverse Corner
    FOSSers are discussing the future 🖲️
    In 50 years, what will our computers look like?
    Imagine, it’s the mid-term future. What will desktop computers look like? What specs will they have?
    It's FOSS Communityxahodo

    ❤️ With love
    Share it with your Linux-using friends and encourage them to subscribe (hint: it's here).
    Share the articles in Linux Subreddits and community forums.
    Follow us on Google News and stay updated in your News feed.
    Opt for It's FOSS Plus membership and support us 🙏
    Enjoy FOSS 😄
  17. by: Abhishek Kumar

    Kodi, by itself, is a robust and versatile media player, but it’s like a cake without frosting. The base is great, but what makes it truly delightful are the add-ons that enhance its functionality. Think of these add-ons as extensions that open up endless possibilities, from streaming movies and shows to accessing live sports, cartoons, music, and even cloud storage services.
    The best part? All the add-ons listed here work seamlessly with the latest release of Kodi with version 21 Omega.
    💡Not sure how to install an add-on on Kodi? Check out our step-by-step guide on installing Kodi add-ons to get started.
    Whether you’re a movie buff, sports fanatic, anime lover, or someone who likes to keep their media library organized, there’s an add-on here for you. Let’s explore the best Kodi add-ons across various categories to supercharge your experience!
    🚧Disclaimer: This guide is purely for educational purposes. While Kodi is a fantastic tool for media consumption, some add-ons may access copyrighted or pirated content, which could lead to legal consequences. Always use Kodi responsibly and adhere to the laws in your region.
    1. Asgard
    Asgard is a standout Kodi add-on that has stood the test of time, remaining one of the top choices for streaming across a variety of content categories.
    Whether you're in the mood for movies, TV shows, documentaries, or even sports, Asgard has you covered.
    It offers both free streaming options and premium links through Real Debrid, ensuring smooth playback and a wide selection of content.
    Key features
    Compatible with Kodi 19 and 20.
    Provides HD streaming with Real Debrid support.
    Minimal buffering for a seamless viewing experience.
    Covers a broad range of genres, from movies and TV shows to documentaries and kids' content.
    Free streaming options are solid, though premium links offer better quality.
    Asgard


    2. The Crew
    It is another multi-purpose add-on that offers an extensive library, covering everything from popular TV shows and movies to live sports events.
    It’s highly recommended by Kodi users across forums for its reliability and frequent updates and it integrates seamlessly with Real Debrid for HD streaming, and its easy compatibility with Trakt makes it a favorite among Kodi users.
    Plus, it works flawlessly across all devices, making it a go-to option for any Kodi setup.
    Key features
    Works on both old and new Kodi version (Omega).
    Real Debrid integration ensures HD-quality streams.
    Easily integrates with Trakt for syncing your watchlist and history.
    Fully compatible with any device, from desktop to mobile.
    Offers a wide selection of content, including movies, TV shows, sports, and more.
    The Crew


    3. Magic Dragon
    The Magic Dragon is part of the EzzerMacs Wizard repository and is known for its ease of use and comprehensive library, this add-on automatically scrapes the best available streaming links, ensuring a smooth and hassle-free viewing experience.
    Whether you're a casual viewer or a seasoned Kodi user, The Magic Dragon is a go-to option for accessing a variety of content.
    Key features
    Compatible with Kodi version 19, 20 and 21.
    Automatically scrapes and selects the best streaming links.
    Offers a wide range of content, including TV channels, series, movies, and music.
    Covers all video genres, from entertainment shows to music videos.
    Magic Dragon



    4. Seren
    Seren is another favorite among Kodi users who want reliable and high-quality streams. It’s part of the Nixgates repository and is known for its consistent performance.
    However, keep in mind that to fully enjoy Seren's offering, a paid Real Debrid account is necessary.
    Once you’re set up with Real Debrid, Seren provides access to a vast library of HD links for movies, TV shows, and more.
    The interface is clean and user-friendly, making it easy to browse and find content.
    Key features
    Requires a Real Debrid account for optimal functionality.
    Streams HD quality content with minimal buffering.
    Integrates effortlessly with Trakt to sync your watchlist and history.
    Offers a wide range of content across both kids' and adult genres.
    Seren

    5. Fights on demand
    Fights on Demand is known for its comprehensive library of combat sports content including boxing, wrestling, and MMA events, making it a go-to for fans of live face-offs and replays.
    It provides both free and Real Debrid streaming links from major combat sports streaming platforms, ensuring smooth and high-quality streams.
    Key features
    Streams live boxing, wrestling, and MMA events.
    Access to replays, including the latest UFC/MMA matches.
    Includes some Pay-Per-View (PPV) events.
    Offers both free and Real Debrid streaming options.
    Fight on deman



    6. Daddy Live
    Another one for sports enthusiasts and live TV lovers, Daddy Live is a fantastic Kodi add-on.
    Coming from The Crew repository, the user-friendly interface is neatly organized into two main sections: Live Sports and Live TV.
    The Live TV section features a variety of channels, including news, lifestyle, entertainment, kids, travel, nature, and more.
    Key features
    High-quality live sports and TV streams.
    Wide variety of channels: news, entertainment, sports, kids, and more.
    Simple, easy-to-navigate interface.
    Reliable and buffer-free streaming.
    Daddy Live



    7. WatchNixtoons2
    If you're a fan of anime, cartoons, or kid-friendly movies, WatchNixtoons2 is a must-have Kodi add-on.
    Hosted in the popular Crew repository, this add-on offers a fantastic collection of animated content for all ages.
    The add-on is easy to navigate, with sections such as Dubbed Anime, Subbed Anime, Popular & Ongoing Series, Movies, and Cartoons.
    One of its standout features is the ability to choose your preferred streaming resolution, allowing you to tailor the experience to your internet speed and device capabilities.
    Key features
    Extensive collection of anime, cartoons, and kid-friendly movies.
    Organized sections for dubbed, subbed, and ongoing anime series.
    Adjustable streaming resolution for optimal performance.
    Easy-to-use interface with a kid-friendly design.
    WatchNixtoons2

    Other 'must have' utility add-ons
    EZ Maintenance+
    EZ Maintenance+ is a handy Kodi program add-on designed to help you maintain your Kodi installation and keep it running smoothly.
    Whether you're dealing with errors, slow performance, or just want to tidy up your system, this add-on provides a range of useful tools.
    With EZ Maintenance+, you can easily clear Kodi’s cache, back up or restore your Kodi setup, and even perform a complete wipe to reset the app to its default state.
    Whether you're a beginner or a seasoned Kodi user, this add-on simplifies the maintenance process and helps you avoid common issues that can arise from long-term use.
    The best part? that it's entirely free and safe to use.
    EZ Maintenance+




    Trakt
    If you're not familiar with Trakt, it's a free service that helps you track the movies and TV shows you watch, share your viewing activity on social media, and even discover where certain content is available for streaming.
    While the add-on is free to use, you will need a Trakt account to take full advantage of its features.
    By connecting your Trakt account to Kodi, this add-on automatically syncs your watch history, keeping everything up to date across both platforms.
    It also offers the added benefit of cleaning up your Trakt collection to ensure it stays in sync with your Kodi library, making it a convenient tool for anyone who likes to stay organized and keep track of their viewing habits.
    Trakt





    Nord VPN

    NordVPN is a top choice for Kodi users, offering over 5,300 servers in 59 countries to bypass geo-restrictions. Its SmartPlay technology combines Smart DNS and IP addresses to ensure fast, secure streaming.
    With features like CyberSec to block malware and P2P servers for safe torrenting, NordVPN enhances your Kodi experience.
    It’s affordable, with a two-year plan costing just over $4 per month, and a 30-day money-back guarantee. NordVPN works on all major devices, allowing up to 10 simultaneous connections.
    NordVPN






    Conclusion
    Using add-ons with Kodi can truly elevate your streaming setup. Add-ons like The Crew, Seren, and Magic Dragon offer a wealth of content, from HD movies and TV shows to live sports and anime, all tailored to fit your preferences. Real Debrid support, Trakt integration, and customizable streaming resolutions make these add-ons even more powerful, especially when paired with a VPN like NordVPN for security and geo-unblocking.
    However, it's important to remember that many of these add-ons come from third-party repositories, meaning some links could lead to unlicensed content.
    Always use caution, stay informed about local laws, and consider using a VPN for added privacy. Despite these risks, the benefits of having such a vast library of content at your fingertips make Kodi a fantastic platform for media consumption. If you're looking to take your Kodi experience even further, check out my list of best Kodi builds too.
    Best Kodi Builds to Spice Up Your Experience in 2025
    Pimp your Kodi with a new skin and additional features by using one of the Kodi builds of your preference.
    It's FOSSAbhishek Kumar
  18. by: Chirag Manghnani
    Sat, 01 Mar 2025 18:16:00 +0000

    For a lot of programmers, finding a decent keyboard will significantly boost their workflow environment. Here, in this article, you’ll find a list of best keyboards for programming and a strait-laced comparison between them.
    The programmers typically spend their days’ planning, writing, and checking code in their machine. The keyboard is, therefore, one of the most critical instruments in their arsenal. The right keyboard for your necessity is not an easy task to find. This is why we are collecting the list of best programming keyboards.
    It’s not just ambient RGB lighting or a cool minimum aesthetic you get by choosing an excellent keyboard for your typeface. Gamers who play the best computer games or content developers and professional programmers, all that matters for them are pace, reactivity, precision, and comfort.
    What is that you need?
    It would be best if you had a keyboard to ease your work. A keyboard that you can type without pressure during the day and program it quickly on your computer to reach the most frequent applications. A large keyboard can reduce the amount and usability of your cursor.
    Also, a keyboard that has a comfortable plushy wrist brace, magnetically connected when you are working long hours, and having extra support for your hand. The keyboard that also has media functions for changing speed, listening, pause, or skipping songs. 
    Also Read: How to Choose Best Laptop for Programming?
    Ultimately, a keyboard that helps you swift in your daily work!
    Here are the best claviers, from the best game keyboards to the perfect ones for productivity and creation. And we have included a comparison table to make sure you get the best price available as well.
    List of Best Keyboards for Programming
    Redgear Blaze Semi-Mechanical Wired Gaming Keyboard

    The Redgear Blaze Semi-Mechanical wired Gaming keyboard comes with three colors backlit light, full aluminum body & Windows key lock for PC. The Blaze is designed especially for pro-gaming and programming. It was intended for both programmers and low or high DPI players, so the interface allows ample room to spread the mouse around. 
    In addition, for each strain, the Ergonomic float caps give you the best space. The Blaze has perfectly positioned keycaps that provide precise results whenever you click.
    Features:
    100M long-lasting switches for crisp response. 3 Color mode for different gaming setup needs. Windows key lock option to block pop-up in the game. 19 keys anti-ghost for gamers and programmers Floating keycaps with greater durability and high responsiveness
    Cosmic Byte CB-GK-10 Corona Wired Gaming Keyboard

    This keyboard comes with the wired USB interface, especially for programmers and players with 19 Anti-ghosting keys. The four levels of brightness adjustment make it convenient for users to work with peace of mind. The keyboard features different internet hotkeys and media hotkeys for easy access. 
    Features:
    Wired USB keyboard interface with Red Backlit and four levels of brightness adjustment. 19 Anti-ghosting and scratch-resistant keys. Key life with more than 10 million keystrokes.
    Zebronics Mechanical USB Wired Keyboard Max Plus

    Max Plus is a robust 104-key USB mechanical keyboard with 12 additional multimedia keys. It has 7 LED modes and five LED levels of luminosity in multicolor LEDs. For all this gaming action, it is a heavy-duty keyboard weighing 1.27 kg.
    The keyboard is sturdy and durable that gives the user a perfect tactile feel. The blue switches on this keyboard have a very detectable actuation point that helps programmers to code swiftly.
    Features:
    Full-size mechanical keyboard with 104 keys and 11 multimedia keys. Backlit keyboard with 10 LED night modes and 5 brightness adjustments levels. Double injection keycaps for a longer lifespan and a higher number of keystrokes. High-quality USB connector coupled with strong braided cable.
    TVS Gold Bharat Gold USB Keyboard

    TVS Gold Bharat programming keyboard comes with an array of 104 mechanical keys with long life switches. The keyboard also houses nine (9) vernacular languages to choose from, and also, an additional feature to select the interface – USB/PS2. Besides, the sculpted keypad gives the touch feeling with each click. 
    Features:
    Guaranteed 50 Million plus strokes per key Highly reliable, with more than 200,000 Hrs MTBF An everlasting presence with Laser Etched Characters on Keycaps The option of working in two languages Fitted with mechanical switches for long life The keyboards are all enabled with the Rupee symbols
    Zebronics Zeb-Transformer-k USB Gaming Keyboard

    The Zeb-Transformer-k is a USB gaming keyboard with a multicolor LED effect. It has integrated media control, Laser keycaps, and an aluminum body. It also has a braided cable, high-quality USB connector, and backlight LED On/Off function. The keyboard comes with the interface of USB and a power requirement of DC 5V, <200mA. Moreover, it has a button stokes life of 80 million times.
    Features:
    Integrated Media control keys and multicolor LED with 4 modes – 3 Light Mode & 1 off Mode Windows Key Enable/Disable Function and all Keys Enable/Disable Function 2-Step Stand, Laser Keycaps, Aluminum Body, Backlight LED ON/OFF function Gold Plated USB, Braided Cable, modern design, and less power consumption.
    HyperX Alloy RGB Mechanical Gaming Keyboard

    The HyperX Alloy FPS RGB is a splendid, high-performance keyboard to ensure your skills and style are fully displayed. The robust stainless steel frame makes your keyboard stable as you pull the key to function, detect errors, or swap program scripts. 
    The Alloy FPS RGB is designed for space-contracted setups, so you can maneuver easily without increasing your sensitivity to your mouse. It is also provided with a convenient USB load port and a braided, wear-resistant cable that makes portability easier.
    Features:
    RGB backlit keys with radiant lighting effects and a durable solid steel frame Advanced customization with HyperX NGENUITY software and onboard memory for three profiles Compact, ultra-portable design with detachable cable and convenient USB charge port Kailh Silver Speed mechanical key switches Game Mode, 100% Anti-ghosting, and N-Key Rollover functionalities
    Logitech G Prodigy G213 RGB Gaming Keyboard

    The Logitech Prodigy series offers advanced gaming-grade performance. Besides, for programmers, each keypress from fingers to screen is nearly instantaneous. It also accommodates the customization of five individual lighting zones with a range of over 16.8 million colors. Logitech Gaming Software can even synchronize lighting effects with other Logitech G devices for a real match system.
    Logitech G Prodigy allows users to work more quickly than with a standard keyboard thanks to high-performance keys, which combine the best touch and programming performance.
    Features:
    4x faster gaming-grade performance than standard keyboards Crisp and brilliant RGB lighting with 16.8 Million color options Spill-resistant and highly durable to handle sudden accidents Dedicated media controls to play, pause, skip and adjust in one go Programmable function keys for custom commands and integrated palm rest and adjustable feet
    HyperX Alloy HX-KB5ME2-US Core RGB Membrane Gaming Keyboard

    The HyperX Alloy Core RGB is ideal for hardcore programmers and gamers looking to improve their keyboards’ style and performance without spending much money. The Alloy Core RGB is elegant, beautiful, and reliable, making it a sweeping tech keyboard for programmers.
    The Alloy Core RGB is designed to provide stability and reliability for players and programmers who want a keyboard that will last with an enduring, strengthened plastic framework. In addition, the keyboard lock allows you to lock the keyboard without setting your whole system up.
    Features:
    Signature light Bar and dynamic RGB lighting effects 5 Zones multicolor customization option Quiet and responsive keys with anti-ghosting Durable solid frame with spill resistance Spill-resistant and dedicated media controls Quick access buttons for brightness, lighting modes, and game mode Keyboard lock mode and flexible braided cable
    Comparison Table

    Conclusion
    This was the complete list of best keyboards for programming that we think are currently the best in the Indian market. However, many other keyboards can also be included, but we have picked these best keyboards for this article.
    As a matter of fact, it depends on the users’ choice and preference for what they find best in their hands. And this list of best programming keyboards will help you to compare and come to a final consensus.
    Cheers to programming life!
    The post 8 Best Keyboards for Programming in India 2025 appeared first on The Crazy Programmer.
  19. by: Temani Afif
    Fri, 28 Feb 2025 14:03:32 +0000

    Creating a star rating component is a classic exercise in web development. It has been done and re-done many times using different techniques. We usually need a small amount of JavaScript to pull it together, but what about a CSS-only implementation? Yes, it is possible!
    Here is a demo of a CSS-only star rating component. You can click to update the rating.
    CodePen Embed Fallback Cool, right? In addition to being CSS-only, the HTML code is nothing but a single element:
    <input type="range" min="1" max="5"> An input range element is the perfect candidate here since it allows a user to select a numeric value between two boundaries (the min and max). Our goal is to style that native element and transform it into a star rating component without additional markup or any script! We will also create more components at the end, so follow along.
    Note: This article will only focus on the CSS part. While I try my best to consider UI, UX, and accessibility aspects, my component is not perfect. It may have some drawbacks (bugs, accessibility issues, etc), so please use it with caution.
    The <input> element
    You probably know it but styling native elements such as inputs is a bit tricky due to all the default browser styles and also the different internal structures. If, for example, you inspect the code of an input range you will see a different HTML between Chrome (or Safari, or Edge) and Firefox.
    Luckily, we have some common parts that I will rely on. I will target two different elements: the main element (the input itself) and the thumb element (the one you slide with your mouse to update the value).
    Our CSS will mainly look like this:
    input[type="range"] { /* styling the main element */ } input[type="range" i]::-webkit-slider-thumb { /* styling the thumb for Chrome, Safari and Edge */ } input[type="range"]::-moz-range-thumb { /* styling the thumb for Firefox */ } The only drawback is that we need to repeat the styles of the thumb element twice. Don’t try to do the following:
    input[type="range" i]::-webkit-slider-thumb, input[type="range"]::-moz-range-thumb { /* styling the thumb */ } This doesn’t work because the whole selector is invalid. Chrome & Co. don’t understand the ::-moz-* part and Firefox doesn’t understand the ::-webkit-* part. For the sake of simplicity, I will use the following selector for this article:
    input[type="range"]::thumb { /* styling the thumb */ } But the demo contains the real selectors with the duplicated styles. Enough introduction, let’s start coding!
    Styling the main element (the star shape)
    We start by defining the size:
    input[type="range"] { --s: 100px; /* control the size*/ height: var(--s); aspect-ratio: 5; appearance: none; /* remove the default browser styles */ } If we consider that each star is placed within a square area, then for a 5-star rating we need a width equal to five times the height, hence the use of aspect-ratio: 5.
    CodePen Embed Fallback That 5 value is also the value defined as the max attribute for the input element.
    <input type="range" min="1" max="5"> So, we can rely on the newly enhanced attr() function (Chrome-only at the moment) to read that value instead of manually defining it!
    input[type="range"] { --s: 100px; /* control the size*/ height: var(--s); aspect-ratio: attr(max type(<number>)); appearance: none; /* remove the default browser styles */ } Now you can control the number of stars by simply adjusting the max attribute. This is great because the max attribute is also used by the browser internally, so updating that value will control our implementation as well as the browser’s behavior.
    This enhanced version of attr() is only available in Chrome for now so all my demos will contain a fallback to help with unsupported browsers.
    The next step is to use a CSS mask to create the stars. We need the shape to repeat five times (or more depending on the max value) so the mask size should be equal to var(--s) var(--s) or var(--s) 100% or simply var(--s) since by default the height will be equal to 100%.
    input[type="range"] { --s: 100px; /* control the size*/ height: var(--s); aspect-ratio: attr(max type(<number>)); appearance: none; /* remove the default browser styles */ mask-image: /* ... */; mask-size: var(--s); } What about the mask-image property you might ask? I think it’s no surprise that I tell you it will require a few gradients, but it could also be SVG instead. This article is about creating a star-rating component but I would like to keep the star part kind of generic so you can easily replace it with any shape you want. That’s why I say “and more” in the title of this post. We will see later how using the same code structure we can get a variety of different variations.
    Here is a demo showing two different implementations for the star. One is using gradients and the other is using an SVG.
    CodePen Embed Fallback In this case, the SVG implementation looks cleaner and the code is also shorter but keep both approaches in your back pocket because a gradient implementation can do a better job in some situations.
    Styling the thumb (the selected value)
    Let’s now focus on the thumb element. Take the last demo then click the stars and notice the position of the thumb.
    CodePen Embed Fallback The good thing is that the thumb is always within the area of a given star for all the values (from min to max), but the position is different for each star. It would be good if the position is always the same, regardless of the value. Ideally, the thumb should always be at the center of the stars for consistency.
    Here is a figure to illustrate the position and how to update it.
    The lines are the position of the thumb for each value. On the left, we have the default positions where the thumb goes from the left edge to the right edge of the main element. On the right, if we restrict the position of the thumb to a smaller area by adding some spaces on the sides, we get much better alignment. That space is equal to half the size of one star, or var(--s)/2. We can use padding for this:
    input[type="range"] { --s: 100px; /* control the size */ height: var(--s); aspect-ratio: attr(max type(<number>)); padding-inline: calc(var(--s) / 2); box-sizing: border-box; appearance: none; /* remove the default browser styles */ mask-image: ...; mask-size: var(--s); } CodePen Embed Fallback It’s better but not perfect because I am not accounting for the thumb size, which means we don’t have true centering. It’s not an issue because I will make the size of the thumb very small with a width equal to 1px.
    input[type="range"]::thumb { width: 1px; height: var(--s); appearance: none; /* remove the default browser styles */ } CodePen Embed Fallback The thumb is now a thin line placed at the center of the stars. I am using a red color to highlight the position but in reality, I don’t need any color because it will be transparent.
    You may think we are still far from the final result but we are almost done! One property is missing to complete the puzzle: border-image.
    The border-image property allows us to draw decorations outside an element thanks to its outset feature. For this reason, I made the thumb small and transparent. The coloration will be done using border-image. I will use a gradient with two solid colors as the source:
    linear-gradient(90deg, gold 50%, grey 0); And we write the following:
    border-image: linear-gradient(90deg, gold 50%, grey 0) fill 0 // 0 100px; The above means that we extend the area of the border-image from each side of the element by 100px and the gradient will fill that area. In other words, each color of the gradient will cover half of that area, which is 100px.
    CodePen Embed Fallback Do you see the logic? We created a kind of overflowing coloration on each side of the thumb — a coloration that will logically follow the thumb so each time you click a star it slides into place!
    Now instead of 100px let’s use a very big value:
    CodePen Embed Fallback We are getting close! The coloration is filling all the stars but we don’t want it to be in the middle but rather across the entire selected star. For this, we update the gradient a bit and instead of using 50%, we use 50% + var(--s)/2. We add an offset equal to half the width of a star which means the first color will take more space and our star rating component is perfect!
    CodePen Embed Fallback We can still optimize the code a little where instead of defining a height for the thumb, we keep it 0 and we consider the vertical outset of border-image to spread the coloration.
    input[type="range"]::thumb{ width: 1px; border-image: linear-gradient(90deg, gold calc(50% + var(--s) / 2), grey 0) fill 0 // var(--s) 500px; appearance: none; } We can also write the gradient differently using a conic gradient instead:
    input[type="range"]::thumb{ width: 1px; border-image: conic-gradient(at calc(50% + var(--s) / 2), grey 50%, gold 0) fill 0 // var(--s) 500px; appearance: none; } I know that the syntax of border-image is not easy to grasp and I went a bit fast with the explanation. But I have a very detailed article over at Smashing Magazine where I dissect that property with a lot of examples that I invite you to read for a deeper dive into how the property works.
    The full code of our component is this:
    <input type="range" min="1" max="5"> input[type="range"] { --s: 100px; /* control the size*/ height: var(--s); aspect-ratio: attr(max type(<number>)); padding-inline: calc(var(--s) / 2); box-sizing: border-box; appearance: none; mask-image: /* ... */; /* either an SVG or gradients */ mask-size: var(--s); } input[type="range"]::thumb { width: 1px; border-image: conic-gradient(at calc(50% + var(--s) / 2), grey 50%, gold 0) fill 0//var(--s) 500px; appearance: none; } That’s all! A few lines of CSS code and we have a nice rating star component!
    Half-Star Rating
    What about having a granularity of half a star as a rating? It’s something common and we can do it with the previous code by making a few adjustments.
    First, we update the input element to increment in half steps instead of full steps:
    <input type="range" min=".5" step=".5" max="5"> By default, the step is equal to 1 but we can update it to .5 (or any value) then we update the min value to .5 as well. On the CSS side, we change the padding from var(--s)/2 to var(--s)/4, and we do the same for the offset inside the gradient.
    input[type="range"] { --s: 100px; /* control the size*/ height: var(--s); aspect-ratio: attr(max type(<number>)); padding-inline: calc(var(--s) / 4); box-sizing: border-box; appearance: none; mask-image: ...; /* either SVG or gradients */ mask-size: var(--s); } input[type="range"]::thumb{ width: 1px; border-image: conic-gradient(at calc(50% + var(--s) / 4),grey 50%, gold 0) fill 0 // var(--s) 500px; appearance: none; } The difference between the two implementations is a factor of one-half which is also the step value. That means we can use attr() and create a generic code that works for both cases.
    input[type="range"] { --s: 100px; /* control the size*/ --_s: calc(attr(step type(<number>),1) * var(--s) / 2); height: var(--s); aspect-ratio: attr(max type(<number>)); padding-inline: var(--_s); box-sizing: border-box; appearance: none; mask-image: ...; /* either an SVG or gradients */ mask-size: var(--s); } input[type="range"]::thumb{ width: 1px; border-image: conic-gradient(at calc(50% + var(--_s)),gold 50%,grey 0) fill 0//var(--s) 500px; appearance: none; } Here is a demo where modifying the step is all that you need to do to control the granularity. Don’t forget that you can also control the number of stars using the max attribute.
    CodePen Embed Fallback Using the keyboard to adjust the rating
    As you may know, we can adjust the value of an input range slider using a keyboard, so we can control the rating using the keyboard as well. That’s a good thing but there is a caveat. Due to the use of the mask property, we no longer have the default outline that indicates keyboard focus which is an accessibility concern for those who rely on keyboard input.
    For a better user experience and to make the component more accessible, it’s good to display an outline on focus. The easiest solution is to add an extra wrapper:
    <span> <input type="range" min="1" max="5"> </span> That will have an outline when the input inside has focus:
    span:has(:focus-visible) { outline: 2px solid; } Try to use your keyboard in the below example to adjust both ratings:
    CodePen Embed Fallback Another idea is to consider a more complex mask configuration that prevents hiding the outline (or any outside decoration). The trick is to start with the following:
    mask: conic-gradient(#000 0 0) exclude, conic-gradient(#000 0 0) no-clip; The no-clip keyword means that nothing from the element will be clipped (including outlines). Then we use an exclude composition with another gradient. The exclusion will hide everything inside the element while keeping what is outside visible.
    Finally, we add back the mask that creates the star shapes:
    mask: /* ... */ 0/var(--s), conic-gradient(#000 0 0) exclude, conic-gradient(#000 0 0) no-clip; I prefer using this last method because it maintains the single-element implementation but maybe your HTML structure allows you to add focus on an upper element and you can keep the mask configuration simple. It totally depends!
    CodePen Embed Fallback Credits to Ana Tudor for the last trick!
    More examples!
    As I said earlier, what we are making is more than a star rating component. You can easily update the mask value to use any shape you want.
    Here is an example where I am using an SVG of a heart instead of a star.
    CodePen Embed Fallback Why not butterflies?
    CodePen Embed Fallback This time I am using a PNG image as a mask. If you are not comfortable using SVG or gradients you can use a transparent image instead. As long as you have an SVG, a PNG, or gradients, there is no limit on what you can do with this as far as shapes go.
    We can go even further into the customization and create a volume control component like below:
    CodePen Embed Fallback I am not repeating a specific shape in that last example, but am using a complex mask configuration to create a signal shape.
    Conclusion
    We started with a star rating component and ended with a bunch of cool examples. The title could have been “How to style an input range element” because this is what we did. We upgraded a native component without any script or extra markup, and with only a few lines of CSS.
    What about you? Can you think about another fancy component using the same code structure? Share your example in the comment section!
    Article series
    A CSS-Only Star Rating Component and More! (Part 1) A CSS-Only Star Rating Component and More! (Part 2) — Coming March 7!
    A CSS-Only Star Rating Component and More! (Part 1) originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  20. by: Abhishek Prakash
    Fri, 28 Feb 2025 19:22:01 +0530

    What career opportunities are available for someone starting with Linux? I am talking about entering this field and that's why I left out roles like SRE from this list. I would appreciate your feedback on it if you are already working in the IT industry. Let's help out our juniors.
    What Kind of Job Can You Get if You Learn Linux?While there are tons of job roles created around Linux, here are the ones that you can choose for an entry level career.Linux HandbookAbhishek PrakashHere are the other highlights of this edition of LHB Linux Digest:
    Zed IDE Essential Docker commands Self hosted project management tool And more tools, tips and memes for you This edition of LHB Linux Digest newsletter is supported by PikaPods. 📖 Linux Tips and Tutorials
    Finding the biggest files and directories so that you can see what's taking all that disk space List only directories, not files (sometimes, you need to do that) Checking Crontab logs so that you can troubleshoot Learn to increase (or perhaps decrease) swap on Ubuntu Linux. This should work on other distros too if they use swap file instead of swap partition.
    How to Increase Swap Size on Ubuntu LinuxIn this quick tip, you’ll learn to increase the swap size on Ubuntu and other Linux distributions.Linux HandbookAbhishek Prakash  
     
      This post is for subscribers only
    Subscribe now Already have an account? Sign in
  21. by: Geoff Graham
    Wed, 26 Feb 2025 16:07:14 +0000

    You can find the <details> element all over the web these days. We were excited about it when it first dropped and toyed with using it as a menu back in 2019 (but probably don’t) among many other experiments. John Rhea made an entire game that combines <details> with the Popover API!
    Now that we’re 5+ years into <details>, we know more about it than ever before. I thought I’d round that information up so it’s in one place I can reference in the future without having to search the site — and other sites — to find it.
    The basic markup
    It’s a single element:
    <details> Open and close the element to toggle this content. </details> CodePen Embed Fallback That “details” label is a default. We can insert a <summary> element to come up with something custom:
    <details> <summary>Toggle content</summary> Open and close the element to toggle this content. </details> CodePen Embed Fallback From here, the world is sorta our oyster because we can stuff any HTML we want inside the element:
    <details> <summary>Toggle content</summary> <p>Open and close the element to toggle this content.</p> <img src="path/to/image.svg" alt=""> </details> The content is (sorta) searchable
    The trouble with tucking content inside an element like this is that it’s hidden by default. Early on, this was considered an inaccessible practice because the content was undetected by in-page searching (like using CMD+F on the page), but that’s since changed, at least in Chrome, which will open the <details> element and reveal the content if it discovers a matched term.
    That’s unfortunately not the case in Firefox and Safari, both of which skip the content stuffed inside a closed <details> element when doing in-page searches at the time I’m writing this. But it’s even more nuanced than that because Firefox (testing 134.0.1) matches searches when the <details> element is open, while Safari (testing 18.1) skips it altogether. That could very well change by the end of this year since searchability is one of the items being tackled in Interop 2025.
    So, as for now, it’s a good idea to keep important content out of a <details> element when possible. For example, <details> is often used as a pattern for Frequently Asked Questions, where each “question” is an expandable “answer” that reveals additional information. That might not be the best idea if that content should be searchable on the page, at least for now.
    CodePen Embed Fallback Open one at a time
    All we have to do is give each <details> a matching name attribute:
    <details name="notes"> <summary>Open Note</summary> <p> ... </p> </details> <details name="notes"> <!-- etc. --> </details> <details name="notes"> <!-- etc. --> </details> <details name="notes"> <!-- etc. --> </details> This allows the elements to behave a lot more like true accordions, where one panel collapses when another expands.
    CodePen Embed Fallback Style the marker
    The marker is that little triangle that indicates whether the <details> element is open or closed. We can use the ::marker pseudo-element to style it, though it does come with constraints, namely that all we can do is change the color and font size, at least in Chrome and Firefox which both fully support ::marker. Safari partially supports it in the sense that it works for ordered and unordered list items (e.g., li::marker), but not for <details> (e.g., summary::marker).
    Let’s look at an example that styles the markers for both <details> and an unordered list. At the time I’m writing this, Chrome and Firefox support styling the ::marker in both places, but Safari only works with the unordered list.
    CodePen Embed Fallback Notice how the ::marker selector in that last example selects both the <details> element and the unordered list element. We need to scope the selector to the <details> element if we want to target just that marker, right?
    /* This doesn't work! */ details::marker { /* styles */ } Nope! Instead, we need to scope it to the <summary> element. That’s what the marker is actually attached to.
    /* This does work */ summary::marker { /* styles */ } You might think that we can style the marker even if we were to leave the summary out of the markup. After all, HTML automatically inserts one for us by default. But that’s not the case. The <summary> element has to be present in the markup for it to match styles. You’ll see in the following demo that I’m using a generic ::marker selector that should match both <details> elements, but only the second one matches because it contains a <summary> in the HTML. Again, only Chrome and Firefox support for the time being:
    CodePen Embed Fallback You might also think that we can swap out the triangle for something else since that’s something we can absolutely do with list items by way of the list-style-type property:
    /* Does not work! */ summary::marker { list-style-type: square; } …but alas, that’s not the case. An article over at web.dev says that it does work, but I’ve been unsuccessful at getting a proper example to work in any browser.
    CodePen Embed Fallback That isn’t to say it shouldn’t work that way, but the specification isn’t explicit about it, so I have no expectations one way or another. Perhaps we’ll see an edit in a future specification that gets specific with <details> and to what extent CSS can modify the marker. Or maybe we won’t. It would be nice to have some way to chuck the triangle in favor of something else.
    And what about removing the marker altogether? All we need to do is set the content property on it with an empty string value and voilà!
    CodePen Embed Fallback Once the marker is gone, you could decide to craft your own custom marker with CSS by hooking into the <summary> element’s ::before pseudo-element.
    CodePen Embed Fallback Just take note that Safari displays both the default marker and the custom one since it does not support the ::marker pseudo-element at the time I’m writing this. You’re probably as tired reading that as I am typing it. 🤓
    Style the content
    Let’s say all you need to do is slap a background color on the content inside the <details> element. You could select the entire thing and set a background on it:
    details { background: oklch(95% 0.1812 38.35); } That’s cool, but it would be better if it only set the background color when the element is in an open state. We can use an attribute selector for that:
    details[open] { background: oklch(95% 0.1812 38.35); } OK, but what about the <summary> element? What if you don’t want that included in the background? Well, you could wrap the content in a <div> and select that instead:
    details[open] div { background: oklch(95% 0.1812 38.35); } CodePen Embed Fallback What’s even better is using the ::details-content pseudo-element as a selector. This way, we can select everything inside the <details> element without reaching for more markup:
    ::details-content { background: oklch(95% 0.1812 38.35); } There’s no need to include details in the selector since ::details-content is only ever selectable in the context of a <details> element. So, it’s like we’re implicitly writing details::details-content.
    CodePen Embed Fallback The ::details-content pseudo is still gaining browser support when I’m writing this, so it’s worth keeping an eye on it and using it cautiously in the meantime.
    Animate the opening and closing
    Click a default <details> element and it immediately snaps open and closed. I’m not opposed to that, but there are times when it might look (and feel) nice to transition like a smooth operator between the open and closed states. It used to take some clever hackery to pull this off, as Louis Hoebregts demonstrated using the Web Animations API several years back. Robin Rendle shared another way that uses a CSS animation:
    details[open] p { animation: animateDown 0.2s linear forwards; } @keyframes animateDown { 0% { opacity: 0; transform: translatey(-15px); } 100% { opacity: 1; transform: translatey(0); } } He sprinkled in a little JavaScript to make his final example fully interactive, but you get the idea:
    CodePen Embed Fallback Notice what’s happening in there. Robin selects the paragraph element inside the <details> element when it is in an open state then triggers the animation. And that animation uses clever positioning to make it happen. That’s because there’s no way to know exactly how tall the paragraph — or the parent <details> element — is when expanded. We have to use explicit sizing, padding, and positioning to pull it all together.
    But guess what? Since then, we got a big gift from CSS that allows us to animate an element from zero height to its auto (i.e., intrinsic) height, even if we don’t know the exact value of that auto height in advance. We start with zero height and clip the overflow so nothing hangs out. And since we have the ::details-content pseudo, we can directly select that rather than introducing more markup to the HTML.
    ::details-content { transition: height 0.5s ease, content-visibility 0.5s ease allow-discrete; height: 0; overflow: clip; } Now we can opt into auto-height transitions using the interpolate-size property which was created just to enable transitions to keyword values, such as auto. We set it on the :root element so that it’s available everywhere, though you could scope it directly to a more specific instance if you’d like.
    :root { interpolate-size: allow-keywords; } Next up, we select the <details> element in its open state and set the ::details-content height to auto:
    [open]::details-content { height: auto; } We can make it so that this only applies if the browser supports auto-height transitions:
    @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } And finally, we set the transition on the ::details-content pseudo to activate it:
    ::details-content { transition: height 0.5s ease; height: 0; overflow: clip; } /* Browser supports interpolate-size */ @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } CodePen Embed Fallback But wait! Notice how the animation works when opening <details>, but things snap back when closing it. Bramus notes that we need to include the content-visibility property in the transition because (1) it is implicitly set on the element and (2) it maps to a hidden state when the <details> element is closed. That’s what causes the content to snap to hidden when closing the <details>. So, let’s add content-visibility to our list of transitions:
    ::details-content { transition: height 0.5s ease, content-visibility 0.5s ease allow-discrete; height: 0; overflow: clip; } /* Browser supports interpolate-size */ @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } That’s much better:
    CodePen Embed Fallback Note the allow-discrete keyword which we need to set since content-visibility is a property that only supports discrete animations and transitions.
    Interesting tricks
    Chris has a demo that uses <details> as a system for floating footnotes in content. I forked it and added the name attribute to each footnote so that they close when another one is opened.
    CodePen Embed Fallback I mentioned John Rhea’s “Pop(over) The Balloons” game at the top of these notes:
    CodePen Embed Fallback Bramus with a slick-looking horizontal accordion forked from another example. Note how the <details> element is used as a flex container:
    CodePen Embed Fallback Chris with another clever trick that uses <details> to play and pause animated GIF image files. It’s doesn’t actually “pause” but the effect makes it seem like it does.
    CodePen Embed Fallback Ryan Trimble with styling <details> as a dropdown menu and then using anchor positioning to set where the content opens.
    CodePen Embed Fallback References
    HTML Living Standard (Section 4.11.1) by WHATWG “Quick Reminder that Details/Summary is the Easiest Way Ever to Make an Accordion” by Chris Coyier “A (terrible?) way to do footnotes in HTML” by Chris Coyier “Using <details> for Menus and Dialogs is an Interesting Idea” by Chris Coyier “Pausing a GIF with details/summary” by Chris Coyier “Exploring What the Details and Summary Elements Can Do” by Robin Rendle “More Details on <details>“ by Geoff Graham “::details-content“ by Geoff Graham “More options for styling <details>“ by Bramus “How to Animate the Details Element Using WAAPI” by Louis Hoebregts “Details and summary” by web.dev Using & Styling the Details Element originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  22. by: Geoff Graham
    Wed, 26 Feb 2025 16:07:14 +0000

    You can find the <details> element all over the web these days. We were excited about it when it first dropped and toyed with using it as a menu back in 2019 (but probably don’t) among many other experiments. John Rhea made an entire game that combines <details> with the Popover API!
    Now that we’re 5+ years into <details>, we know more about it than ever before. I thought I’d round that information up so it’s in one place I can reference in the future without having to search the site — and other sites — to find it.
    The basic markup
    It’s a single element:
    <details> Open and close the element to toggle this content. </details> CodePen Embed Fallback That “details” label is a default. We can insert a <summary> element to come up with something custom:
    <details> <summary>Toggle content</summary> Open and close the element to toggle this content. </details> CodePen Embed Fallback From here, the world is sorta our oyster because we can stuff any HTML we want inside the element:
    <details> <summary>Toggle content</summary> <p>Open and close the element to toggle this content.</p> <img src="path/to/image.svg" alt=""> </details> The content is (sorta) searchable
    The trouble with tucking content inside an element like this is that it’s hidden by default. Early on, this was considered an inaccessible practice because the content was undetected by in-page searching (like using CMD+F on the page), but that’s since changed, at least in Chrome, which will open the <details> element and reveal the content if it discovers a matched term.
    That’s unfortunately not the case in Firefox and Safari, both of which skip the content stuffed inside a closed <details> element when doing in-page searches at the time I’m writing this. But it’s even more nuanced than that because Firefox (testing 134.0.1) matches searches when the <details> element is open, while Safari (testing 18.1) skips it altogether. That could very well change by the end of this year since searchability is one of the items being tackled in Interop 2025.
    So, as for now, it’s a good idea to keep important content out of a <details> element when possible. For example, <details> is often used as a pattern for Frequently Asked Questions, where each “question” is an expandable “answer” that reveals additional information. That might not be the best idea if that content should be searchable on the page, at least for now.
    CodePen Embed Fallback Open one at a time
    All we have to do is give each <details> a matching name attribute:
    <details name="notes"> <summary>Open Note</summary> <p> ... </p> </details> <details name="notes"> <!-- etc. --> </details> <details name="notes"> <!-- etc. --> </details> <details name="notes"> <!-- etc. --> </details> This allows the elements to behave a lot more like true accordions, where one panel collapses when another expands.
    CodePen Embed Fallback Style the marker
    The marker is that little triangle that indicates whether the <details> element is open or closed. We can use the ::marker pseudo-element to style it, though it does come with constraints, namely that all we can do is change the color and font size, at least in Chrome and Firefox which both fully support ::marker. Safari partially supports it in the sense that it works for ordered and unordered list items (e.g., li::marker), but not for <details> (e.g., summary::marker).
    Let’s look at an example that styles the markers for both <details> and an unordered list. At the time I’m writing this, Chrome and Firefox support styling the ::marker in both places, but Safari only works with the unordered list.
    CodePen Embed Fallback Notice how the ::marker selector in that last example selects both the <details> element and the unordered list element. We need to scope the selector to the <details> element if we want to target just that marker, right?
    /* This doesn't work! */ details::marker { /* styles */ } Nope! Instead, we need to scope it to the <summary> element. That’s what the marker is actually attached to.
    /* This does work */ summary::marker { /* styles */ } You might think that we can style the marker even if we were to leave the summary out of the markup. After all, HTML automatically inserts one for us by default. But that’s not the case. The <summary> element has to be present in the markup for it to match styles. You’ll see in the following demo that I’m using a generic ::marker selector that should match both <details> elements, but only the second one matches because it contains a <summary> in the HTML. Again, only Chrome and Firefox support for the time being:
    CodePen Embed Fallback You might also think that we can swap out the triangle for something else since that’s something we can absolutely do with list items by way of the list-style-type property:
    /* Does not work! */ summary::marker { list-style-type: square; } …but alas, that’s not the case. An article over at web.dev says that it does work, but I’ve been unsuccessful at getting a proper example to work in any browser.
    CodePen Embed Fallback That isn’t to say it shouldn’t work that way, but the specification isn’t explicit about it, so I have no expectations one way or another. Perhaps we’ll see an edit in a future specification that gets specific with <details> and to what extent CSS can modify the marker. Or maybe we won’t. It would be nice to have some way to chuck the triangle in favor of something else.
    And what about removing the marker altogether? All we need to do is set the content property on it with an empty string value and voilà!
    CodePen Embed Fallback Once the marker is gone, you could decide to craft your own custom marker with CSS by hooking into the <summary> element’s ::before pseudo-element.
    CodePen Embed Fallback Just take note that Safari displays both the default marker and the custom one since it does not support the ::marker pseudo-element at the time I’m writing this. You’re probably as tired reading that as I am typing it. 🤓
    Style the content
    Let’s say all you need to do is slap a background color on the content inside the <details> element. You could select the entire thing and set a background on it:
    details { background: oklch(95% 0.1812 38.35); } That’s cool, but it would be better if it only set the background color when the element is in an open state. We can use an attribute selector for that:
    details[open] { background: oklch(95% 0.1812 38.35); } OK, but what about the <summary> element? What if you don’t want that included in the background? Well, you could wrap the content in a <div> and select that instead:
    details[open] div { background: oklch(95% 0.1812 38.35); } CodePen Embed Fallback What’s even better is using the ::details-content pseudo-element as a selector. This way, we can select everything inside the <details> element without reaching for more markup:
    ::details-content { background: oklch(95% 0.1812 38.35); } There’s no need to include details in the selector since ::details-content is only ever selectable in the context of a <details> element. So, it’s like we’re implicitly writing details::details-content.
    CodePen Embed Fallback The ::details-content pseudo is still gaining browser support when I’m writing this, so it’s worth keeping an eye on it and using it cautiously in the meantime.
    Animate the opening and closing
    Click a default <details> element and it immediately snaps open and closed. I’m not opposed to that, but there are times when it might look (and feel) nice to transition like a smooth operator between the open and closed states. It used to take some clever hackery to pull this off, as Louis Hoebregts demonstrated using the Web Animations API several years back. Robin Rendle shared another way that uses a CSS animation:
    details[open] p { animation: animateDown 0.2s linear forwards; } @keyframes animateDown { 0% { opacity: 0; transform: translatey(-15px); } 100% { opacity: 1; transform: translatey(0); } } He sprinkled in a little JavaScript to make his final example fully interactive, but you get the idea:
    CodePen Embed Fallback Notice what’s happening in there. Robin selects the paragraph element inside the <details> element when it is in an open state then triggers the animation. And that animation uses clever positioning to make it happen. That’s because there’s no way to know exactly how tall the paragraph — or the parent <details> element — is when expanded. We have to use explicit sizing, padding, and positioning to pull it all together.
    But guess what? Since then, we got a big gift from CSS that allows us to animate an element from zero height to its auto (i.e., intrinsic) height, even if we don’t know the exact value of that auto height in advance. We start with zero height and clip the overflow so nothing hangs out. And since we have the ::details-content pseudo, we can directly select that rather than introducing more markup to the HTML.
    ::details-content { transition: height 0.5s ease, content-visibility 0.5s ease allow-discrete; height: 0; overflow: clip; } Now we can opt into auto-height transitions using the interpolate-size property which was created just to enable transitions to keyword values, such as auto. We set it on the :root element so that it’s available everywhere, though you could scope it directly to a more specific instance if you’d like.
    :root { interpolate-size: allow-keywords; } Next up, we select the <details> element in its open state and set the ::details-content height to auto:
    [open]::details-content { height: auto; } We can make it so that this only applies if the browser supports auto-height transitions:
    @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } And finally, we set the transition on the ::details-content pseudo to activate it:
    ::details-content { transition: height 0.5s ease; height: 0; overflow: clip; } /* Browser supports interpolate-size */ @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } CodePen Embed Fallback But wait! Notice how the animation works when opening <details>, but things snap back when closing it. Bramus notes that we need to include the content-visibility property in the transition because (1) it is implicitly set on the element and (2) it maps to a hidden state when the <details> element is closed. That’s what causes the content to snap to hidden when closing the <details>. So, let’s add content-visibility to our list of transitions:
    ::details-content { transition: height 0.5s ease, content-visibility 0.5s ease allow-discrete; height: 0; overflow: clip; } /* Browser supports interpolate-size */ @supports (interpolate-size: allow-keywords) { :root { interpolate-size: allow-keywords; } [open]::details-content { height: auto; } } That’s much better:
    CodePen Embed Fallback Note the allow-discrete keyword which we need to set since content-visibility is a property that only supports discrete animations and transitions.
    Interesting tricks
    Chris has a demo that uses <details> as a system for floating footnotes in content. I forked it and added the name attribute to each footnote so that they close when another one is opened.
    CodePen Embed Fallback I mentioned John Rhea’s “Pop(over) The Balloons” game at the top of these notes:
    CodePen Embed Fallback Bramus with a slick-looking horizontal accordion forked from another example. Note how the <details> element is used as a flex container:
    CodePen Embed Fallback Chris with another clever trick that uses <details> to play and pause animated GIF image files. It’s doesn’t actually “pause” but the effect makes it seem like it does.
    CodePen Embed Fallback Ryan Trimble with styling <details> as a dropdown menu and then using anchor positioning to set where the content opens.
    CodePen Embed Fallback References
    HTML Living Standard (Section 4.11.1) by WHATWG “Quick Reminder that Details/Summary is the Easiest Way Ever to Make an Accordion” by Chris Coyier “A (terrible?) way to do footnotes in HTML” by Chris Coyier “Using <details> for Menus and Dialogs is an Interesting Idea” by Chris Coyier “Pausing a GIF with details/summary” by Chris Coyier “Exploring What the Details and Summary Elements Can Do” by Robin Rendle “More Details on <details>“ by Geoff Graham “::details-content“ by Geoff Graham “More options for styling <details>“ by Bramus “How to Animate the Details Element Using WAAPI” by Louis Hoebregts “Details and summary” by web.dev Using & Styling the Details Element originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  23. Chris’ Corner: onChange

    by: Chris Coyier
    Mon, 24 Feb 2025 18:00:59 +0000

    There is an awful lot of change on the web. Sometimes the languages we use to build for the web change. Some of it comes from browsers themselves changing. An awful lot of it comes from ourselves. We change UIs and not always for the better. We build new tools. We see greener grass and we lust after it and chase it.
    Marco Rogers calls some of it a treadmill and has a hot take:
    Personally I wouldn’t cast as harsh of judgement that rewriting a front end is automatically wasted energy. Revisiting code, whatever the circumstances, can have helpful effects, like the person doing it actually understanding it. But I take the point. The success of a product likely has fairly little to do with the front-end framework at play and change for change sake isn’t exactly an efficient way to achieve success.
    The web doesn’t just have fits and spurts of change, it’s ever-changing. It’s just the nature of the teams and processes put around specs and browsers and the whole ecosystem really. The cool part about the web platform evolving is that you don’t have to care immediately. The web, gosh bless it, tends to be forgivingly backwards compatible. So staying on top of change largely means taking advantage of things that are easier to do now or a capability that didn’t exist before.
    One take on understanding evolving web features is Baseline, which is Google’s take on essentially a badge that shows you how practical it is to use a feature at a glance. Rachel Andrew’s talk Browser Support and The Rapidly Changing Web gets into this, but sadly I haven’t found a video of it yet. I have some critiques of Baseline (namely that it doesn’t help you know if a feature is usable through progressive enhancement or not) but largely it’s a win.
    Sometimes changes in a language cause massive sweeping movement. An example of this is the advent of ESM (ECMAScript Modules), that is, import and export in JavaScript. Seems small — is not small. Particularly because JavaScript also means Node ‘n’ friends, which needed an import mechanism, thus support require() (CJS format) for umpteen years, which is a bit of a different beast. So if you want to support ESM, that’s the future, but it means shipping Node modules in the dual CJS/EMS format, which is annoying work at best. Anthony Fu weighs in here with Move on to ESM-only, a controversial take, but much less so now that Node ships with the ability to require() an ESM file (vice versa would be even more magical).
    In some situations, sticking with the old actually does come with some cost. For instance, shipping “old” JavaScript (i.e. ES5) is slower, larger, and requires more compilation work. Philip Walton digs into the data there and has a solid conclusion:
    Best case scenario there is to compile code that looks at your chosen browser support targets, so it can evolve as the world does.
  24. by: Lee Meyer
    Mon, 24 Feb 2025 13:42:16 +0000

    Editor’s note: This article is outside the typical range of topics we normally cover around here and touches on sensitive topics including recollections from an abusive marriage. It doesn’t delve into much detail about the abuse and ends on a positive note. Thanks to Lee for sharing his take on the intersection between life and web development and for allowing us to gain professional insights from his personal life.
    When my dad was alive, he used to say that work and home life should exist in separate “watertight compartments.” I shouldn’t bring work home or my home life to work. There’s the quote misattributed to Mark Twain about a dad seeming to magically grow from a fool to a wise man in the few years it took the son to grow from a teen to an adult — but in my case, the older I get, the more I question my dad’s advice.
    It’s easy to romanticize someone in death — but when my dad wasn’t busy yelling, gambling the rent money, or disappearing to another state, his presence was like an AI simulating a father, throwing around words that sounded like a thing to say from a dad, but not helpful if you stopped to think about his statements for more than a minute.
    Let’s state the obvious: you shouldn’t do your personal life at work or work too much overtime when your family needs you. But you don’t need the watertight compartments metaphor to understand that. The way he said it hinted at something more complicated and awful — it was as though he wanted me to have a split personality. I shouldn’t be a developer at home, especially around him because he couldn’t relate, since I got my programming genes from my mum. And he didn’t think I should pour too much of myself into my dev work. The grain of truth was that even if you love your job, it can’t love you back. Yet what I’m hooked on isn’t one job, but the power of code and language.
    The lonely coder seems to free his mind at night
    Maybe my dad’s platitudinous advice to maintain a distance between my identity and my work would be practicable to a bricklayer or a president — but it’s poorly suited to someone whose brain is wired for web development. The job is so multidisciplinary it defies being put in a box you can leave at the office. That puzzle at work only makes sense because of a comment the person you love said before bedtime about the usability of that mobile game they play. It turns out the app is a competitor to the next company you join, as though the narrator of your life planted the earlier scene like a Chekov’s gun plot point, the relevance of which is revealed when you have that “a-ha” moment at work.
    Meanwhile, existence is so online that as you try to unwind, you can’t unsee the matrix you helped create, even when it’s well past 5 p.m. The user interface you are building wants you to be a psychologist, an artist, and a scientist. It demands the best of every part of you. The answer about implementing a complex user flow elegantly may only come to you in a dream.
    Don’t feel too bad if it’s the wrong answer. Douglas Crockford believes it’s a miracle we can code at all. He postulates that the mystery of how the human brain can program when he sees no evolutionary basis is why we haven’t hit the singularity. If we understood how our brains create software, we could build an AI that can program well enough to make a program better than itself. It could do that recursively till we have an AI smarter than us.
    And yet so far the best we have is the likes of the aptly named Github Copilot. The branding captures that we haven’t hit the singularity so much as a duality, in which humanity hopefully harmonizes with what Noam Chomsky calls a “kind of super-autocomplete,” the same way autotune used right can make a good singer sound better, or it can make us all sound like the same robot. We can barely get our code working even now that we have all evolved into AI-augmented cyborgs, but we also can’t seem to switch off our dev mindset at will.
    My dev brain has no “off” switch — is that a bug or a feature?
    What if the ability to program represents a different category of intelligence than we can measure with IQ tests, similar to neurodivergence, which carries unique strengths and weaknesses? I once read a study in which the researchers devised a test that appeared to accurately predict which first-year computer science students would be able to learn to program. They concluded that an aptitude for programming correlates with a “comfort with meaninglessness.” The researchers said that to write a program you have to “accept that whatever you might want the program to mean, the machine will blindly follow its meaningless rules and come to some meaningless conclusion. In the test, the consistent group showed a pre-acceptance of this fact.”
    The realization is dangerous, as both George Orwell and Philip K. Dick warned us. If you can control what words mean, you can control people and not just machines. If you have been swiping on Tinder and take a moment to sit with the feelings you associate with the phrases “swipe right” and “swipe left,” you find your emotional responses reveal that the app’s visual language has taught you what is good and what is bad. This recalls the scene in “Through the Looking-Glass,” in which Humpty Dumpty tells Alice that words mean what he wants them to mean. Humpty’s not the nicest dude. The Alice books can be interpreted as Dodgson’s critique of the Victorian education system which the author thought robbed children of their imagination, and Humpty makes his comments about language in a “scornful tone,” as though Alice should not only accept what he says, but she should know it without being told. To use a term that itself means different things to different people, Humpty is gaslighting Alice. At least he’s more transparent about it than modern gaslighters, and there’s a funny xkcd in which Alice uses Humpty’s logic against him to take all his possessions.
    Perhaps the ability to shape reality by modifying the consensus on what words mean isn’t inherently good or bad, but in itself “meaningless,” just something that is true. It’s probably not a coincidence the person who coined the phrases “the map is not the territory” and “the word is not the thing” was an engineer. What we do with this knowledge depends on our moral compass, much like someone with a penchant for cutting people up could choose to be a surgeon or a serial killer.
    Toxic humans are like blackhat hackers
    For around seven years, I was with a person who was psychologically and physically abusive. Abuse boils down to violating boundaries to gain control. As awful as that was, I do not think the person was irrational. There is a natural appeal for human beings pushing boundaries to get what they want. Kids do that naturally, for example, and pushing boundaries by making CSS do things it doesn’t want to is the premise of my articles on CSS-Tricks. I try to create something positive with my impulse to exploit the rules, which I hope makes the world slightly more illuminated. However, to understand those who would do us harm, we must first accept that their core motivation meets a relatable human need, albeit in unacceptable ways.
    For instance, more than a decade ago, the former hosting provider for CSS-Tricks was hacked. Chris Coyier received a reactivation notice for his domain name indicating the primary email for his account had changed to someone else’s email address. After this was resolved and the smoke cleared, Chris interviewed the hacker to understand how social engineering was used for the attack — but he also wanted to understand the hacker’s motivations. “Earl Drudge” (ananagram for “drug dealer”) explained that it was nothing personal that led him to target Chris — but Earl does things for“money and attention” and Chris reflected that “as different as the ways that we choose to spend our time are I do things for money and attention also, which makes us not entirely different at our core.”
    It reminds me of the trope that cops and criminals share many personality traits. Everyone who works in technology shares the mindset that allows me to bend the meaning and assumptions within technology to my will, which is why the qualifiers of blackhat and whitehat exist. They are two sides of the same coin. However, the utility of applying the rule-bending mindset to life itself has been recognized in the popularization of the term “life hack.” Hopefully, we are whitehat life hackers. A life hack is like discovering emergent gameplay that is a logical if unexpected consequence of what occurs in nature. It’s a conscious form of human evolution.
    If you’ve worked on a popular website, you will find a surprisingly high percentage of people follow the rules as long as you explain properly. Then again a large percentage will ignore the rules out of laziness or ignorance rather than malice. Then there are hackers and developers, who want to understand how the rules can be used to our advantage, or we are just curious what happens when we don’t follow the rules. When my seven-year-old does his online math, he sometimes deliberately enters the wrong answer, to see what animation triggers. This is a benign form of the hacker mentality — but now it’s time to talk about my experience with a lifehacker of the blackhat variety, who liked experimenting with my deepest insecurities because exploiting them served her purpose.
    Verbal abuse is like a cross-site scripting attack
    William Faulkner wrote that “the past is never dead. It’s not even past.” Although I now share my life with a person who is kind, supportive, and fascinating, I’m arguably still trapped in the previous, abusive relationship, because I have children with that person. Sometimes you can’t control who you receive input from, but recognizing the potential for that input to be malicious and then taking control of how it is interpreted is how we defend against both cross-site scriptingand verbal abuse.
    For example, my ex would input the word “stupid” and plenty of other names I can’t share on this blog. She would scream this into my consciousness again and again. It is just a word, like a malicious piece of JavaScript a user might save into your website. It’s a set of characters with no inherent meaning. The way you allow it to be interpreted does the damage. When the “stupid” script ran in my brain, it was laden with meanings and assumptions in the way I interpreted it, like a keyword in a high-level language that has been designed to represent a set of lower-level instructions:
    Intelligence was conflated with my self-worth. I believed she would not say the hurtful things after her tearful promises not to say them again once she was aware it hurt me, as though she was not aware the first time. I felt trapped being called names because I believed the relationship was something I needed. I believed the input at face value that my actual intelligence was the issue, rather than the power my ex gained over me by generating the reaction she wanted from me by her saying one magic word. Patching the vulnerabilities in your psyche
    My psychologist pointed out that the ex likely knew I was not stupid but the intent was to damage my self-worth to make me easy to control. To acknowledge my strengths would not achieve that. I also think my brand of intelligence isn’t the type she values. For instance, the strengths that make me capable of being a software engineer are invisible to my abuser. Ultimately it’s irrelevant whether she believed what she was shouting — because the purpose was the effect her words had, rather than their surface-level meaning. The vulnerability she exploited was that I treated her input as a first-class citizen, able to execute with the same privileges I had given to the scripts I had written for myself. Once I sanitized that input using therapy and self-hypnosis, I stopped allowing her malicious scripts to have the same importance as the scripts I had written for myself, because she didn’t deserve that privilege. The untruths about myself have lost their power — I can still review them like an inert block of JavaScript but they can’t hijack my self-worth.
    Like Alice using Humpty Dumpty’s logic against him in the xkcd cartoon, I showed that if words inherently have no meaning, there is no reason I can’t reengineer myself so that my meanings for the words trump how the abuser wanted me to use them to hurt myself and make me question my reality. The sanitized version of the “stupid” script rewrites those statements to:
    I want to hurt you. I want to get what I want from you. I want to lower your self-worth so you will believe I am better than you so you won’t leave. When you translate it like that, it has nothing to do with actual intelligence, and I’m secure enough to jokingly call myself an idiot in my previous article. It’s not that I’m colluding with the ghost of my ex in putting myself down. Rather, it’s a way of permitting myself not to be perfect because somewhere in human fallibility lies our ability to achieve what a computer can’t. I once worked with a manager who when I had a bug would say, “That’s good, at least you know you’re not a robot.” Being an idiot makes what I’ve achieved with CSS seem more beautiful because I work around not just the limitations in technology, but also my limitations. Some people won’t like it, or won’t get it. I have made peace with that.
    We never expose ourselves to needless risk, but we must stay in our lane, assuming malicious input will keep trying to find its way in. The motive for that input is the malicious user’s journey, not ours. We limit the attack surface and spend our energy understanding how to protect ourselves rather than dwelling on how malicious people shouldn’t attempt what they will attempt.
    Trauma and selection processes
    In my new relationship, there was a stage in which my partner said that dating me was starting to feel like “a job interview that never ends” because I would endlessly vet her to avoid choosing someone who would hurt me again. The job interview analogy was sadly apt. I’ve had interviews in which the process maps out the scars from how the organization has previously inadvertently allowed negative forces to enter. The horror trope in which evil has to be invited reflects the truth that we unknowingly open our door to mistreatment and negativity.
    My musings are not to be confused with victim blaming, but abusers can only abuse the power we give them. Therefore at some point, an interviewer may ask a question about what you would do with the power they are mulling handing you —and a web developer requires a lot of trust from a company. The interviewer will explain: “I ask because we’ve seen people do [X].” You can bet they are thinking of a specific person who did damage in the past. That knowledge might help you not to take the grilling personally. They probably didn’t give four interviews and an elaborate React coding challenge to the first few developers that helped get their company off the ground. However, at a different level of maturity, an organization or a person will evolve in what they need from a new person. We can’t hold that against them. Similar to a startup that only exists based on a bunch of ill-considered high-risk decisions, my relationship with my kids is more treasured than anything I own, and yet it all came from the worst mistake I ever made. My driver’s license said I was 30 but emotionally, I was unqualified to make the right decision for my future self, much like if you review your code from a year ago, it’s a good sign if you question what kind of idiot wrote it.
    As determined as I was not to repeat that kind of mistake, my partner’s point about seeming to perpetually interview her was this: no matter how much older and wiser we think we are, letting a new person into our lives is ultimately always a leap of faith, on both sides of the equation.
    Taking a planned plunge
    Releasing a website into the wild represents another kind of leap of faith — but if you imagine an air-gapped machine with the best website in the world sitting on it where no human can access it, that has less value than the most primitive contact form that delivers value to a handful of users. My gambling dad may have put his appetite for risk to poor use. But it’s important to take calculated risks and trust that we can establish boundaries to limit the damage a bad actor can do, rather than kid ourselves that it’s possible to preempt risk entirely.
    Hard things, you either survive them or you don’t. Getting security wrong can pose an existential threat to a company while compromising on psychological safety can pose an existential threat to a person. Yet there’s a reason “being vulnerable” is a positive phrase. When we create public-facing websites, it’s our job to balance the paradox of opening ourselves up to the world while doing everything to mitigate the risks. I decided to risk being vulnerable with you today because I hope it might help you see dev and life differently. So, I put aside the CodePens to get a little more personal, and if I’m right that front-end coding needs every part of your psyche to succeed, I hope you will permit dev to change your life, and your life experiences to change the way you do dev. I have faith that you’ll create something positive in both realms.
    Applying the Web Dev Mindset to Dealing With Life Challenges originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  25. ResumeBuild

    by: aiparabellum.com
    Mon, 24 Feb 2025 02:44:10 +0000

    ResumeBuild.ai is a cutting-edge AI-powered resume builder trusted by over 1.4 million users globally. Designed to streamline the resume creation process, it simplifies job applications by crafting ATS-optimized resumes that increase your chances of landing interviews. Whether you’re a student, a professional looking for a career change, or an executive, ResumeBuild offers an intuitive platform to create tailored resumes, cover letters, resignation letters, and more. Powered by advanced GPT technology, it ensures your resume stands out and aligns with industry-specific best practices.
    Features of ResumeBuild AI
    ResumeBuild.ai offers a variety of features to help you create the perfect resume and enhance your job-seeking journey:
    AI Resume Writer: Generates professional, ATS-friendly resumes using AI technology to highlight your achievements. Mock Interview Tool: Prepares you for interviews by simulating real-world interview questions (coming soon). Job Search Assistance: Matches your resume with top hiring companies to make your job search more efficient (coming soon). Resume Optimizer: Analyzes your resume for missing content, overused buzzwords, and opportunities for improvement. AI Keyword Targeting: Enhances your resume by including industry-specific keywords to improve your interview rate. Real-Time Content Analysis: Identifies and corrects content pitfalls for a polished resume. Customizable Resume Templates: Access over 340+ templates tailored to various industries, including engineering, design, business, and medical fields. AI Cover Letter & Resignation Letter Generator: Creates personalized letters for specific job applications or career transitions. ATS Optimization: Ensures your resume is compatible with applicant tracking systems used by recruiters. Version Management & LinkedIn Importing: Easily manage multiple resume versions and import data directly from your LinkedIn profile. How It Works
    Using ResumeBuild.ai is simple and user-friendly:
    Select a Template: Choose from a wide range of free and premium templates designed to suit your industry and career level. Input Your Details: Add your personal information, professional experience, skills, and achievements. Customize with AI: Use the AI-powered tools to generate or refine bullet points, target keywords, and format your resume. Optimize Your Resume: Let the AI analyze your resume for ATS compliance and suggest improvements. Download and Apply: Export your resume in formats like PDF or DOCX and start applying for jobs. Benefits of ResumeBuild AI
    Using ResumeBuild.ai provides several advantages:
    Saves Time: Automates the resume creation process, saving hours of manual work. ATS-Friendly: Ensures your resume passes applicant tracking systems, increasing your chances of being shortlisted. Professional Quality: Delivers polished, industry-standard resumes tailored to your career goals. Enhanced Job Search: Boosts your interview rate with AI-optimized content and targeted keywords. Ease of Use: Intuitive interface makes it accessible for users of all skill levels. Customizable Options: Offers flexibility to create resumes for various industries and roles. Pricing
    ResumeBuild.ai offers several pricing plans to meet different user needs:
    Basic Plan (Free): Access to all basic features Standard resume formats One resume creation Three downloads Pro Plan ($29/month): Unlimited AI features and credits Unlimited downloads and resume creations Monthly resume reviews Priority support 30-day money-back guarantee Lifetime Plan ($129): One-time payment for lifetime access Unlimited AI features and downloads Priority support 30-day money-back guarantee Review
    ResumeBuild.ai has received rave reviews from users, with a stellar 4.8-star rating. Here’s what users are saying:
    “ResumeBuild has helped me a ton! It’s easy to customize for different job descriptions and gives an amazing edge in applications.” – Vivek T. A. “I used ResumeBuild.ai to create a new resume. It was simple, and the result was professional-looking. Two thumbs up!” – Jennifer F. “Really streamlined the resume-making process and made it effortless to build mine. Highly recommend!” – Niloufer T. “Great tool. I’ve seen a 300% increase in interview responses since using ResumeBuild.” – Harry S. These testimonials highlight the platform’s efficiency, user-friendliness, and ability to deliver results.
    Conclusion
    ResumeBuild.ai is the ultimate AI-powered resume builder for crafting professional, ATS-optimized resumes that stand out. With its intuitive interface, comprehensive features, and proven success rate, it serves as a one-stop solution for job seekers across industries. Whether you’re looking for your first job or aiming for career advancement, ResumeBuild.ai ensures your resume reflects your skills and achievements effectively. Start creating your resume today and secure your dream job with ease.
    Visit Website The post ResumeBuild appeared first on AI Parabellum.

Important Information

Terms of Use Privacy Policy Guidelines We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.