Jump to content

Blogger

Blog Bot
  • Joined

  • Last visited

    Never

Blog Entries posted by Blogger

  1. by: Juan Diego Rodríguez
    Thu, 05 Jun 2025 11:13:00 +0000

    The State of CSS 2025 Survey dropped a few days ago, and besides waiting for the results, it’s exciting to see a lot of the new things shipped to CSS over the past year reflected in the questions. To be specific, the next survey covers the following features:
    calc-size() shape() Scroll-driven animations Container scroll-state queries CSS Carousels text-box-edge and text-box-trim field-sizing ::target-text @function display: contents Advanced attr() if() sibling-index() and sibling-count() Again, a lot!
    However, I think the most important questions (regarding CSS) are asked at the end of each section. I am talking about the “What are your top CSS pain points related to ______?” questions. These sections are optional, but help user agents and the CSS Working Group know what they should focus on next.
    By nature of comments, those respondents with strong opinions are most likely to fill them in, skewing data towards issues that maybe the majority doesn’t have. So, even if you don’t have a hard-set view on a CSS pain point, I encourage you to fill them — even with your mild annoyances.
    The State of CSS 2025 Survey is out! originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  2. by: Abhishek Prakash
    Thu, 05 Jun 2025 04:30:10 GMT

    There is some interesting news from this month's desktop Linux market share update.
    Linux has reached an all-time high market share of 2.69% in the latest Steam Survey. Also, CachyOS has found itself a spot in Linux-specific desktop market share in Steam Survey.
    💬 Let's see what else you get in this edition
    Ubuntu keyboard shortcuts. The World Bank open sourcing a tool. Swiss privacy debacle. Obsidian plugins suggestion. And other Linux news, tips, and, of course, memes! This edition of FOSS Weekly is supported by ANY.RUN. 🌟 OtterCookie: New Malware from North Korea Targets Tech and Finance Professionals
    Lazarus Group is currently distributing a stealer malware in fake job offer attacks. Here's how it goes:
    Lure via LinkedIn: Attackers offer freelance work to fix a minor DApp bug. Triggered Failure: An intentional app error fetches and executes malicious code from external API Malware Execution: OtterCookie infects the system, stealing victims' browser data and crypto wallets. Read detailed analysis on ANY.RUN's blog.
    OtterCookie: Analysis of New Lazarus Group MalwareExplore in-depth technical analysis of OtterCookie, a new North Korean Lazarus APT malware that steals victims’ crypto and credentials.ANY.RUN's Cybersecurity BlogMauro Eldritch📰 Linux and Open Source News
    The World Bank has open sourced Metadata Editor. KDE is getting its own GNOME Boxes counterpart. Ubuntu is adopting the monthly snapshots approach. Organic Maps has been forked over governance concerns. PeerTube is raising funds for further development of its mobile app. /e/OS 3.0 has debuted with refined parental controls and new privacy tools. A recent kernel drama sees Linus Torvalds catch a string of suspicious pull requests. Arch Linux is working on a way to handle sponsorships.
    Sponsorships Seem to Be Coming to Arch Linux!A proposal looks to introduce a transparent sponsorship process to Arch Linux.It's FOSS NewsSourav Rudra🧠 What We’re Thinking About
    Switzerland is going down a very dystopian path. I hope the law doesn't pass.
    No More Safe Haven for Privacy? Switzerland Drifts Toward a Surveillance State Due to New Controversial LawsProposed privacy law changes, if passed in parliament, threaten Switzerland’s reputation as a privacy haven.It's FOSS NewsGourav Patnaik🧮 Linux Tips, Tutorials and More
    You can easily run JavaScript in VS Code. Here are 13 tips and tweaks to get more out of Konsole. Tweaks to get more out of Nautilus file manager. Plugins to enhance your Obsidian knowledge base. If you are up for an experiment, then you could try running macOS on Linux. I Installed macOS on Linux in a VM (for fun sake)Installing macOS as a virtual machine in a Linux system? Well, let’s do it for the sake of some ‘virtual fun’It's FOSSPranav Krishna Desktop Linux is mostly neglected by the industry but loved by the community. For the past 12 years, It's FOSS has been helping people use Linux on their personal computers. And we are now facing the existential threat from AI models stealing our content.
    If you like what we do and would love to support our work, please become It's FOSS Plus member. It costs $24 a year (less than the cost of a burger meal each month) and you get an ad-free reading experience with the satisfaction of helping the desktop Linux community.
    Join It's FOSS Plus 👷 Homelab and Maker's Corner
    Looks like a cyberdeck. Works like a classroom. The CrowPi 3 surprised me with its versatility.
    CrowPi 3: An All-in-one AI Learning Kit With Cyberdeck FeelA Swiss Army knife for coding education as this kit transforms the programming concepts into tangible experiences. Learn from more than a hundred interactive projects.It's FOSSAbhishek Prakash✨ Project Highlight
    Markdown meets the power of LaTeX in this modern typesetting system with Quarkdown.
    GitHub - iamgio/quarkdown: 🪐 Markdown with superpowers — from ideas to presentations, articles and books.🪐 Markdown with superpowers — from ideas to presentations, articles and books. - iamgio/quarkdownGitHubiamgioHelwan Linux is a distro out of Egypt that feels quite nice.
    Helwan Linux: A Made-in-Egypt Linux DistributionCheck out what this distro out of Egypt has to offer.It's FOSS NewsGourav Patnaik📽️ Videos I am Creating for You
    Essential Ubuntu keyboard shortcuts in action in this week's video.
    Subscribe to It's FOSS YouTube Channel🧩 Quiz Time
    This time, we have a puzzle for deciphering scrambled application names.
    Decipher The Scrambled WordsCan you guess the scrambled words? Give it a try!It's FOSSAnkush Das💡 Quick Handy Tip
    In VirtualBox, you can send keyboard shortcuts like CTRL+ALT+DEL to logout, and a bunch of other keyboard shortcuts to the guest (the virtual machine), without affecting the host (your computer).
    To send CTRL+ALT+DEL, use Host+Delete. The Host key is usually the Right CTRL key on a keyboard. In the top menu, go to Input ⇾ Keyboard → Keyboard Settings to view and customize additional keyboard shortcuts for interacting with the virtual machine.
    If you need more input options, you can use the Input ⇾ Keyboard → Soft Keyboard menu to open a virtual keyboard for the guest VM.
    🤣 Meme of the Week
    Linux users, together, strong! 🤜🤛
    🗓️ Tech Trivia
    Before Spotify or iTunes, there was Napster. Launched on June 1, 1999, by 18-year-old Shawn Fanning, who built it in his college dorm room, Napster quickly attracted over 20 million users (and viruses).
    🧑‍🤝‍🧑 FOSSverse Corner
    One of our regular FOSSers, Laura, is looking to compare notes on building Linux and open source software from source.
    Building Linux and FLOSS programs from source codeStarting a thread on discussion of building parts of Linux, LFS and various packages from source code. This is a spot to compare notes on building from source. We can also discuss pros and cons of various packages/projects to figure out which might be most useful to build from source and which might have less dependencies.It's FOSS CommunityLaura_Michaels❤️ With love
    Please 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 😄
  3. SSH Config Generator

    by: Abhishek Prakash
    Wed, 04 Jun 2025 20:37:04 +0530

    This tool lets you generate the SSH config entries quickly. Fill the fields and hit the generate button and copy the entries to your SSH config file.
    /* Catppuccin Mocha Color Palette */ :root { --ctp-base: #1e1e2e; --ctp-mantle: #181825; --ctp-surface0: #313244; --ctp-surface1: #45475a; --ctp-surface2: #585b70; --ctp-overlay0: #6c7086; --ctp-overlay1: #7f849c; --ctp-text: #cdd6f4; --ctp-subtext1: #bac2de; --ctp-subtext0: #a6adc8; --ctp-blue: #89b4fa; --ctp-lavender: #b4befe; --ctp-mauve: #cba6f7; --ctp-red: #f38ba8; --ctp-green: #a6e3a1; --ctp-yellow: #f9e2af; } * { margin: 0; padding: 0; box-sizing: border-box; } .ssh-config-widget { background: var(--ctp-base); color: var(--ctp-text); font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; border-radius: 12px; border: 1px solid var(--ctp-surface1); max-width: 600px; width: 100%; padding: 24px; margin: 0 auto; } .widget-header { margin-bottom: 24px; } .widget-header h2 { font-size: 1.25rem; font-weight: 600; color: var(--ctp-lavender); margin-bottom: 4px; } .widget-header p { font-size: 0.875rem; color: var(--ctp-subtext0); } .form-group { margin-bottom: 16px; } .form-group label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--ctp-text); margin-bottom: 6px; } .required { color: var(--ctp-red); } .form-group input { width: 100%; padding: 10px 12px; background: var(--ctp-surface0); border: 1px solid var(--ctp-surface1); border-radius: 8px; color: var(--ctp-text); font-size: 0.875rem; transition: all 0.2s ease; } .form-group input:focus { outline: none; border-color: var(--ctp-blue); box-shadow: 0 0 0 2px rgba(137, 180, 250, 0.2); } .form-group input::placeholder { color: var(--ctp-overlay0); } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .help-text { font-size: 0.75rem; color: var(--ctp-subtext0); margin-top: 4px; } .error-message { color: var(--ctp-red); font-size: 0.75rem; margin-top: 4px; display: none; } .error-message.show { display: block; } .form-group input.error { border-color: var(--ctp-red); box-shadow: 0 0 0 2px rgba(243, 139, 168, 0.2); } .advanced-section { margin-top: 20px; border: 1px solid var(--ctp-surface1); border-radius: 8px; overflow: hidden; } .advanced-toggle { background: var(--ctp-surface0); padding: 12px 16px; cursor: pointer; display: flex; align-items: center; gap: 8px; font-size: 0.875rem; font-weight: 500; color: var(--ctp-text); transition: background 0.2s ease; user-select: none; } .advanced-toggle:hover { background: var(--ctp-surface1); } .toggle-icon { font-size: 0.75rem; transition: transform 0.2s ease; color: var(--ctp-overlay1); } .toggle-icon.expanded { transform: rotate(90deg); } .advanced-content { padding: 20px; background: var(--ctp-mantle); border-top: 1px solid var(--ctp-surface1); } .checkbox-group { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px; } .checkbox-item { display: flex; align-items: center; gap: 8px; } .checkbox-item input[type="checkbox"] { width: 16px; height: 16px; background: var(--ctp-surface0); border: 1px solid var(--ctp-surface2); border-radius: 4px; accent-color: var(--ctp-blue); } .checkbox-item label { font-size: 0.875rem; color: var(--ctp-text); cursor: pointer; margin: 0; } .generate-btn { width: 100%; background: var(--ctp-blue); color: var(--ctp-base); border: none; padding: 12px 16px; font-size: 0.875rem; font-weight: 600; border-radius: 8px; cursor: pointer; transition: all 0.2s ease; margin-top: 24px; } .generate-btn:hover { background: var(--ctp-lavender); } .generate-btn:active { transform: translateY(1px); } .output-section { margin-top: 24px; border: 1px solid var(--ctp-surface1); border-radius: 8px; overflow: hidden; } .output-header { background: var(--ctp-surface0); padding: 12px 16px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--ctp-surface1); } .output-header h3 { font-size: 0.875rem; font-weight: 600; color: var(--ctp-text); } .copy-btn { background: var(--ctp-green); color: var(--ctp-base); border: none; padding: 6px 12px; border-radius: 6px; cursor: pointer; font-size: 0.75rem; font-weight: 500; transition: background 0.2s ease; } .copy-btn:hover { background: var(--ctp-yellow); } .copy-btn.copied { background: var(--ctp-mauve); } .config-output { background: var(--ctp-mantle); color: var(--ctp-text); padding: 16px; font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace; font-size: 0.8rem; line-height: 1.5; white-space: pre-wrap; overflow-x: auto; } .output-footer { padding: 12px 16px; background: var(--ctp-surface0); font-size: 0.75rem; color: var(--ctp-subtext0); } .output-footer code { background: var(--ctp-surface1); padding: 2px 6px; border-radius: 4px; font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace; color: var(--ctp-blue); } @media (max-width: 640px) { .form-row { grid-template-columns: 1fr; } .checkbox-group { grid-template-columns: 1fr; } } Generate SSH config file entries
    Generate valid ~/.ssh/config entries
    Host Alias * Connection nickname Hostname/IP * Server address Username Leave empty for current user Port Default: 22 (use 1-65535) Identity File If you have multiple keys ▶ Advanced Options Proxy Jump Host Jump through this host first Local Forward local:remote:port Remote Forward remote:local:port Additional Options Forward X11 Forward SSH Agent Strict Host Key Checking Keep Alive Generate Config Generated Config
    Copy Add to ~/.ssh/config then connect with: ssh myserver
  4. by: Sreenath
    Wed, 04 Jun 2025 12:59:54 GMT

    In an earlier article, I wrote about using plugins in Obsidian. In this one, let me share a few of my favorite plugins. I recommend them but only use the ones that fit your needs.
    Just to recall, Obsidian has two kinds of plugins:
    Core plugins: Officially developed and maintained by the Obsidian team. Community Plugins: Created by users in the Obsidian community 🚧Note that some plugins may make your Markdown notes fully readable only in Obsidian as they add extra features that are not available in usual Markdown. This can be a vendor lock in. Use plugins only according to your needs.Essential Core Plugins
    At the time of writing this article, I see 28 core plugins in my Obsidian installation.
    I have picked only a handful of them. It doesn't mean others are not good. All core plugins have some use case for a particular set of users!
    Several of the plugins I discuss here are enabled by default. But these plugins have settings of their own and I share these settings that have enhanced my note management experience in Obsidian.
    ✋Non-FOSS Warning! Obsidian is not an open source software but it is loved and used by many open source developers and Linux users.Backlinks
    The backlinks are among Obsidian's greatest features. It is crucial for managing interconnected notes and data.
    I know that the backlink plugin is enabled by default but there is a useful feature that you'll have to manually enable. It is “Show backlinks at the bottom of notes” option.
    Enable it by going to Backlinks plugin settings.
    Enable backlinksNow, under each note, backlinks will be shown.
    0:00 /0:18 1× Backlinks in Obsidian
    It is particularly useful if you are creating new notes from a single place like Daily Notes, which is our next plugin!
    Daily Notes
    Daily Notes is like diary pages. It will create a Markdown page for each day and you can write your thoughts here.
    By default, you can access the daily notes from the Obsidian ribbon menu. But a more efficient way is to open daily notes whenever you open Obsidian.
    Go to the Daily Notes settings. Here, enable the "Open daily note on startup" toggle button.
    Daily Notes SettingsIn the screenshot above, you can see some other settings have been changed.
    Date Format: How the title of the daily note appear. You can get the date format options here. New file location: I have created a separate folder called Journals in my Obsidian vault to store all the daily notes. Page Preview
    This is enabled by default for you. With this plugin, you can hover over a note while pressing the CTRL key to get a preview.
    You can also quickly edit the note in the preview or go to another sub-preview, etc. Very useful tool if you are deep into note interlinking.
    0:00 /0:23 1× Preview page in Obsidian
    Slash Commands
    This plugin is disabled by default. Go to the Core Plugins in Obsidian settings and enable this plugin.
    Once enabled, you can press the / key when typing a note to access commands. For example, insert attachment, insert code block, etc. A simple preview is shown in the below video.
    0:00 /0:24 1× Slash command in Obsidian
    Notion, Ghost and many modern editors use this feature.|
    Web Viewer
    This is a cool plugin that allows you to visit web links from within Obsidian. More than that, you can save a website to vault using this core plugin.
    It is not enabled by default, so do that first. Once enabled, click on the settings gear adjacent to the plugin to go to the plugin settings.
    Web viewer settings buttonHere, you can set further options like where to save the page by default, search engine, etc.
    Web Viewer SettingsYou can see some examples in the video below.
    Web viewer in Obsidian
    Interesting community plugins I like
    Now, let's take a look at some cool community plugins that can enhance your knowledge base, as they do for me.
    Calendar
    If you are a daily notes writer, this is a must-have plugin. Even if you are not into diary writing, it is still pretty cool to have a calendar placed on Obsidian.
    Calendar ViewYou can visit notes of any date simply by clicking on that date. If there is no note, it will prompt you to create one!
    There are many more features that you can explore, like a meter to track how much you have written on a particular day.
    💡If you press CTRL key and hover over a date, those day's notes will be shown in a preview.Calendar PluginQuickAdd
    QuickAdd is a much needed automation tool in Obsidian. It offers features like templates, captures, macros, multis, etc. which essentially allow users to create notes quickly.
    For example, the template feature can create a note based on a given template in a specified directory. All you have to do is invoke the command.
    The screenshot below shows three templates created by me for my use cases.
    Created TemplatesUse the settings gear to change additional settings like where to create a note, open the note automatically, etc.
    The video below shows how it quickly creates a note on a specified location.
    0:00 /0:13 1× QuickAdd Working
    With macros, you can even assign key bindings to make your workflow even faster!
    QuickAddIconize
    Emojis and icons are all the rage these days. From GitHub to changelogs, you'll see them everywhere. How about adding them to Obsidian?
    Obsidian organizes notes into folders and subfolders. With the Iconize plugin, you can set icons to folders.
    Icons applied to foldersYou can add new icon packs by going to the Settings → Community plugins → Installed plugins -→Iconize -→Settings gear → Icon packs.
    Icon packs added in IconizeRight-click on a folder or file and use the Change icon option to add a new icon to that folder/file.
    IconizeHighlightr
    Remember highlighting important stuff in a book? You can do the same in your notes on Obsidian.
    Highlight text in Vimeo
    It also provides different styles of highlighting, all selectable from the plugin settings.
    HighlightrCallout Manager and Callout Suggestions
    These are two different plugins which, when used together, are a great way to add callouts.
    📋If you are not aware, callout blocks can improve your notes by making specific visually separated blocks for tips, warnings, etc. Like this 'note' callout block I used for telling you about callouts.By default, obsidian has some callouts like Note, Tips, Warnings, etc.
    Callout Manager allows you to create more callout blocks. Say you want to create a new callout block called "Read Later" and assign a particular color and icon. You can do that with this plugin.
    Callout blocks from Callout ManagerThe Callout Suggestions plugins will help you access these defined callout blocks easily in your notes.
    You can press >! and a dropdown menu will appear asking what block to use.
    0:00 /0:23 1× Inserting Callouts in Obsidian
    PDF++
    Annotating a PDF document is a must-have feature in any PDF viewer. How about doing it in Obsidian? PDF++ is a great tool for this purpose.
    You can add your PDF notes to your vault and start annotating!
    Once the plugin is installed and enabled, make sure you have enabled the PDF editing feature.
    PDF++ plugin settingsNow, you can select text and then right-click to get the annotation menu. Unlike other plugins, this has a slight learning curve and plenty of options to tweak. Use it carefully.
    Annotate PDF in ObsidianPDF++LanguageTool Integration
    This is for those who want to create notes without grammatical errors or spelling mistakes.
    LanguageTool is a proofreading software that checks the grammar, style, and spelling in over 20 languages. With this plugin, you can get error notifications for your text in Obsidian.
    If you have a premium subscription for LanguageTool, you can use it here as well.
    Spell check in Obsidian🚧You should disable the Obsidian spell check (Settings → Editor → Behavior → Spell Check) feature if you want to use this plugin.LanguageTool IntegrationTasks
    You can use Obsidian as a task/to-do manager. That's no secret.
    However, Tasks is plugin that can do a lot more than just simple to-dos. It supports scheduling tasks, recurring tasks etc.
    You can also list all the tasks, today's tasks, etc. by using simple tasks specific queries.
    To create a task, you can enter CTRL+P (open command in Obsidian) and search for Tasks.
    Using the Tasks plugin to create tasksYou can retrieve tasks as shown in the small video below:
    0:00 /0:28 1× Retrieve tasks in Obsidian
    TasksExcalidraw
    Excalidraw is a plugin to edit and view Excalidraw drawings in Obsidian. This sketching solution can make wonderful diagrams within Obsidian, embed drawings into your documents and much more.
    An Excalidraw drawing in ObsidianYou can find a huge list of settings for this plugin in the Obsidian settings. If you are into creative note-taking, look no further.
    ExcalidrawHonorable mentions
    Style Settings: Allows you to tweak several themes in Obsidian. One such theme that I am using and is heavily customizable is Border. Git: Allows you to version control your notes. You can pull changes from and push changes to GitHub, GitLab, etc. Dataview: Dataview is a live index and query engine over your personal knowledge base. You can query data from your Obsidian vault. QuickAdd: QuickAdd is like a super-smart shortcut button in Obsidian that lets you quickly create new notes or add stuff to existing ones using pre-made templates and automated steps you set up. Kanban: This plugins created a Markdown-based Kanban board. There are many other plugins, enabled/disabled in a default Obsidian installation. What I mentioned above are a couple of special ones. Don't forget to read the descriptions and try others too.
    Now I let you share your favorite Obsidian plugin in the comments.
  5. Using Mouse Mode in Vim

    by: Abhishek Prakash
    Wed, 04 Jun 2025 12:11:12 +0530

    I hope I am not committing blasphemy but you can use the mouse in Vim.
    Press Esc to go to command mode in Vim and use:
    :set mouse=a It will enable mouse mode immediately in all Vim modes, i.e. normal, insert and visual. To disable the mouse mode, use this:
    :set mouse=If you want to use mouse mode all the time, I am not judging you, add this entry to your ~/.vimrc file:
    set mouse=aSave, restart Vim, and your mouse now works for clicking, scrolling, and selecting text.
    What does mouse mode do in Vim?
    First thing first, the mouse mode has limited usage in Vim. Don't expect to get a notepad like experience just because you enabled mouse mode.
    It does add some functionality and ease of use like:
    Jump to exact locations without counting lines or using search Wheel scrolling while dealing with long files Easy text selection: double click to select a word, triple click to select an entire line, use mouse click and drag for the desired text selection Click between panes and resize them easily while using split windows in Vim While using tabs, click on other tabs to switch, click on X (should be visible at top right in mouse mode) to close a tab, double click on tab bar to create new empty files in new tabs Use middle click to paste from system clipboard The video below shows some of the above discussed featured in action:
    0:00 /0:21 1× Vim Mouse Mode demonstration
    Mouse mode doesn't replace Vim's keyboard efficiency - it complements it. Think of it as having both a sports car's manual controls and cruise control available.
    📋Mouse mode behavior varies by terminal and some terminal emulators may require specific settings. If you are using tmux, ensure both Vim and tmux have mouse mode enabled for proper interaction.Understanding mouse mode Options
    Vim's mouse configuration works like a permission system:
    set mouse=a " All modes (normal, visual, insert, command) set mouse=n " Normal mode only set mouse=v " Visual mode only set mouse=i " Insert mode only set mouse=c " Command mode only set mouse=nv " Normal and visual modesMostly, you would want mouse=a - which is like having universal access rather than mode-specific restrictions.
    💡You can refer to Vim's official mouse documentation: :help mouse-usingConclusion
    I am not a Vim purist and I won't judge you if you use mouse in Vim, which is known for its keyboard-centric approach to productivity.
    Mouse mode doesn't diminish Vim's keyboard efficiency - it provides additional options for specific scenarios.
    If you feel too uncomfortable with Vim at the beginning, opt for the hybrid approach where you use mouse for navigation and positioning, keyboard for editing operations.
    I welcome your comments.
  6. by: Adnan Shabbir
    Wed, 04 Jun 2025 04:44:46 +0000

    Windows Subsystem for Linux (WSL) allows you to run Linux distros within the Windows operating system. WSL is available in multiple versions: WSL1 (older but still supported) and WSL2 (newer with continuous development support).
    Recently, on May 19, 2025, Microsoft conducted a 2025 Build Conference where they announced the open-source nature of WSL for Windows, which is huge news for Linux users and the open-source community.
    In today’s guide, I will elaborate on the recent development in the WSL project, the open-source nature of the WSL, how mature its open-source nature is, and Microsoft’s journey towards open-source. So, let’s get started:
    Windows Subsystem for Linux (WSL) is now Open Source Road to Open Source WSL How can I Contribute to Open-Source WSL? Basic Understanding of the WSL Architecture Bonus: Keep Your WSL Updated Conclusion Windows Subsystem for Linux (WSL) is now Open Source
    Yes, you heard that right, Microsoft has recently declared WSL as an open-source component of Windows. Microsoft has officially released the source code of WSL on May 19, 2025, at the Microsoft Build 2025 Conference.
    As per the announcement of Microsoft, the WSL is completely open-sourced except for the following three components:
    “Lxcore.sys”: Kernel-side driver that powers WSL1, i.e., component that translates Linux commands for Windows in WSL1. “P9rdr.sys” and “p9n9.dll”: These 9P protocol components refer to the filesystem redirection from Windows to Linux. The above three components are tightly integrated with Windows core processes. For instance, the “Lxcore.sys” has to interact with the Windows kernel. Similarly, the 9P protocol components handle Windows files and directories. These deep integrations of WSL’s components with Windows might be the reasons behind keeping them closed-source.
    This was about Microsoft’s recent announcement. Now, let me take you through Microsoft’s path towards open-source WSL.
    Road to Open Source WSL
    In 2019, Microsoft started maintaining its own Linux Kernel specifically for WSL, and it was declared an open-source component.
    Since then, the WSL community has started growing and contributing to the WSL project. Later on, the WSLg component became open source, which provides the graphical applications support for the Linux applications in the WSL.
    Microsoft gradually moved WSL to an open-source project. In 2021, Microsoft separated the Windows code base from the WSL code base. The newly released WSL was then available on the Microsoft Store for Windows 11 users. However, in 2022, it was made available for Windows 10 users too.
    Apart from that, the development and upgradation of WSL keep going, i.e., the latest available WSL is “2.5.7.0”.
    How can I Contribute to Open-Source WSL?
    Microsoft has provided the source code Git Repo of WSL, where you can contribute to reporting the bugs/issues or developing the source code from scratch. A Linux enthusiast may love to look into the source code and contribute according to their interest.
    If you are facing any technical issues relevant to WSL, you can ask for assistance on WSL’s Git repo. Similarly, if you are a regular user, you must keep on visiting the WSL repo and contribute to any other issues of the users in the comments.
    Basic Understanding of the WSL Architecture
    Since two different operating systems are collaborating, the component functionalities would differ in both environments. Let’s have a bird’s eye view of the WSL architecture:

    Windows Host: The components hosted on the Windows side are the entry points to interact with the WSL.
    wsl.exe: Command line utility to launch or manage the WSL. wslconfig.exe: This mostly belongs to WSL 1 and is used to configure WSL 1. wslg.exe: Launch and manage the GUI apps from Windows. wslservice.exe: This is the background process, i.e., launch the VM, start/stop the distros attached, mount the filesystem, etc. WSL VM Service: These components work inside the WSL VM and are triggered when the user executes Windows components.
    init: The initial process that starts in the Linux environment. It initializes the necessary processes and manages the distribution at the WSL end. gns (Networking): Manages DNS and network integration with Windows. localhost (port forwarding): The localhost running inside the Linux VM is the port forwarding. Plan9 Server: The server is responsible for file sharing from Windows to Linux. Bonus: Keep Your WSL Updated
    When you install WSL from the command line, it might fetch and install a bit lower version. Or even if it is up to date as per your installation, you must check for updates and get the latest available version:
    Before updating:
    wsl -v
    Updating WSL:
    wsl --update
    Both the Linux Kernel and WSL versions are updated:
    wsl -v
    That’s all from this post.
    Conclusion
    On May 19, 2025, Microsoft announced the WSL as an open-source project. Not 100% open-source, yet a major advancement in the open-source world. Microsoft has long been working on this. Microsoft has held three components closed-source because of their deep integration with the Windows core processes.
    In today’s post, I have talked about the open-source nature of WSL and Microsoft’s path to open-source WSL development.
    FAQs:
    Q1: Is WSL completely open source now?
    Yes, except for only three components, which are “Lxcore.sys”, “P9rdr.sys”, and “p9n9.dll”.
    Q2: How can I contribute to WSL?
    Microsoft has provided the source code Git Repo of WSL, where you can contribute to reporting the bugs/issues or developing the source code from scratch.
    Q3: Is WSL a replacement for Linux?
    WSL cannot be referred to as a full replacement for Linux. WSL is just a subsystem within Windows.
    Q4: Can WSL open a GUI?
    Yes, WSL can open a Linux GUI application with the help of WSLg, i.e., introduced in 2021 for Windows 11 and in 2022 for Windows 10.
  7. by: Andy Clarke
    Tue, 03 Jun 2025 14:39:04 +0000

    Like ’em or loath ’em, whether you’re showing an alert, a message, or a newsletter signup, dialogue boxes draw attention to a particular piece of content without sending someone to a different page. In the past, dialogues relied on a mix of divisions, ARIA, and JavaScript. But the HTML dialog element has made them more accessible and style-able in countless ways.
    So, how can you take dialogue box design beyond the generic look of frameworks and templates? How can you style them to reflect a brand’s visual identity and help to tell its stories? Here’s how I do it in CSS using ::backdrop, backdrop-filter, and animations.
    Design by Andy Clarke, Stuff & Nonsense. Mike Worth’s website will launch in June 2025, but you can see examples from this article on CodePen. I mentioned before that Emmy-award-winning game composer Mike Worth hired me to create a highly graphical design. Mike loves ’90s animation, and he challenged me to find ways to incorporate its retro style without making a pastiche. However, I also needed to achieve that retro feel while maintaining accessibility, performance, responsiveness, and semantics.
    A brief overview of dialog and ::backdrop
    Let’s run through a quick refresher.
    Note: While I mostly refer to “dialogue boxes” throughout, the HTML element is spelt dialog.
    dialog is an HTML element designed for implementing modal and non-modal dialogue boxes in products and website interfaces. It comes with built-in functionality, including closing a box using the keyboard Esc key, focus trapping to keep it inside the box, show and hide methods, and a ::backdrop pseudo-element for styling a box’s overlay.
    The HTML markup is just what you might expect:
    <dialog> <h2>Keep me informed</h2> <!-- ... --> <button>Close</button> </dialog> This type of dialogue box is hidden by default, but adding the open attribute makes it visible when the page loads:
    <dialog open> <h2>Keep me informed</h2> <!-- ... --> <button>Close</button> </dialog> I can’t imagine too many applications for non-modals which are open by default, so ordinarily I need a button which opens a dialogue box:
    <dialog> <!-- ... --> </dialog> <button>Keep me informed</button> Plus a little bit of JavaScript, which opens the modal:
    const dialog = document.querySelector("dialog"); const showButton = document.querySelector("dialog + button"); showButton.addEventListener("click", () => { dialog.showModal(); }); Closing a dialogue box also requires JavaScript:
    const closeButton = document.querySelector("dialog button"); closeButton.addEventListener("click", () => { dialog.close(); }); Unless the box contains a form using method="dialog", which allows it to close automatically on submit without JavaScript:
    <dialog> <form method="dialog"> <button>Submit</button> </form> </dialog> The dialog element was developed to be accessible out of the box. It traps focus, supports the Esc key, and behaves like a proper modal. But to help screen readers announce dialogue boxes properly, you’ll want to add an aria-labelledby attribute. This tells assistive technology where to find the dialogue box’s title so it can be read aloud when the modal opens.
    <dialog aria-labelledby="dialog-title"> <h2 id="dialog-title">Keep me informed</h2> <!-- ... --> </dialog> Most tutorials I’ve seen include very little styling for dialog and ::backdrop, which might explain why so many dialogue boxes have little more than border radii and a box-shadow applied.
    Out-of-the-box dialogue designs I believe that every element in a design — no matter how small or infrequently seen — is an opportunity to present a brand and tell a story about its products or services. I know there are moments during someone’s journey through a design where paying special attention to design can make their experience more memorable.
    Dialogue boxes are just one of those moments, and Mike Worth’s design offers plenty of opportunities to reflect his brand or connect directly to someone’s place in Mike’s story. That might be by styling a newsletter sign-up dialogue to match the scrolls in his news section.
    Mike Worth concept design, designed by Andy Clarke, Stuff & Nonsense. Or making the form modal on his error pages look like a comic-book speech balloon.
    Mike Worth concept design, designed by Andy Clarke, Stuff & Nonsense. dialog in action
    Mike’s drop-down navigation menu looks like an ancient stone tablet.
    Mike Worth, designed by Andy Clarke, Stuff & Nonsense. I wanted to extend this look to his dialogue boxes with a three-dimensional tablet and a jungle leaf-filled backdrop.
    Mike Worth, designed by Andy Clarke, Stuff & Nonsense. This dialog contains a newsletter sign-up form with an email input and a submit button:
    <dialog> <h2>Keep me informed</h2> <form> <label for="email" data-visibility="hidden">Email address</label> <input type="email" id="email" required> <button>Submit</button> </form> <button>x</button> </dialog> I started by applying dimensions to the dialog and adding the SVG stone tablet background image:
    dialog { width: 420px; height: 480px; background-color: transparent; background-image: url("dialog.svg"); background-repeat: no-repeat; background-size: contain; } Then, I added the leafy green background image to the dialogue box’s generated backdrop using the ::backdrop pseudo element selector:
    dialog::backdrop { background-image: url("backdrop.svg"); background-size: cover; } Mike Worth, designed by Andy Clarke, Stuff & Nonsense. I needed to make it clear to anyone filling in Mike’s form that their email address is in a valid format. So I combined :has and :valid CSS pseudo-class selectors to change the color of the submit button from grey to green:
    dialog:has(input:valid) button { background-color: #7e8943; color: #fff; } I also wanted this interaction to reflect Mike’s fun personality. So, I also changed the dialog background image and applied a rubberband animation to the box when someone inputs a valid email address:
    dialog:has(input:valid) { background-image: url("dialog-valid.svg"); animation: rubberBand 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both; } @keyframes rubberBand { from { transform: scale3d(1, 1, 1); } 30% { transform: scale3d(1.25, 0.75, 1); } 40% { transform: scale3d(0.75, 1.25, 1); } 50% { transform: scale3d(1.15, 0.85, 1); } 65% { transform: scale3d(0.95, 1.05, 1); } 75% { transform: scale3d(1.05, 0.95, 1); } to { transform: scale3d(1, 1, 1); } } Tip: Daniel Eden’s Animate.css library is a fabulous source of “Just-add-water CSS animations” like the rubberband I used for this dialogue box.
    Changing how an element looks when it contains a valid input is a fabulous way to add interactions that are, at the same time, fun and valuable for the user.
    Mike Worth, designed by Andy Clarke, Stuff & Nonsense. That combination of :has and :valid selectors can even be extended to the ::backdrop pseudo-class, to change the backdrop’s background image:
    dialog:has(input:valid)::backdrop { background-image: url("backdrop-valid.svg"); } Try it for yourself:
    CodePen Embed Fallback Conclusion
    We often think of dialogue boxes as functional elements, as necessary interruptions, but nothing more. But when you treat them as opportunities for expression, even the smallest parts of a design can help shape a product or website’s personality.
    The HTML dialog element, with its built-in behaviours and styling potential, opens up opportunities for branding and creative storytelling. There’s no reason a dialogue box can’t be as distinctive as the rest of your design.
    Andy Clarke
    Often referred to as one of the pioneers of web design, Andy Clarke has been instrumental in pushing the boundaries of web design and is known for his creative and visually stunning designs. His work has inspired countless designers to explore the full potential of product and website design.
    Andy’s written several industry-leading books, including ‘Transcending CSS,’ ‘Hardboiled Web Design,’ and ‘Art Direction for the Web.’ He’s also worked with businesses of all sizes and industries to achieve their goals through design.
    Visit Andy’s studio, Stuff & Nonsense, and check out his Contract Killer, the popular web design contract template trusted by thousands of web designers and developers.
    Getting Creative With HTML Dialog originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  8. Chris’ Corner: Type Stuff!

    by: Chris Coyier
    Mon, 02 Jun 2025 17:01:09 +0000

    Let’s do typography stuff!
    Video: “A live demo by me of early font editors on a real Macintosh Plus” by Mark Simonson Font: “Is this font easy for you to read? Good—that’s the idea.” Hyperlegible is the name of the font, designed for people with low vision. Technique: “Fluid typography means thinking in terms of type scales and flexible spacing across your defined design space.” Richard Rutter goes retrofitting a new type sizing technique into an old layout. Miriam is also thinking about all this. Richard also has a good one on avoiding faux bold, which has afflicted me many times. My hot take is that browsers shouldn’t do faux nuthin. Font: “To help young readers of all skill levels, we’re introducing Kermit, a child-friendly typeface created by the type design studio Underware.” It’s fairly pricey but I can imagine it being perfect for some projects. Like Comic Sans but cooler. P.S. you should really try Comic Code on CodePen, it’s awesome. Fonts: “UNCUT.wtf is a free typeface catalogue, focusing on somewhat contemporary type.” A lot of them are super similar which makes me wonder if many of them come from students taking a design class or something. Journey: “One day, I saw what felt like Gorton on a ferry traversing the waters Bay Area. A few weeks later, I spotted it on a sign in a national park. Then on an intercom. On a street lighting access cover. In an elevator. At my dentist’s office. In an alley.” Marcin Wichary on Manhattan’s hardest working typeface. Performance: “… file sizes of web fonts? I personally don’t have a gut feeling how much is too much and how much is to be expected.” Stoyan Stefanov reckons 20k is fair. Behind the Scenes: “This meant that on web we could simply start our font stacks with Verdana, pick a couple of reasonable fallbacks, and get IKEA branding effectively for free.” IKEA didn’t end up using Verdana, but I wish they did, I kinda love it at small sizes. This is a great look at a major typographic choice at a major brand from Robin Whittleton. Technique: “…we added text-wrap: balance on WordPress.org, and quickly got community feedback that it led to awkward, unexpected breaks in Japanese and Korean.” Kelly Choyce-Dwan whips out stuff like word-break: auto-phrase; for the win.
  9. by: Abhishek Prakash
    Mon, 02 Jun 2025 14:28:22 GMT

    Most educational programs keep students trapped behind screens, manipulating virtual objects and producing digital outputs.
    This is why the Raspberry Pi and Arduino like devices provide such a great learning environment. Adding hardware components to the board gives meaning to the software.
    The CrowPi takes this forward by giving an entire learning laboratory that transforms abstract programming concepts into tangible, interactive experiences.
    Elecrow has been known for creating great Raspberry Pi products. They are launching their latest product, CrowPi 3. They sent me the device to test and share the experience and that's what I am going to do in this article.
    What is CrowPi 3?
    Think of the CrowPi 3 as a Swiss Army knife for coding education - it packs dozens of sensors, programming environments, and learning tools into one portable, briefcase. Instead of juggling separate breadboards, sensors, and computers, everything lives in a single ecosystem.
    The CrowPi 3 transforms abstract programming concepts into tangible experiences. Write Python code to detect motion → PIR sensor triggers alarm. Code an NFC reader → tap a card to spawn TNT blocks in Minecraft. It's programming with immediate, visible consequences.
    The core components are:
    Raspberry Pi 5 as the brain of the kit (advance kit includes the pi) 20+ sensors pre-wired and ready 4.3" touchscreen + HDMI connections for external monitors Built-in breadboards and GPIO access Arduino and Pi Pico can be attached on top of it 128 GB micro SD card with custom operating system This custom operating system is a customized version of Raspbian OS and has numerous ready-to-explore projects across multiple programming environments like Python, Scratch etc.
    A dedicated section of AI projects to try beginner level AI projects using the on-board camera and various sensors.
    No prizes for guessing that there were at least two more such CrowPi kits in the past and considering the fact that this is the third such inastallment, I would think that the first two devices met with success.
    Who is this kit for?
    The primary audience for CrowPi 3 is children aged 8-16 who are learning programming and AI coding fundamentals.
    Of course, it is not just limited to children. People new to Raspberry Pi/Arduino would also benefit from the guided experiences of such a kit.
    I also think that it is suitable for teachers that need turnkey STEM curriculum tools.
    The kit has streamlined learning of all levels with a mix of both software and hardware. Start with drag-drop Scratch blocks, graduate to Python sensor control, eventually tackle more intense AI projects.
    But all this can be assembled...
    Sure, you may not need or use all of the sensors provided in the kit. And yes, you can get the sensors and accessories separately and use them with tons of open source projects available online but kits like CrowPi, make it all streamlined. This is ideal for schools and for people who want to explore programming the hardware devices without struggling with the hardware assembly.
    Hardware assembly could be fun, too, but it could be frustrating and time-consuming. These kits flatten the learning curve a little, letting the students enjoy dipping their toes in the vast ocean of electronic geekery.
    CrowPi 3 Kit contents
    📋The kit I received for this review is the basic one. The advanced kit comes with a Raspberry Pi 5 16 GB already fixed in, batteries for extra portability, an additional SD card with retro games on it, game controllers and a few more accessories. The basic kit has the following item in addition to the pre-wired ones on the board already:
    Power Supply x1 Screwdriver x1 Stepped Motor x1 Infrared Receiver Head x1 RFID Card + Tag x1 IR Remote Control x1 User Manual x1 Motor + Fan Blade x1 USB A to Micro B Cable x1 Type-C to Type-C Cable x1 NFC Card x1 TF Card Reader x1A Swiss Army knife for coding education as this kit transforms the programming concepts into tangible experiences. Learn from more than a hundred interactive projects. Crowtail-9G Servo x1 Components Pack (with wires, LED and more) x1 128G TF Card with Customized System x1 Accessories in CrowPi 3 Basic kitThe advanced kit has these items in addition to everything in the basic kit:
    NFC Tag x10 Raspberry Pi 5 (16GB) x1 Laptop Tote x1 2.4G Wireless Keyboard + Mouse x1 32G TF Card with Customized System x1 Minecraft paper x5 Crowtail - I2C HUB x1 18650 Lithium Battery x2 Game Controller x2 Experiencing CrowPi 3
    The CrowPi kit comes in a briefcase styled box which kind of gives me the cyberdeck feel. The case looks good with the frosted glass.
    CrowPi 3 Kit with frosted glass coverLet me share my experience using this open source AI education kit.
    The build
    This is a well-thought and well-built device. It comes in a briefcase styled box with a fold-out handle that makes it easy to carry. The frosted glass cover doesn't come off easily as it has strong magnets and all the sensors and components are firmly fixed in the kit.
    I didn't do a fall test by dropping it to the ground to check if it can survive something like that. If you ever do this, accidentally or otherwise, do share the data with us 😜
    There is an empty slot at the bottom that could hold a few tiny accessories. It's a small thing but
    Built-in touchscreen
    The small screen has touch capability and the touch response is pretty decent but I would only use it when there are no other options available. My fat fingers and eyes are not suitable for tiny screens anymore.
    Okay, I could access pretty much most of the things with this tiny screen and it becomes even easier to use when I connected proper keyboard and mouse to it.
    Still, it is tiny which is okay for retro gaming and a few small stuff to check the output or see debug info but you'll need a proper screen to make use of it.
    This is evident as the customized learning interface is not properly displayed in the tiny screen.
    CrowPi 3's small screen doesn't properly display its customized learning interfaceRaspbian OS customized for interactive learning
    📋I still don't have a capture card for Raspberry Pi (a shame, I know) and hence I cannot share good quality images here. Apologies as I order a capture card.The interface, when experienced on a proper monitor, shows the IDE tools and interactive project to choose from. I used their CrowView Notebook for this purpose, although it can be connected to any external monitor.
    Select interactive project from left or use IDE from the right to code on your ownTo use the interactive projects, you'll have to create an account. I think it's a local user account that stays on your system. This way, more than one people can save their progress.
    A local user account saves your progress on the deviceIn the image below, you can see that it provides 39 Python projects that teach you the basic Python programming that also interact with various sensors and components on the kit.
    Interactive Python project interfaceWhen you select a project, you have instructions on half the screen and the code editor or tool in the other half. And the programs you run can also impact the hardware (most of the time) and you can see it on CrowPi 3 kit.
    For example, in the screenshot above (if it is visible), it creates a simple program that sounds the buzzer on the board for the specified time.
    See, this allows an easier way of learning with both software and hardware in the mix as you have pre-built scenario with instructions and their impact is visible on the hardware.
    You are not restricted to this customized interface. You can also use the classic Raspbian interface and access the editors and projects from there as well.
    The sensory board experience
    The kit features two breadboards positioned strategically on the main board, eliminating the frustrating "where do I connect this?" moments.
    While breadboards are available for custom circuits, most sensors come pre-connected and ready to use. There are easy sample projects to test the functionality of these sensors and they are fun to experiment even for adults.
    The cooling fan
    The cooling fan is loud and runs continuouslyThere is a visible cooling fan with RGB lighting. While it seemed cool at the beginning, it started to annoy me later. Don't get me wrong. I know that Raspberry Pi like devices must have some sort of cooling system.
    But this fan is much too loud for its size. And it runs continuously, unnecessarily. There is no on/off button for that and I don't expect such a feature. Now, this could be a good programming challenge to write a script that turns the fan off when the CPU reaches a certain temperature threshold.
    Bottom line
    The CrowPi 3 solves the "hello world" problem in programming education. Instead of printing text to screens, students control real-world devices and see immediate physical results.
    I mean, those variables are more meaningful when they represent real sensor readings. The conditional logic makes more sense when you can control lights and motors with it.
    The ready-to-use kit eliminates the setup frustration that could arise from manually connecting all those sensors, fans and lights.
    This is suitable for classrooms, as well as motivated self-learning at home. It is also a good Christmas gift candidate if you have children in your family that might be interested in learning AI, coding and electronics.
    I don't have the pricing at the time of writing this review. Elecrow is planning to run a pre-order campaign through Kickstarter very soon. Please check it for pricing and release dates.
    CrowPi 3 on Kickstarter
  10. By: Janus Atienza
    Sat, 31 May 2025 18:41:31 +0000

    For developers, website owners, and tech-savvy entrepreneurs, a Linux virtual private server (VPS) offers flexibility, power, and control at an affordable cost. However, for beginners, managing a Linux VPS can be daunting, especially if you’re diving in without prior experience. Mistakes are common, but most can be avoided with a little preparation and awareness. Here are some of the most frequent pitfalls new users face and how to steer clear of them.
    Skipping Initial Security Configurations
    One of the biggest mistakes is deploying a Linux VPS and leaving it with default settings. Without taking steps to harden your server, it becomes a prime target for brute-force attacks and unauthorized access. Many beginners forget to:
    Disable root login or at least change the default SSH port. Set up a firewall (like UFW or iptables). Install fail2ban to prevent repeated login attempts. How to avoid it: After setting up your VPS, immediately configure basic security settings. Create a non-root user with sudo privileges, set strong passwords, and use SSH keys instead of passwords where possible.
    Not Keeping the System Updated
    Linux distributions frequently release updates to patch vulnerabilities and fix bugs. New users often forget to update their system, exposing it to known security issues.
    How to avoid it: Regularly run package updates using commands like sudo apt update && sudo apt upgrade for Debian/Ubuntu or sudo yum update for CentOS. Consider enabling automatic updates for critical packages.
    Ignoring Backups
    It’s easy to get caught up in building your server and forget to plan for the worst-case scenario. Without backups, a single mistake or failure can result in total data loss.
    How to avoid it: Set up automated backups from day one. Many VPS providers offer snapshot and backup services. Alternatively, use tools like rsync, Duplicity, or cron jobs to regularly back up files and databases to remote storage.
    Overlooking Resource Monitoring
    New users often run too many services on a low-resource VPS, leading to sluggish performance or unexpected crashes. Without proper monitoring, it’s difficult to identify what’s causing issues.
    How to avoid it: Use tools like htop, iotop, or vnstat to monitor system performance. For long-term tracking, consider installing tools like Netdata or Zabbix to keep tabs on CPU, RAM, disk, and network usage.
    Choosing the Wrong Distribution
    Not all Linux distributions are beginner-friendly. Many users jump into complex distros or ones that are not well-supported, leading to confusion and difficulty managing the server.
    How to avoid it: Stick to popular and well-documented distributions such as Ubuntu or CentOS. These have active communities and extensive tutorials. If you’re considering a reliable and secure solution, CentOS VPS hosting is a strong option, especially for server environments that demand stability and performance.
    Lack of Documentation
    New users often make changes without keeping track of what they did. This can become a problem when troubleshooting issues or migrating to a new server.
    How to avoid it: Keep a simple changelog or setup document where you note down major configurations, installed packages, and custom tweaks. This habit saves countless hours down the line.
    By understanding and avoiding these common mistakes, beginners can confidently manage a Linux VPS and make the most of its powerful capabilities. Start small, stay secure, and always keep learning.
    The post The Common Linux VPS Mistakes Beginners Make (And How to Avoid Them) appeared first on Unixmen.
  11. Guess The Random Number Game

    by: Abhishek Prakash
    Sat, 31 May 2025 20:19:04 +0530

    Time to practice your Bash script and develop a simple game.
    Exercise
    Create a bash script that implements a number guessing game. The script should:
    Generate a random number between 1 and 100 Allow the user to make guesses Provide feedback whether the guess is too high, too low, or correct Count the number of attempts Allow the user to play again after winning The game should continue until the user guesses correctly, and then ask if they want to play another round.
    💡 Hints
    Use $RANDOM to generate random numbers The modulo operator % can help limit the range Use a while loop for the main game logic Consider using a nested loop structure for replay functionality Input validation is important - check if the user enters a valid number Test data
    Test Case 1: Basic game flow
    $ ./guessing_game.sh Welcome to the Number Guessing Game! I'm thinking of a number between 1 and 100. Enter your guess: 50 Too low! Try again. Enter your guess: 75 Too high! Try again. Enter your guess: 62 Too low! Try again. Enter your guess: 68 Congratulations! You guessed it in 4 attempts! Do you want to play again? (yes/no): no Thanks for playing! Goodbye!Test Case 2: Input validation
    $ ./guessing_game.sh Welcome to the Number Guessing Game! I'm thinking of a number between 1 and 100. Enter your guess: abc Invalid input! Please enter a number between 1 and 100. Enter your guess: 150 Your guess must be between 1 and 100! Enter your guess: 0 Your guess must be between 1 and 100! Enter your guess: 42 Too high! Try again.Test Case 3: Multiple rounds
    $ ./guessing_game.sh Welcome to the Number Guessing Game! I'm thinking of a number between 1 and 100. Enter your guess: 30 Congratulations! You guessed it in 1 attempts! Do you want to play again? (yes/no): yes Starting new game... I'm thinking of a number between 1 and 100. Enter your guess: 50 Too low! Try again. Enter your guess: 60 Congratulations! You guessed it in 2 attempts! Do you want to play again? (yes/no): no Thanks for playing! Goodbye!✋A programming challenge can be solved in more than one way. The solution presented here is for reference purposes only. You may have written a different program and it could be correct as well.Solution 1: Basic implementaion
    This is a straightforward implementation using nested while loops. The outer loop controls whether the player wants to play again, while the inner loop handles the guessing game logic. Key features:
    Uses $RANDOM % 100 + 1 to generate numbers between 1-100 Input validation with regex pattern matching Simple counter for tracking attempts #!/bin/bash # Number Guessing Game - Basic Implementation # Main game loop play_again="yes" echo "Welcome to the Number Guessing Game!" while [[ "$play_again" == "yes" ]]; do # Generate random number between 1 and 100 secret_number=$((RANDOM % 100 + 1)) attempts=0 guessed=false echo "I'm thinking of a number between 1 and 100." echo # Game loop for current round while [[ "$guessed" == "false" ]]; do # Read user input echo -n "Enter your guess: " read guess # Validate input - check if it's a number if ! [[ "$guess" =~ ^[0-9]+$ ]]; then echo "Invalid input! Please enter a number between 1 and 100." continue fi # Check if guess is in valid range if [[ $guess -lt 1 || $guess -gt 100 ]]; then echo "Your guess must be between 1 and 100!" continue fi # Increment attempt counter ((attempts++)) # Check the guess if [[ $guess -eq $secret_number ]]; then echo "Congratulations! You guessed it in $attempts attempts!" guessed=true elif [[ $guess -lt $secret_number ]]; then echo "Too low! Try again." else echo "Too high! Try again." fi done # Ask if player wants to play again echo echo -n "Do you want to play again? (yes/no): " read play_again play_again=$(echo "$play_again" | tr '[:upper:]' '[:lower:]') if [[ "$play_again" == "yes" ]]; then echo echo "Starting new game..." fi done echo "Thanks for playing! Goodbye!"Solution 2: Using functions
    In this solution, I break down the game into modular functions, making the code more organized and reusable:
    generate_random(): Generates the secret number validate_input(): Handles all input validation play_round(): Contains the core game logic ask_replay(): Manages the replay prompt main(): Orchestrates the overall game flow #!/bin/bash # Number Guessing Game - Function-based Implementation # Function to generate random number generate_random() { echo $((RANDOM % 100 + 1)) } # Function to validate input validate_input() { local input=$1 # Check if input is a number if ! [[ "$input" =~ ^[0-9]+$ ]]; then echo "Invalid input! Please enter a number between 1 and 100." return 1 fi # Check if number is in range if [[ $input -lt 1 || $input -gt 100 ]]; then echo "Your guess must be between 1 and 100!" return 1 fi return 0 } # Function to play one round play_round() { local secret_number=$(generate_random) local attempts=0 local guess echo "I'm thinking of a number between 1 and 100." echo while true; do # Get user input echo -n "Enter your guess: " read guess # Validate input if ! validate_input "$guess"; then continue fi # Increment attempts ((attempts++)) # Check guess if [[ $guess -eq $secret_number ]]; then echo "Congratulations! You guessed it in $attempts attempts!" break elif [[ $guess -lt $secret_number ]]; then echo "Too low! Try again." else echo "Too high! Try again." fi done } # Function to ask for replay ask_replay() { local response echo echo -n "Do you want to play again? (yes/no): " read response response=$(echo "$response" | tr '[:upper:]' '[:lower:]') [[ "$response" == "yes" ]] } # Main program main() { echo "Welcome to the Number Guessing Game!" while true; do play_round if ! ask_replay; then break fi echo echo "Starting new game..." done echo "Thanks for playing! Goodbye!" } # Run the main program mainSolution 3: Enhanced version with difficulty levels
    I added a few extra features:
    Difficulty levels with different number ranges Performance feedback based on attempts Hints when guesses are very far off Better user experience with clear menu options #!/bin/bash # Number Guessing Game - Enhanced Version with Difficulty Levels # Function to display menu show_menu() { echo "Select difficulty level:" echo "1. Easy (1-50)" echo "2. Medium (1-100)" echo "3. Hard (1-200)" echo -n "Enter your choice (1-3): " } # Function to get range based on difficulty get_range() { case $1 in 1) echo 50 ;; 2) echo 100 ;; 3) echo 200 ;; *) echo 100 ;; # Default to medium esac } # Main game echo "Welcome to the Number Guessing Game!" echo play_again="yes" while [[ "$play_again" == "yes" ]]; do # Select difficulty show_menu read difficulty # Validate difficulty selection if ! [[ "$difficulty" =~ ^[1-3]$ ]]; then echo "Invalid choice! Using medium difficulty." difficulty=2 fi # Get range for selected difficulty max_number=$(get_range $difficulty) # Generate random number secret_number=$((RANDOM % max_number + 1)) attempts=0 echo echo "I'm thinking of a number between 1 and $max_number." echo # Game loop while true; do echo -n "Enter your guess: " read guess # Validate input if ! [[ "$guess" =~ ^[0-9]+$ ]]; then echo "Invalid input! Please enter a number." continue fi if [[ $guess -lt 1 || $guess -gt $max_number ]]; then echo "Your guess must be between 1 and $max_number!" continue fi ((attempts++)) # Check guess if [[ $guess -eq $secret_number ]]; then echo "Congratulations! You guessed it in $attempts attempts!" # Give performance feedback if [[ $attempts -le 5 ]]; then echo "Excellent! You're a mind reader!" elif [[ $attempts -le 10 ]]; then echo "Good job! That was quick!" else echo "Well done! Practice makes perfect!" fi break elif [[ $guess -lt $secret_number ]]; then echo "Too low! Try again." # Give hint for very far guesses if [[ $((secret_number - guess)) -gt $((max_number / 4)) ]]; then echo "(Hint: You're quite far off!)" fi else echo "Too high! Try again." # Give hint for very far guesses if [[ $((guess - secret_number)) -gt $((max_number / 4)) ]]; then echo "(Hint: You're quite far off!)" fi fi done # Ask for replay echo echo -n "Do you want to play again? (yes/no): " read play_again play_again=$(echo "$play_again" | tr '[:upper:]' '[:lower:]') if [[ "$play_again" == "yes" ]]; then echo echo "Starting new game..." echo fi done echo "Thanks for playing! Goodbye!"📖 Concepts to revise
    The solutions discussed here use some terms, commands and concepts and if you are not familiar with them, you should learn more about them.
    Variables: secret_number, attempts, guess Arithmetic operations: $RANDOM % 100 + 1, numeric comparisons Conditional statements: if/elif/else for guess validation and checking Loops: while loops, nested loops, continue statement Regular expressions: [[ "$guess" =~ ^[0-9]+$ ]] for number validation Functions: Modular code organization (Solutions 2 & 3) Input/Output: read command, echo with -n flag String manipulation: tr command for case conversion Command substitution: $(command) syntax 📚 Further reading
    If you are new to bash scripting, we have a streamlined tutorial series on Bash that you can use to learn it from scratch or use it to brush up the basics of bash shell scripting.
    Bash Scripting Tutorial Series for Beginners [Free]Get started with Bash Shell script learning with practical examples. Also test your learning with practice exercises.Linux HandbookAbhishek Prakash
  12. by: Adnan Shabbir
    Sat, 31 May 2025 12:15:51 +0000

    Tails is a Tor-based project inspired by the Debian Linux distro. Tails works on Tor Foundation, i.e., the onion router. It is supposed to be a secure OS and difficult to trace with ordinary tools/tricks.
    Tails is used to perform privacy-focused tasks without leaving digital traces. These tasks include accessing or monitoring the target, i.e., it is recommended to access the identity type of data ethically (with consent of the target).
    Today, this guide brings a brief walkthrough of the Tails OS and also lists the process to set up Tails.
    Tails OS | A Quick Walkthrough Tails Development and Merger With Tor Release Cycle Top Features of Tails OS Built-in Security and Privacy Tools for Maximum Anonymity Persistent Vs Non-Persistent Storage in Tails How to Install and Set up Tails on a USB Drive (Step-by-Step Guide) Hardware Requirements for Installing Tails Step 1: Download and Verify the Tails OS Disk Image (For USB or Virtual Machines) Step 2: Install Tails Should You Use Tails? | Technical Pros and Cons Conclusion Tails OS | A Quick Walkthrough
    Let’s have a quick walkthrough of the features, some facts, and tools that Tails has:
    Tails Development and Merger With Tor
    Tails was first released in 2009 as an iteration of Incognito, a Gentoo-based Linux distribution. The Tails project was originally named “Amnesia,” and now “Amnesia” is the default username/hostname of the Tails OS. In 2023, the Tails submitted a request to merge with Tor, which was completed in 2024, and now Tails is a Tor project. Release Cycle
    Tails usually release the update after every 6-8 weeks. However, the major release (Like 5.0, 6.0, 7.0) is expected approximately every 2 years. Top Features of Tails OS
    Communication via Tails is done using Tor (The Onion Router). Direct or non-Tor traffic is blocked by default. Can create persistent (keeping the data) and non-persistent (temporary) storage. Tails verifies and authenticates the Tails version you acquire. Wipes out the memory (RAM) after every reboot or shutdown, nullifying the chance of accessing the sensitive data, i.e., passwords, logins, etc, after restarts/ shutdowns. MAC Address Spoofing Built-in Security and Privacy Tools for Maximum Anonymity
    Tor Network: An Anonymous network to route traffic anonymously. Thunderbird: An email client to send/receive encrypted emails. KeePassXc: A password manager to securely save passwords. Electrum: Bitcoin wallet OnionShare: Sharing files/media anonymously MAT2: A tool to remove metadata from files, i.e., PDF. GnuPG (GPG): Tool for encrypting, signing, and verifying emails, using Public-Key cryptography. Persistent Vs Non-Persistent Storage in Tails
    Before proceeding to its setup, let‘s have a look at the difference between Persistent and Non-Persistent.
    Feature Persistent Non-Persistent Data Saving Yes No Boot Time Slight Longer Faster than Non-persistent Recommended For When you want to have the data in the upcoming sessions. Maximum Anonymity How to Install and Set up Tails on a USB Drive (Step-by-Step Guide)
    Why are you installing Tails? If the purpose is anonymity, you need to create a non-persistent Live USB. However, if the purpose is to learn and implement, then you can create a persistent one to keep the history and some data from the previous sessions.
    Recommended: Use Tails as a Live OS, i.e., a non-persistent OS. Not Recommended: Avoid installing it on your primary host or primary virtual machine, where traces can persist. Hardware Requirements for Installing Tails
    64-bit processor Minimum 2GB RAM (Recommended is 4GB) Minimum 8 GB USB drive (Recommended is 16GB) Step 1: Download and Verify the Tails OS Disk Image (For USB or Virtual Machines)
    Download the Tails (either for USB sticks or the ISO file for Virtual machines).

    Download Tails:

    Once downloaded, verify your downloaded version:

    Confirm that the verification is successful before proceeding further:

    Step 2: Install Tails
    Once done, you must have a USB bootable tool like balenaEtcher (if using Linux), Rufus (if using Windows), etc. Here, I have listed two possibilities:
    Installation Option 1: Installing Tails Using the GNOME Disks App Installation Option 2: Installing Tails Using the Balena Etcher  
    Installation Option 1: GNOME Disks App If you are using a GNOME desktop environment, you can make the Tails USB using the GNOME Disks Desktop application. Here’s the process.
    Attach the USB with the Linux OS, and open the “GNOME Disks” app. Now, select the USB and click the “vertical ellipsis”.

    It will then ask you to choose the Disk Image:

    Confirm to start writing Tails on USB:

    This will take a few minutes. Once all done, you can eject the drive and boot from the USB to run Tails in an isolated environment.
    Installation Option 2: Installing Tails Using the balenaEtcher First, you must download and install the Balena Etcher on your respective Linux distribution.
    Once installed, you have to make the USB bootable with the Tails disk image that you have already downloaded.
    Follow this guide to briefly understand how to install and use Balena Etcher
    Setting Up Persistent Storage and Administrator Password
    When you boot from Tails, you will have to pass through the following interface, where you can create persistent storage and set the administrator password.

    Persistent Storage: To keep the data, history for further sessions. Administrator Password: To handle the permissions or admin password required for installing applications. Now, you have to set the Tor connection, where you have two options, i.e., choose “Connect to Tor automatically”.

    This way, you can set anonymity through Tails.
    What is Tor/Onion Circuits: The Path that the Tor network uses to route traffic from a user’s device to the destination server with anonymity.
    Here’s the terminal look of the Tails:

    Here you go with the Tails:

    Should You Use Tails? | Technical Pros and Cons
    If you still have questions about whether Tails is a perfect fit for me or not, don’t worry, I have compiled a technical Pros/Cons of Tails to assist you in this regard:
    Technical Feature/Component Pros Cons Tor-based Anonymity Routes traffic through the Tor network by default. Some websites discourage the Tor Project. Data Security It’s RAM-dependent, and thus, data is wiped out after every boot, i.e., no data breach or tracing through data Data is lost, i.e., the new Tails user who is not familiar with non-persistent working. Once the user is familiar with the system, this issue will decrease. Privacy Tools Built-in tools for file sharing, password, email client, etc. Limited application availability (outside the default installation) No Installation Just plug and play. Plug in the live USB of Tails, and you are good to go. No hard and time-consuming installations. Unstable performance compared to the full-fledged installed system. Hardware Protection Tails spoofs MAC addresses. So, nothing beyond that when it comes to security. It may malfunction sometimes, i.e., in a conflict with the internet hardware devices. Disk Image Verification Disk Image is briefly verified on the Tails official website. It might be difficult for the new or non-technical users. System Footprint A very small footprint, i.e., negligible, because of the advanced encryption/protection level. This makes it not suitable for routine or daily tasks. Updates Frequent Updates,i.e., every 6 weeks. Create a bootable system with every update. Pro-Tip: For maximum security, always use the non-persistent USB for Tails and enjoy this state-of-the-art tool in the tech era.
    Conclusion
    Tails OS is one of the best anonymity tools based on the Debian distro and is a part of the Tor project. With one end in Open Source (Linux-based) and the other in anonymity (Tor project).
    Tails OS is installed and used as a Live non-persistent USB, which minimizes the risk of any traces. Today, I have drafted an in-depth review of the Tails OS, including its installation on a USB as well.
    FAQs:
    Q1: Is Tails OS Legal?
    Yes, Tails is legal. Tails is an open-source Debian-inspired Tor project. The Onion Routing (Tor) nature of Tails makes it suspicious but not illegal.
    Q2: Does Tails hide your IP?
    Tails is a Tor project, and when routing, it hides your IP and server information.
    Q3: Does Tails run in RAM?
    Since it’s an amnestic, no data or history is kept. This anonymity is due to RAM. It temporarily stores data and refreshes it after each session.
    Q4: What is the Tails filesystem?
    Tails works on the Ext4 file system, i.e., Fourth Extended Filesystem.
  13. by: Abhishek Kumar
    Sat, 31 May 2025 04:29:37 GMT

    In one of my earlier articles, I showed how you can preview HTML files inside Visual Studio Code. That setup worked well for testing static pages, but what if you want to go beyond markup and bring interactivity into the mix?
    With JavaScript being the backbone of the modern web and countless developers now diving into frameworks like React, Vue, and Svelte, being able to run JavaScript code directly inside VS Code becomes almost essential.
    Running JavaScript in the editor helps you avoid constant context-switching, reduces distractions, and gives you immediate feedback when debugging.
    There are two approaches here:
    Running JavaScript inside VS Code using Node.js: most efficient and editor-native approach. Run it in a browser or using extensions: handy for quick tests or visual feedback. Let's see about using them.
    Understanding the role of Node.js
    JavaScript was originally designed to run inside browsers, which come with their own JavaScript engines (like V8 in Chrome).
    Node.js takes that same V8 engine and brings it to your local machine. This lets you run JavaScript outside the browser, directly from the command line or terminal.
    It’s particularly useful for backend work, automation scripts, or just quick testing without the overhead of an HTML shell.
    If you're unsure whether Node.js is already installed on your system, open a terminal and type:
    node -vIf you see a version number, you’re all set. If not, you’ll need to download Node.js and follow the installation instructions for your operating system.
    We have covered node installation on Ubuntu.
    Install Node.js and npm on Ubuntu Linux [Free Cheat Sheet]Node.js and npm can be easily installed using the Ubuntu repository or the NodeSource repository. Learn both ways of installing Node.js on Ubuntu Linux.It's FOSSAbhishek PrakashSet up a JavaScript project
    Once everything’s installed, open VS Code and create a new folder for your project. Inside it, launch the terminal (Ctrl + ~ or Terminal > New Terminal) and run npm init -y.
    This initializes a basic project and creates a package.json file, which will be useful for managing your scripts and dependencies later.
    With the environment ready, create a new file named app.js and add a bit of JavaScript, for example:
    console.log("Hello, VS Code!"); To run it, simply type node app.js in the terminal.
    The output will appear immediately in the console, confirming that Node is executing your file properly.
    Add a custom script for simpler runs
    To make things smoother, especially as your project grows, it’s a good idea to define a custom script in your package.json file. Open that file and find the "scripts" section, then add:
    "start": "node app.js" This allows you to run your script just by typing npm start, instead of repeating the filename every time.
    Optional: Using the Code Runner extension
    If you prefer a quick way to execute small snippets without setting up a project, Code Runner can help. It’s a lightweight VS Code extension that runs code in a sandboxed output window.
    To get started:
    Open the Extensions tab in VS Code. Search for “Code Runner” and install it. Open a .js file, write some code, right-click, and select “Run Code.” For example, a file like example.js with:
    console.log("Hello from Code Runner!");It will output directly to VS Code’s "Output" tab.
    The main limitation here is that it doesn’t use the integrated terminal like we used above, which can restrict input/output behavior for more complex scripts.
    Wrapping up
    With Node.js set up inside VS Code, running JavaScript becomes a seamless part of your workflow, no browser tabs or external tools required.
    Whether you're testing a quick function or building out a larger project, using the terminal and custom npm scripts keeps things fast and distraction-free.
    Extensions like Code Runner can help for quick one-off tests, but for anything serious, sticking to the Node-powered method inside VS Code gives you more control, better error output, and a real development feel.
    Once this setup becomes second nature, jumping into frameworks like React or Express will feel a lot more natural too.
    Now that you’ve got the tools, go ahead, experiment, break stuff, debug, and build.
  14. by: Temani Afif
    Fri, 30 May 2025 13:45:43 +0000

    Ready for the second part? We are still exploring the shape() function, and more precisely, the arc command. I hope you took the time to digest the first part because we will jump straight into creating more shapes!
    As a reminder, the shape() function is only supported in Chrome 137+ and Safari 18.4+ as I’m writing this in May 2025.
    Sector shape
    Another classic shape that can also be used in pie-like charts.
    It’s already clear that we have one arc. As for the points, we have two points that don’t move and one that moves depending on how much the sector is filled.
    The code will look like this:
    .sector { --v: 35; /* [0 100]*/ aspect-ratio: 1; clip-path: shape(from top, arc to X Y of R, line to center); } We define a variable that will control the filling of the sector. It has a value between 0 and 100. To draw the shape, we start from the top, create an arc until the point (X, Y), and then we move to the center.
    Yes! Unlike the polygon() function, we have keywords for the particular cases such as top, bottom, left, etc. It’s exactly like background-position that way. I don’t think I need to detail this part as it’s trivial, but it’s good to know because it can make your shape a bit easier to read.
    The radius of the arc should be equal to 50%. We are working with a square element and the sector, which is a portion of a circle, need to fill the whole element so the radius is equal to half the width (or height).1
    As for the point, it’s placed within that circle, and its position depends on the V value. You don’t want a boring math explanation, right? No need for it, here is the formula of X and Y:
    X = 50% + 50% * sin(V * 3.6deg) Y = 50% - 50% * cos(V * 3.6deg) Our code becomes:
    .sector { --v: 35; /* [0 100] */ aspect-ratio: 1; clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--v) * 3.6deg)) calc(50% - 50% * cos(var(--v) * 3.6deg)) of 50%, line to center); } CodePen Embed Fallback Hmm, the result is not good, but there are no mistakes in the code. Can you figure out what we are missing?
    It’s the size and direction of the arc!
    Remember what I told you in the last article? You will always have trouble with them, but if we try the different combinations, we can easily fix the issue. In our case, we need to use: small cw.
    CodePen Embed Fallback Better! Let’s try it with more values and see how the shape behaves:
    CodePen Embed Fallback Oops, some values are good, but others not so much. The direction needs to be clockwise, but maybe we should use large instead of small? Let’s try:
    CodePen Embed Fallback Still not working. The issue here is that we are moving one point of the arc based on the V value, and this movement creates a different configuration for the arc command.
    Here is an interactive demo to better visualize what is happening:
    CodePen Embed Fallback When you update the value, notice how large cw always tries to follow the largest arc between the points, while small cw tries to follow the smallest one. When the value is smaller than 50, small cw gives us a good result. But when it’s bigger than 50, the large cw combination is the good one.
    I know, it’s a bit tricky and I wanted to study this particular example to emphasize the fact that we can have a lot of headaches working with arcs. But the more issues we face, the better we get at fixing them.
    The solution in this case is pretty simple. We keep the use of large cw and add a border-radius to the element. If you check the previous demo, you will notice that even if large cw is not producing a good result, it’s filling the area we want. All we need to do is clip the extra space and a simple border-radius: 50% will do the job!
    CodePen Embed Fallback I am keeping the box-shadow in there so we can see the arc, but we can clearly see how border-radius is making a difference on the main shape.
    There is still one edge case we need to consider. When the value is equal to 100, both points of the arc will have the same coordinates, which is logical since the sector is full and we have a circle. But when it’s the case, the arc will do nothing by definition and we won’t get a full circle.
    To fix this, we can limit the value to, for example, 99.99 to avoid reaching 100. It’s kind of hacky, but it does the job.
    .sector { --v: 35; /* [0 100]*/ --_v: min(99.99, var(--v)); aspect-ratio: 1; clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--_v) * 3.6deg)) calc(50% - 50% * cos(var(--_v) * 3.6deg)) of 50% large cw, line to center); border-radius: 50%; } Now our shape is perfect! And don’t forget that you can apply it to image elements:
    CodePen Embed Fallback Arc shape
    Similar to the sector shape, we can also create an arc shape. After all, we are working with the arc command, so we have to do it.
    We already have half the code since it’s basically a sector shape without the inner part. We simply need to add more commands to cut the inner part.
    .arc { --v: 35; --b: 30px; --_v: min(99.99, var(--v)); aspect-ratio: 1; clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--_v) * 3.6deg)) calc(50% - 50% * cos(var(--_v) * 3.6deg)) of 50% cw large, line to calc(50% + (50% - var(--b)) * sin(var(--_v) * 3.6deg)) calc(50% - (50% - var(--b)) * cos(var(--_v) * 3.6deg)), arc to 50% var(--b) of calc(50% - var(--b)) large ); border-radius: 50%; } From the sector shape, we remove the line to center piece and replace it with another line command that moves to a point placed on the inner circle. If you compare its coordinates with the previous point, you will see an offset equal to --b, which is a variable that defines the arc’s thickness. Then we draw an arc in the opposite direction (ccw) until the point 50% var(--b), which is also a point with an offset equal to --b from the top.
    I am not defining the direction of the second arc since, by default, the browser will use ccw.
    CodePen Embed Fallback Ah, the same issue we hit with the sector shape is striking again! Not all the values are giving a good result due to the same logic we saw earlier, and, as you can see, border-radius is not fixing it. This time, we need to find a way to conditionally change the size of the arc based on the value. It should be large when V is bigger than 50, and small otherwise.
    Conditions in CSS? Yes, it’s possible! First, let’s convert the V value like this:
    --_f: round(down, var(--_v), 50) The value is within the range [0 99.99] (don’t forget that we don’t want to reach the value 100). We use round() to make sure it’s always equal to a multiple of a specific value, which is 50 in our case. If the value is smaller than 50, the result is 0, otherwise it’s 50.
    There are only two possible values, so we can easily add a condition. If --_f is equal to 0 we use small; otherwise, we use large:
    .arc { --v: 35; --b: 30px; --_v: min(99.99, var(--v)); --_f: round(down,var(--_v), 50); --_c: if(style(--_f: 0): small; else: large); clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--_v) * 3.6deg)) calc(50% - 50% * cos(var(--_v) * 3.6deg)) of 50% cw var(--_c), line to calc(50% + (50% - var(--b)) * sin(var(--_v) * 3.6deg)) calc(50% - (50% - var(--b)) * cos(var(--_v) * 3.6deg)), arc to 50% var(--b) of calc(50% - var(--b)) var(--_c) ); } I know what you are thinking, but let me tell you that the above code is valid. You probably don’t know it yet, but CSS has recently introduced inline conditionals using an if() syntax. It’s still early to play with it, but we have found a perfect use case for it. Here is a demo that you can test using Chrome Canary:
    CodePen Embed Fallback Another way to express conditions is to rely on style queries that have better support:
    .arc { --v: 35; --b: 30px; --_v: min(99.99, var(--v)); --_f: round(down, var(--_v), 50); aspect-ratio: 1; container-name: arc; } .arc:before { content: ""; clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--_v) * 3.6deg)) calc(50% - 50% * cos(var(--_v) * 3.6deg)) of 50% cw var(--_c, large), line to calc(50% + (50% - var(--b)) * sin(var(--_v) * 3.6deg)) calc(50% - (50% - var(--b)) * cos(var(--_v) * 3.6deg)), arc to 50% var(--b) of calc(50% - var(--b)) var(--_c, large) ); @container style(--_f: 0) { --_c: small } } The logic is the same but, this feature requires a parent-child relation, which is why I am using a pseudo-element. By default, the size will be large, and if the value of --_f is equal to 0, we switch to small.
    CodePen Embed Fallback Note that we have to register the variable --_f using @property to be able to either use the if() function or style queries.
    Did you notice another subtle change I have made to the shape? I removed border-radius and I applied the conditional logic to the first arc. Both have the same issue, but border-radius can fix only one of them while the conditional logic can fix both, so we can optimize the code a little.
    Arc shape with rounded edges
    What about adding rounded edges to our arc? It’s better, right?
    Can you see how it’s done? Take it as a small exercise and update the code from the previous examples to add those rounded edges. I hope you are able to find it by yourself because the changes are pretty straightforward — we update one line command with an arc command and we add another arc command at the end.
    clip-path: shape(from top, arc to calc(50% + 50% * sin(var(--_v) * 3.6deg)) calc(50% - 50% * cos(var(--_v) * 3.6deg)) of 50% cw var(--_c, large), arc to calc(50% + (50% - var(--b)) * sin(var(--_v) * 3.6deg)) calc(50% - (50% - var(--b)) * cos(var(--_v) * 3.6deg)) of 1% cw, arc to 50% var(--b) of calc(50% - var(--b)) var(--_c, large), arc to top of 1% cw ); If you do not understand the changes, get out a pen and paper, then draw the shape to better see the four arcs we are drawing. Previously, we had two arcs and two lines, but now we are working with arcs instead of lines.
    And did you remember the trick of using a 1% value for the radius? The new arcs are half circles, so we can rely on that trick where you specify a tiny radius and the browser will do the job for you and find the correct value!
    CodePen Embed Fallback Conclusion
    We are done — enough about the arc command! I had to write two articles that focus on this command because it’s the trickiest one, but I hope it’s now clear how to use it and how to handle the direction and size thing, as that is probably the source of most headaches.
    By the way, I have only studied the case of circular arcs because, in reality, we can specify two radii and draw elliptical ones, which is even more complex. Unless you want to become a shape() master, you will rarely need elliptical arcs, so don’t bother yourself with them.
    Until the next article, I wrote an article for Frontend Masters where you can create more fancy shapes using the arc command that is a good follow-up to this one.
    Footnotes
    (1) The arc command is defined to draw elliptical arcs by taking two radii, but if we define one radius value, it means that the vertical and horizontal radius will use that same value and we have circular arcs. When it’s a length, it’s trivial, but when we use percentages, the value will resolve against the direction-agnostic size, which is equal to the length of the diagonal of the box, divided by sqrt(2).
    In our case, we have a square element so 50% of the direction-agnostic size will be equal to 50% of sqrt(Width² + Height²)/sqrt(2). And since both width and height are equal, we end with 50% of the width (or the height). ⮑

    Better CSS Shapes Using shape() — Part 2: More on Arcs originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  15. by: Abhishek Prakash
    Fri, 30 May 2025 17:30:45 +0530

    An interesting development came from Microsoft as it released a new terminal-based editor with open source license.
    I kind of liked it at first glance until I tried my hands on a shell script written in this editor and then I ran into:
    The issue is that it added the classic Windows-style line endings, which is not liked by UNIX-like systems.
    I knew it was too good to be true to have something perfect for Linux from Microsoft 🤦
    Here are the highlights of this edition :
    Open-source notification Inbox infrastructure Listmonk newsletter Historical view of system resource utilization Bang bang... shebang And memes, news and tools to discover 🚀 Level up your coding skills and build your own bots
    Harness the power of machine learning to create digital agents and more with hot courses like Learning LangChain, The Developer's Playbook for Large Language Model Security, Designing Large Language Model Applications, and more.
    Part of the purchase goes to Code for America! Check out the ebook bundle here.
    Humble Tech Book Bundle: Machine Learning, AI, and Bots by O’Reilly 2025Master machine learning with this comprehensive library of coding and programming courses from the pros at O’Reilly.Humble Bundle  
     
      This post is for subscribers only
    Subscribe now Already have an account? Sign in
  16. by: Abhishek Prakash
    Thu, 29 May 2025 04:29:31 GMT

    Important thing first. Ubuntu 20.04 LTS version will be reaching its end of life on 31st May. It was released in April 2020 and had a standard support of five years.
    Please check your Ubuntu version and if you are using 20.04, you can:
    Do a fresh installation of Ubuntu 24.04 LTS to get the latest packages. Upgrade to Ubuntu 22.04 LTS from your existing 20.04 installation, keeping your files intact. Opt for Ubuntu Pro, which will ensure you get essential security patches until 2030 but no new software. Ubuntu 20.04 LTS is Reaching End of Life — Here are Your OptionsUpgrade or sign-up for extended support before it is too late!It's FOSS NewsSourav RudraTime to plan your update.
    💬 Let's see what else you get in this edition
    A new Linux kernel release. File permission in Linux. GNU Taler payment system being approved for Swiss use. 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 HostingRun the finest Open Source web apps from $1.20/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
    GNU Taler has officially entered the Swiss market. Linux kernel 6.15 is here with a Rust-based NVIDIA driver. SteamOS now officially supports more handhelds than just the Steam Deck. Qt has introduced Qt Bridges, a new piece of tech for bridging Qt applications with other frameworks and programming languages. Rhino Linux's new UBXI KDE Desktop doesn't disappoint.
    Hands-On with Rhino Linux’s New UBXI KDE 6 DesktopRhino Linux’s first UBXI port is here!It's FOSS NewsSourav Rudra🧠 What We’re Thinking About
    Carmen from Mission Libre has started a petition to get Qualcomm to release fully-free drivers for their in-production chipsets. If the petition is signed by 5,000 people, a hardcopy of the petition and signatures will be mailed to Qualcomm's head office. We can get 5,000 signatures, can't we?
    Home | Tell Qualcomm: Publish Free Drivers for Modern Wi-Fi Chipsets!Tell Qualcomm: Publish Free Drivers for Modern Wi-Fi Chipsets!🧮 Linux Tips, Tutorials and More
    VS Code on Arch is possible and easy. Understand the concept of file permission. It's a must-know for Linux users. Want more from Obsidian? Our plugin guide can be helpful. Looking for some note taking apps suggestion? We have an extensive list.
    Top 16 Best Note Taking Apps For Linux [2025]Plenty of amazing note-taking apps for Linux. Here’s what we recommend you to check out.It's FOSSAnkush Das Why should you opt for It's FOSS Plus membership:
    ✅ Ad-free reading experience
    ✅ Badges in the comment section and forum
    ✅ Supporting creation of educational Linux materials
    Join It's FOSS Plus 👷 Homelab and Maker's Corner
    While it is a proprietary piece of hardware, Flexbar can be a nice addition to your Linux setup.
    Miss Apple’s Touch Bar? Flexbar Brings This Experience to LinuxWhile Apple has discontinued the Touch Bar, Linux users can now enjoy the same experience with Flexbar.It's FOSS NewsSourav RudraAlso, learn a thing or two about MCP servers, the latest buzzword in the (AI) tech world.
    ✨ Apps Highlight
    If you ever wanted to run an operating system inside your browser, then Puter is the solution for you. It is open source and can be self-hosted as well.
    Puter is a Complete, Fully Functional OS that Runs in Your Web BrowserRun an operating system straight from your browser.It's FOSS NewsSourav RudraAn It's FOSS reader created an FFmpeg AAC Audio Encoder Plugin for DaVinci Resolve. This will help you get effortless AAC audio encoding on Linux if you use DaVinci Resolve video editor.
    📽️ Videos I am Creating for You
    I tried Microsoft's new terminal editor on Linux! I hate to admit it but I liked what I saw here. This is an excellent approach. I wonder why Linux didn't have something like this before. See it in action 👇
    Subscribe to It's FOSS YouTube Channel🧩 Quiz Time
    Can you identify all the GitHub alternatives in this puzzle?
    GitHub Alternatives: PuzzleSolve this puzzle by figuring out the alternatives to GitHub!It's FOSSAnkush Das💡 Quick Handy Tip
    In Xfce, you can use the panel item "Directory Menu" to get quick access to files from anywhere. This is like the Places extension in GNOME, but better.
    In the configuration menu for it, provide the file extension in the following format *.txt;*.jsonc as shown in the screenshot above to access the files quickly. Clicking on those files opens it in the default app.
    🤣 Meme of the Week
    The ricing never stops! 👨‍💻
    🗓️ Tech Trivia
    On May 27, 1959, MIT retired the Whirlwind computer, a groundbreaking machine famous for pioneering real-time computing and magnetic core memory.
    🧑‍🤝‍🧑 FOSSverse Corner
    ProFOSSer Sheila is having an issue with MX Linux, can you help?
    MX Linux / XFCE missing desktop background image!I am at a loss as to how to fix a new issue on MX-Linux Xfce that started about 30 min ago. I was working on things and my windows are always only expanded far enough right so that I can still see my Conky (top-right on desktop). I clicked outside the window on Conky and it disappeared. So did the background image. Later, switching workspaces, I found the same was true on all of them and when I right clicked on the desktop, no context menu. I went in to the desktop settings and tried to apply a…It's FOSS CommunitySheila_Flanagan❤️ 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: Women in Tech
    Wed, 28 May 2025 21:38:08 +0000

    In this Q&A, we sit down with Tina Schniebs, Board Treasurer for Women in Technology (WIT) and a digital finance risk management Deputy Director at Ridgeline International. She shares her insights on the Leadership Foundry, her journey through the program and advice for women considering board service. Tina Schniebs, WIT Treasurer and Chair, Finance Committee Can you start by telling us a bit about your roles with WIT and Ridgeline International? At WIT, I serve as the Board Treasurer, overseeing the Finance Committee and ensuring our financials run smoothly. In my day job, I work in digital finance risk management, where I teach, consult and speak on how digitizing finance impacts our everyday lives and our federal, defense and intelligence communities – and how they can use technology, both offensively and defensively, to achieve their mission objectives. What is the Leadership Foundry and how did you get involved? WIT’s mission is to empower women in technology from the classroom to the boardroom, guiding women from early career stages through executive leadership and board service. The Leadership Foundry fulfills the second part of that mission. When I first heard about it, I had just started a business. I was heavily focused on getting it up and running, so I knew I was not yet in a position to take on a board seat within the company that we had grown. The program seemed like a great opportunity to better understand what board service entails and get connected with other organizations that are looking for board members with experience bringing up a small business successfully. How has the program evolved over time and how did the new certification enhance your experience? I first joined during COVID, which was challenging due to the virtual format, but the program has since evolved to include a board certification, providing a clear focus on preparing participants for actual board roles. The changes that they made for this new cohort really nailed down the point of the experience – it’s not just learning what being a board member is like, but actually wanting to be on a board and being prepared to do it. While the certification isn't strictly necessary, it adds value by clearly defining the purpose of the Leadership Foundry for participants. It provides a structured curriculum and connects participants with a network of people as part of the National Association of Certified Directors (NACD), helping women access board opportunities. It’s not just about learning what a board is; it's about preparing to serve on one. Can you describe the structure of the Leadership Foundry program? The program includes monthly in-person meetings featuring guest speakers with board experience, covering topics like private company boards, venture funding and public board challenges. There’s also a weekly virtual study group to discuss the certification material, fostering a collaborative learning environment. My cohort was small, with just six women, which allowed for close networking. My cohort of women were very much ready to do board service, or had done some sort of board service in the past. So they were very focused on, I want a public company board seat – I'm looking for access to that board seat. How do I get that? What's the networking that I need to do? What does public company service look like versus private company service? What's the difference between a non-profit board and a for-profit board? How did the program help you grow professionally? The most transformative aspect was learning to shift my mindset from executive decision-making to board-level thinking. Being an executive doesn't necessarily prepare you for a board role, where the focus is on risk management and strategic oversight rather than day-to-day operations. Networking with accomplished women in my cohort and hearing firsthand accounts from experienced board members were also invaluable. In fact, I did a think tank event with one of the ladies from the cohort, Theresa Caragol, about risk management and things that we learned about each other. I think it's also given me a lot more confidence in stepping up to the table and saying: I have a voice too. I understand this stuff. I went through this training program, so I know what I'm talking about. I know that this is what we're supposed to be doing, rather than just relying on your instincts. It gives you a little bit more certainty in the guidance that you're providing to the organization. How did the program push you outside of your comfort zone? How did it help you address challenges unique to women in leadership? The industry I've been in for 23 years is male dominated, and I was the only woman at our company for the first 13 months. It was very comfortable in that position, but being with this cohort of women helped me to better understand what their challenges are and how they navigated their career fields to get where they were. One of the speakers that joined us, for instance, was a man that is doing venture funding in the seed capital rounds. It came up during that discussion that there is less funding provided to women, and particularly minority women, in the seed funding fields. That really opened a neuron chain for me. I didn't realize that there was that kind of bias because as a financial advisor, you look at the balance, your profitability or the numbers. I'm a big advocate of financial privacy – if the applications were filled out in a way where you couldn't see the biographic information of the person actually filing the application, wouldn’t that make the playing field more fair? Companies should only be quantitatively evaluating a company for their growth potential, not qualitatively evaluating the employees or the founders. The certification test was also tough, requiring a shift in thinking from executive to risk manager. The test involves scenario-based questions with a unique scoring system where answering incorrectly hurts your score, but not answering at all has no impact. It was a challenging format, but it reinforced the mindset shift the program aims to teach. What advice would you give to women considering applying to join the Leadership Foundry? It's important to understand why you want to pursue board service. The program is ideal for those with executive experience who are ready to make the transition, not for middle managers or those still considering their career direction. If you want to get in and you think that the Leadership Foundry is the right step for you, you need to focus on the reasons that you want to be a director or a board member – what is the thing that you want to do next in your career and why? Board service, in a lot of situations, is a part time position and it doesn't pay. And if it does pay, you've bought stock, or you had to financially invest in the company that you're getting on the board for. So you really have to think, am I willing to split my time between their full time job and a board position? If you're unsure, there are resources to help you decide if board service is right for you. But we also need a space for women within WIT to ask the questions: What is board service? How does it work? Is it right for me? Is this the next step in my career that I actually want to take? Or do I want to specialize in my area? Do I want to go into executive leadership? Do you have a risk mindset? Do you have the kind of a mindset that puts you in a position to make hard decisions outside of what an executive would make? That's a consideration that you need to make, because board service is not for everybody. It’s okay to be a subject matter expert or operator without pursuing executive or board roles. We need to emphasize that career satisfaction comes from finding the right path, not necessarily following traditional progressions. Ready to take your career to the next level? Applications for The Leadership Foundry are now open! Apply Now
  18. by: Adnan Shabbir
    Wed, 28 May 2025 05:55:55 +0000

    Ubuntu 25.04, codenamed Plucky Puffin, released in April 2025, is an interim release supported for 9 months (until Jan 2026). Ubuntu 25.04 is equipped with experimental features that will be tested until the next LTS, 26.04, and if declared stable, these features will be carried forward and may be part of Ubuntu 26.04, the next Ubuntu LTS in line.
    In today’s guide, I’ll give you a brief overview of Ubuntu 25.04, what it looks like, and what other features are included in the development and testing.
    Outline:
    What’s New in Ubuntu 25.04 Codenamed Plucky Puffin? GNOME 48 Kernel .14 Security Center Updated apt Installation Interface Well-Being HDR Display – High Dynamic Range Other Notable Updates in Ubuntu 25.04 How to Upgrade to Ubuntu 25.04 Conclusion What’s New in Ubuntu 25.04 Codenamed Plucky Puffin?
    With every interim release (just like Ubuntu 25.04), there comes a list of new features to be tested and some improvements to existing functionalities. This time we are focusing on Ubuntu 25.04, some major as well as minor updates will be provided:
    GNOME 48
    Ubuntu 24.04 is based on GNOME 46, whereas at the moment of writing this post, Ubuntu 25.04 is being experimented with GNOME 48. As of now, GNOME 48 is more modern and graphics-friendly, which is always, i.e., the latest version is supposed to overcome the deficiency of the previous GNOME version and improve over time.

    Kernel 6.14
    The kernel is the central nervous system of Linux, i.e., a bridge between the hardware and the software. Ubuntu 25.04 comes with a Kernel 6.14 (Upstream), i.e., developed and maintained by Linus Torvalds and the Linux kernel maintainers.
    The first official release of Ubuntu 24.04 contained the Kernel 6.8. However, Ubuntu 24.04.2 is now updated to the Linux Kernel 6.11.
    Security Center
    Although Ubuntu is an open-source OS and is more secure than other OSs. However, to align with this top-tech era, Ubuntu might be seeking some additional application support. These applications require some permissions that a user has to give for smooth functionality. To deal with such permissions, Ubuntu has released a Security Center in this release, so that users may turn on or off the permissions.
    Here’s the initial interface of the Security Center, where you can see that the feature is experimental at the moment.

    If you enable it, the strictly confined apps request permissions. The app permissions can be checked in the settings, i.e., “Settings > Apps”
    Updated apt Installation Interface
    An interactive UI for the apt-based installations and uninstallations:

    Uninstalling:

    Well-Being
    This is about the well-being of the Ubuntu lovers. The users can enable it and set the following features:
    Screen Time: Set the average screen time usage. Eyesight Reminder: A reminder to look away from the screen. Movement Reminder: A reminder to move around.
    Document Viewer (PDF Viewer)
    Ubuntu 25.04 is now equipped with a built-in Document Viewer for various types of files. You can open a variety of files on this viewer, i.e., PDF, comic books, DjVU, and TIFF documents. Here’s the document viewer:

    HDR Display – High Dynamic Range
    High Dynamic Range (HDR) is a state-of-the-art technology to provide better display with advanced coloring sense of the HDR technology. This is one of the significant additions in this update list. If you have an HDR monitor, now, you can attach it to your Ubuntu 25.04 to experience HDR displays.
    Head over to “Settings > Display > HDR” to manage it.
    Other Notable Updates in Ubuntu 25.04
    Color to Color Management:
    The Color section in the “Settings” has been replaced with Color Management in the Settings.

    Timezone in Events:
    Ubuntu 25.04 provides timezone support while creating events in the calendar. Here’s how you can locate it in the Calendar app of Ubuntu 25.04:

    JPEG XL Image Support:
    JPEG XL is an image type (an enhanced JPEG), and now it is supported by Ubuntu and providing a better experience for the users.
    Notification Grouping:
    Ubuntu 25.04 has now offered a notification grouping inside the notifications, making it easier for users to navigate through multiple notifications.
    Yaru Theme:
    The icon and theme experience is better than the previous releases. The icons are now more dynamic and are well integrated with the accent color support.
    Updated Network Manager:
    Ubuntu 25.04 has an updated Network Manager 1.52, whereas Ubuntu 24.04.2 (released parallel to Ubuntu 25.04) has 1.46. The significant change is that Network Manager 1.52 is more aligned towards IPv6 as compared to the 1.46 version.
    Chrony (Network Time Protocol):
    Ubuntu 25.04 has adopted Chrony as its Network Time Protocol client (SUSE and RHEL inspired), which synchronizes the system time as per the NTP servers, i.e., a GPS receiver.
    Until now, Ubuntu has been using “systemd-timesync” as its Network Time Protocol client, which is also known as SNTP (Simple Network Time Protocol). The SNTP synchronizes the system clock with the remote server and has less accuracy when compared with Chrony (Full NTP).
    What is NTP? The purpose of the NTP is to synchronize the clocks of the systems over a network to ensure the security, performance, event coordination, and logging. NTP ensures the time sync is as accurate as possible, i.e., in milliseconds / submilliseconds. Developer Tools and Libraries:
    Since Ubuntu is well-liked in the developer community, the Ubuntu contributors continuously work on providing updated tools. Ubuntu 25.04 is equipped with updated tools, i.e., Python, GCC, Rust, and Go.
    Similarly, a few of the developers associated libraries are also upgraded, i.e., glibc, binutils, and OpenSSL.
    Gaming Support (NVIDIA Dynamic Boost):
    The NVIDIA dynamic boost enables the gamer to manage the power between the CPU and GPU. This is now enabled by default in Ubuntu 25.04.
    System Monitor’s Interface:
    Ubuntu’s system monitor shows information about the processes, resources, and file systems. In Ubuntu 25.04, there is a slight change in the interface of the Ubuntu System Monitor. For instance, the info inside the processes tab is restricted to, i.e., ID, CPU, Memory, Disk Write, and Disk Read. Here’s the interface where you can see this.

    However, in older versions, the Processes tab has some additional info for each process:

    That’s all from the notable features of Ubuntu 25.04.
    Would you like to upgrade your Ubuntu to Ubuntu 25.04?
    How to Upgrade to Ubuntu 25.04 Plucky Puffin
    If you are using any other release of Ubuntu (Ubuntu 25.10 or Ubuntu 24.04), you can easily upgrade to Ubuntu 25.04. Let’s go through the steps to upgrade:
    Important Note: If you are using a Ubuntu LTS release other than Ubuntu 24.04, then you have to first upgrade to Ubuntu 24.04:
    Upgrade Ubuntu to the Latest LTS Once upgraded to Ubuntu 24.04, you are now ready to follow the steps below and upgrade to Ubuntu 24.10.
    Step 1: Upgrade Your Ubuntu to Ubuntu 24.10
    Since it is an interim release, you must have the previous release installed to get Ubuntu 25.04. Here’s how you can upgrade to Ubuntu 24.10:
    Update and upgrade the system repositories: sudo apt update && sudo apt upgrade
    Note: It is recommended to use “sudo apt autoremove” after update/upgrade, to clean up the system from any useless dependencies/packages that are not required.
    If you are using Ubuntu 24.04 LTS, then you have to enable the non-LTS release upgrade. For that, open the release-upgrader file in an editor: sudo nano /etc/update-manager/release-upgrades Now, change the “Prompt” parameter’s value from “lts” to “normal”, as can be seen below:

    Start the upgrade using the do-release-upgrade command: sudo do-release-upgrade Here you go:

    Press “y” to proceed with the installation:

    While upgrading, you will be prompted several times asking for acceptance of the changes being processed:

    Step 2: Upgrade to Ubuntu 25.04
    Once you are in Ubuntu 24.10, use the do-release command again to upgrade to Ubuntu 25.04:
    sudo do-release-upgrade Note: If you get any prompt like “please install all updates available for your release”, then use the command “sudo apt dist-upgrade” and reboot to fix it.

    Here’s the Ubuntu 25.04:

    That’s all from this guide.
    Conclusion
    Ubuntu 25.04, codenamed “Plucky Puffin”, is an interim Ubuntu release supported for 9 months. Ubuntu 25.04, released in April 2025, features the updated GNOME (48), updated Kernel (6.14), an improved apt version (3.0), and a security center. Other features include the HDR display, enhanced color management, timezone support in events, etc.
    This post briefly lists the notable features of Ubuntu 25.04 and also explains the process to upgrade to Ubuntu 25.04.
    FAQS
    How Long Will Ubuntu 25.04 be Supported?
    Ubuntu 25.04 will be supported until January 2026. Since Ubuntu 25.04 is an interim release and an Ubuntu interim release is supported for 9 months after its release.
    Is Ubuntu 25.04 LTS?
    No, Ubuntu 25.04 is an interim release, not an LTS. The current latest LTS is Ubuntu 24.04 codenamed Noble Numba, and the next in line LTS is Ubuntu 26.04.
    How to Upgrade to Ubuntu 25.04?
    First, upgrade to Ubuntu 24.04, then to 24.10, and from there, you can upgrade to Ubuntu 25.10.
  19. by: Abhishek Prakash
    Wed, 28 May 2025 03:29:07 GMT

    There are two main choices for getting VS Code on Arch Linux:
    Install Code - OSS from Arch repositories Install Microsoft's VS Code from AUR I know. It's confusing. Let me clear the air for you.
    VS Code is an open source project but the binaries Microsoft distributes are not open source. They have telemetry enabled in it.
    Code - OSS is the actual open source version of VS Code.
    Think of Code - OSS as Chromium browser and VS Code as Google Chrome (which is based on Chromium browser).
    Another thing here is that some extensions will only work in VS Code, not in the de-Micorsoft Code - OSS.
    This is why you should think it through if you want to use Microsoft's VS Code or its 100% open sourced version.
    Let me show you the steps for both installation.
    Method 1: Install Code - OSS
    ✅ Open source version of Microsoft VS Code
    ✅ Easy to install with a quick pacman command
    ❌ Some extensions may not workThis is simple. All you have to do is to ensure that your Arch system is updated:
    pacman -SyuAnd then install Code - OSS with:
    pacman -S codeIt cannot be simpler than this, can it?
    As I mentioned earlier, you may find some extensions that do not work in the open source version of Code.
    Also, I had noticed earlier that Ctrl+C - Ctrl+V was not working for copy paste. Instead, it was defaulted to Ctrl+Shift+C and Ctrl+Shift+V for reasons not known to me. I had not made any changes to key bindings or had opted for a Vim plugin.
    Removing Code OSS
    Removal is equally simple:
    sudo pacman -R codeMethod 2: Install the actual Microsoft's VS Code
    ✅ Popular Microsoft VS Code that is used by most people
    ✅ Access to all proprietary features and extensions in the marketplace
    ❌ Installation may take effort if you don't have an AUR helperIf you don't care too much about ethics, open source principles and just want to code without thinking it too much, go with VS Code.
    There are a couple of VS Code offerings available in the AUR but the official one is this.
    Before installing it, you should remove Code OSS
    sudo pacman -R codeIf you have an AUR helper like yay already installed, use it like this:
    yay -S visual-studio-code-binOtherwise, install yay first and then use it to install the desired package.
    Don't be deceived by the pretty looking screenshot above. I was using a different theme in VS Code.
    Removal
    You can use your AUR helper or the super reliable pacman command to remove Microsoft VS Code from Arch Linux.
    sudo pacman -R visual-studio-code-binI let you enjoy your preferred version of VS Code on Arch Linux. Please feel free to use the comment section if you have questions or suggestions.
  20. By: Janus Atienza
    Tue, 27 May 2025 18:22:59 +0000

    In today’s world, managing shipments and packages has become an important milestone for both personal and business use. For Linux enthusiasts and those who prefer open source tools, there are several powerful ways to track packages effectively without the need for paid software. This approach provides flexibility, security, and control over the tracking process. Let’s take a look at how open source tools can help with shipping management and why Linux is a great platform for these tasks.

    Package Tracking Tools
    Linux, being a versatile and open operating system, offers a variety of package tracking tools that meet the different needs of users. These tools allow both individual users and businesses to track shipments across multiple carriers, all in one place, without having to pay for expensive tracking services.
    The first step in tracking packages is to be able to integrate with different carriers such as FedEx, UPS, DHL, or local postal services. Open source tools can help centralize tracking across these platforms, reducing the need to visit multiple websites for updates. Such tools often pull real-time shipment information from multiple carriers and present it in a user-friendly interface, with minimal user effort.
    Linux users can set up custom scripts to automate the package tracking process. Linux also allows you to set up regular checks and integrate package tracking with other business operations.
    How Open Source Tools Improve Delivery Management
    Using open source tools for delivery management offers several benefits, especially when it comes to tracking multiple packages at once or managing logistics for a business. Here’s how these tools improve the process:
    Transparency and Control. With open source tools, you have complete control over how your package data is processed. Collaboration and Scalability. Open source tools make it easy to scale your package tracking system. Cost-effective delivery management. Open source package tracking tools are usually free to use, and the only cost is the time spent installing and configuring them.
    Tracking packages doesn’t have to be a complicated or expensive process. By leveraging the power of Linux and open source tools, users can gain complete control over their delivery management process. The right tools, combined with the flexibility of Linux, can transform the way you manage your deliveries, ensuring that your shipments are always on track.
    The post Parcel Tracking and Linux: Using Open-Source Tools for Delivery Management appeared first on Unixmen.
  21. YAML Validator

    by: Abhishek Prakash
    Tue, 27 May 2025 21:57:07 +0530

    Paste your YAML content or upload a file to validate syntax. Scroll down to see the details on the errors, if any.
    YAML Validator Tool .yv-wrapper * { margin: 0; padding: 0; box-sizing: border-box; } .yv-wrapper { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; display: flex; align-items: center; justify-content: center; } .yv-container { max-width: 1200px; width: 100%; } .yv-editor-section { border-radius: 12px; height: 500px; display: flex; flex-direction: column; margin-bottom: 20px; } .yv-section-title { font-size: 1.2em; color: #333; margin-bottom: 15px; font-weight: 600; flex-shrink: 0; } .yv-editor-section .CodeMirror { height: 100%; border-radius: 8px; font-size: 14px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .yv-controls { display: flex; gap: 15px; margin-bottom: 20px; flex-wrap: wrap; } .yv-button { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; padding: 12px 24px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 6px rgba(102, 126, 234, 0.2); } .yv-button:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(102, 126, 234, 0.3); } .yv-button:active { transform: translateY(0); } .yv-file-input-wrapper { position: relative; overflow: hidden; display: inline-block; } .yv-file-input-wrapper input[type=file] { position: absolute; left: -9999px; } .yv-file-input-label { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); color: white; border: none; padding: 12px 24px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: inline-block; box-shadow: 0 4px 6px rgba(240, 147, 251, 0.2); } .yv-file-input-label:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(240, 147, 251, 0.3); } .yv-validation-result { margin-top: 20px; } .yv-success { background: linear-gradient(135deg, #d4fc79 0%, #96e6a1 100%); color: #2d5016; padding: 15px 20px; border-radius: 8px; font-weight: 600; display: flex; align-items: center; gap: 10px; } .yv-error { background: linear-gradient(135deg, #fc6076 0%, #ff9a44 100%); color: white; padding: 15px 20px; border-radius: 8px; margin-bottom: 15px; font-weight: 500; box-shadow: 0 4px 6px rgba(252, 96, 118, 0.2); } .yv-error-details { background: #fff; color: #333; border-left: 4px solid #fc6076; padding: 15px; border-radius: 4px; font-family: 'Courier New', monospace; font-size: 14px; line-height: 1.6; white-space: pre-wrap; word-break: break-word; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); margin-top: 10px; } .yv-error-details strong { display: block; margin-bottom: 5px; color: #d32f2f; } .yv-error-line { background: rgba(252, 96, 118, 0.1); border-left: 3px solid #fc6076; margin-left: -15px; padding-left: 12px; } .yv-footer { text-align: center; margin-top: 30px; color: #666; font-size: 14px; } .yv-sample-btn { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); box-shadow: 0 4px 6px rgba(79, 172, 254, 0.2); } .yv-sample-btn:hover { box-shadow: 0 6px 12px rgba(79, 172, 254, 0.3); } .yv-clear-btn { background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); box-shadow: 0 4px 6px rgba(250, 112, 154, 0.2); } .yv-clear-btn:hover { box-shadow: 0 6px 12px rgba(250, 112, 154, 0.3); } Validate YAML Load YAML File Load Sample Clear YAML Input
    Paste your YAML content or upload a file to validate syntax.
  22. by: Daniel Schwarz
    Tue, 27 May 2025 13:02:32 +0000

    The reading-flow and reading-order proposed CSS properties are designed to specify the source order of HTML elements in the DOM tree, or in simpler terms, how accessibility tools deduce the order of elements. You’d use them to make the focus order of focusable elements match the visual order, as outlined in the Web Content Accessibility Guidelines (WCAG 2.2).
    To get a better idea, let’s just dive in!
    (Oh, and make sure that you’re using Chrome 137 or higher.)
    reading-flow
    reading-flow determines the source order of HTML elements in a flex, grid, or block layout. Again, this is basically to help accessibility tools provide the correct focus order to users.
    The default value is normal (so, reading-flow: normal). Other valid values include:
    flex-visual flex-flow grid-rows grid-columns grid-order source-order Let’s start with the flex-visual value. Imagine a flex row with five links. Assuming that the reading direction is left-to-right (by the way, you can change the reading direction with the direction CSS property), that’d look something like this:
    CodePen Embed Fallback Now, if we apply flex-direction: row-reverse, the links are displayed 5-4-3-2-1. The problem though is that the focus order still starts from 1 (tab through them!), which is visually wrong for somebody that reads left-to-right.
    CodePen Embed Fallback But if we also apply reading-flow: flex-visual, the focus order also becomes 5-4-3-2-1, matching the visual order (which is an accessibility requirement!):
    <div> <a>1</a> <a>2</a> <a>3</a> <a>4</a> <a>5</a> </div> div { display: flex; flex-direction: row-reverse; reading-flow: flex-visual; } CodePen Embed Fallback To apply the default flex behavior, reading-flow: flex-flow is what you’re looking for. This is very akin to reading-flow: normal, except that the container remains a reading flow container, which is needed for reading-order (we’ll dive into this in a bit).
    For now, let’s take a look at the grid-y values. In the grid below, the grid items are all jumbled up, and so the focus order is all over the place.
    CodePen Embed Fallback We can fix this in two ways. One way is that reading-flow: grid-rows will, as you’d expect, establish a row-by-row focus order:
    <div> <a>1</a> <a>2</a> <a>3</a> <a>4</a> <a>5</a> <a>6</a> <a>7</a> <a>8</a> <a>9</a> <a>10</a> <a>11</a> <a>12</a> </div> div { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 100px; reading-flow: grid-rows; a:nth-child(2) { grid-row: 2 / 4; grid-column: 3; } a:nth-child(5) { grid-row: 1 / 3; grid-column: 1 / 3; } } CodePen Embed Fallback Or, reading-flow: grid-columns will establish a column-by-column focus order:
    CodePen Embed Fallback reading-flow: grid-order will give us the default grid behavior (i.e., the jumbled up version). This is also very akin to reading-flow: normal (except that, again, the container remains a reading flow container, which is needed for reading-order).
    There’s also reading-flow: source-order, which is for flex, grid, and block containers. It basically turns containers into reading flow containers, enabling us to use reading-order. To be frank, unless I’m missing something, this appears to make the flex-flow and grid-order values redundant?
    reading-order
    reading-order sort of does the same thing as reading-flow. The difference is that reading-order is for specific flex or grid items, or even elements in a simple block container. It works the same way as the order property, although I suppose we could also compare it to tabindex.
    Note: To use reading-order, the container must have the reading-flow property set to anything other than normal.
    I’ll demonstrate both reading-order and order at the same time. In the example below, we have another flex container where each flex item has the order property set to a different random number, making the order of the flex items random. Now, we’ve already established that we can use reading-flow to determine focus order regardless of visual order, but in the example below we’re using reading-order instead (in the exact same way as order):
    div { display: flex; reading-flow: source-order; /* Anything but normal */ /* Features at the end because of the higher values */ a:nth-child(1) { /* Visual order */ order: 567; /* Focus order */ reading-order: 567; } a:nth-child(2) { order: 456; reading-order: 456; } a:nth-child(3) { order: 345; reading-order: 345; } a:nth-child(4) { order: 234; reading-order: 234; } /* Features at the beginning because of the lower values */ a:nth-child(5) { order: -123; reading-order: -123; } } CodePen Embed Fallback Yes, those are some rather odd numbers. I’ve done this to illustrate how the numbers don’t represent the position (e.g., order: 3 or reading-order: 3 doesn’t make it third in the order). Instead, elements with lower numbers are more towards the beginning of the order and elements with higher numbers are more towards the end. The default value is 0. Elements with the same value will be ordered by source order.
    In practical terms? Consider the following example:
    div { display: flex; reading-flow: source-order; a:nth-child(1) { order: 1; reading-order: 1; } a:nth-child(5) { order: -1; reading-order: -1; } } CodePen Embed Fallback Of the five flex items, the first one is the one with order: -1 because it has the lowest order value. The last one is the one with order: 1 because it has the highest order value. The ones with no declaration default to having order: 0 and are thus ordered in source order, but otherwise fit in-between the order: -1 and order: 1 flex items. And it’s the same concept for reading-order, which in the example above mirrors order.
    However, when reversing the direction of flex items, keep in mind that order and reading-order work a little differently. For example, reading-order: -1 would, as expected, and pull a flex item to the beginning of the focus order. Meanwhile, order: -1 would pull it to the end of the visual order because the visual order is reversed (so we’d need to use order: 1 instead, even if that doesn’t seem right!):
    div { display: flex; flex-direction: row-reverse; reading-flow: source-order; a:nth-child(5) { /* Because of row-reverse, this actually makes it first */ order: 1; /* However, this behavior doesn’t apply to reading-order */ reading-order: -1; } } CodePen Embed Fallback reading-order overrides reading-flow. If we, for example, apply reading-flow: flex-visual, reading-flow: grid-rows, or reading-flow: grid-columns (basically, any declaration that does in fact change the reading flow), reading-order overrides it. We could say that reading-order is applied after reading-flow.
    What if I don’t want to use flexbox or grid layout?
    Well, that obviously rules out all of the flex-y and grid-y reading-flow values; however, you can still set reading-flow: source-order on a block element and then manipulate the focus order with reading-order (as we did above).
    How does this relate to the tabindex HTML attribute?
    They’re not equivalent. Negative tabindex values make targets unfocusable and values other than 0 and -1 aren’t recommended, whereas a reading-order declaration can use any number as it’s only contextual to the reading flow container that contains it.
    For the sake of being complete though, I did test reading-order and tabindex together and reading-order appeared to override tabindex.
    Going forward, I’d only use tabindex (specifically, tabindex="-1") to prevent certain targets from being focusable (the disabled attribute will be more appropriate for some targets though), and then reading-order for everything else.
    Closing thoughts
    Being able to define reading order is useful, or at least it means that the order property can finally be used as intended. Up until now (or rather when all web browsers support reading-flow and reading-order, because they only work in Chrome 137+ at the moment), order hasn’t been useful because we haven’t been able to make the focus order match the visual order.
    What We Know (So Far) About CSS Reading Order originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  23. by: Abhishek Prakash
    Tue, 27 May 2025 01:53:31 GMT

    How do you get help in the Linux command line?
    On Linux, there are man pages that come preloaded with any distribution. The man pages are basically help pages which you can access using the terminal.
    You get an instruction manual when you purchase a new gadget, right? It is just like that.
    If you want to know what a command does, just use the 'man' keyword followed by the command you would like to know about. While it may seem pretty straightforward, the user experience is a bit dull, as it is all a bunch of text without any decorations or any other features.
    There are some man page alternatives that have tried to modernize the user experience, or give a specific focus to the man pages for particular users. Let me share my quick experience with them.
    Subscribe to It's FOSS YouTube Channel1. Qman
    Qman is a modern manual page viewer with navigation, scrolling, hyperlink, and table of contents support.
    It aims to be fast and offer a couple of features at the same time being a terminal-focused tool.
    Qman terminal interfaceKey Features:
    Index page that displays all manual pages available on the system, sorted alphabetically and organized by section. Hyperlinks to other manual pages, URLs and email addresses. Table of Contents for each man pages Incremental search for manual pages and free page text search. Mouse support Navigation history On-line help Fully configurable using an INI-style config file Qman Command Working
    Installation
    This supports Arch Linux for easy installation using the following command:
    yay -Syu qmanFor other systems, you need to build it from source
    Qman2. TLDR
    Love cheat sheets? So, you do not have to waste your time scrolling through a barrage of descriptions? That's what TLDR helps you with.
    It gives short and actionable information for commands to follow.
    TLDR workingKey Features:
    Community-maintained help pages. Simpler, more approachable complement to traditional man pages. Help pages focused on practical examples TL;DR stands for "Too Long; Didn't Read". It originated as Internet slang, where it is used to indicate that a long text (or parts of it) has been skipped as too lengthy. Installation
    🚧You cannot have tldr and tealdeer installed at the same time.If you need to install Snap for Ubuntu, here is the command to do that:
    sudo snap install tldrFor Arch Linux and Fedora, the commands are (respectively):
    sudo pacman -Syu tldr sudo dnf install tldrtldr3. Tealdeer
    If you want TLDR tool, but built on Rust, Tealdeer should be your pick. Simplified, example based and community-driven man pages.
    Tealdeer workingI noticed an interesting thing about the project's name and I'll quote it here below from their GitHub page:
    Installation
    It is available on Debian, Arch Linux, and Fedora repos:
    sudo apt install tealdeer sudo pacman -Syu tealdeer sudo dnf install tealdeerThere are static binary builds for Linux only. You can also install via cargo:
    cargo install tealdeerOnce installed, run the command below to update the cache:
    tldr --updateTo get shell completion in bash:
    cp completion/bash_tealdeer /usr/share/bash-completion/completions/tldrTealdeer4. Navi Cheat Sheet
    If you favored a cheat sheet, and want an interactive UI to complement the same, Navi Cheat Sheet is the answer.
    Navi Interactive Cheat Sheet
    Key Features:
    Browse through cheat sheets and execute commands. Set up your own config file Change colors Can be either used as a command or as a shell widget (à la Ctrl-R). Install
    In Arch Linux and Fedora, use the commands below:
    sudo pacman -Syu navi sudo dnf install naviYou can also try using Homebrew:
    brew install naviOnce installed, run navi. It will suggest a command to add a default set of cheat sheets. Run it:
    navi repo add denisidoro/cheatsAdd Default Set of Cheat Sheets in Navi
    Navi GitHub5. Cheat.sh
    If your focus is only on Cheat sheets, and get the best of community-driven inputs for the same, Cheat.sh is the perfect terminal tool for you.
    Cheat.sh Working using Local Shell Instance
    Key Features:
    Simple interface Covers 56 programming languages, several DBMSes, and more than 1000 most important UNIX/Linux commands. No installation needed, but can be installed for offline usage. Has a convenient command line client, cht.sh Can be used directly from code editors Supports a special stealth mode where it can be used fully invisibly without ever touching a key and making sounds. Installation
    You can install it using Curl with the following commands:
    curl cheat.sh/tar curl cht.sh/curl curl https://cheat.sh/rsync curl https://cht.sh/trTo install locally, first install rlwrap and most.
    PATH_DIR="$HOME/<a-directory-that-is-in-PATH>" mkdir -p "$PATH_DIR" curl https://cht.sh/:cht.sh > "$PATH_DIR/cht.sh" chmod +x "$PATH_DIR/cht.sh"Cheat.sh6. The MOST Pager
    Alright, if you are like me, and probably not looking for anything fancy, but just a colorful man page, you can use the Most pager.
    Most as PagerMOST is a powerful paging program. Supports multiple windows and can scroll left and right. It keeps the same good-old man page look with added colors.
    Install
    sudo apt install most sudo dnf install most sudo pacman -Syu mostOnce installed, edit ~/~.bashrc:
    nano ~/.bashrcTo add the line:
    export PAGER='most'For the latest most versions, color may not appear by default. In that case, below line to ~/.bashrc.
    export GROFF_NO_SGR=1Most7. Yelp or GNOME Help
    Considering you are using a distribution powered by GNOME desktop, you just need to search for the GNOME Help app from the menu. You can also access the same via the terminal using the command yelp.
    Using GNOME Help (Yelp) to view man pages
    Press CTRL to open the search bar and type the command that you want when using the terminal interface.
    man:<command> # For example man:manOr, if you are in a browser, go to the address bar (CTRL+L). Here, enter man:man. When asked to open the link in help, click on it.
    Opening man page from a browser
    GNOME Help (Yelp)Bonus: Use a terminal with built-in AI
    AI is everywhere, even in your terminal. The proximity of AI in the tool lets you quickly use them.
    There are a few terminals that come with built-in AI agents to help you get all sorts of help; from simple command suggestion to full-fledged deployment plans.
    You may use them too if you are an AI aficionado. Warp is one such terminal which is not open source but hugely popular among modern Linux users.
    Get Warp (Partner link)Wrapping Up
    While you have It's FOSS along with the traditional man pages to learn what most commands do on Linux, there are alternatives to man pages which could enhance your learning experience.
    If you prefer a GUI, GNOME Help should be helpful or any similar equivalent pre-installed on your distribution. For terminal-based solutions, there are a couple you can try. Take a look at the feature set they offer, and install what you like the most.
    What do you prefer the most? Let me know in the comments below!
  24. by: Chris Coyier
    Mon, 26 May 2025 15:54:28 +0000

    This is a great story from Dan North about “The Worst Programmer I know”, Tim MacKinnon. It’s a story about measuring developer performance with metrics:
    Scared? Maybe you can guess. Tim was very bad at metrics.
    Why? Maybe you can guess again. Tim wasn’t playing that game, he was a true senior developer in the sense that he nurtured his team.
    Every organization is different though. Mercifully in the situation above, Dan protected Tim. But we can all imagine a situation where Tim was fired because of this silly measurement system. (That always reminds me of Cathy O’Neils Weapons of Math Destruction). Getting to know how the organization works, so you can work within it, is another approach that Cindy Sridharan advocates for. See: How to become a more effective engineer.
    Different organizations will have different paths to these answers. I’ll pluck off a few bullet points:
    Figure out who matters, what they care about, and how to effectively get things done. And don’t wait!
    Another one I like in this realm of being a truly effective developer is Artem Zakirullin’s Cognitive load is what matters. A good developer can write code that themselves and others can read without being so complex that, well, you run out of mental capacity.
    That tracks for me. I start tracing how code works, and I’m all good and have it in my head, then it feels like right at the fifth logical jump, my brain just dumps it all out and I’m lost.
    I suspect it’s a talent of really great programmers that they can hold a bit more in their head, but it’s not smart to assume that of your fellow developers. And remember that even the very smart appreciate things that are very simple and clear, perhaps especially.
    You know what strikes me as a smart developer move? When they work together even across organizations. It’s impressive to me to see Standard Schema an effort by all the people who work on any library that deals with JavaScript/TypeScript schemas to make them easier to use and implement.
    There are heaps of libraries and tools that already support it, so I’d call that a big success. I see Zod released Mini recently, which uses functions instead of methods, making it tree-shakable, but otherwise works exactly the same. Likely a nod to Validbot which was always the “Zod but smaller” choice.
    Another thing I think is smart: seeing what developers are already doing and making that thing better. Like, I’m sure there are very fancy exotic ways to debug JavaScript in powerful ways. But we all know most of us just console.log() stuff. So I like how Microsoft is like, let’s just make that better with console.context(). This allows for better filtering and styling of messages and such, which would surely be welcome. Might as well steal formatting strings from Node as well.
  25. by: Abhishek Kumar
    Mon, 26 May 2025 14:31:56 +0530

    I see a lot of posts on my Twitter (or X) feed debating the merits of ditching cloud services in favor of homelab self-hosted setups just like I tried hosting Wikipedia and the Arch wiki. Some even suggest using bare-metal servers for professional environments.
    Source: Fireship on XWhile these posts often offer intriguing tools and perspectives, I can't help but notice a pattern: companies lean heavily on cloud services until something goes catastrophically wrong, like Google Cloud accidentally deleting customer data.
    Source: Ars TechnicaHowever, let’s be real, human error can occur anywhere. Whether in the cloud or on-premises, mistakes are universal.
    So, no, I’m not here to tell you to migrate your production services to a makeshift homelab server and become the next Antoine from Silicon Valley.
    But if you’re wondering why people even homelab in the era of AWS and Hetzner, I’m here to make the case: it’s fun, empowering, and yes, sometimes even practical.
    1. Cost control over time
    Cloud services are undeniably convenient, but they often come with hidden costs. I still remember during my initial days here at It's FOSS, and Abhishek messaged me reminding me to delete any unused or improperly configured Linode instances.
    That’s the thing with cloud services, you pay for convenience, and if you’re not meticulous, it can snowball.
    Source: Mike Shoebox on XA homelab, on the other hand, is a one-time investment. You can repurpose an old PC or buy retired enterprise servers at a fraction of their original cost.
    Sure, there are ongoing power costs, but for many setups, especially with efficient hardware like Raspberry Pi clusters, this remains manageable.
    I'll take this opportunity to share my favorite AWS meme.
    2. Learning and experimentation
    If you’re in tech, be it as a sysadmin, developer, or DevOps engineer, having a homelab is like owning a personal playground.
    Want to deploy Kubernetes? Experiment with LXC containers? Test Ansible playbooks? You can break things, fix them, and learn along the way without worrying about production outages or cloud charges.
    For me, nothing beats the thrill of running Proxmox on an old Laptop with a Core i5, 8 GB of RAM, and a 1 TB hard drive.
    It’s modest (you might've seen that poor machine in several of my articles), but I’ve used it to spin up VMs, host Docker containers, and even test self-hosted alternatives to popular SaaS tools.
    3. Privacy and ownership
    When your data resides in the cloud, you trust the provider with its security and availability. But breaches happen, and privacy-conscious individuals might balk at the idea of sensitive information being out of their direct control.
    With a homelab, you own your data. Want a cloud backup? Use tools like Nextcloud. Need to share documents easily? Host your own FileBrowser. This setup isn’t just practical, it’s liberating.
    Sure, there’s a learning curve and it could be steep for many. Thankfully, we also have plug-and-play solutions like CasaOS, which we covered in a previous article. All you need to do is head to the app store, select 'install,' and everything will be taken care of for you.
    4. Practical home uses
    Homelabs aren’t just for tech experiments. They can serve real-world purposes, often replacing expensive commercial solutions:
    Media servers: Host your own movie library with Jellyfin or Plex. No subscription fees, no geo-restrictions, and no third-party tracking, as long as you have the media on your computer. Home security: Set up a CCTV network with open-source tools like ZoneMinder. Add AI-powered object detection, and you’ve built a system that rivals professional offerings at a fraction of the cost. Family productivity: Create centralized backups with Nextcloud or run remote desktop environments for family members. You become the go-to tech person for your household, but in a rewarding way. For my parents, I host an Immich instance for photo management and a Jellyfin instance for media streaming on an old family desktop. Since the server is already running, I also use it as my offsite backup solution, just to be safe. 😅
    📋If you are into self-hosting, always make multiple instances of data backup in different locations/systems/medium. Follow the golden rule of 3-2-1 backup.9 Dashboard Tools to Manage Your Homelab EffectivelySee which server is running what services with the help of a dashboard tool for your homelab.It's FOSSAbhishek KumarWhat about renting a VPS for cloud computing?
    I completely understand that renting a VPS can be a great choice for many. It offers flexibility, ease of use, and eliminates the need to manage physical hardware.
    These days, most VPS providers like AWS, Oracle, and others offer a 1-year free tier to attract users and encourage them to explore their platforms. This is a fantastic opportunity for beginners or those testing the waters with cloud hosting.
    I’ve also heard great things about Hetzner, especially their competitive pricing, which makes them an excellent option for those on a budget.
    In fact, I use Nanode myself to experiment with a DNS server. This setup spares me the hassle of port forwarding, especially since I’m behind CGNAT.
    If you’re interested in hosting your own projects or services but face similar limitations, I’ve covered a guide on Cloudflare Tunnels that you can consult, it’s a handy workaround for these challenges.
    Personally, I believe gatekeeping is one of the worst things in the tech community. No one should dictate how or where you host your projects. Mix and match! Host some services on your own systems, build something from scratch, or rent a VPS for convenience.
    Just be mindful of what you’re hosting like ensuring no misconfigured recursive function is running loose and keep exploring what suits your needs best.
    My journey into homelab
    My journey into homelabbing and self-hosting started out of necessity. When I was in university, I didn’t have the budget for monthly cloud server subscriptions, domain hosting, or cloud storage.
    That limitation pushed me to learn how to piece things together: finding free tools, configuring them to fit my needs, diving into forum discussions, helping others solve specific issues, and eagerly waiting for new releases and features.
    This constant tinkering became an endless cycle of learning, often without even realizing it. And that’s the beauty of it. Whether you’re self-hosting on a VPS or your homelab, every step is a chance to explore, experiment, and grow.
    So, don’t feel constrained by one approach. The freedom to create, adapt, and learn is what makes this space so exciting.
    Wrapping up
    At the end of the day, whether you choose to build a homelab, rent a VPS, or even dabble in both, it’s all about finding what works best for you. There’s no one-size-fits-all approach here.
    For me, homelabbing started as a necessity during my university days, but over time, it became a passion, a way to learn, experiment, and create without boundaries.
    Sure, there are challenges, misconfigured services, late nights debugging, and the occasional frustration, but those moments are where the real learning happens.
    Renting a VPS has its perks too. It’s quick, convenient, and often more practical for certain projects.
    I’ve come to appreciate the balance of using both approaches, hosting some things locally for the sheer fun of it and using VPS providers when it makes sense. It’s not about choosing sides; it’s about exploring the possibilities and staying curious.
    If you’re someone who enjoys tinkering, building, and learning by doing, I’d encourage you to give homelabbing a try. Start small, experiment, and let your curiosity guide you.
    And if you prefer the convenience of a VPS or a mix of both, that’s perfectly fine too. At the end of the day, it’s your journey, your projects, and your learning experience.
    So, go ahead, spin up that server, configure that service, or build something entirely new. The world of self-hosting is vast, and the possibilities are endless. Happy tinkering!

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.