Connecting An Existing Firebase Hosting Project To A New Site

As a follow-up to my last post on GitHub Pages, I mentioned that I moved one of my websites to Firebase. Firebase is a platform from Google for creating web and mobile applications. As a PaaS offering, there are a lot of different parts to the service, but as a platform for web applications hosting is naturally one of them. The free Spark plan offers 10 GB of storage, 360 MB of data transfer per day (which works out to 10 GB of bandwidth per month), and support for custom domains and SSL. That’s more than enough for me to host a simple, single page website that’s only made up of static HTML, CSS, and a single image. If anyone is curious, my site is using just 1.8 MB of storage and 15 MB of bandwidth. Note that bandwidth used divided by storage used will not be indicative of total hits due to caching, compression, etc.

I’ve used Firebase before, so I already had my Google account linked up to Firebase, and I even had a project still technically “live” there, though the domain had long since been shifted somewhere else. To be honest, it had been so long since I used Firebase that I almost forgot about it until I just happened to start receiving some well-timed emails from the service informing me that I needed to re-verify ownership of the domain I was using for my defunct project. I had no interest in re-verifying anything, but I did want to start hosting something new there.

The first step for hosting new content was to log in to the Firebase Console. Since I had already used the service, this gave me tiles of my existing projects; in my scenario, I just had a single project for my hosting. I clicked on that tile, and I was taken to a Project Overview screen. This gives me a high-level look at my project. To get to the hosting-specific functionality, though, I just had to click the Hosting option under the Develop menu to the left.

On the hosting dashboard, the first item listed contains all of the domains associated with the project. Clicking the 3 dots … next to a domain allowed me to delete it; I removed the two entries (apex domain and www) for the domain I used previously. Then I clicked the button for Add a custom domain. I followed the instructions on the screen to add a custom domain; I won’t document the steps here since they’re directly covered through the Firebase custom domain documentation.

With everything configured on the Firebase side, I next needed to crack into the Firebase CLI to link up my local project. I opted to install the standalone CLI, though you can still get it through npm if you prefer to roll that way. The first thing I had to do was link the CLI to my Firebase account. This is different based on whether you’re going to be using the CLI from a system with a GUI or if you’re doing it from a headless system you’re accessing via SSH. I was using it from a headless system where I cannot pop a browser to follow the normal authentication process; as a result I ran:

firebase login --no-localhost

If you’re running this from a system with a GUI, I believe you just omit the --no-localhost parameter. In the headless setup, though, this gives a Firebase URL to navigate to on another system. I copied it out of my terminal and pasted it into the browser in my laptop. This gives me an authentication code for the CLI. I copied that from my browser, pasted it into my terminal, and that linked the CLI to my account in the Firebase platform.

Since I was just moving my content from my old VPS to Firebase, I didn’t have to worry about actually creating a website; I already had one that was backed up in a tarball. I simply had to expand my tarball on the same system where I was using the Firebase CLI. I did this by creating a new directory for the project, expanding my tarball that had all of my site’s content, and then copying that content to the project directory:

mkdir ~/laifu
tar -zxvf ~/temp/laifu.tar.gz
cp -r ~/temp/html ~/laifu

Note: If you look closely at the commands above, you’ll see that after I expand the tarball I’m recursively copying not the entire directory but the html folder from it. This is due to the fact that my tarball is of the entire /var/www/laifu.moe/ directory that Nginx was previously hosting on my VPS, and the html directory is what contains the content of the site. If your backup is storing the content directly (e.g. it’s not in a subfolder) that’s fine. However, you’ll want to make a new folder inside of your project directory that you copy the content to because you do not want the content of the site to be in the root of the Firebase project’s directory. For example, your mkdir command would look something like: ~/myproject/html

One I had the files situated accordingly, I needed to tell Firebase that my directory was a Firebase project. Similar to using git, I do this by navigating to my project directory and running:

firebase init

This gets the ball rolling by asking some questions interactively through the CLI. One question will ask what service the project should be connected to; be sure to pick “Hosting.” After that there should be a prompt for which existing hosting project you’d like to use. The existing project should be listed as an option to be selected. If it’s not there, you can cancel out of the process and ensure everything worked correctly with your authentication by running the following and verifying that you see the project. If it’s missing, you may need to redo the authentication (e.g. maybe you were in the wrong Google account when pasting into your browser.)

firebase project:list

After selecting the project, the CLI will ask what to use as the “public directory.” This is essentially asking what directory inside of the project directory contains the web content to be hosted. In my case I picked html since that’s what I named the folder.

Be wary of the next couple of prompts, which will trigger regardless of whether or not there’s something in your public directory matching them. When prompted about your 404.html page, opt not to overwrite it unless you really hate your existing one. When prompted about index.html, definitely don’t overwrite it or you’ll lose the first page of your site.

