Paolo Amoroso's Journal

Tech projects, hobby programming, and geeky thoughts of Paolo Amoroso

I'm reading the book Writing An Interpreter In Go by Thorsten Ball, which I got along with the sequel Writing A Compiler In Go.

I have always been fascinated by compilers and seeked good learning resources. These books bridge the gap between short tutorials that teach how to write an arithmetic expression parser, and 900 page compiler tomes packed with math.

I don't know Go, but Ball designed the books and sample code so that no knowledge of the language is required other than a general programming background. All I know about Go comes from reading the Wikipedia entry and a short reference. Yet the code of Writing An Interpreter In Go is easy to understand, reads as pseudocode, and is arranged in short blocks rarely spanning more than a page.

I really love Writing An Interpreter In Go.

The book presents the material in a smooth and clear progression and anticipates the questions the reader may have. For example, whenever I wonder why some code does or doesn't do something, the next paragraph acknowledges and addresses the hurdle.

I hope Ball's books will help me rewrite the assembler of my Suite8080 suite of Intel 8080 Assembly tools, finally replacing the ad hoc syntacting analysis mess with a true and extensible parser.

#development #books

Discuss... Email | Reply @amoroso@fosstodon.org

You know what I envied of those influencers with millions of followers? The magic of tweeting a question and getting valuable answers and advice from knowledgeable people.

I'm no celebrity, but on Mastodon I'm getting the same experience with orders of magnitude fewer followers.

As a retrocomputing enthusiast, it's a lot of fun to explore and program my V20-MBC homebrew Nec V20 computer. But CP/M-86, one of the operating systems the V20-MBC runs, was eclipsed by MS-DOS back in the day, leaving little surviving documentation and literature. Especially about CP/M-86 development.

So the Open Library listing of the book CP/M-86 Assembly Language Programming by Jon Lindsay (Brady Communications Co., 1986) caught my attention. Sadly, the text isn't available. I decided to try to track down the book, starting by asking for help on comp.os.cpm.

Without expecting much, I also posted a toot to my Mastodon account in case anyone had useful clues on the book. What happened next blew my mind.

Within a day the post was boosted over a hundred times, got some fifty stars, and received dozens of valuable replies. The replies contributed promising leads, tagged others who might know something, suggested workarounds or other lines of inquiry, and started a few interesting side conversations. Everyone went out of their way to assist.

I was speechless, breathless. Literally. I didn't even know how to adequately thank the many who chimed in.

This isn't possible on Twitter, where the algorithms boost celebrities and influencers and bury everyone else.

You may think this overwhelming support has something to do with my 1.1K Mastodon followers. But I've been having a similar experience since joining Mastodon ten months ago. I'd say the critical mass is somewhere between a few dozen and a couple hundred followers.

I want to give back. I want to give others the opportunity of a similar positive experience, which is within reach of everyone in the Fediverse. Boosts proved crucial to amplify my quest for help, so I'm boosting more toots for a chance to reach someone who may be interested or willing to help.

People are the ultimate algorithm.

#fediverse #retrocomputing #books

Discuss... Email | Reply @amoroso@fosstodon.org

This is the 200th post over 10 months of my blog hosted at Write.as. The milestone is even more significant considering I published 146 posts over 3 years to my previous blog hosted at the bloated, inflexible, and clunky old Blogger.

I credit the milestone in large part to Write.as, a lightweight blogging platform that nearly eliminates friction with its Markdown support and minimalist design.

Typing into the Write.as editing area is all it takes to insert, format, and present the content of a post. With Blogger, even basic text formatting requires laboriously moving and clicking the mouse to select text, click icons, pick menu items, and apply formatting. It all adds up to enough friction to dread the experience and be discouraged from posting.

I started this blog on February 28, 2022. I stumbled upon Write.as at the end of a long research process that led to the best platform for my technical writing needs.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

I'm always looking for terminal emulators and communication programs for controlling the Z80-MBC2 and V20-MBC, hoping they provide useful features Minicom misses.

That's why when stumbling upon CuteCom I eagerly checked it out. CuteCom is a graphical serial terminal program for Linux with a clean and simple user interface.

I tried it in Crostini Linux on my Chromebox connected to the Z80-MBC2 and the V20-MBC. The layout of CuteCom's window reminds me of the Serial USB Terminal app for Android which, unlike Minicom's single input and output area, has an input field separate from the output area.

The basic features of CuteCom are okay, but the program has major limitations when used with my homebrew computers. The main one is the program does no terminal emulation, doesn't support the escape codes for terminal control, and doesn't even properly align the output of a simple program like DIR. This screenshot of a V20-MBC CP/M-86 session shows the issue:

CuteCom terminal connected to a V20-MBC homebrew CP/M-86 computer.

