AuthaGraph: My newest favorite world map

AuthaGraph small

Like many other geography nerds, I greatly enjoy maps. I’ve tried to always keep one on hand, posted prominently where I live. Currently, I’ve got a scratch-off US map mounted on the wall (based on the Lambert Azimuthal projection, a not-that-bad equal area projection), which is fun for all of my new travel destinations.

Two dimensional world maps are inaccurate. Always. Because it’s impossible to perfectly cast the surface of a three dimensional sphere onto a two dimensional plane, two dimensional maps distort the world in ways that change shapes, angles, and sizes of space (read: countries) relative to each other. Some maps are worse at this than others. For example, the common Mercator projection is a fairly awful world map. Yet, that hasn’t stopped people from using it.

Mercator projection

 

Hint: Greenland is NOT as big as Africa (Greenland is in Purple. Africa is in Red-ish.)

 

Greenland vs Africa: Mercator

Better maps

Around the age of 8, I was introduced to the Dymaxion map, which was followed by a study of basic probability using M&Ms. However, the map didn’t really catch on, though you can do many really cool things with the map.

Dymaxion Animation

Enter AuthaGraph!

I recently came across a new world map that I think takes the cake: the AuthaGraph projection, created in 1999 by Japanese architect Hajime Narukawa (鳴川肇). The basic idea is “dividing the world into 96 triangles, flatting and transferring into a tetrahedron form. The dividing technique allows the map to be “unfolded” into a rectangle while still keeping the proportions of the continent.” (Wired) Many online outlets have reported on this map (Wired, InterestingEngineering, Popular Mechanics, etc) so go there for more info.

And now, onto the AuthaGraph map (Click to see the full size version!)

AuthaGraph

 

 

And, to see how countries fit in around the edges:

AuthaGraph

Some fun

Courtesy of XKCD

Map Projections

Read More

Extended Attributes support for symbolic links in EncFS

In developing a new (and hopefully more straightforward and user-friendly than what exists today) GUI-based, Time Machine-like backup utility for Ubuntu, I decided to use EncFS for encryption of backups. EncFS is a cryptographic filesystem, aiming to make securing data easy. To do this, it implements a user-space, stackable cryptographic filesystem. It has a relatively gentle learning curve compared to other Linux encrypted filesystems.

Ensuring that EncFS would maintain fidelity of files once encrypted and then decrypted again is of critical importance, as if data loss is encountered due to failure in the underlying cryptographic components, then any other part of the backup software would be for naught. Full system backups need to preserve, among obvious components like file names, paths, and data, links (both symbolic and hard), modification times, and extended attributes. In verifying EncFS’s ability to preserve these components during both forward and backward encryption, I quickly found that when using EncFS, if a symlink to a regular file exists in a decrypted directory, the extended attributes on the target of the link cannot be read.

I’ve patched this problem in EncFS myself, though backporting these patches into Ubuntu through official channels (the EncFS owner) seems to not be a frequent occurrence. So, I’ve patched EncFS for the currently supported versions (as of 3/24/2017) of Ubuntu (14.04, 16.04, and 16.10) and placed these patches in my own PPA.

Anyone wishing to ensure that their EncFS maintains proper extended attributes on files passed through symlinks may use my PPA to easily update their version.


sudo add-apt-repository ppa:track16/ppa
sudo apt-get update
sudo apt-get install encfs

and you’re done!

Read More

Faster, easier web page browsing with PageAccel

For those of you who are eager to jump to the chase and use my PageAccel plugin, please head over to the PageAccel home page and install (should take 10 seconds, tops).


 

I recently learned about the Accelerated Mobile Pages (AMP) Project, an open-source initiative led by Google to accelerate content on mobile devices. The idea, in short, is this: by streamlining web page content to include only the most critical pieces, web users on mobile devices can experience pages which load faster, are easier to read, and do not have the “clunkiness” which plagues content originally created for desktop browsers. Google’s goal is two-fold: to drastically improve the mobile user experience by providing simplified web pages, as well as providing a programming framework for web designers and developers to use in creating this content.

According to a report at SearchEngineLand reported by Google, “The median load time for AMP is 0.7 seconds, the time it takes for your eye to blink twice. By contrast, the median load time for non-AMPs is 22.0 seconds, the time it takes for you to leave the site and never come back.” Which page would you rather view?

