Tuesday, December 31, 2024

Boy Do Releases Lag

Apparently, the setup *to* have includes ripgrep (never heard of it), fzf and fd.

So, I do the apt install fzf and, straightaway I have to go crying to chatGPT about all the errors I'm getting - unknown option --scheme-history, --bash, etc.

Turns out, apt install got me 0.29 and the latest is 0.57

Some scary steps involving downloading (without knowing if it was the right one - uname - a tells me x86_64, but the binary is named amd64) the binary and moving it into the /usr/bin

But, after that, all is well..

So, ..

Monday, December 30, 2024

A Guide to Reverse Engineering a Code Base

Starting with https://github.com/StefanSchippers/xschem/issues/266

I just...saw that the top bar had "File", "Edit", "View" etc in there as plain text, so I assumed it must be hard-coded somewhere in the codebase. There's a tool in Unix-based systems called "fzf" or "fuzzy finder", you can use that to search for text or regex patterns in a large codebase, and I used that. After that I only had had to read a little bit about how to edit .tcl scripts from Google.

Turns out - fzf is the real deal. Well done Junegunn Choi.

An fzf fan : find anything you want with fzf.


All that being said, how you get to this code insertion is beyond me. Age showing obviously :) Or I'm just not a software junkie :)

# modified binding for button-1 clicks on menubuttons. Clicking on posted menu will unpost it
proc tk::menubutton1 {w x y} {
    # puts $w
    # puts "--> [array get tk::Priv] "
    if {[winfo ismapped [$w cget -menu ]]} {
      MenuUnpost {}
      return
    }
    if {$tk::Priv(inMenubutton) ne ""} {
tk::MbPost $tk::Priv(inMenubutton) $x $y
    }
}

bind Menubutton <Button-1> {tk::menubutton1 %W %X %Y}

