Posts

Showing posts from 2021

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

How to Jump to the Top of the Google Photos Library

Image
Despite the impressive machine learning features, in the Google Photos app, good old browsing is still a common way of finding what you want in your library. You scroll down the timeline until you run across what you were looking for, or other interesting shots serendipity brought your way. Tap the Photos button to jump back to the top of the photo library in the Google Photos app. Here the Android app on a Pixel 4 XL. Now that you are way down the timeline, how do you get back to the top? You can scroll up all your way until you hit the latest photos. Or just tap the Photos button in the bottom bar, which instantly jumps to the top. This handy trick works also when the Android app is running on Chrome OS.

4 Things Tutorials Don't Tell You About PyPI

Image
Time to celebrate! I published my first Python package to PyPI, Suite8080 . It’s a suite of Intel 8080 Assembly cross-development tools. It’s in early development, misses some tools, and is rough around the edges. But it works, does something useful (if you’re into retrocomputing), and I’m having ridiculous amounts of fun with this hobby project. The Python Package Index (PyPI) website. The celebration is wearing out and I’m about to resume the work to complete and improve Suite8080, yet something still bugs me. Although it’s well known PyPI is unforgiving for good reasons, the package publishing process is not as straightforward as the tutorials make it seem . I run into a few unexpected minor bumps none of the guides mention. It’s not that the tutorials aren’t good, they are. I recommend the Real Python article on publishing a package to PyPI . But the authors of these guides are so experienced, and probably so detached from the challenges beginners face, they may not be aware some i

Silence Astronomy and Space Android Apps

Image
 What's the first thing to do after installing an astronomy or space app on Android? Turn off any alarms and notifications in the app's settings. Although these apps try to be helpful, they are noisy and alert you of interesting celestial phenomena or space events, such as the phases of the Moon, planetary conjunctions, satellite passes, and rocket launches. The option to turn off alarms in the ISS passes screen of the ISS onLive Android app. I learnt it the hard way when alarms in the wee hours of the night showed up on my Pixel 4 XL phone. It turned out an update of the ISS onLive app had set up alarms for International Space Station passes.

The Best Chrome OS Screen Capture Features

Image
Although the Nimbus Chrome extension is my primary screenshot and screencasting tool, I’m re-discovering the native Chrome OS screen capture functionality . Two features of the latter improve my workflow, the ability to precisely frame the capture area and to save screen recordings in the WebM video format. The Crostini Linux Terminal on my ASUS Chromebox 3. I took this screenshot with the area framing controls of the Chrome OS screen capture tool. When I activate the tool by pressing Shift+Ctrl+ShowWindows and draw the selection rectangle to delimit an area of the screen, clicking and dragging a corner brings up a magnified inset of the area around the mouse pointer that allows the precise adjustment of the selection rectangle . To make the inset show up, I have to release the mouse button after drawing the rectangle, then click a corner. My ASUS Chromebox 3 has a mouse, which allows for fine tuning the rectangle’s size and position. The trackpad or touch screen of my Chromebook req

Why I Use a Chromebox

Image
Chromebooks are mainstream but many people don’t grok Chromeboxes. A Redditor wondered what’s the point of Chromeboxes and what to use them for, especially high-end units. People seem to assume Chromeboxes are good only as kiosks or for who knows what uncommon use-case. The main unit of my ASUS Chromebox 3. I use a Chromebox because I nearly never need to move my primary desktop device . And I want the most high-end unit I can get my hands on to do the same stuff cheap Chromebooks can do, but faster. Let me elaborate. First off, in 2015 I switched to using Chrome OS exclusively on the desktop . I stopped using traditional desktop operating systems such as Linux or Windows.  Therefore, for me the choice is among the form factors of Chrome OS desktop devices: Chromebook (laptop), Chromebox (fixed desktop system), or Chromebase (think iMac for Chrome OS). I picked up a Chromebox as my daily driver because I work with it at the same desk 99.999% of the time . Since I nearly never need to

Simulating an Eclipse with Celestia for Android

Image
What would a lunar eclipse look like on the Moon? Closeup of the Earth hiding the Sun in a simulation of the May 26, 2021 lunar eclipse seen from the Moon. With Celestia for Android I simulated the May 26, 2021 lunar eclipse seen from the Moon . I screen-recorded a video on my ASUS Chromebox 3 while the Celestia app simulated the eclipse as seen from the lunar surface in an area near the North pole. Standing on the Moon the phenomenon would appear as a solar eclipse , with the Earth moving in front of the Sun and hiding it. In the video time runs 1000 X faster, from 04:00 UTC on May 26 to 19:00 UTC. The frame has a field of view of about 21° vertically. Notice the surface darkening up to the horizon while the Earth covers the Sun and casts a shadow on the Moon. How to simulate the eclipse Celestia is the best universe simulation software. To create the simulation, I used the Celestia app for Android on my ASUS Chromebox 3 not only because it runs well on Chrome OS but also because a

Python with Replit: A Journey in the Cloud

Image
Can I use only Replit for all my Python development? It’s what I set out to find. Follow along my journey to coding in Python on Chrome OS only with the tools and resources of Replit . I want to learn to live off the land in Replit; to develop, test, check into version control, run, document, deploy, and host Python code with Replit. I’ll share my experiences in Python with Replit , a blog post series documenting my ongoing efforts. A Python REPL in Replit on my ASUS Chromebox 3. This is not a philosophical quest for cloud purity or a “use only brand X for 30 days” blog challenge. It’s rather the realization of how much my tools shape the way I work. When in Chrome, do as the chromies do. I want Replit to be my main Python environment, figure out how to work around its limitations, and push the boundaries of what it can do. I’m a hobby programmer and a Python beginner, not a professional developer. These constraints define the journey and frame my setup and tooling decisions. Why use R

Explore the Moon and Mars with GlobeViewer for Android

Image
GlobeViewer Moon and GlobeViewer Mars are interactive Moon and Mars globe apps for Android. These incredible works are the best planetary globes for Android. GlobeViewer Moon for Android on my Pixel 4 XL. Under the hood they share the same rendering engine that combines shading, color, and perspective to present the shape and relief of geological features in a realistic, dramatic way. The camera controls let you explore these worlds from far away or fly close to their surfaces. The views of the Moon and Mars are stunning and educational. The apps come with high-resolution planetary textures based on space images and accurate altitude data of the celestial bodies. You can control the perception of relief by selecting the textures and adjusting the properties of simulated reflected light that determines the visual strength of surface details. 3D model of the north-eastern Montes Apenninus area at the eastern side of Oceanus Procellarum in GlobeViewer Moon on my Pixel 4 XL. Near the c

A NASA TV Still Frame Viewer in Python

Image
I wrote Spacestills , a Python program for viewing NASA TV still frames. The main window of Spacestills running on Replit. As a hobbyist wishing to improve my Python programming skills, for some time I’ve wanted to work on learning projects more substantial than code snippets , throwaway tools, or short scripts. Spacestillschecks several boxes. The problem domain is one of my primary interests, space exploration. At about 350 lines of code, it’s a non-trivial system with a GUI. It accesses the network to download data from the web. Finally, the program relies on a few Python libraries. About the program Spacestills periodically downloads NASA TV still frames from a web feed and displays them in a GUI. The program allows to correct the aspect ratio of the frames and save them in PNG format. It downloads the latest frame automatically and gives the option to reload manually, disable the automatic reload, or change the download frequency. As a learning exercise, Spacestillsis a basic pro