Skip to main content

Ralsina.Me — Roberto Alsina's website

The Kind Worth Killing

Cover for The Kind Worth Killing

Review:

Now that was pret­ty good!

I got this book pret­ty much at ran­dom, a sur­pris­ing noir, liked it a lot, get­ting the se­quel now.

Rec­om­mend­ed.

So I built a ... laptop?

Introduction

There is a vin­tage com­put­er that has al­ways fas­ci­nat­ed me. It was one of the first prac­ti­cal porta­bles, the Tandy Mod­el 100.

It ran on a few AA bat­ter­ies and had around 20 hours of bat­tery life. Does your lap­top do that? No.

It's icon­ic in mul­ti­ple ways.

  • That wide, stumpy screen!
  • That pre-IB­M-PC key­board with the funky cur­sor keys which now looks like ... a al­most nor­mal 60%?

The Mod­el 100 was an in­stant hit with jour­nal­ist­s, who could use its in­te­grat­ed text ed­i­tor to write on the road and its mo­dem to send sto­ries to the pa­per.

On the oth­er hand that form fac­tor just does­n't ex­ist any­more. It did­n't even sur­vive long in fur­ther Tandy mod­el­s, be­cause new­er bet­ter screens had a more "nor­mal" as­pect ra­tio and the now-­s­tan­dard clamshell made more sense.

But since I loved it... why not try to build some­thing like it now, when we have much bet­ter tech­nol­o­gy? Well, I could­n't come up with any good rea­son­s.

Ex­cept that I had no com­po­nents that could work in it.

And that I had no idea how to de­sign such a thing.

And that I knew noth­ing about any­thing like elec­tron­ic­s, 3d mod­el­ing, etc.

So, I de­cid­ed to do it. In late 2021. And I have spent the last 16 months or so work­ing on it.

And the 2nd pro­to­type ac­tu­al­ly work­s!

If the de­tails of how it's done are in­ter­est­ing to you, I have good news. I am about to write down A LOT OF DE­TAIL­S.

Design Idea

Even though this is what some may call a cy­berdeck I did­n't want it to be cy­ber­punk, or steam­punk, or any sort of punk.

I want­ed to make it as smooth, pol­ished, com­mer­cial-look­ing as I could with­in the con­straints of my abil­i­ty (which are plen­ty).

I want­ed it to look as what may hap­pen if por­ta­ble screens nev­er aban­doned the 5:1 as­pect ra­tio and clamshells did­n't ex­ist.

Did I suc­ceed? Hell no. This is janky as hell be­cause it's a hand­made pro­to­type, but it shows the seeds of pos­si­bil­i­ty, of it­er­a­tion that may make it ... pos­si­ble.

Hardware

SBC

So, what is the en­gine for the thing? When I was think­ing about how to make this func­tion­al, the ob­vi­ous thing was to use a SBC, such as a Rasp­ber­ry Pi.

OTOH I start­ed the project in the mid­dle of the pan­dem­ic short­age of SBC­s, which is still sort of on­go­ing, so those were hard to get, and ex­pen­sive.

So I turned to a lesser-­known brand which had the mag­i­cal thing: stock.

So, the SOC is a Radxa Ze­ro, a tiny SBC in the same form fac­tor as a Rasp­ber­ry Pi Ze­ro, ex­cept it's ridicu­lous­ly more pow­er­ful:

  • Quad core
  • 4GB of RAM
  • 32GB eMMC (no need for SD card)
  • USB 3.0
  • Mi­cro HD­MI port ca­pa­ble of 4k 60Hz

This is rough­ly 70% of the pow­er of a Rasp­ber­ry Pi 4, in a much small­er pack­age that us­es less than 5W of pow­er.

Keyboard

From the be­gin­ning I want­ed a me­chan­i­cal key­board. But I did not want to make my own be­cause that's a lot of work. So, I cre­at­ed soft­ware (more on that be­low) to make it pos­si­ble to just gut a cheap me­chan­i­cal thing and adapt the case so it would work.

Just be­cause I am not hard­core enough to live with­out cur­sor keys I de­cid­ed on a 65% board and the main cri­te­ria was "ships to my house and is cheap­est" so ... en­ter the "GANON 65%" cost­ing un­der 20 dol­lars.

It's ab­so­lute garbage. The sta­bi­liz­ers are hor­ri­ble, the switch­es are scratchy and in­con­sis­tent­ly clicky yet loud, and it was per­fect for the job be­cause all key­boards in 80s com­put­ers were pret­ty crap.

Oh, and it's one of those janky rain­bow fake-RGB back­lit things.

All of these cheap key­boards I've seen are one or two cir­cuit boards with through holes for screws. So I made the case with stands so they would snap in place and then be screwed in.

Power

The ini­tial idea was to use a sim­ple USB power­bank, but that does­n't re­al­ly work, be­cause they have a few un­for­tu­nate habit­s:

  • They of­ten are too bulky
  • There is no sim­ple way to turn them on or off with­out un­plug­ging things
  • Most of them CUT POW­ER OUT­PUT FOR A SEC­OND WHEN YOU PLUG THEM TO CHARGE