Once that’s all done, you should get a message:

“Firebase initialization complete!”

This means that the directory has been initialized successfully as a Firebase project, but the local content still hasn’t been pushed to the cloud. So the last step is to run the following:

firebase deploy

This will give a “Deploy complete!” message along with a Firebase-specific URL in the format of:

https://project-name-GUID.web.app

Copying this URL and pasting it into a browser should allow you to verify that the content you expect is now being hosted, even if you’re currently waiting for DNS TTLs to expire before you can navigate to the custom DNS. The Hosting Dashboard of the Firebase console will also show the update in the “Release History” section.

RIP Chrome OS

If you’ve listened to some of our episodes or read some of my other posts on this site, then you’re likely aware that I’ve historically been a Chromebook fan. I started with the original HP Chromebook 11 and have owned quite a Chromebook collection since then. The speed and simplicity to do the two main things I need in my personal life (interacting with web pages and making SSH connections) coupled with the low cost made them a perfect match.

My feelings about Chrome have been shifting, though, as I elucidated in my post about switching back to Firefox as my main browser on my work laptop. That post was written from the context of Chrome as a browser without really looking specifically at the Chrome OS operating system. In that area Google has also been making some… less than stellar changes which have ultimately caused frustration to the point where I’ve now given up on Chromebooks entirely. The primary culprit: Google’s confusing war on swap.

Note: Really smart people make Chrome and Chrome OS. I don’t mean to throw shade at them. I’m sure there’s well-reasoned thought behind the changes I’m about to describe that is either not posted or not posted in a location I found. The real-world impact is undeniable, though.

The Symptoms

Before diving into the problem, I’d like to discuss the end user experience. I admittedly hadn’t been following the Chrome change logs over the past few months while I’ve been busy with starting a new job and moving; I’d mark those posts as read in Feedly and move on to more interesting things. So it seemed almost out of nowhere that my tabs and PWAs in Chrome OS would simply die and reload on their own. Sometimes it wasn’t a big deal. A tab with a news article or a Reddit post can reload without any dire consequences. In other cases, it was a bit more annoying: the Spotify PWA would reload, causing the music I was enjoying to stop playing. And in some instances it was catastrophic: I’d tab away from Squarespace where I had been working on a post for this site to verify some information, and the tab would reload when I went back to it, causing me to lose my progress. The same thing would happen with the Secure Shell extension, kicking me out of my SSH session and causing me to lose everything if I didn’t have tmux running. Even if I did have tmux running, it’s still insanely annoying to have to log back in every time I flip from an ebook back to my SSH session… assuming the ebook didn’t also reload, causing me to have to find my place again.

As you can likely imagine, this was maddening and quickly made it impossible for me to really do anything with my Chromebooks. At this point, it seemed like my device was in open rebellion against me, and I started doing research into what was happening under the hood to cause this behavior.

The Culprit

The cause of this behavior ended up being a new “feature” referred to as Tab Discarding. The idea seems fine on the surface; not all open tabs in a browser are active tabs. So to avoid low memory conditions, Google was discarding tabs that it deemed inactive. This drops the tab and its contents out of memory but keeps the tab open in the browser. If you open that tab again, the contents are then reloaded. The benefit tot his is that you can keep more memory available for actively utilized tabs without having to drop down to swap.

A Note On Swap

If you aren’t familiar with swap, it’s good to think about what computers do when they run out of memory. Since just crashing isn’t exactly an option, for the past few decades computers have utilized what’s referred to as swap space. In most flavors of Linux, swap is an actual partition on the disk. In Windows you’ll have a pagefile.sys file. The point of both is the same; when the operating system runs out of memory, it’ll take some data currently stored in memory that hasn’t been used in a little while and write that to the disk in either the swap partition or the pagefile. Then that memory becomes available for some new, active process to utilize. Should the content that was swapped be required again, something else will be transferred from memory to disk, and then the previously swapped content can be moved from the disk back to memory. Most systems will give you insight into how much swap you’re using. For example, we can see from running htop on this Linux laptop that I’m not currently leveraging swap:

This matters because reading and writing from/to the disk is slower than just working in memory… though it’s not nearly as slow in the world of SSDs than it was in the world of spinning platter hard drives. The less swap you can use, the snappier things go… though I question if waiting for SSD swap is actually slower than waiting a few seconds for a web page to reload. Regardless, not using swap can be a matter of both adding more physical memory to the system and optimizing the software for it. Okay, back to the main point.

Back To The Culprit

