PinePhone First Impressions

My PinePhone BraveHeart edition arrived yesterday, and the past few hours have been spent playing around with it and trying to place a basic call.  Findings so far:

For Developers and Maniacs Only

The folks at Pine64 make very clear that this phone is not a daily driver, but it bears repeating: this is not so much a phone as a fun Linux project with a SIM slot.  You have to install your own operating system, and none of the choices on offer claim to be even remotely road-ready.  In particular, the four I’ve installed so far have had one or more of these symptoms:

  • Unusably slow
  • Can’t find the SIM
  • Require a light to be shined on them to display anything
  • Lock you out without a password

Further, even the folks online who have managed to get past the above nuisances still generally can’t get the silly thing to successfully place calls – you know, the one thing a phone is supposed to do.  So again, not a daily driver.

But All Kinds of Fun to Play With

With all those caveats out of the way, the thing’s a hoot to mess with. If something goes pear-shaped, just pull out the microSD card and re-flash it. And at $150, the price point is great for a project.

What Lies Ahead

I’ll do my best to make the silly thing work, and will report back with whatever tips and tricks I come across.

Posted by Adam Labay, 0 comments

Adventures with XYO – The Thrilling Conclusion

Back in November I decided to try out mining XYO using the Coin app on an old Nexus 5X that I reappropriated for the purpose.

Now it's February, and I think I'm about done with the whole thing.

To be candid, the main reason is that my sentinel went through the wash, and while it looked like a fresh battery would fix it back up, the new batteries don't seem to last more than a couple weeks. As such, I'm out $12.95 for the sentinel and $7 for a set of replacement batteries. In the same amount of time, I've earned about 8,000 COIN, which, if I could convert them to XYO (that option doesn't start until 10,000), would be worth...

31 cents.

I'll probably throw a few other posts about the various aspects of the COIN app and geomining, but for now here are my main takeaways:

Great for Truckers

Perusing the Reddits, the one group of people who seem to get a decent-ish return from geomining are truckers, who spend literally all their time cruising from tile to tile.  I'd wager that Uber drivers fit this description as well, though truckers have the advantage that they can geoclaim gobs of regions every cycle.  Truckers, who pass from cell to cell quickly and thus need a rapid recharge cycle, are probably the only group who benefit from Pro accounts as well.

And Nobody Else

As an ordinary schlub who works in an office and either drives to work or takes a train, there's simply no return to be had.  Five miles of walking net about 100 COIN, which isn't a whole lot greater than just sitting around refreshing the tile periodically while I work from my desk.  Geoclaiming isn't an option either, since the two regions I can claim (work and home) are both chronically oversubscribed, making the a losing proposition for everyone involved.

It's a shame, really.  The premise of geomining, as outlined on an XYO Medium post, ain't bad.  Using a fleet of smartphone-armed passers-by to determine whether packages arrived is clever, and I really do hope they figure out a way to make it work.  For now, though, it's just another GPS device attached to yet another freight truck.

Posted by Adam Labay, 0 comments

The Futility of Geoclaiming

As described by the folks at the COIN App:


When you Geoclaim a tile, you are becoming an owner of the tile for the remainder of the campaign(Currently UTC Monday to UTC Sunday). Anyone that Geomines using the COIN app in your area will give you a chance, based on your Ownership percentage, to collect 10% of rewards.

An Owner with 100% ownership of a Geoclaimed Area will receive the 10% of rewards every time. 

An Owner with 50% ownership of a Geoclaimed Area will receive the 10% of rewards half of the time. 

An Owner with 25% ownership will receive the 10% of a miners reward a quarter of the time.

In theory, this is a way of earning that sweet, sweet COIN without having to actually, you know, go places.

In practice, it’s a lovely exercise in overestimation and accidentally returning COIN to the system.

But it doesn’t have to be, and my current goal is to figure out means of optimizing geoclaims.

The Basics

The amount you get out – your return – is proportional to your stake – i.e. the amount of the area that you control, or what the COIN folks call your ownership.

I’m using stake because in this context, ownership is a misleading term. Take a look at this screenshot:

Paid: 1905. Ownership: 13%

Throughout this week, my ownership has never dropped below 10%, and has usually hovered in the 13-14% range.  Yet, my returns are well less than even 10% of the total 10,940 COIN held by this region.

That’s because you don’t own a fraction of the COIN held; you get a fraction of the COIN earned, as it gets mined.  And remember that geomines are random numbers, further dependent on whether that user happens to have a sentinel at the time.  It seems that my RNG luck this week was pretty crap, since the users I was earning from tended to have lower mines than average.  That, or a lot of users in my area have premium accounts, which prevents their mines from entering the pool.  Probably both.