# activate menus when hovering the mouse, even without button pressed
bind Menubutton <Motion> { tk::MbMotion %W down %X %Y} 


 
How to tell fzf to use batcat (that is, "bat" doesn't exist and gives you /bin/bash bat: command not found:

export FZF_DEFAULT_OPTS="--preview 'batcat --style=numbers --color=always {} || cat {}'"
# in your ~/.bashrc


Saturday, December 28, 2024

Delivered - New Feature to Make it Easier for You to Zoom

Was : use menu to enter Zoom command mode and then click twice to specify opposite corners of the rectangle OR, press Z for the infix-zoom-command - where mouse position when you press Z is taken to be one of the corners of the rectangle

Is : Just use right mouse button (RMB) to click and drag to specify the two corners. Just like Cadence 😊

Thanks to the very impressive Chayan Deb - the Super CD 😊

Modesty itself:

There isn't really a step-by-step process to explain. I just searched the codebase for certain keywords like "button", "key", "if(key=='z')" etc, saw how the original functionality was implemented, and then found another set of keywords like "ButtonPressed" and "ButtonReleased" and modified the code that triggered everytime RMB was pressed and released.



Monday, December 23, 2024

Xschem Source Code Analysis

C and Header Files (.c, .h)

These files generally define the core functionalities and operations of the software:

  1. actions.c - Implements actions or commands the program can perform, likely as part of a GUI or backend workflow.
  2. cairo_jpg.c / cairo_jpg.h - Handles operations involving the Cairo graphics library, such as exporting images in JPG format.
  3. callback.c - Implements callback functions, possibly for GUI events or other asynchronous tasks.
  4. check.c - Likely performs validation or consistency checks on program data or input.
  5. clip.c - Handles clipboard-related functionality or geometry clipping in graphics.
  6. draw.c - Contains functions for rendering or drawing graphical elements.
  7. editprop.c - Manages editing or updating properties, possibly of graphical elements or program objects.
  8. findnet.c - Searches for or manipulates network connections, likely in a circuit design context.
  9. globals.c - Defines global variables or functions used across the program.
  10. hash_iterator.c - Implements hash table iteration for data management.
  11. hilight.c - Manages highlighting of objects, likely for a GUI or visualization.
  12. icon.c - Handles icons or small graphical elements.
  13. in_memory_undo.c - Implements an undo/redo stack that operates in memory.
  14. main.c - Entry point for the application.
  15. move.c - Implements functionality for moving objects or components.
  16. netlist.c - Handles netlist generation or manipulation for circuits.
  17. node_hash.c - Manages a hash-based data structure for nodes.
  18. options.c - Manages program options or configuration settings.
  19. paste.c - Handles pasting operations, possibly for GUI or data elements.
  20. psprint.c - Implements PostScript printing functionality.
  21. rawtovcd.c - Converts raw data formats to VCD (Value Change Dump), used in simulation.
  22. save.c - Handles saving operations for program data or projects.
  23. scheduler.c - Implements task scheduling within the application.
  24. select.c - Manages selection operations, likely for GUI elements or objects.
  25. spice_netlist.c - Generates or processes SPICE netlists for circuit simulation.
  26. store.c - Implements data storage or persistence mechanisms.
  27. svgdraw.c - Handles SVG-based graphics rendering.
  28. tedax_netlist.c - Likely associated with netlist processing using the TEDAX methodology.
  29. token.c - Implements token parsing or management, possibly for input processing.
  30. verilog_netlist.c - Handles Verilog netlist generation or parsing.
  31. vhdl_netlist.c - Manages VHDL netlist creation or manipulation.
  32. xinit.c - Initializes the X11 environment or graphics.

TCL Scripts (.tcl)

TCL scripts automate tasks or configure GUI components:

  1. add_custom_button.tcl - Adds a custom button to the application GUI.
  2. add_custom_menu.tcl - Creates custom menu options.
  3. change_index.tcl - Alters indices for GUI or data structures.
  4. create_graph.tcl - Automates graph creation, possibly for visualizations.
  5. hspice_backannotate.tcl - Handles back-annotation for HSPICE simulations.
  6. mouse_bindings.tcl - Defines mouse interaction bindings for the GUI.
  7. ngspice_backannotate.tcl - Handles back-annotation for NGSPICE simulations.
  8. place_pins.tcl - Automates pin placement in schematics.
  9. resources.tcl - Defines resources or configurations for TCL scripts.
  10. traversal.tcl - Implements traversal operations for a data structure or visual element.
  11. xschem.tcl - Likely initializes the Xschem application.

AWK Scripts (.awk)

AWK scripts handle text and data processing tasks:

  1. break.awk - Splits data into smaller components.
  2. convert_to_verilog2001.awk - Converts netlists to Verilog 2001 standard.
  3. create_alloc_ids.awk - Generates unique allocation IDs.
  4. flatten.awk - Flattens hierarchical data structures.
  5. gschemtoxschem.awk - Converts Gschem files to Xschem format.
  6. import_opus_symbols.awk - Imports symbols from Opus toolchains.
  7. label_compactor.awk - Compacts labels for efficiency.
  8. netlist_compactor.awk - Optimizes netlists for size or readability.
  9. parse_synopsys_vhdl.awk - Parses Synopsys-generated VHDL files.
  10. track_memory.awk - Tracks memory usage.
  11. verilog.awk - Processes Verilog code.

Sunday, December 22, 2024

The Xschem FAQ - Send Me Your Questions

WIP. Better formatting coming soon.

How does Xschem implement a TCL interpreter? Is there a standard module that can be included for this?

First Bug Report - Issues with Wires

https://github.com/StefanSchippers/xschem/issues/259



Xschem Backlog - All the Things You Wish You Had Time For

With chatGPT's help, maybe.. (almost all of these are derived from Cadence Virtuoso Composer Schematic Editor)

WIP post. Better formatting coming soon 😊

  1. Command Interpreter Window (where you can see commands as they are entered through GUI events, or text entry (yes, a pane where you can manually enter commands and load scripts)
  2. Command log file - yes, like CDS.log, so you have a reference to look at for a sequence of commands you can put into a script.
  3. Library Manager window - to see what's available. It's better than only being able to see this when you want to instantiate a component. Much more user friendly. With Cadence, I had a shortcut set up to instantiate an instance of the cell selected in the Library Manager (contrast that with hitting i for "instance" and then going through a browser. Yuck:)
  4. cds.lib - so you can set up the project libraries in a simple way - the tool reads this and makes specified libraries available
  5. Getting rid of default infix - that is, when you start a command - like W for wire, it starts drawing from the point at which the mouse pointer was. This might be simple - since the tool bar Wire button enters "wire command mode" and waits for your first click. And stays in command mode! It's bad enough it starts the wire from where your pointer is. The worst thing is that the first click ends the command! No sir!
  6. Stretch - be able to move components and keep wires connected. There is something called "Enable stretch" but it doesn't seem to do anything.
  7. Get a "hover highlight" - that is, when pointer is over an object, that object will get some kind of visual update (dashed yellow outline maybe - like Cadence) - something to let you know that *that* is the object that will be selected when you click.
  8. Get a pointer following yellow tiny square - like Cadence - this is comforting - to know that the tool knows where you are.
  9. Cadence style properties form. Please!
  10. Cadence style zoom with right-click-and-drag. Please:) (thank you Chayan for coding and Stefan for merging!)
  11. Intentional edit - do away with "tool launched and you're editing an Untitled.sch". No, user must pick a cell to edit. That is the professional way.
  12. Support for a ~/.xscheminit file along the lines of ~/.cdsinit. Sure, we can continue to support the local xschemrc
  13. Virtuoso style net highlighting throughout hierarchy. Introduced in Tanner S-Edit in 2017 and was the most appreciated new feature
  14. Cadence style Library/Cell/View concept - no longer just scattered files :)
  15. Cadence style wire routing - that is, if the user has not enabled (any angle) and wants Manhattan-style only, then, draw both segments when p2 does not have x or y equal to p1 (start point) in a manner that is cognizant of other objects nearby. Yes, this will take a while 😊
  16. Provide users a way to bind functions (inbuilt and ones they load through the init file) to key combinations of their choice. Similar to Cadence's hiSetBindKey
  17. Support for DASHED lines (and circles and polygons, etc). This is SO important to keep these from being an eyesore
  18. Command that is currently in effect (Eg wire) should be indicated on the status bar
  19. In a command's mode, (Eg. wire), it should be possible (just like Cadence) to press F3 and get options for execution of this command - such as change wire-type to thick or line type to dashed, etc