Google was attempting to use software optimizations to make Chrome stop leveraging swap and keep everything in active memory. The problem is that while this is good in theory, it doesn’t pan out so well in practice in a world of Chromebooks that have 2 – 4 GB of memory installed. I was hitting the point on my Acer Chromebook 315 (which has 4 GB of RAM) where two tabs were too much for the system. Flipping between the two would cause the tab I just left to be discarded. I tried to even go so far as to disable the Play Store and Linux support to see if that would help free up additional memory. While it helped a little, in the end I was still experiencing the same problems. My laptop was a paperweight.

Solutions?

I naturally started looking for solutions to this problem. The Chromium project put together a decent FAQ on the behavior. While that confirmed for me why it was happening, it didn’t exactly provide solutions on how to make it stop. For the question of “How can I make it stop?” the answer was:

Close some tabs or uninstall extensions that take a lot of memory. If there’s a specific tab you don’t want discarded, right-click on the tab and pin it.

Except the order of operations for discarding tabs goes:

  1. Internal pages like new tab page, bookmarks, etc.

  2. Tabs selected a long time ago

  3. Tabs selected recently

  4. Tabs playing audio

  5. Apps running in a window

  6. Pinned tabs

  7. The selected tab

So even pinning a tab won’t necessarily prevent it from being discarded; it’s just less likely. It also seems legitimately insane to me to have to temporarily pin any tab you’re actively working in to keep it from being discarded. The behavior is clearly detrimental and needs to be disabled. The original post for the “experiment” mentioned being able to toggle this feature from:

chrome://flags/#enable-tab-discarding

Only that didn’t actually work for me; the option was gone. I noticed that the page was last updated in January of 2019, so I’m sure this behavior had changed. The post had also mentioned going to the flags page in order to enable tab discarding when it was clearly now on by default.

Going further down the rabbit hole, i found some threads on Reddit where users confirmed my fear; starting with Chrome OS 75 this “feature” was forcibly turned on and the flags to disable it removed. Yikes! The only solution present was to install some random browser extension to prevent tab discarding. I can only speculate as to why the ability to turn off such anti-user behavior was removed, but having to install an extension to get it back seems absurd, especially when, as the author of the extension notes, it still isn’t guaranteed to prevent your tabs from being discarded.

At this point I decided that Chrome OS had finally crossed the line of what I was willing to tolerate in the name of simplicity. When I literally can’t use my laptop to author a post for this website, the device is valueless to me. I won’t go into what I’ve opted to replace my Chromebook with in this post (that’s a topic for another post or possibly even a podcast episode), but suffice to say I’ve officially hopped off the Chrome OS train. The good news is that I’m now not using the Chrome browser anywhere, giving Google one less avenue to capture data on what I’m doing online.

Back To Firefox

Back in 2002, Firefox was the new hotness in the world of web browsers. Rising from the ashes of Netscape Navigator, the browser emerged as a true competitor to the horror of Internet Explorer. It offered competition with superior rendering and web compliance without the plethora of security issues plaguing Internet Explorer. While Firefox grew in popularity against Internet Explorer through the mid-2000’s, it eventually started to decline in the face of Google’s Chrome browser which took the browser market by storm with its release in the latter half of 2008. People appreciated the speed and efficiency of Google’s new browser, leaving Firefox to languish.

Over the past decade, however, Firefox has undergone a slow yet steady transformation. Prior to the arrival of Chrome, Firefox was fixed on becoming the browser that could do everything, for better or for worse. At the peak of its decline, Firefox was trying to be your web browser, your RSS reader (for the minority of users who had any clue what RSS was), and your IRC client (for the significantly smaller minority of users who had any clue what the hell IRC was), which overall made the browser require more resources for features that most users didn’t need or want, all the while the browser existed inside of a single, monolithic binary. By comparison, the Chrome browser broke each tab into a separate process so that complications with one tab wouldn’t impact the operation of the others.

Recently, though, the tables have begun to turn yet again. After achieving dominance in the browser market, Google has started to act like a GOP senator; they’re willing to sacrifice the good of their constituents (users) in favor of their own interests. For example, Google recognizes the impact of adblocking on its own business. As a result, they’ve proposed changes which would cripple adblockers. While they’ve bounced back and forth on this particular change since they first proposed it in January, they’ve continued to flirt with the idea; clearly Google doesn’t see blocking advertisements as a good thing. Chrome’s resource utilization continues to grow.

At the same time, Firefox began a re-architecture of their browser which allowed for separate processes per tab. Since then, Mozilla has continued to refine their experience.

  1. Firefox at 15: Its Rise, Fall, and Privacy-First Renaissance

  2. Give Firefox a Chance for a Faster, Calmer, and Distraction-Free Internet

  3. Compositor improvements in Firefox for macOS that reduce power consumption, speed up page load by as much as 22 percent and reduce resource usage for video by by up to 37 percent

  4. Restricting Notification Permission Prompts in Firefox

  5. Bad News: ‘Unblockable’ web trackers emerge. Good news: Firefox with uBlock Origin can stop it.