I checked out CuteCom also with the Z80-MBC2 and tried to upload a file with XMODEM to a CP/M Plus session. However, an error informed CuteCom was unable to start the Linux program sz. There were no other clues and CuteCom has no documentation, so I have no idea what may be wrong. sz seems correctly set up under Crostini.

Given these issues, I can't unfortunately use CuteCom with the Z80-MBC2 and the V20-MBC.

The program is not a full terminal emulator to run programs that send terminal control codes to format the output. Instead, it's designed for the different use case of accessing electronic boards, embedded systems, and other devices via a serial connection, which typically produce line-oriented output.

#z80mbc2 #v20mbc

Discuss... Email | Reply @amoroso@fosstodon.org

The great experience with Mastodon and the Fediverse made me curious about other decentralized and federated platforms.

As the next step, I decided to check out the Matrix messaging and communication network. Browsing the list of the main homeservers led me to join aria-net.org, the only one in Italy where I live.

As Matrix clients I use the Element web app on my Chromebox and the Element Android app on my Pixel 4 XL. Element has a clean, modern design the developers rightly describe as “glossy”. I also love the Markdown support, a key productivity feature. There are several features and settings I need to study in more detail, especially the message encryption options.

However, my experience with the Matrix infrastructure has been a bit bumpy so far as the homeserver has configuration, stability, and certificate issues.

When signing up, an error reported the handle of my account was already in use, but the server let me sign in with and use it anyway. As prompted, I tried to verify my phone numer but received another error. According to the server's help desk phone verification was disabled.

Sometimes the Element web app doesn't load or is slow. But an even more serious issue prevents me from using the web app. For the past severel days, visiting the website has been returning the error NET::ERR_CERT_COMMON_NAME_INVALID due to certificate issues.

If these issues persist, I will have to migrate to a more stable homeserver. It won't be a problem as only one of my contacts uses Matrix so far.

#misc

Discuss... Email | Reply @amoroso@fosstodon.org

I'm collecting and reading more Pascal programming books than I ever did.

My Z80-MBC2 and V20-MBC come with Turbo Pascal for CP/M preinstalled. Using the environment is making me rediscover Turbo Pascal and realize it's great for creating small CP/M tools and programs.

To take advantage of Turbo Pascal I have been gathering old books and other Pascal learning resources that cover the CP/M version I use, selecting only the best and most interesting.

All of them are available online, for example at the Open Library or Bitsavers.org. But these works are too precious and may disappear, not to mention the high prices of rare retrocomputing books. I want backups, so I bought used copies of some of these. Here's what my Pascal programming retro bookshelf looks like:

Pascal programming books.

These are the Pascal books and resources I reference most often, along with notes on what they cover or why I like them:

#pascal #retrocomputing #books

Discuss... Email | Reply @amoroso@fosstodon.org

I’m typing this with a keyboard that is cheap and looks cheap. And I’m loving it.

My appreciation for cheap keyboards began with my first Chromebook, an Acer C720 I got to learn and explore chromeOS. I loved the device so much I switched to using chromeOS as my only desktop operating system. Back then my daily driver was an i3 ASUS Chromebox 2 hooked to a Logitech K120 full travel keyboard from my last PC.

With the Chromebox as the main desktop machine, I put aside the Chromebook for a while. But something later motivated me to play more with the Chromebook: its keyboard.

The screen of the Acer C720 has notoriously poor viewing angles. But I realized I could improve legibility by setting the Chromebook on a slightly taller desk, which made the viewing angle optimal. This led me to use the device more and appreciate its chiclet keyboard with good feedback.

To have a similar experience on the ASUS Chromebox 2 I used at the time, I bought the only low profile chiclet unit I found that provided the extended Italian layout with accented letters I wanted, an Atlantis Chocolate 1300 wired keyboard. It was cheap and came from a little known manufacturer, but worked great. I began enjoying typing on the Chromebox more and more.

When I upgraded to my current i7 ASUS Chromebox 3, I plugged the Atlantis keyboard into it. However, its cable and that of the mouse contributed to the mess on my desk, so I replaced the input devices with wireless units. I bought a Logitech M220 mouse and, again, the only low profile chiclet keyboard with the required layout I found, this Nilox Kt40W:

Nilox Kt40W wireless chiclet keyboard.

The keyboard cost me all of €14.69. Besides being cheap and from an unknown brand, the plastic finish and feel make it also look cheap.

But I really enjoy using the Nilox keyboard.

Pressing the keys makes a clunky noise, a satisfying kind of clunky with a pleasant feedback. At first the pressure of the keys felt hard, slightly more than the Atlantis. But I eventually got used to the keyboard and came to love it.

#chromeOS

Discuss... Email | Reply @amoroso@fosstodon.org

