Posts

Using Historical Space Add-ons with Celestia for Android

Image
Celestia for Android , my favorite universe simulation app, supports downloading add-ons from the project’s repository . This extensive archive hosts digital models of asteroids, deep-sky objects, exoplanets, spacecrafts, and more. The add-ons of spacecrafts are interesting as they let you examine the environment and context of historical space exploration missions , such as the views the vehicles had of their target bodies. But historical add-ons pose a potential pitfall. The Mariner 4 add-on in Celestia for Android on my Pixel 4 XL phone. The simulation date and time are set to a moment a few hours prior to the closest approach to Mars. Consider, for example, the add-on of Mariner 4 , the first human-made vehicle to fly by the planet Mars. If you download the add-on and go to it with the Celestia browser (menu > Browser > Spacecraft > Mariner 4 > GO ), the app will navigate to the 3D model of the spacecraft and make it fill up most of the field of view. But where is Mars?

Publishing Python Documentation to Read The Docs With Jupyter Books

Image
I published the documentation of Suite8080 , a suite of Intel 8080 Assembly cross-development tools I’m writing in Python with Replit. The Suite8080 documentation website built with Jupyter Book and Sphinx and hosted at Read The Docs. Like many Python projects, the documentation comprises a website hosted at Read The Docs. But, unlike most projects, I didn’t use Sphinx directly to generate the website. Instead, I created the documentation with Jupyter Book by The Executable Book Project, well known for Jupyter Notebook. Jupyter Book is a new system for producing publication-quality books and documents for software and research projects. Jupyter Book is significant and promising because, by building on top of Sphinx as a backend and offering a Markdown-based formatting language, it hides the complexity of Sphinx and reduces friction when writing documentation . Before this project I checked out Sphinx directly, but its arcane formatting language and complex setup didn’t make me go fa

Using a Bluetooth Keyboard on Android

Image
Two years ago I bought a cheap Bluetooth keyboard from Amazon.it. At €14, it was mostly an impulse buy for exploring mobile typing on the go and in similar settings , such as workstations with reduced desk space. My FREALL 7INKEYBD-BK Bluetooth keyboard. I initially used the keyboard with the Android tablet and smartphone I had, a 7” Lenovo Tab E7 and a Pixel 2 XL. I later repurposed the keyboard for the devices I replaced those with, a Lenovo Tab M8 HD 8” tablet and a Pixel 4 XL smartphone. Despite the simplicity of operation, it took me some trial and error to figure out how to pair the keyboard with an Android device and what keystrokes insert the characters I need, such as accented letters when writing in Italian. Moreover, I realized I never blogged about my experience with the unit. So I’m posting these notes in case you come across the same or similar keyboards. The keyboard The keyboard is a cheap, compact, plastic chiclet unit that comes with a small foldable stand for a ta

Suite8080 0.4.0

Image
I released version 0.4.0 of Suite8080 , the suite of Intel 8080 Assembly cross-development tools I’m writing in Python. It bundles some minor features and changes I did while thinking about what major task to work on next. New features There are two main new features in this release. A SID debugging session in the z80pack CP/M emulator. SID loaded the greet.com hello world program assembled with asm80, along with the greet.sym symbol table. The l command disassembled the program and showed the symbols MESSAGE and BDOS . The d command dumped memory from the address of the MESSAGE symbol. The first is the ability of asm80 to save the assembled program’s symbol table in the .sym CP/M file format . The other feature enhances the assembler to accept the double-quote character ” as a string delimiter , which means strings and character constants may be written as ”This is a string” and ”F” . In addition, the output of the assembler's help message ( -h option) and verbose mode

Why I Mothballed my Newsletter

Image
I include below the text of the last issue of my Practicing Google newsletter, in which I announced I discontinued the publication and explained why. It feels at the same time sad because it's a failure, and energizing as the it frees up resources for new projects. This is the last issue of Practicing Google. I’m ceasing publication of the newsletter, or at least suspending it indefinitely. I might resume at some point, but not in the short term. If so, I’ll notify the readers still subscribed or announce related projects. I discontinued my Practicing Google Newsletter. I’m sorry this comes out of the blue, but it was inevitable. I’ll explain below why I took this decision I had been considering for a long time. Thank you very much for your attention and support. There's no interest With billions of Google users, without research or validation I assumed at least a few hundred would subscribe to Practicing Google. Almost two years and 87 issues later, the subscriber count has b

An Intel 8080 Assembly Suite in Python

Image
A blog post I stumbled upon made me start a new project, crank out lots of Python code, slip down a rabbit hole of arcane and fascinating corners of retrocomputing, and overflow with fun. The project is Suite8080 , a suite of Intel 8080 Assembly cross-development tools comprising an assembler and a disassembler. I developed it in Python entirely with Replit . At over 1,500 lines of code , it’s my second and largest Python project after Spacestills , a NASA TV still image viewer of about 340 lines of code. A hello world Intel 8080 program running in the z80pack CP/M emulator on Crostini Linux. I assembled the program with asm80, the Suite8080 assembler. Why did I write software for a half-century old CPU? This is the story of how I got started with Suite8080, how I developed it, the challenges I faced, and what I learned. Let’s start before the beginning. Background I’m a hobby programmer and a Python beginner, not a professional developer. To practice with the language, I finally set o

How to Add Code Syntax Highlighting to Blogger

Image
On my blog I always wanted to format source code in Python and a couple more languages, but couldn’t find a convenient way. Until I read a tutorial on adding syntax highlighting to Blogger blogs like mine. The Blogger post composer actually provides the monospace Courier font that may be used for source code, but it works well only for inline text . If I apply the Courier font to a block of code, the composer renders each line as a separate paragraph. This leaves too much vertical space that makes the code look ugly. A workaround is to switch to the HTML view in the composer and wrap the block within <pre> ... </pre> tags, which insert the correct line spacing. However, the code doesn’t stand out on the page and there’s room for improving its scannability and visual impact. Fortunately, Blogger is an old dog I can teach new tricks to, like the setup the tutorial I found presents. A Python code snippet with syntax highlighting rendered by highlights.js in a post of the Moo