The last one is a killer. You can't use a lap­top that crash­es ev­ery time you plug it.

So, I got a "Rasp­ber­ry Pi UP­S" thing which is pow­ered by stan­dard 18650 bat­ter­ies. They are avail­able ev­ery­where and are very cheap, which is good.

In this im­age you can see the whole "pow­er sys­tem"

The green and white cylin­ders are the 18650 bat­ter­ies. They are in­sert­ed in a black case on top of a cir­cuit board. That is the "UP­S" sys­tem,

It can pow­er mul­ti­ple things via 2 US­B-A ports and a US­B-C port.

This par­tic­u­lar one has a but­ton to turn it on and off that is ex­posed in the back of the case as well as a mi­cro USB port to charge, which are ex­posed on the back of the case.

How­ev­er ... the but­ton on­ly turns off one of the pow­er out­put­s. If you look at the BOT­TOM of the "UP­S" you can see a pair of red and black ca­bles. Those are con­nect­ed to freak­ing pogo pins at the bot­tom of the UPS and go to a cou­ple of pins in the Radza Ze­ro to pow­er it.

This sucks a lit­tle be­cause I had to use that ad-hoc con­nec­tor in­stead of a sim­ple USB ca­ble and it means the "UP­S" has to be fair­ly sep­a­rat­ed from the bot­tom of the case (7m­m!), but hey, it work­s.

There are al­so a cou­ple oth­er wires, or­ange and blue. Those are con­nect­ed to a cheap volt­age-mea­sur­ing thing with LED­s. It costs about 50 cents and ... is not great.

OTOH I glued it to the IN­SIDE of the case and I think it looks awe­some.

It can stay turned on all the time be­cause it us­es so lit­tle pow­er it would have to be turned on for a month to drain the bat­tery.

The screen gets pow­er from a USB hub con­nect­ed to the Radxa Ze­ro, so I don't need to fig­ure out how to pow­er it from here.

UP­DATE: Turns out the screen was draw­ing too much pow­er, so when the sys­tem got load­ed or an­oth­er pe­riph­er­al was added it got un­sta­ble and things turned on and off as it tried to keep up. I just spliced a mi­cro-USB pow­er-on­ly ca­ble in­to the pow­er from the pogo pins and it works just fine, ex­cept for the ug­ly, ug­ly ca­bling.

I/O

The Radxa Ze­ro has a pret­ty lim­it­ed port se­lec­tion, be­ing that smal­l.

  • HD­MI which is con­nect­ed to the in­clud­ed screen.
  • 1 USB 2.0 OTG port (unused for now)
  • 1 USB 3.0 port

So I need­ed to make that sin­gle USB 3.0 port do more things. Which means I got a USB hub.

That's a alu­minum hub (be­cause why not) which has 4 port­s, 3 on the side, and 1 on the tip.

The port in the tip I ex­posed through a hole in the back of the case:

The ones on the right are used for:

  • Plug­ging the key­board
  • Pow­er­ing the screen
  • A USB sound card

The au­dio jacks are ex­posed on the side of the case:

Up­date: Be­cause of the changes in how the screen is pow­ered now there is an­oth­er free USB port which means I may be able to pro­vide an ex­posed Eth­er­net port!

Screen

This is a gener­ic 1920x480 screen. I think they are made for car sys­tem­s, so they are bright and fair­ly af­ford­able, you should have no prob­lem find­ing one in your favourite chi­nese sup­pli­er.

If you can af­ford a touch ver­sion maybe that would be nicer, but this one is not touch, be­cause I ex­pect the main in­ter­face to be key­board based.

This weird sort of screen may or may not work with your op­er­at­ing sys­tem, spe­cial­ly if you are us­ing a not-­so-well-­known SBC like the Radxa Ze­ro.

I had to build a cus­tom ker­nel from github and that on­ly on Ubun­tu YM­MV.

One un­ex­pect­ed is­sue was that the dis­play of­fers mini-HD­MI and the SBC has a mi­cro-HD­MI port.

Have you ev­er seen a mini-mi­cro HD­MI ca­ble? Me nei­ther (un­til re­cent­ly) and if you try to use reg­u­lar HD­MI ca­bles and adapters ... the end re­sult is some­thing im­pos­si­ble to fit in­to a rea­son­able case.

So­lu­tion: flat, mod­u­lar HD­MI ca­bles!

You get the con­nec­tors you wan­t, the ca­ble length you wan­t, you snap them to­geth­er and voilá! Smal­l, flex­i­ble ca­ble with the con­nec­tors you need!

Did I men­tion that these ca­bles took 3 months to ar­rive? And I could not move for­ward with the build un­til they did? Be­cause they did take 3 months to ar­rive. So get a bunch at once.

Case