There’s a lot to unpack here, and if you want the full details just read all of the articles linked above. The tl;dr is that Firefox now opens a separate process per tab so that each tab can operate independently. Firefox has taken a stance on blocking trackers and other invasive behavior to fingerprint users. Firefox has improved performance on macOS significantly over the past year. Do you fucking hate the pop-up you get from what feels like every website where they want to give you notifications? Firefox is going to block those by default, and users have to actively opt into them. And as ISPs start to act even more shady in an attempt to circumvent user attempts to block tracking, Firefox is the browser empowering you to put the power over that tracking into your own hands.

As time goes by, it becomes more and more clear to me that Firefox is the browser focused on user rights and privacy. While I like the idea of Chromebooks and the simplicity they represent, they continue to become less attractive as I have to look at other options which don’t completely disregard my privacy. I’m feeling as though I’m better off getting a cheap laptop that I install my Linux distribution of choice on and use Firefox over opting for a Chromebook where Google will dictate my privacy choices on my behalf.

Unusually Pink Impressions: Google Pixel 3a XL

If you’re a dedicated fan (or just, like, really bored all the time) you may recall that I talked about the upcoming release of the Google Pixel 3a and 3a XL back in the spring. I eventually decided to pull the trigger on a Pixel 3a XL in the summer during a 4th of July sale, but I’ve been hesitant to do any sort of write-up with my thoughts on the device just because they’ve been changing over time. What were initially extremely positive thoughts have become decidedly less so over the past 4 months of daily use.

If you’ve been living under a rock or simply don’t follow technology news — in which case I have no idea why you’re reading this post, but thanks! — the Pixel line-up is comprised of devices sanctioned by Google and produced at their direction (by Foxconn, but let’s not think about that too much) that represent a “pure” Android experience without OEM skins on the operating system and bloatware cluttering your application list. They’re a chance for Google to show off what’s possible with their mobile operating system, something the fact that Pixel sales are historically terrible compared to flagships like those produced by Apple and Samsung doesn’t deter them from. I’ve never had a Pixel phone before, though I had several Nexus devices which is what the Pixel line-up replaced. Brandi has also been a staunch Pixel supporter for the past few years, so it seemed worth a shot.

The Good

Let’s start on a positive note and talk about what’s good with the Pixel 3a XL. I don’t know if this is something that Google should be happy about or not, but by far the biggest selling point is the price. I managed to snag mine for just north of $300 during a 4th of July sale. That’s $300 for a device that I own. It’s not a lease, it’s not tied to any sort of agreement with the carrier. I’m not paying a monthly fee on my bill. That’s insane in a world where a smartphone regularly costs more than a decent laptop… by a wide margin. If nothing else, it’s important to frame everything within the perspective of that price.

The other selling point for any Pixel device is that it gets love straight from Google. New version of Android? A Pixel is going to get it before anything else, likely 6 months or more before anything from Samsung. Similarly, Google releases a monthly security patch for Pixel devices. In the event that a security vulnerability is found I don’t have to worry about waiting months on end before a fix is released.

The last of a dying breed, the Pixel 3a XL also features an endangered headphone jack. I was honestly super stoked about this when I got the phone, though I’ve found myself less and less enamored with it recently if I’m being completely honest. It’s not that I’m against having a headphone jack; I just feel like I overestimated the usefulness of it. I just don’t need it that frequently. If you live and die by your 3.5 mm headphones, though, this would be a huge boon for you.

The device packs a 3700 mAh battery that provides crazy amounts of power. I use my device pretty heavily, and it’s not at all uncommon for me to end the day with 60% or more in the tank. The Pixel does a decent job of power management… kind of. It isn’t a miracle, and there are some real trade-offs that get so much performance out of the battery. More on that in some of the more negative sections.

I feel obligated to mention it here, but allegedly the camera is also insanely good. It apparently has the exact same camera as the regular Pixel 3; that was the one area that didn’t get downgraded for the “a” lineup. I personally couldn’t care less about the camera in my device and this wasn’t a selling point for me in the slightest, but it’s worth knowing if you’re really into photography but don’t want a real camera.

The Okay

While they kept the camera up to par with the full-fledged Pixel 3, most other specs on the device took a bit of a hit to reach the price-point. You’re stuck with a Snapdragon 670 processor, 4 GB of RAM, and 64 GB of storage. That being said, those specs aren’t horrible, especially for what you pay. I don’t play any games on my phone at the moment so the Snapdragon 670 is typically more than enough for navigation, Spotify, and some YouTube videos. Likewise, I’m sitting at 25 GB of storage used on the device so 64 GB is plenty for me. While the specs are laughable compared to a flagship, this device most certainly isn’t a flagship. If you want to play PUBG on the highest settings you’ll likely want to consider something else; if you want a phone to just do phone junk then this will likely fit the bill. Just expect some occasional slowdown, stuttering, and general jankiness when you happen to have a lot of apps open, especially when using the application switcher.