I recently started noticing some of this AMP content myself on my own mobile device, as Google has been incorporating AMP pages in its web search content for a several months now. From Google’s own blog post on the search result incorporation, “[this] shows an experience where web results that that have AMP versions are labeled with The AMP Logo. When you tap on these results, you will be directed to the corresponding AMP page within the AMP viewer.”

See Google’s own view of the differences side by side (on the left is a non-AMP experience, and the right is the AMP experience):

amp2
amp1

Here is an additional slide deck from Google, which describes the project:

 

If you’ve not viewed any AMP pages yourself, I’ll tell you that my own personal experience has been excellent. Having streamlined, faster loading pages without much of the cruft that typically is served has been excellent.

I quickly began craving this experience in my own desktop browser.

The vision

I started formulating some goals:

  • I wanted a painless experience to closely replicate the AMP experience on my mobile device.
  • If I clicked or navigated to a page with AMP content, I wanted that to load in my browser.
  • If I wanted to switch back and forth between AMP content and standard desktop content, I should be able to do that.
    • And I wanted to be able to save that choice permanently for a website. Much in the way that AdBlock Plus allows enabling and disabling for a given web site, I should be able to do that, too.

The more I pondered this, the more I realized that a simple Chrome extension (as Chrome is my current browser of choice) could likely achieve this. I had never built a Chrome extension before, and so this would be both a good learning experience and also provide an avenue to share my work with others (through the Chrome Web Store).

The Chrome extension – PageAccel

I set out to build my first Chrome extension. I won’t go into detail about the challenges that I faced in developing the work; I will say that I did learn quite a bit about the race conditions which quickly pop up when programming a Chrome extension (given Chrome’s highly asynchronous, callback-based APIs) and dealing with Chrome’s Web Store support team (which is highly automated and thin on actual humans to answer seemingly simple questions).

In the end, I had built my first simple Chrome extension, PageAccel, which is satisfying the goals that I laid out. It’s basic yet totally functional, doesn’t require any input from the user, and successfully detects when AMP content is available and switches the user to use that content seamlessly and painlessly. The extension indicates visually to the user when browsing AMP content, if it’s not already obvious due to the “lightining” fast load time and simplified pages (I chose a lightning icon for the extension itself). The entire project is open-sourced in GitHub, and I’m hoping to receive some feedback from the internet at large if others find this extension useful as I do!

What is it like to use PageAccel?

Rather than explain with more words, I’ve included the screenshots which are part of the PageAccel page in the Chrome Web store:

screenshot1
screenshot2
screenshot3
screenshot4

 

Does it help? Yes!

In my own use in the last few weeks (which of course is not a uniform sample of all web content), I’m seeing that somewhere between 10% – 25% of the pages that I visit have AMP content. Much of this simplified, accelerated content has been authored by mass media (some randomly selected news websites: BBC, The Guardian, CNN, and the like (c’mon NPR, switch over!)) and tech blogs and information sources (not a big surprise here). I’m hoping over time I’ll continue to see an uptick in fraction of pages which have AMP versions overall; if the growth rate reported by SearchEngineLand is any indication (“only three percent were using AMP in March 2016, versus 11.6 percent in June 2016″), then my extension will become more and more useful over time – at the very least, to me.

 

Read More

A new succulent pot

A trip to Flora Grubb yesterday (during which we expected to find a few specimens to add to our collection) resulted in a sizable purchase, after we realized that we had arrived on a “20% off all stock” day!

We purchased a variety of small and medium succulents and repotted them in an old pot which was overflowing with tiny aloe.

Unfortunately, I don’t know all of the species in here, but I know I have at least one echevaria, a hawarthia, and an aloe (one of the old ones).

February Succulents 1

February Succulents 2

If you know what species we have (or even the genus), please comment down below so we (and everyone else) knows what we’ve got potted!

Some succulent-specific basics I’ve learned (or already knew):

  • Don’t overwater. Watering twice per month in the growing season (late spring – early fall) and once per month other times is plenty. Watch out especially for pots with poor drainage.
    • Don’t water the leaves. If the pot has drainage holes in the bottom, just set the pot in a bowl of water and let the water soak up to the top of the soil.
  • Use well-draining / cactus soil
    • For example, 1/3 humus, 1/3 perlite, 1/3 sand would work.
  • Be careful – leaves are fragile. On some species, they can be knocked off with a very light touch.

Read More