Write.as, where this blog is hosted, supports embedding rich media from many social platforms and websites such as YouTube videos and Twitter tweets. It's enough to insert in a post the bare URL of the content to embed, on a line by itself, for Writes.as to render the media.

I wonder whether media embedding works also with Fediverse platforms, so this test post includes some of this content. Let's start with a toot of my Mastodon profile:

https://fosstodon.org/@amoroso/109360170388228216

Here is the URL of a PeerTube video:

https://diode.zone/w/9edtkEZ3QcmfMZStyrEjgB

Another option with PeerTube is to insert the HTML video embedding code, as Write.as renders some HTML in Markdown:

Does it work?

After checking out the published post I updated it to report on the embeds.

Write.as doesn't render the URLs of both the toot and the PeerTube video. The HTML embedding code does work, but the rendered video is not responsive and doesn't blend well with the page on mobile.

#blogging #fediverse

Discuss... Email | Reply @amoroso@fosstodon.org

I assumed in Turbo Pascal for CP/M, when printing to a terminal, writeln wraps lines longer than the screen width. A quick test under CP/M-86 on the V20-MBC proved such lines are truncated instead. In hindsight it makes sense, as there's limited output state on a terminal system with no frame buffer.

#v20mbc #retrocomputing #development

Discuss... Email | Reply @amoroso@fosstodon.org

Large tablets and desktop screens are the best for reading PDF ebooks and files.

However, a medium-size Android tablet is the next best thing as tweaking the Google Play Books reading settings provides an acceptable experience. Under these conditions, Google Play Books works better with PDFs than Kindle for Android.

This setup is helping me read more PDF ebooks unlike with my previous tablet, a 7” Lenovo Tab E7. On its small screen, the text of nearly all PDF ebooks and files was too small no matter what reading options were set. Landscape mode didn't help much.

Let’s see why PDFs require specific reading tools, what my setup is, and how I read PDFs.

Reflowable vs fixed-layout ebooks

With reflowable ebook file formats, such as ePub and Mobi, reading apps rearrange the text and other content to fit any screen size, much like web browsers do with HTML pages. Text fills the viewing area while maintaining a comfortable, legible size.

In fixed-layout ebooks like PDF files, the pages have a predetermined size and the text, images, and other document elements are fixed in size and laid out on the page at specific locations. The result looks like the pages of printed books. By default, reading apps zoom out the full page to fit the screen. The smaller the screen, the smaller the text. In addition, blank margins waste part of the page.

This makes it impractical to read PDFs on the screens of smartphones and small tablets. Reading apps allow zooming in the page until the text is legible. But, like looking through a keyhole, you view a small portion of the content at a time and have to drag around the page to bring into view the rest.

Minimum viable tablet

Up to the current one, I always owned 7” tablets like the Lenovo Tab E7.

While great for reflowable ebooks, a 7” screen is too small for comfortably reading nearly all PDFs. Even with the reading settings I discuss here, text remains small. The low resolution of cheap devices pixelates small text and doesn’t help legibility either.

After the Lenovo Tab E7, I switched to a Lenovo Tab M8 HD 8” tablet. An extra inch is enough to make a difference in the PDF reading experience. The screen has the right size so that the text area on the page, when zoomed in to fit the screen width, is large enough for comfortable reading. The low resolution of the Lenovo Tab M8 HD screen doesn’t affect legibility much, as the panel doesn’t degrade it.

With this 8” device, all it takes for a satisfactory experience with PDF files is to turn on two options of the Google Play Books reading settings.

Google Play Books reading settings

Two specific options improve the reading experience with Google Play Books. Although turning them on is a one-time action, there’s an adjustment I need to make at the beginning of every reading session of PDF ebooks.

The one-time options are accessible by opening a PDF book and tapping the page, which brings up the reading controls. Next, I tap the Aa icon and, under Zoom, turn on the Remember zoom and Tap to scroll options. These are the options on my Lenovo Tab M8 HD:

Google Play Books fixed layout reading controls on Android.

Once the one-time configuration is complete, the first thing to do at each new session is to pinch the page to zoom in until the text area fits the width of the screen, with little or no margin. The Remember zoom option preserves that width for the duration of the session. In the example of the previous screenshot, this is the page after zooming the page to fit:

PDF ebook adjusted to fit the screen in Google Play Books on Android.

In most cases, some vertical scrolling is still required to bring the bottom of the page into view.

When turning a page, the zoom level is usually reset and I’d have to drag the text area again to match it to the screen width. This is where the Tap to scroll option comes in, as it lets me scroll down and turn the page by tapping one of the screen's edges. The option takes care of maintaining the text area centered horizontally, with full lines always in view.

These settings and adjustments go a long way to enabling reading more content on compact and affordable devices.

#Android #ebooks

Discuss... Email | Reply @amoroso@fosstodon.org

Enter your email to subscribe to updates.