Similarly, the design is just okay. The back actually keeps the same cool, two-tone frosted finish as the regular Pixel devices, even though they swapped from glass to plastic to keep the cost down. That being said, if you’re like me then your clumsy ass is putting a case on, and you never look at that anyway. The front of the device has some pretty righteous bezels; they don’t particularly bother me, though I know some people who are insanely triggered by them. If you’re anti-notch then at least you don’t have to deal with one of those.

The Bad

Now to the fun part. This list has been steadily growing over the last few months. In order from least problematic to most problematic, we’ll start with the fingerprint reader. It’s there, which is a good thing considering Google dropped it entirely from the Pixel 4. While that move has been receiving a lot of backlash, Google may have just been trying to do everyone a favor if the reader in the Pixel 4 would’ve been as terrible as the one in the Pixel 3a XL. It generally works fine… right up until it doesn’t. While there are all sorts of random “Get bent and type your PIN” moments, the consistent issue is that the fingerprint reader will not trigger for a few seconds after the display has turned off. It happens to me with irritating regularity; I get distracted while doing something with my phone and my display turns off after the timeout period I have configured. I’m already holding the phone in my hand with my finger right next to the reader. So I put my finger on it to wake up the screen, which works even if the device isn’t locked. Only… nothing happens. Tick tock, tick tock. 5 seconds go by and now the fingerprint reader works. Hilariously, it’s actually faster in this situation to tap the power button to force a lock and then hit the fingerprint reader. Stellar.

Even worse than the fingerprint reader, though, is the display. It’s a fairly “whatever” 6.0” 1080 x 2160 resolution; it’s not bad but it’s not standout regarding how it looks. Even though the automatic brightness adjustment is a little “Seriously?” sometimes, it does a good job of rendering text and playing video. Where it does a heinous job is registering that I’m touching it. Swiping notifications away? They’re just as likely to open as if I tapped them. Trying to swipe up on the lock screen to reveal the PIN input because the fingerprint reader is trash? Good luck pulling that off. Swiping to the next page of whatever you’re reading in Google Play Books? Nah, you just highlighted the word “bag” because you’re clearly an idiot and wanted a definition of it.

I already know what most people are likely thinking; I’m the problem and not the device. As someone who has been working in IT for the past 14 years I would be inclined to agree; my first assumption is that I’m the problem. In this scenario, though, I’ve been operating the same way that I have for the past 9 years that I’ve owned a touchscreen phone. If it worked for just shy of a decade before running into issues with this one device, I’m going to have to throw some shade at the device.

Easily the most glaring flaw, though… is the software from Google. I know, I know… It’s the bleeding edge of Android! I’m getting monthly patches! What more could I want? I’d like updates that don’t make me feel as though I’m playing Russian roulette each time I install them. I can never feel confident I’m not going to run into new bugs. Since July I’ve had problems where the keyboard simply won’t render, where Google Assistant stopped working (which makes Android Auto pretty useless), and where hitting the back button too quickly would result in random apps from the app switcher activating. In fact, I still experience the latter two as of the time of this writing; they haven’t been fixed yet. Even better, the Android Auto issues actually seem to be getting worse.

On top of buggy updates, Pixel devices are plagued with by design “features” that make them infuriating to use. Remember how I get amazing battery life? That’s because the device aggressively closes any app it feels like for any reason. It’s a documented thing. It continued happening on the Pixel 3 even after an update was supposed to fix it, and it’s still happening on the 3a XL. I’m all for closing apps that aren’t being used, but it often feels like the device is actively fighting against you. For example, I’ll frequently open Spotify on my phone, pick some music to shuffle, pause the music, and slip the device into my pocket. I’ll then walk outside, hop in my car, and swap the audio input over to Bluetooth. In the roughly 2 minutes it took me to go outside, lock the door, walk downstairs, unlock the car, start it, and switch my audio, Spotify will frequently be closed and nothing will play when Bluetooth becomes the car’s audio source. I then have to fish my phone out of my pocket, and when I unlock it, Spotify (which was still the open app) will refresh itself and start playing. How the hell is this helping me? Even worse is that I’ve gone into the app settings within Android and told the OS that Spotify’s background usage can’t be restricted. Clearly that setting doesn’t actually work, though, because Android continues to close apps with that flagged regardless.