Saturday, December 21, 2024

KDE Style Window Drag/Resize on Uri Shaked's TinyTapeout VM

How to Get KDE-Style Window Manipulation on GNOME Wayland

If you love GNOME but prefer KDE's intuitive window manipulation style, you're in luck! With a few simple tweaks, you can configure GNOME Wayland to behave like KDE, allowing you to:

  • Drag windows by pressing ALT + Left Click anywhere inside the window.
  • Resize windows by pressing ALT + Right Click near the edge of the window (instead of the default Super aka WIN + Middle Click).

This guide will show you exactly how to set up these features step by step.

Step 1: Install GNOME Tweaks

GNOME Tweaks is a handy tool for customizing GNOME settings. If you don't already have it installed, open a terminal and run:

sudo apt install gnome-tweaks

Once installed, launch GNOME Tweaks from your application menu or by typing:

gnome-tweaks &

Step 2: Change the Window Action Key

By default, GNOME uses the Super (Windows) key for window manipulation. To change this to ALT:

  1. Open GNOME Tweaks.
  2. Go to the "Window" section.
  3. Find the "Window Action Key" option (labeled as "Modify window shortcuts").
  4. Change it from Super to Alt.

Now, you can press ALT + Left Click anywhere inside a window to drag it.

Step 3: Set ALT + Right Click for Resizing

By default, GNOME uses ALT + Middle Click (pressing the scroll wheel) to resize windows. If you prefer to use ALT + Right Click, you can enable this with a simple gsettings command:

  1. Open a terminal.
  2. Run the following command:
    gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true
    

This change will immediately take effect, allowing you to resize windows using ALT + Right Click.

Step 4: Test Your New Setup

To ensure everything works as expected:

  • Press ALT + Left Click anywhere inside a window and drag it around.
  • Press ALT + Right Click near the edge of a window and drag to resize it.