With all the com­po­nents above you can con­nect ev­ery­thing and have a work­ing ... thing. But you can't put it in your lap, so it's not a lap­top.

To com­bine them all you need a case. And in 2023, as a sim­ple per­son with no me­chan­i­cal tal­ents that means 3d print­ing.

BUT, I al­so lack any knowl­edge of 3D de­sign soft­ware.

BUT, I am a pro­gram­mer. So when I found I could write 3D mod­els as Python pro­grams I knew what to do: use Cad­Query

Then came a month­s-­long pe­ri­od of fig­ur­ing out how to cre­ate the case and how to print it and so on, but the end re­sult is two pieces:

The bot­tom piece is ba­si­cal­ly a box with pegs and holes where all the com­po­nents are mount­ed.

The top piece is where the screen goes.

Both of them have holes and stands so they can be screwed to each oth­er.

Be­cause they are too large, they are print­ed in halfs and then as­sem­bled.

With a larg­er 3D print­er I could print the base as a sol­id piece, how­ev­er, the top half needs to be split in half so the screen can slide in place.

All this is gen­er­at­ed by a cou­ple of Python scripts avail­able in my per­son­al code serv­er.

It's not all the way there yet, but the goal is to cre­ate a soft­ware pack­age that lets you (yes, you) set pa­ram­e­ters and make this work with your ran­dom col­lec­tion of mis­fit com­put­er hard­ware.

So, no screen? Print a lid, ex­pose the HD­MI port!

Have a Rasp­ber­ry Pi 4 in­stead of a Radxa Ze­ro? Sure, ad­just a few things and make it work.

Got a ran­dom key­board with 14 mount points in ran­dom places? Sure, mea­sure them and slap it in place.

But again: not there yet.

Performance

What can it do?

  • Run a web brows­er (tried Falkon)
  • Watch a Youtube video (or even two!)
  • Run a light­weight graph­i­cal desk­top
  • Run ter­mi­nal apps like a champ
  • Ed­it text and write code

So, it's good enough for light us­age, which is what I am aim­ing for.

Bat­tery life is be­tween 3 and 5 hours de­pend­ing on load.

Software

This is run­ning Ubun­tu Fo­cal with a cus­tom ker­nel and a patched dwm

The ter­mi­nal of choice is alacrit­ty be­cause while it us­es a lot more RAM than st it runs a bazil­lion times faster.

To mux the ter­mi­nal (alacrit­ty has no tab­s) I use zel­lij an awe­some and friend­ly al­ter­na­tive to tmux/screen/etc.

To browse the web I would love to use qute­brows­er be­cause of its awe­some key­board sup­port that makes the mouse an af­ter­thought. Bu­u­u­ut it's re­al­ly re­al­ly bro­ken in this Ubun­tu, so Falkon it is.

Do not try to get fan­cy with pow­er man­age­men­t. Things like up­ow­erd im­me­di­ate­ly throt­tle the CPUs to 100MHz mak­ing it im­pos­si­ble to do any­thing.

Oth­er than that, just the usu­al Ubun­tu un­der­neath it al­l.

Problems (TODO)

  • Air­flow is in­ex­is­ten­t, so it over­heats
  • When it over­heats it starts turn­ing off and on the USB port which makes ev­ery­thing work bad­ly.
  • The key­board is too high from the table, so that needs tweak­ing.
  • Be­cause of the bat­tery so­lu­tion it's kin­da thick at the back
  • The pow­er but­ton is re­al­ly hard to click
  • The bat­tery gauge sucks
  • Needs no-s­lip pads
  • Has no sup­port for a point­er (other than plug­ging a mouse) so an in­te­grat­ed track­ball or thinkpad-style nub would be nice.

Comments

This blog has no com­ments, but feel free to dis­cuss it in this red­dit post

Pet Server (Feb 2023 update)

This is a longer-term up­date on the state of my home serv­er. You can read more about it in these 1 2 3 4 5 post­s.

Not much has changed in it, to be hon­est.

Hard­ware's the same as in the past, ev­ery­thing is work­ing fine. I have a good back­up of the serv­er us­ing what I de­scribed here and I have ac­tu­al­ly test­ed it. I can bring it back up in un­der half an hour, which is ok.

I am con­sid­er­ing get­ting a bet­ter USB hub, be­cause the one it's us­ing now is pret­ty slow for the stor­age. Not slow enough that I can no­tice but slow­er than it could be.

I may re­do the case be­cause I have learned a lot about mak­ing cas­es and can do a bet­ter one :-)

What could im­prove?

  • Some things are tricky to de­ploy in ARM
  • Some of my ad-hoc im­ple­men­ta­tions are clunky
  • I am not re­al­ly us­ing the whole me­dia serv­er im­ple­men­ta­tion all that much

How hap­py am I with it? Su­per hap­py. I use it ev­ery day, it's re­li­able and ba­si­cal­ly main­te­nance-free.


Contents © 2000-2024 Roberto Alsina