Software this bad just makes the device feel frustrating to use; it’s a chore rather than being seamless. While I like the idea of what Google was going for with the Pixel 3a and 3a XL, I don’t think they succeeded. That’s unfortunate because I think it was close, and some software improvements to fix the fingerprint reader and to just generally make Android’s handling of background apps not a complete dumpster fire could’ve done wonders for it. Given that the phone is about 6 months old, though, if Google hasn’t fixed the problems by now then I don’t think they’re going to. That tells me this phone is one to avoid.

Chromebooks, VPNs, and You

Do you trust your Internet service provider? If you answer that question with a resounding “No!”, then you’re among friends here. While Internet connectivity is an essential need for many of us, there are a plethora of reasons to be wary of the company providing that connectivity to you. Especially in the United States, the recent repeal of net neutrality rules and erosion of privacy mean you may want to obscure exactly what you’re doing from your Internet provider, even if that activity is completely legal and innocuous. Just because I’m not doing anything illegal online doesn’t mean I want to allow my ISP to gather data on what I’m doing in order to sell it to advertisers; in my opinion they make plenty of money off of the monthly fee I pay them for Internet access.

This is where a VPN (virtual private network) can come in handy, as we discussed in Episode 8. VPNs are historically most common in the corporate world. They allow employees to create a secure tunnel between wherever they are and their internal company network in order to access resources that aren’t available to the outside world. In the consumer space, though, they’ve been gaining popularity as privacy-conscious consumers look for way to protect themselves from things like public WiFi and, increasingly, ISP data collection.

Note: This post is not going to cover the potential risks for a VPN or how to choose one. We recommend you check out guidance from sources like the EFF for that. Brandi and John personally recommend either Private Internet Access or TunnelBear. Check out Episode 8 for more details!

As we’ve discussed in a few podcast episodes, I happen to be a fan of Chromebooks as my personal laptop. While I have a beefy desktop to use as a gaming computer or when I need to do some heavy lifting, I like having a Chromebook as a cheap, fast, and easy computer for things like browsing Reddit, watching YouTube videos, and typing up blog posts. The addition of a Linux VM means I can even do some programming. VPNs get a little wonky on a Chromebook, though. Most VPNs offer applications for Windows, macOS, Android, and iOS. Many services will also support configurations with the OpenVPN Connect client in case you want to use something open source and/or are running some flavor of Linux. For example, Brandi subscribes to Private Internet Access. On her MacBook, she simply runs the PIA application, selects the endpoint she’d like to direct her traffic to, and is done.

The waters get murkier in Chromebook land since you don’t install traditional applications on them. You also have to consider the scope of where you’re working on a Chromebook and what it is you’re looking to protect. Are you just concerned about securing the data flowing through the Chrome browser? Do you need to cover system level networking? Are you doing anything online via your Linux VM that you want to secure? These all play a role, and hopefully this post will enlighten you as to the reach of the options at your disposal.

The first step to testing the scope of VPN clients on Chromebooks is to be able to figure out what your external IP is since that can tell you where the outside world sees your connection coming from, be it your home network or a VPN provider’s. I personally like I Can Haz IP for that. Simply going to the site will give you a web page with your public IP address. Here we can see the result I get from my Chromebook with no VPN solutions at play.

The really cool part about this service is that if you bounce an HTTP request off of it from curl, it’ll reply with your public IP address. This easily allows testing of VPN providers from a command line. If you don’t have curl in your Linux VM, you can easily install it via:

sudo apt install curl

Here we can see what happens when I curl against I Can Haz IP from my Linux VM on my Chromebook. Note that it matches the public IP I get from my browser.

If you have an older Chromebook that doesn’t feature Google Play support, there are several VPN providers (including both PIA and TunnelBear) that offer Chrome extensions. These can be great for quickly proxying your traffic in a pinch. After flipping the switch on the TunnelBear extension, for example, I can see that the endpoint I’m seen as coming from via my browser has changed.

It’s important to keep in mind, though, that the VPN is operating at the application level rather than at the system level. Only traffic from my browser is going through the VPN. As a result, running curl again has no change; my Linux VM’s traffic is still going straight out through my ISP.

This is what we refer to as a bummer. If you happen to have a Chromebook with Google Play support, though, there’s a better solution available. Updates to Chrome OS 75 in the spring of this year resulted in better integration between Android VPNs and Chrome OS as a whole. Installing an Android VPN client from the Play Store and connecting it will result in the WiFi icon in Chrome OS changing to display a tiny key icon, just like you’d see in the notification area of Android. After making this connection, I can verify that my browser shows my connection as coming from my VPN provider.

Even better, though, checking from my Linux VM now shows the same thing; the VM’s traffic is now also going through my VPN provider instead of to the prying eyes of my ISP.