Troubleshooting

  • If the changes don’t seem to take effect, log out of your session and log back in.
  • For more advanced tweaks, you can use dconf-editor to explore additional GNOME settings.

Why These Tweaks Are Useful

This setup mimics KDE's intuitive window management behavior, allowing for faster and more efficient manipulation of windows without relying on precise clicks on the title bar or window edges. It’s a small change that can make a big difference in your workflow.

Conclusion

With these simple adjustments, you can enjoy KDE-style window manipulation on GNOME Wayland. Whether you're a fan of KDE's usability or just looking for a more ergonomic way to handle windows, these tweaks provide the best of both worlds. Happy customizing!

Getting You the Best Text Editor

Given how gung-ho I am about UX, you just can't lose. Where have you been my whole life?


-------------------------------------------------
how familiar are you with NEdit?

(Why? Because I want to ask it to hack the source code and upgrade the prehistoric file open dialog with something that has a field for mod date, and lets you sort by that so you see oldest/newest easily :)

blah blah and..

Status

  • Development of NEdit has largely ceased, but a fork called NEdit-NG (NEdit Next Generation) is actively maintained. NEdit-NG modernizes the original while maintaining the core user experience.

Is NEdit-NG something that can be installed on ubuntu?

YES! - install dependencies - and you get something MUCH nicer than the old beast. Thank you FOSS comm!

Yes, NEdit-NG can be installed on Ubuntu. While it's not available directly through Ubuntu's default package repositories, you can compile it from source by following these steps:

  1. Install Required Dependencies: Open a terminal and execute the following commands to ensure all necessary packages are installed:


    sudo apt update sudo apt install -y git cmake qt5-default qttools5-dev libboost-all-dev bison
  2. Clone the NEdit-NG Repository: Navigate to your preferred directory and clone the repository:


    git clone https://github.com/eteran/nedit-ng.git
  3. Build NEdit-NG: Navigate into the cloned directory, create a build directory, and compile the source code:


    cd nedit-ng mkdir build cd build cmake .. make
  4. Install NEdit-NG: After a successful build, install the application:


    sudo make install

This process will install NEdit-NG on your system, making it accessible via the command line. For more detailed information and documentation, you can visit the official NEdit-NG documentation page.

Please note that while NEdit-NG aims to be a drop-in replacement for the original NEdit, there may be differences in functionality and appearance due to modernization efforts. If you encounter any issues or have specific requirements, consulting the official documentation or seeking assistance from the developer community is recommended.

You said:

I get Package 'qt5-default' has no installation candidate

chatGPT said:
ChatGPT

The qt5-default package is no longer available in recent versions of Ubuntu (such as 22.04 and later). However, you can install the necessary Qt development tools through alternative packages. Here's how to proceed:

Updated Installation Steps for Qt Dependencies

  1. Install Qt Tools and Development Packages Run the following command to install the necessary Qt libraries and tools:


    sudo apt update sudo apt install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
  2. Verify qmake is Installed Ensure that qmake, which is part of Qt, is available:


    qmake --version

    This command should output the version of qmake. If it's missing, check the installation of the qt5-qmake package.

  3. Continue with Building NEdit-NG Now you can follow the remaining steps to build NEdit-NG from source:

    • Clone the repository:
      git clone https://github.com/eteran/nedit-ng.git
    • Navigate to the directory and build:

      cd nedit-ng mkdir build cd build cmake .. make
    • Install:

      sudo make install

This should resolve the issue with qt5-default and allow you to successfully build and install NEdit-NG. Let me know if you encounter any other issues!

You said:

If uname-a returns 

 Linux ubuntu-desktop 5.15.0-119-generic #129-Ubuntu SMP Fri Aug 2 19:25:20 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux 

which version of cmake do you suggest? There is 

sudo snap install cmake # version 3.31.3, or
sudo apt install cmake # version 3.22.1-1ubuntu1.22.04.2

ChatGPT said:
ChatGPT