The Point of No Return(s)

Say it with me: your earning potential is not unlimited.  It’s determined by your stake, and by the available earnings.  If we make the simplifying assumption that your stake is actually an ownership, then

the amount you pay into the geoclaim – your investmentmust be less than your stake multiplied by the total COIN in the region.

Seems obvious, but you would be amazed how many people on Reddit get hyped about how much they dumped into their latest geoclaim without realizing this basic fact.  And, as discussed earlier, your expected return is actually significantly less.  (How much less? I’m working on a heuristic, but that’s another post.)

Consider the screenshot above: That 13% stake cost me 1905 COIN.  Even if I earned a full 13% of the available ~11k COIN, I’m still not going to recoup my investment.  (In this case, I saw that coming, but dumped the all the COIN in for other reasons.)

Good Money After Bad

But what if I just increased my stake until the math worked out?  There’s a possibility that would work, but it depends on two things:

First, the distribution of investments.  If it were linear, then doubling my investment would double my return.  But it’s not linear, it’s a Pareto distribution (more on that in a future post).  TL;DR: it’s like the American economy, where most of the stakes are taken up by a very small fraction of users.

It turns out that doubling your investment does indeed double your return.  The only thing that matters is how much has been invested total, below.

Second, there is a point of no return.  If the total investments ever exceed the available COINage, then nobody gets a positive return, no matter how much they put in.

The math is easy enough:  Again, pretending that your stake is an ownership – which, emphatically, it ain’t – we can say that your return is defined by

\(R = s \times A\)

where R is your return, s is your stake, and A is the total available COIN.  Your stake, meanwhile, is defined by the ratio of your investment to the total investment:


So, we end up with

\(R=\frac{i}{I} \times A\)

If we want a positive return, then

\(\frac{R}{i} > 1\)



or, the total available COIN must exceed the total investment.  If everybody tries to pump up their stake, then there comes a point where everybody loses.  Whoops.

So can Geoclaiming work?

It depends.  Specifically, it depends on the distribution of stakes, and a few other factors.  I’ll get back to you.

Posted by Adam Labay, 1 comment

Adventures with XYO


For the unfamiliar, XYO is yet another cryptocurrency venture.  The basic premise is that users mine their coin (also called XYO) using the Coin app, which uses proof of location as the mining function (as opposed to proof of work for Bitcoin, or say proof of storage for Burst or Filecoin).

You wander about the world, which is divided into squares about 25 feet on a side.  Each square you enter is worth a random amount between 0.02 and 0.1 XYO, which gets “geomined” when your phone enters that region.  If you pay them $12.99, you can get a Sentinel – a bluetooth doodad that, as a reward for foolishly dropping 13 bucks on their technology, multiplies each geomine by a factor of 12.

XYO Sentinel Doodad

This method of mining, however, is crap.  As an average person who walks around casually (about 6 miles a day, much of it around the office), a daily haul is ~200 Coin (not 200 XYO; read on.).  At that rate, it would take about 2 months before I could convert the minimum 10,000 Coin into 10,000 XYO, which as of this writing is worth about $2.95.

As in any good cock-and-bull crypto scheme, there are other ways to increase your rewards.  One is a Premium subscription, starting at $24.99 a month, which multiplies all of your mining by various factors.  Another is to hijack the mining of others by staking a Geoclaim – i.e. paying into a 25×25 mile region in exchange for a percentage of the coin mined therein.  This comes with its own risks and rewards.

For funsies, I’ve decided to spend the next two months answering the question, Is it possible to actually generate any manner of money using XYO?  I’ll wander about, rapidly draining the battery on the old Nexus 5X I’ve dedicated to the endeavor, do the math, and report back.

Posted by Adam Labay, 0 comments

I got hacked

The title says it all.  No idea how, since I use 2FA on Dreamhost, but here we are.  Time now to rebuild.

Posted by Adam Labay, 0 comments

Raspberry Pi 4, Kodi, and Chrome – An Uncomfortable Alliance

For years, I have needed two devices in order to watch quality drinking-time programming in my bedroom:

  • A Chromebit, which runs Chromium, for those late-night binges of TVTropes.orgbut doesn’t run Kodi
  • A Nexus Player, which runs Kodi, among other things but doesn’t run Chromium
  • Two remotes and an HDMI switcher to make it work