Suffice to say, this is much better. While the Chrome extensions are passable for older Chromebooks without Google Play access, the corresponding Android applications will offer far superior coverage if they’re an option on your particular device. Not that you shouldn’t have already been doing this anyway, but this should be an incentive to avoid purchasing the insanely cheap Chromebooks that so frequently go on sale; I’d recommend making sure you get a device that at least has Google Play and Linux support. Keep encrypting that traffic, and stay pink!

Note: In my testing, the Linux VM in Chrome OS would often struggle to reconnect properly after an Android VPN application was connected and/or disconnected. For the best results, I’d recommend launching the VM after connecting your VPN. If you forget and connect your VPN after the fact, shut down your VM and restart it.

Unusually Pink Impressions: Acer Chromebook 315

As we’ve mentioned in a few podcast episodes, I happen to be a fan of Chromebooks. I have a hulking desktop that I use for things like gaming, programming, and photo editing. That same desktop is also extremely loud and generates enough heat to warm my apartment, whether it needs to be warmed or not. As a result I tend to like having a cheap Chromebook handy when I just need to take care of some email, catch up on my RSS feeds, waste time look at memes on Reddit, or writing posts for our podcast. I’ve had a handful of Chromebooks over the years, and I’ve always been happy with them given that, for me at least, they serve as supplementary for my personal computing needs. I feel like I’d struggle more than a little if a Chromebook was my only computer.

That being said, my previous Chromebook, a Toshiba Chromebook 2, was getting fairly long in the tooth, and I was on the hunt for a new one to replace it. Chromebooks had been undergoing improvements since I purchased the Chromebook 2, but while the device tended to make the list of ones which were allegedly slated to gain access to the Google Play Store and Linux apps, that never seemed to manifest. I had been eyeing the Acer Chromebook 315 and the HP Chromebook 14, as these were the first two Chrome OS devices to feature AMD processors. That seemed pretty slick to me as I’ve long had AMD hardware over Intel and Nvidia; getting nearly the same performance for significantly less money always seemed like a win for me. Ultimately, I pulled the trigger on the Chromebook 315 when Brandi let me know that it was on sale for around $200 during Prime Day, down from the normal $279. $279 itself still isn’t much of a laptop, but again… it’s a Chromebook. I also don’t actually have Amazon Prime, so Brandi did me another solid by ordering it for me, and I just paid her back. She’s awesome, isn’t she?

At any rate, this isn’t titled as a review because I hate the idea of trying to numerically score things. Instead, I figured I’d just write up some thoughts on the device now that I’ve been using it for about a month. I figure I’ll make a similar post for my (relatively) new Pixel 3a XL sometime in the near future, too.

Hardware

Aside from the AMD A4 processor, the Chromebook 315 is pretty standard fare for a mid-range Chromebook. 4 GB of RAM and 32 GB of solid state storage get you up and running. The A4 processor seems to do a pretty solid job of handing most of what I’m using a Chromebook for, which is running a handful of tabs to browse the web, writing code in a text editor, or scrolling through endless memes and videos on Reddit. Even with around 10 tabs and a few PWAs running (the Spotify one kicks ass and takes names), I haven’t noticed any real slowdown or issue. The storage space could potentially be a sore spot, though, and I’ll discuss why in a little more detail when we get to the software section.

Build

The device itself is all plastic, as you’d expect for a laptop that’s only $279 dollars on a bad day. It at least feels solid, though, and isn’t creaky. As a 15” laptop, it weighs in at just under 4 lbs., which seems neither particularly bad or impressive. The hinge for the lid is extremely stiff and almost uncomfortable to pry open from a completely closed position; it would be damn-near impossible to do with a single hand. But the trade-off to that is the screen doesn’t wobble at all, even when quickly typing while the device wrests on an uneven surface like your lap.

The lid features a textured pattern, which concerned me a little bit since I wasn’t able to find any detailed photos or videos of it. I had been worried that, like the Toshiba Chromebook 2, the texture would actually keep me from applying stickers to it. Fortunately, that wasn’t the case at all. My sticker game remains firmly on point. Also, most of my stickers came from Brandi so don’t give me credit for my taste. Did I mention she’s awesome?

Battery

The battery is rated for 10 hours. To be honest, I’ve left the device sit for days and days at a time without touching it, so I can’t accurately judge the length. I can say that I’ve only had to charge it a handful of times since I got it, though. Running Android applications does seem to to drain the battery at a faster clip, though the screen is the biggest culprit as you’re all but required to have the brightness cranked up pretty high under all circumstances.

Display