Given your system details (Linux ubuntu-desktop 5.15.0-119-generic running Ubuntu 22.04 LTS or a derivative), the choice of cmake version depends on the requirements of the software you're building and your preferences for stability versus newer features:

  1. Recommended Version:

    • Use the Snap version (3.31.3) if you need the latest features or are building software that explicitly requires a newer version of CMake.
    • Use the APT version (3.22.1) if you prefer a stable version that is well-tested with your Ubuntu distribution and most projects.
  2. Why Choose Each:

    • Snap Version (3.31.3):
      • Pros: Newer features, better compatibility with the latest C++ standards and modern projects.
      • Cons: Snap-based applications can have a slightly slower startup and might introduce sandboxing behavior that could cause issues in rare cases.
    • APT Version (3.22.1):
      • Pros: Fully integrated with the Ubuntu package ecosystem, stable, and minimal risk of compatibility issues.
      • Cons: Lacks the latest features and improvements in more recent CMake versions.
  3. Compatibility with NEdit-NG:

    • NEdit-NG typically doesn't demand the very latest CMake features, so the APT version (3.22.1) is likely sufficient.
    • However, if the project's documentation or error messages suggest a requirement for a specific newer version, use the Snap version.

Suggested Approach

  • Start with the APT version (3.22.1) to keep things simple and aligned with your system's dependencies.

    sudo apt install cmake
  • If you encounter issues or if the project explicitly recommends a newer version, switch to the Snap version (3.31.3):
    sudo snap install cmake --classic

Let me know if you need further clarification or assistance!

You said:

Now, when I try cmake to build NEdit-NG, I get : CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version "1.35") Call Stack (most recent call first): /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args) CMakeLists.txt:46 (find_package)
ChatGPT said:
ChatGPT

The error indicates that CMake is unable to find the Boost libraries on your system. Boost is a popular set of C++ libraries, and NEdit-NG requires it to build. Here's how you can resolve this issue:

Steps to Install and Configure Boost

  1. Install Boost Development Libraries Install the Boost libraries and development headers via APT:


    sudo apt install -y libboost-all-dev
  2. Verify Boost Installation Ensure the Boost headers and libraries are installed correctly. For example:


    ls /usr/include/boost

    If the directory exists and contains files, Boost is installed.

  3. Clean and Retry CMake After installing Boost, clean your build directory and run CMake again:


    cd path_to_nedit_ng/build rm -rf * cmake ..
  4. Specify Boost Paths Manually (Optional) If CMake still cannot find Boost, explicitly provide the path to the Boost include directory and libraries using CMake variables:

    cmake .. -DBOOST_ROOT=/usr/include/boost -DBoost_INCLUDE_DIR=/usr/include

Additional Notes

  • Ensure that the version of Boost installed (via APT) meets the minimum version required by NEdit-NG, which is 1.35 or later. The libboost-all-dev package in Ubuntu 22.04 provides a much newer version, so this should not be an issue.
  • If you are using a custom Boost installation or the Boost libraries are installed in a non-standard location, you need to specify the paths manually using BOOST_ROOT, Boost_INCLUDE_DIR, and Boost_LIBRARY_DIRS.

Let me know if the issue persists after trying these steps!

You said:

I now get this error with cmake on nedit-ng: CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:28 (find_package): Could not find a package configuration file provided by "Qt5LinguistTools" with any of the following names: Qt5LinguistToolsConfig.cmake qt5linguisttools-config.cmake Add the installation prefix of "Qt5LinguistTools" to CMAKE_PREFIX_PATH or set "Qt5LinguistTools_DIR" to a directory containing one of the above files. If "Qt5LinguistTools" provides a separate development package or SDK, be sure it has been installed. Call Stack (most recent call first): src/CMakeLists.txt:9 (find_package)

ChatGPT said:
ChatGPT

The error indicates that the Qt5LinguistTools package is not installed or CMake cannot locate it. This package is part of the Qt tools suite and is required to build NEdit-NG. Here's how to resolve it:

Steps to Fix the Error

  1. Install the qttools5-dev Package The qttools5-dev package includes Qt5LinguistTools and other necessary development tools. Install it using APT:


    sudo apt update sudo apt install -y qttools5-dev
  2. Verify Installation After installation, ensure that the Qt5LinguistToolsConfig.cmake file exists. You can check its presence with:


    locate Qt5LinguistToolsConfig.cmake

    It is usually located in /usr/lib/x86_64-linux-gnu/cmake/Qt5LinguistTools/.

  3. Clean and Retry CMake After ensuring Qt5LinguistTools is installed, clean your build directory and rerun CMake:


    cd path_to_nedit_ng/build rm -rf * cmake ..
  4. Manually Set the CMAKE_PREFIX_PATH (If Needed) If CMake still cannot locate Qt5LinguistTools, specify its location explicitly:


    cmake .. -DCMAKE_PREFIX_PATH="/usr/lib/x86_64-linux-gnu/cmake/Qt5LinguistTools/"

Explanation

  • The qttools5-dev package provides the necessary development files, including the configuration files that CMake uses to locate Qt5LinguistTools.
  • If you use a custom Qt installation, you may need to set the CMAKE_PREFIX_PATH to the directory containing the relevant Qt5 CMake configuration file
You said:

If build succeeds, how do you run NEdit-NG?

ChatGPT said:
ChatGPT

If the build process for NEdit-NG succeeds, you can run the application by following these steps:

Steps to Run NEdit-NG

  1. Locate the Executable After a successful build, the nedit-ng executable is typically located in the build directory where you compiled the project. You can find it with:

    find . -name nedit-ng

    This should return the path to the executable, such as build/src/nedit-ng.

  2. Run Directly from the Build Directory You can run NEdit-NG directly from the build directory:


    ./src/nedit-ng
  3. Install NEdit-NG System-Wide (Optional) If you want to run nedit-ng from anywhere on your system without specifying the full path, install it system-wide:


    sudo make install

    This will typically place the nedit-ng binary in /usr/local/bin, making it accessible via:


    nedit-ng
  4. Verify Installation Check if the nedit-ng binary is in your system's PATH by running:


    which nedit-ng

    This should return the installation path (e.g., /usr/local/bin/nedit-ng).

  5. Run NEdit-NG If installed system-wide, simply type the following in a terminal:


    nedit-ng

Uri Shaked's TinyTapeout Ubuntu VM - If it Helps You Out

Never settle for less! If you have to give up schematic real estate to look at waveforms, you're settling for less! Don't!

Thankfully, chatG is helping out..

That aside, they're shipping this with the clipboard sharing turned off. (Why??). So:

I confirmed I have GNOME ($XDG_SESSION_TYPE returned wayland).

Now, this VM is running on Virtualbox. I am finding that I am not able to paste from Windows clipboard into the VM and vice versa. Do you know what can be done to accomplish this?

The inability to paste between your Windows host and the Ubuntu VM typically occurs because the clipboard sharing feature of VirtualBox is not enabled or functioning. Here's how you can fix it:

1. Enable Clipboard Sharing in VirtualBox Settings

Power Off your VM if it’s running.

Open VirtualBox and select your VM.

Click on Settings → General → Advanced tab.

Set Shared Clipboard to Bidirectional.

This allows clipboard sharing both ways (host to VM and VM to host).


Essential for productivity:

(Good news is that WIN+SHIFT+arrow does the same thing as in Windows)

Go into keyboard settings (WIN aka "Super" click and then type "keyboard shortcuts" to go into settings > Keyboard > Windows, or go through settings GUI)

1. Set your favorite shortcut for "Lower window below other windows (I use ALT + ~ (the one below the ESC key))

2. Set your favorite shortcut for "Toggle maximization state" (not the same as fullscreen mode). I use ALT+F1 (since that's what I use on Windows through Autohotkey)


Moving files from Win into the VM:

You can go through Settings, or, in the Devices window, when the VM is running, go to Shared Folders and designate a folder on Windows a shared folder. Edit it and check the box for Auto-mount.

Then, you can move stuff there and find it inside the VM in /media/sf_NAME_IN_WIN (means, avoid complicating stuff with spaces :))

And, once you get your file there, you might that root owns it - so you'll need to sudo chown on it to be able to use it without starting every command with sudo :)


boot disk space warning:

Please get in touch if you figure out the fix for this..