Each component is fantastic at what it does – the Nexus Player, despite being largely mothballed, has a great interface, and the Chromebit is the easiest way to get Chrome on HDMI – but it sucks for the need to use two devices.

This summer, I decided to fix that mess.

What follows is a short list of things I tried, none of which could pull it off:

  • Raspberry Pi 3 running Kodi (too underpowered)
  • Raspberry Pi 3 running Emteria OS (see above)
  • Essential Phone running Android TV Launcher (mobile browser on a big screen is a wreck)
  • Raspberry Pi 4 running Emteria OS (not until Emteria releases a build for the Pi 4; I couldn’t properly hijack the Pi 3 build

Here’s what worked:

Here’s how to do it.

Step 1: Download and Install Raspbian

  1. Download Raspbian Buster. I wanted to customize my GUI, so I went with the Lite ISO, but ain’t nothing wrong with the Desktop version.
  2. Flash the image to your MicroSD card using your favorite flashing software. (I’m on Manjaro, so this meant BalenaEtcher, but Rufus is great for Windows.)
  3. If you’re on WiFi, you’ll need to connect. This is trivial if you downloaded Raspbian Desktop, since it happens on boot. If you’re using Raspbian lite, enter sudo raspi-config and choose Networking Options. Enter the SSID and password.
  4. Enable SSH. If you’re using Raspbian Desktop, then open a terminal window (if you’re using Lite, you’re already at one). Enter sudo raspi-config, choose Interface Options | SSH and enable.
  5. Reboot to make sure the change stuck. You can tell if the WiFi setup worked by typing ip address to confirm that you have a proper IP, and you can confirm that SSH is installed by ssh’ing into said IP.

Step 1b: Install a Desktop Environment

If you used Raspbian Lite, you’ll need to install a desktop environment. Everybody has their favorite and I’m not going to take that away from you. I went with XFCE because it has rather beefy window icons and ready support for changes to DPI. Both will be important since I’m watching this on a projector and navigating from my bed, so usability is paramount.

To install, just type sudo apt install xfce4 and let the magic – and about a million dependencies – happen.

I would also recommend sudo apt install network-manager-gnome. This could be unnecessary, but I found it stopped having the WiFi stop working after the first or second reboot. Admonish in the comments if this is unnecessary.

Step 2: Install Kodi and Chromium

Straightforward enough:
sudo apt install kodi chromium-browser seahorse

Kodi has the ability of starting as its own desktop environment. We will eschew this option, since the only advantage of doing so is that you don’t see the Applications bar when you hover over it. Meanwhile, the disadvantage is that you can’t run any other Gnome apps, which is irritating.

Step 3: Log into XFCE, make it the default, and suppress them password dialogs

Reboot (sudo reboot), and when logging in, make sure that XFCE4 is selected as your desktop environment (top-right corner). Logging in is annoying, so we will invoke auto-login.

Similarly, when opening Chromium, entering a password for the default keyring is a pain, so we will suppress it.

Both of these moves are strongly advised against by StackExchange pedants, and that’s fair enough. But this is a media center, not the NSA, and convenience is paramount. Further, we’re going to change the pi’s password so there’s at least one layer of security still present.

  1. Open a terminal window by clicking Applications | System | XTerm. Type passwd and follow the instructions to change the default password from raspberry to something else.
  2. Run sudo raspi-config to configure auto-login: Select Boot Options | Desktop / CLI | Desktop Autologin and then Finish.
  3. Exit the terminal. Open Seahorse password manager by clicking Applications | Accessories | Passwords and Keys
  4. Right-click on Login and choose Change Password. Change the password to <blank>. This will disable prompts to unlock the default keyring.

Step 3b: Optionally, Configure HiDPI Mode

Tiny buttons are hard to hit with a remote control, and tiny text is hard to read when projected across the room. The easiest way to uniformly scale everything on screen is to adjust the DPI settings. This is optional and depends on your use case.

  1. Open Applications | Settings | Appearance and under Fonts change the DPI to 120 – or whatever works for you.
  2. Open Applications | Settings | Window Manager and under Style select Default-hdpi
  3. Reboot to see the full effects.

Step 4: Configure Advanced Launcher

Advanced Launcher is a Kodi addon that creates icons for ordinary apps. We’ll use this, plus a shell script, to launch Chromium from within Kodi

  1. SSH into your pi
  2. Download Advanced Launcher by typing
  3. Type nano and enter the following file contents:
    #! /bin/bash
    chromium-browser --user-agent="Mozilla/5.0 (X11; CrOS armv7l 10895.56.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.102 Safari/537.36" --window-size=1920,1080 $1
  4. Return to the pi and open Kodi. Install Advanced Launcher.
  5. Navigate to Add-ons | Add-On Browser (the open box at the top next to the Settings gear)
  6. Choose Install from Zip file and navigate to Home Folder and select You’ll likely have to answer a prompt to enable unknown sources.
  7. Advanced Launcher should now be under Program Addons in your Addons folder. Open it and navigate to Default. A dialog to create a new launcher should appear.
    1. Choose Standalone Launcher. Navigate to Home Folder and choose
    2. Leave arguments blank
    3. Keep the title as Chromium – or change it. Free country.
    4. Select Linux as the platform
    5. Skip Thumbnails and Fanart
  8. You now have a launcher that invokes Chromium from within Kodi. To make it more accessible, right-click on the launcher and choose Add to Favourites.

Step 5: Have a lovely beverage

There are additional steps if you want to use Netflix, Amazon Prime, or (heaven help you) Xfinity. But, at this point, you have a nice core setup, so lean back with a lovely beverage and celebrate your accomplishments. The rest can wait for later posts.

Posted by Adam Labay, 0 comments

Ubuntu Cosmic on Pixelbook – Possible!

The folks who use Crouton to run Linux on their Chromebooks tend to be an impatient bunch. Every time a new Ubuntu release comes out, they start peppering @dnscheid with questions about whether it’ll run.
As of this writing, Bionic is the most recent supported release.  But Cosmic and Disco both exist as well, and people want to install them. I haven’t made it as far as Disco, but I can answer these two questions:
Can Ubuntu 18.10 (Cosmic Cuttlefish) be installed on a Chromebook?
Should you install Ubuntu 18.10 on a Chromebook?
So very much no.
Can I do it anyway?
Hold my beer. 

Step 1: Create a chroot with Xenial

Ubuntu 16.04 Xenial, despite being obsolesced years ago, is the most recent version of Ubuntu that can be installed directly with crouton.  To get to Cosmic, we’ll have to upgrade a few times. This first section is basically an excerpt from the official instructions at

  1. If you haven’t already, download crouton from
  2. Press ctrl-alt-t to open a crosh shell
  3. Make the installer by typing sudo install -Dt /usr/local/bin -m 755 ~/Downloads/crouton
  4. Install by typing sudo crouton -t xfce -r xenial -n cosmic
  5. Follow the prompts

Congratulations! You now have Xenial installed. Enter by typing sudo startxfce4 -n cosmic

Step 2: Upgrade to Bionic

Now that you have a functioning chroot, it’s time to upgrade to Bionic – the most recent version of Ubuntu which is still fully functional on a Chromebook.

  1. Enter your choot by typing sudo startxfce4 -n cosmic
  2. Enter a terminal by typing ctrl-alt-t
  3. Install Release Upgrader by typing sudo apt install ubuntu-release-upgrader-core
  4. Initiate the upgrade with the following commands:
    sudo apt update
    sudo apt upgrade
    sudo apt dist-upgrade
    sudo do-release-upgrade
  5. Follow the various prompts
  6. Log out, restart your Chromebook, and enter your chroot to make sure everything worked.

If all went well, you have yourself a fancy new Bionic installation.

Step 3: Replace a bunch of drivers

If you try to reproduce the above steps to install Cosmic, you will discover that you can never get a clean apt upgrade. Instead, there’s a set of 5 packages that keep being held back:

The following packages have been kept back:
xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-input-wacom xserver-xorg-video-intel
0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.

If you try to get rid of them, you’ll end up cutting off your display, which is sadness. Instead, we need to replace them with different versions, and then revert to these versions post-upgrade.

  1. Remove the troublesome drivers with
    sudo apt remove xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-input-wacom xserver-xorg-video-intel
  2. Install the friendly drivers with
    sudo apt install xserver-xorg-core-hwe-18.04 xserver-xorg-input-evdev-hwe-18.04 xserver-xorg-input-wacom-hwe-18.04 xserver-xorg-video-intel-hwe-18.04
  3. Type sudo nano /etc/update-manager/release-upgrades and change prompt=lts to prompt=normal
  4. Execute the upgrade with
    sudo apt update
    sudo apt autoremove
    sudo apt dist-upgrade
    sudo do-release-upgrade
  5. Do not reboot after the upgrade! You will lose your video.
  6. Reverse steps 1-2:
    sudo apt remove xserver-xorg-core-hwe-18.04 xserver-xorg-input-evdev-hwe-18.04 xserver-xorg-input-wacom-hwe-18.04 xserver-xorg-video-intel-hwe-18.04
    sudo apt install xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-input-wacom xserver-xorg-video-intel
  7. Put back the packages that were autoremove’d earlier:
    sudo apt install libcurl3 libegl1-mesa libglu1-mesa libgtop2-common libnih-dbus1 x11-apps x11-session-utils xfonts-base xfonts-encodings xfonts-scalable xfonts-utils xinit xinput xserver-common

Now you can exit, reboot, and log back in.

Congratulations! Also, your system is now unusably slow.

Good news: you upgraded to Cosmic. Good job, give yourself a hug.

Bad news: It’s gonna be slow. Mad slow. Unusably slow.

But it was a fun academic exercise, wasn’t it? Remember, we don’t upgrade software to use it, we upgrade because it’s there.

Posted by Adam Labay, 0 comments

An Exceptionally Simple Class Grade Distribution Chart for DCPS Teachers

This is the latest in lame GSheets hacks I put together for Kelly.

Every Monday, she hands out progress reports. And every Monday, two manners of delusion ensue:

  1. The kids who are doing poorly assume that they’re doing no worse than anybody else (the system must be biased!)
  2. The kids who were doing well but have been slipping assume that they must still be at the top of the heap, because they’re the smart kids so of course they are.

Wouldn’t it be nice if you could point to a classwide grade distribution to show where each student fits in the grand scheme of things?

Indeed it would.

Enter, the grade distribution chart.

It’s driven by this GSheet, which simply takes grade reports from Aspen and turns them into stacked dot charts that can be printed and stapled to your data wall (remember data walls?). You can’t see it in the sample, but there is also a dot at the class average.

It’s anonymous, but as long as the students have their progress reports (which shouldn’t be a problem given that this is generated from them), the kids can see exactly where their grade stacks up against their peers.

The biggest utility, though, is for classes who remain convinced that they’re “the smart ones” and thus must always be at the top of the heap. When they inevitably try to rest on their laurels, it’s always satisfying to show them getting blown away by the “earnest plodders” in the remedial group. 🙂

So, how do you use this beauty?

Two sections follow: initial setup and regular use.

Initial Setup

  1. Open the template GSheet. Make it your own by clicking File | Make a Copy.
  2. Rename the tabs to match your section numbers. Stick with the existing syntax since the other sheets are designed to expect an A-B section number syntax.
    • If you need more than 5 sections, just click on one of the tabs and choose Duplicate. Remember, though, that you need to do this 2 times: once for the Raw sheet and once for the Chart sheet.
    • Further, you’ll have to direct the Chart sheet to the appropriate columns in the Data sheet. In short, you may need to get in touch.
  3. Go to the Data sheet and change the titles, making sure to retain the format of Course A-B with section numbers.
  4. Update the titles of each chart sheet appropriately (alas, there’s no easy way to make them auto-update).

Regular Use

  1. Open Aspen and navigate to the Gradebook for a particular section.
  2. Load the Scores page.
  3. Run the Assignment History report.
  4. Set the format to CSV and accept the warning.
  5. Open the report file in Excel.
  6. Click the top-left chiclet (the gray square between the headings for Column A and Row 1)
  7. Copy to the clipboard.
  8. In the GSheet, open the appropriate Raw tab.
  9. Click the same top-left chiclet to select everything.
  10. Hit Delete to clear out the old data.
  11. Click Edit | Paste Special | Paste Values Only to paste the data.
  12. Repeat for the remaining sections.
  13. To Print, open the appropriate Chart tab.
  14. Hit Ctrl-P to get to the Print Preview dialog. The charts are formatted in Landscape for improved visibility.
  15. Click Next to get to the Print screen.
  16. Print per usual.

Posted by Adam Labay, 0 comments

One Billion URLs

Last night I archived my billionth shortened URL for ArchiveTeam’s URLTeam project.

The rig that runs these is pretty fun, and I may post about it. But for now, I just find 1 billion URLs to be cool.

Posted by Adam Labay, 0 comments

#PublicSchoolGrad / #PublicSchoolSuccess Image Generator

It returns!

A couple weeks ago, Diane Ravitch sent out this tweet:

So of course it was time to dust off the #PublicSchoolSuccess image generator.  I made a few updates, including a new color scheme.  Also, since my coding abilities remain complete shite, I threw the code to GitLab so others may modify it.

Credit remains with Shane Chism for the original code.

Posted by Adam Labay, 0 comments