Why does the brightness need to be turned up all the time? Because the display is absolute garbage. It may very well be the worst display I’ve ever used on a laptop in my entire life, and that’s no exaggeration from someone who has been using laptops for over a decade. You may be tempted to look at the baseline model and assume that’s because it’s running at 1366 x 768. It’s true that I had been hoping to get the 1920 x 1080 model, but that variant wasn’t on sale during Prime Day and at the time was $70 more. Paying $340 instead of $200 for a laptop just to get a higher resolution screen didn’t seem particularly worthwhile to me, especially when I already had to adjust the text scaling on my 13” 1080p Chromebook 2 so that my myopic ass could actually read anything without my face two inches from the screen. All-in-all, I wasn’t that bummed about the resolution.

The problem is just that the display is horribly washed out. It’s literally incapable of making a color that isn’t pastel. Gray text on an off-white background on a webpage is all but impossible to read with the brightness below 75%. Even when watching videos, the colors are all a lighter hue than you’d expect. While the hardware will easily push the pixels on a display of this low resolution, I’d recommend against this for a device aimed at video. At least the viewing angles are pretty good?

Speakers

The speakers are fine. They aren’t great, but being mounted facing up does make a massive difference when compared to other devices I’ve used where the speakers are pointing down underneath the device. I’ve been able to easily listen to Spotify on it without being irritated with the sound or any distortion or vibration.

Ports and Connectivity

Awesome enough, the device features two USB C ports and two USB A ports. Having a USB C port on either side of the device is pretty awesome. One of them will commonly be used for charging; it was nice to see that as the charging solution rather than yet another proprietary connector.

Keyboard

The keyboard is middling at best. I know, I know… for a $279 dollar device, are you expecting a good keyboard? Well… kind of? I’ve owned an Acer CB3-131 before, a device which retailed for $179 and which was made by the exact same company. The keyboard on it was actually significantly better than the one on the CB315. The spacing between the CB315’s keys are good, but typing on it just feels bad. The keys are extremely squishy; it’s very difficult to tell if you’ve actually pressed a key adequately or not while typing quickly, leaving me with a not-insignificant number of missed characters when I’m hammering out these posts. Admittedly, part of that stems from the fact that I’m used to spending most of my time typing on a mechanical keyboard, but I still expected something at least a tiny bit better. That being said, it works well enough for quick tweets and Reddit posts. For longer posts like this, though, I’m more likely to dock it in my work-from-home setup and type on a Razer Blackwidow Tournament Edition Quartz.

Touchpad

It’s a touchpad. It works. It’s exactly what you expect; it’s simultaneously:

  • The same as every other Chromebook trackpad

  • Better than every PC trackpad

  • Worse than every MacBook trackpad

Software

This is where things get interesting for me. I could very easily find from doing searches online prior to purchasing the device that it had Google Play support. This means you can access the Google Play Store just like you would from an Android phone and install any apps you may happen to want. They might look a little janky (because what phone display has a maximum vertical resolution of 768 pixels in 2019?) but they work and they tend to run pretty smoothly. I even tried out a couple of games and found them pretty pleasant. What I was really curious about, though, were Linux apps. On supported devices, you can essentially install a Linux VM and get access to a shell with a full Linux system running underneath it. For the most part, compatible devices depended upon having the appropriate processor architecture, so I wasn’t sure if an AMD processor would throw a wrench into things. Mercifully, that wasn’t the case. I was able to just search the settings for “Linux”, toggle it to on, wait a minute for a download, and then I was up an running.

As you can see here, the VM you get is (at the time of this writing) running Debian 9. You can treat it basically like any other Debian install, including installing the packages you need from the repository. Is the repo missing something you really need? Just download and run the .deb file. Linux aficionados like myself will immediately feel at home.

I was able to quickly configure Vim and Python3 along with using the lovely rustup toolchain to install the latest version of Rust. All of them work perfectly. This was huge for me because it means I can do some scripting and development on my Chromebook directly. This without having to use which I’d previously do, which was either sit at my loud, furnace of a desktop or use my Chromebook to SSH into a development server.

The one downside to all of this is that 32 GB hard drive. Getting Debian installed took about 2 GB on its own. When you start adding in some Android apps, copying over a few ebooks, and of course take into account Chrome OS itself, I’m looking at 16 GB of remaining space. 50% isn’t a huge issue for me right now, but if I start needing to add a lot of additional Linux packages or Android apps then things could get tight rather quickly. I may have to investigate swapping out the storage in the future if I start to bump my head.

Wrap-up

On the whole, I’m pretty happy with the CB315, especially considering that I paid around 70% of the normal price for it. If I had paid the full price I think I’d still be happy but I’d be slightly more disappointed with the display. It really is atrocious. Chrome OS has come a long way since when I first started using it in 2013, and as a Linux fan it now has so much more value than it did previously. I still don’t think I’d want to roll with a Chromebook as my only personal computer right now, but I can certainly do more with it now than I could before.