Low Disk Space on “boot"

The volume "boot" has only 0 bytes disk space remaining.


Failure to install because of NSF in /boot:

  353  sudo apt install fzf

  354  df -h /boot

  355  sudo apt-get remove --purge linux-image-X.X.X-XX-generic

  356  df -h /boot

  357  dpkg --list | grep linux-image

  358  uname -r

  359* sudo apt-get remove --purge linux-image-5.15.0-127-generic 

  360  df -h /boot

  361  dpkg --list | grep linux-image

  362  uname -r

  363  sudo apt install fzf

  364  which fzf

  365  sudo apt autoremove 

The first install gave me

zstd: error 25 : Write error : No space left on device (cannot write compressed block) 
E: mkinitramfs failure zstd -q -1 -T0 25
update-initramfs: failed for /boot/initrd.img-5.15.0-127-generic with 1.
dpkg: error processing package linux-firmware (--configure):

And chatGPT was able to guide me



Open Source Analog Design - VM that Aggregates All the Tools

Why not a downloadable VM you can play with VMWare Player? What am I missing?


Actually, that's exactly what it is. Download it and you'll be up and running 10 minutes with Oracle VirtualBox

Can you do a Monte-Carlo simulation with open-source tools? Who knew? https://www.youtube.com/watch?v=fGxs2TnDgrU

Supposedly useful stuff here from Tim Edwards of efabless : https://github.com/RTimothyEdwards/open_pdks

Answer to "How to get true dual monitor experience with this VM"

Sam Altman is the greatest. I don't think Google could have got me this. Maybe Stefan Schippers and Uri Shaked don't care, but I do. Why? Why settle for less? I want TRUE dual monitor experience.

The file you download opens up and lets you use Xschem. Good. Now, dual monitor experience please? 

Is there a way to get a VM running on VirtualBox to use both monitors on my laptop that I have connected to two external monitors, lid closed?

Yes, you can configure a VirtualBox virtual machine to use multiple monitors if your laptop is connected to two external monitors and the lid is closed. Here’s how to set it up:

1. Enable Multiple Monitors in VirtualBox Settings

  • Power Off your virtual machine if it is running.
  • Open VirtualBox and select your VM (do not start it yet).
  • Click on SettingsDisplay.
  • Under the Screen tab, adjust the Monitor Count to 2 (or more, depending on your setup).
  • Allocate enough Video Memory for multiple monitors. For example, you may need at least 64 MB for 2 monitors.

2. Set Up Guest Additions

  • Start your virtual machine.
  • Install Guest Additions on the guest operating system (if not already installed):
    • From the VirtualBox menu, select DevicesInsert Guest Additions CD Image.
    • Follow the installation instructions in your guest OS.
  • Reboot the guest OS after installation.

3. Configure the Guest OS

  • After booting, VirtualBox will detect the additional monitors.
  • Move to the Display Settings within the guest OS (e.g., Windows/Linux) to configure how the monitors are arranged (extend, mirror, etc.).

4. Enable Full-Screen Mode on Multiple Monitors

  • Once the VM is running, press Host Key + F to enable full-screen mode.
  • Press Host Key + F again to span the VM across both monitors.
  • Alternatively, from the VirtualBox menu bar, go to ViewVirtual Screen X → Select Use Host Screen X for each monitor.

5. Adjust External Monitor Settings

  • Ensure your external monitors are set up correctly on your host operating system:
    • Go to the Display Settings of your laptop's OS.
    • Arrange the monitors as desired and ensure they are enabled.
    • Confirm that your laptop display is disabled if the lid is closed.

Notes:

  • The Host Key is usually the Right Ctrl key by default, but you can change it in VirtualBox preferences.
  • For performance reasons, ensure your system's graphics capabilities and RAM are sufficient for running a VM across multiple monitors.

This setup will allow your VM to span across both external monitors while your laptop lid is closed.

I get this with step 3

Could not insert the C:\Program File\0racle\VirtualBox/ VBoxGuestAdditions.iso disk image file into the virtual machine tinytapeout_analog_vm. as the machine has no optical drive. Please add a drive using the storage page of the v'rtual machine settings window.


The error indicates that your virtual machine doesn't currently have a virtual optical drive to load the Guest Additions ISO. Here’s how to fix it:


Add a Virtual Optical Drive

  1. Power Off the Virtual Machine

    • Ensure the virtual machine is completely powered off (not suspended).
  2. Open the VM Settings

    • In VirtualBox, select your VM (e.g., tinytapeout_analog_vm) and click on Settings.
  3. Add an Optical Drive

    • Navigate to Storage in the settings window.
    • Under the Storage Devices section, locate the Controller: IDE (or SATA Controller).
      • If you don’t see any controller, click the Add Controller icon (bottom right) and select Add IDE Controller.
    • Click the + icon next to the controller to add a new device.
      • Select Add Optical Drive.
    • A dialog will appear asking if you want to choose a disk. Select Leave Empty for now.
  4. Attach Guest Additions ISO

    • Click the newly created optical drive (it should say "Empty").
    • Click the Disk Icon on the right side of the settings window.
    • Select Choose a disk file... and navigate to the Guest Additions ISO:
      • It is usually located in the VirtualBox installation folder:
        C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso.
  5. Save and Start the VM

    • Click OK to save your changes.
    • Start the virtual machine.

Install Guest Additions

Once the VM is running:

  1. Mount the ISO

    • If the Guest Additions CD doesn’t automatically mount, open the guest OS file explorer and look for the mounted ISO (it may appear as a CD or DVD drive).
  2. Run the Installer

    • Inside the ISO, find the appropriate installer for your guest OS:
      • For Windows: Double-click VBoxWindowsAdditions.exe.
      • For Linux: Run the VBoxLinuxAdditions.run script from a terminal.
  3. Reboot the Guest OS

    • After installation is complete, reboot the guest OS to apply changes.

Resume Multi-Monitor Setup

After Guest Additions is installed, you can follow the earlier steps to configure multi-monitor support for your VM

The error "An error occurred while loading the archive" indicates that the Ubuntu VM is having trouble running the Guest Additions installer. Since the VM is running Ubuntu, the steps for installing Guest Additions are different from those for a Windows guest. Here’s how to properly install Guest Additions on Ubuntu:

Step 1: Install Required Packages

  1. Open a terminal in your Ubuntu VM.
  2. Update your system and install essential packages:
    bash
    sudo apt update sudo apt install build-essential dkms linux-headers-$(uname -r)

Step 2: Mount the Guest Additions ISO

  1. In the VirtualBox window, go to the Devices menu at the top.

  2. Select Insert Guest Additions CD Image.

    • If you get a message saying the ISO is missing, download it manually from VirtualBox Downloads under the "Guest Additions" section.
    • Alternatively, locate the ISO on your host machine (usually at C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso) and mount it manually in the VM's Storage Settings.
  3. In Ubuntu, the Guest Additions ISO should automatically mount as a CD/DVD. If it doesn’t:

    • Open the file explorer in Ubuntu and locate the CD drive.
    • Right-click and choose Mount.

Step 3: Run the Installer

  1. In the terminal, navigate to the mounted ISO:

    bash
    cd /media/$USER/VBox_GAs_<version>/

    Replace <version> with the version number visible in the mounted ISO folder name.

  2. Run the installer script with sudo:

    bash
    sudo ./VBoxLinuxAdditions.run
  3. Follow the installation process. If it succeeds, you should see a message indicating the installation was successful.


Step 4: Reboot the VM

After the installation completes, reboot your Ubuntu VM:

bash
sudo reboot

Step 5: Enable Multiple Monitors

Once the VM restarts:

  1. Go to the VirtualBox View menu → Virtual Screen 1Use Host Screen 1.
  2. Configure multi-monitor support by enabling and arranging additional screens in VirtualBox and within Ubuntu’s SettingsDisplay.

Who Needs Cadence Anymore (for Schematic Tree Reporting that is :)? Make Your Own Reporter with chatGPT!

You know what I mean, if you've used Cadence - the SHIFT-T thing that gives you the schematic tree can be VERY useful, at times. No Cade...