Quantifying Graph Paper Quality: Revisited

Previously, I ran a quantitative analysis of graph paper quality on 6 gridded notebooks I had handy. I scanned samples of paper from each notebook, used a computational method (K-means clustering) to compare the relative darkness of the paper’s background, the printed gridlines, and a dot of ink I drew.

On a recent trip to Tokyo, I picked up a bunch more notebooks. (I love Japanese graph paper.) All these notebooks were cluttering up my office, so I re-ran the experiment so that I can put them away.

For good measure, I included all the notebooks I used in the previous experiment. For good science, you must reproduce results.

Data

Here is the full set of samples (notebooks) I analyzed this time around.

TxDcg

For high-res photos of each notebook, look here.

For scanned samples of paper from each notebook, look here.

Procedure

The procedure was the same as last time: cut samples from each notebook, scan them, and run them through the analysis script. See my writeup of the last experiment for more details.

Equipment

  1. Canon Pixma MG5320 Scanner
  2. Pigma Micron 005 Black Ink Pen
  3. Various gridded notebooks
  4. Scissors
  5. iPhone X (camera)
  6. My Hackintosh with 40″ Display

Code

I made some minor adjustments to the code to accommodate the larger quantity of data I’m working with now. It’s still short and simple.

Screen Shot 2018-10-19 at 2.16.20 PM.png

Results

Screen Shot 2018-10-19 at 1.10.15 PM.png

All of the inkdot values are in the range [0.78, 0.82]. This is good, because I used the same pen for each, and this quantity will affect the ink/grid ratio (ink.grid.ratio in the table above).

Commentary

Replication

As I mentioned at the start, I re-ran most of the samples from the previous iteration of this experiment. Here’s a comparison of those results.

Screen Shot 2018-10-19 at 2.55.06 PM.png

Nearly-identical results (check the Delta columns).

I did another kind of replication check, too.

I had a Kokuyo Filler from 10 years ago, which I had analyzed last time. I was able to find a new one of these at Okamoto Stationary in Ueno (Tokyo). I included both models in this test. The results were very close. My analysis said that the older model had darker gridlines (0.14 vs. 0.11). That seems fishy. I would’ve expected the grid lines to fade with time. Here’s a photo comparing them side-by-side.IMG_7238.JPG

It looks like the older one actually does have darker lines! I guess Kokuyo has refined their design.

Background-Grid Interference

I accidentally bought a set of Kokuyo Filler’s with colorful covers, thinking they would be the same as the one with the red and tan cover. Boy was I wrong. Those suck.

kokuyo_campus_5mm_colorful

Avoid!

You can see massive speckling in the cluster image, which indicates the problem.Screen Shot 2018-10-19 at 2.33.21 PM.png

The background and gridlines are too close in darkness, making them difficult to distinguish.

Screen Shot 2018-10-19 at 2.34.23 PM.png

This is also a problem in the Bienfang notebook. Based on the numerical results and cluster imagery, I expect the Okina Project Paper and Ca.Crea A4 (misspelled as cac.rea.a4_9) will exhibit the same problem.

Gridline-Ink Interference

alvin_ALGO8.JPG

The ALGO8 tops the gridline darkness charts. Those lines are too dark! But it did yield one of my most popular articles ever, Optimizing Handwriting, so it holds a special place in my heart.Screen Shot 2018-10-19 at 2.37.28 PM.png

Winners

Subjectively, my favorites are the Kokuyo Filler 5mm, the Fabriano EcoQua, and the Maruman Spiral Note 5mm. Especially the Maruman. That one is so nice I feel obligated to only write high-quality stuff in it.

NOTE: I haven’t used all 16 of the notebooks I scanned, so I can’t do a comprehensive analysis to determine optimal values for background, gridlines, and ink/grid ratio. That will have to come another day.

3D Printing for Programmers

Lately, I’ve begun making my own hardware.

When I went browsing Amazon for project boxes to contain all the wires and circuitry, $5-10 for a plastic box that wouldn’t be an exact fit, plus tools to put cuts in the right places, all the time trying to get it right, … got me wondering if there was a better way.

Screen Shot 2018-10-08 at 10.27.09 AM.png

I remembered this funny documentary I saw on Netflix—”Print the Legend“, about 3D printing—and wondered: how much are 3D printers these days?

The Printer

The answer is: very affordable. I checked out r/3Dprinting and settled on the Creality Ender 3. I got mine for $220 including a spool of filament.

Screen Shot 2018-10-08 at 10.32.50 AM.png

There are tons of different sellers who offer the Ender 3, and, as far as I know, they’re all the same. I assume they’re all just buying from Alibaba, warehousing, and reselling to you for a higher price but faster shipping.

The Ender 3 comes disassembled and takes an hour or two to put together. The instructions are decent but I ended up referring to one of the many helpful YouTube videos on “ender 3 assembly” to fill in some gaps. For instance, the included build guide has an incorrect instruction about where to place the end-range switch for the z-axis. I’d probably just follow a YouTube vid from the start if I was doing it again.

Filament (printing material)

Filament is the stuff that 3D printers print with. It’s the equivalent of paper in a normal printer. The Ender 3 box includes a sample of plastic filament, but you’re going to want more. It’s not enough to print the “hello world” demo model (a dog—not actually the text “hello world”).

IMG_8170.jpg
The quality is way better than I expected out of a $200 machine, when pro 3D printers can run in the thousands.
Screen Shot 2018-10-08 at 10.44.16 AM.png

The Ender 3 takes 1.75mm PLA filament. It comes in 1kg spools. I picked up this spool of white filament from Dikale, because it was the cheapest I saw. They seem to all cost around $20 for single spools of PLA.

PLA is the standard filament material to use, but there are other kinds too, if you have different needs. Some are flexible, for instance.

1kg of filament goes a very long way. Here’s a component I made, which required 1g of filament to print (look in the bottom of the screenshot where it estimates “0.35m / ~1g”).

Screen Shot 2018-10-08 at 10.50.17 AM.png

The Printing Process

This is a screenshot from Ultimaker Cura, which is free software for “slicing”. Slicing is one step of the 3D printing process. Here’s the full process:

  1. First, you need a 3D model. This is a file in the .stl format that describes the geometry of the structure you want to print. This is the “what” part of the print job.
  2. Next, you run that model through a “slicer” to generate a .gcode file. G-code specifies the “how” of the print job—where the print head should move, when it should place a drop of PLA, etc… The slicer has some smarts to it. If your model contains an overhang, where the print head would be placing a drop of PLA in free space, the slicer will detect that and generate instructions to build a support column underneath the overhang, which you can break away at the end of the print job. That’s what the option “Generate Support” means in the screenshot above. The slicer also builds an internal support structure within the model, because the STL file just specifies the surface geometry of what you’re printing, and a hollow shell would be weak and break without internal support. That’s what the “Infill” option in the screenshot above means.
  3. After slicing your STL file into a G-code file, you put the G-code on a micro SD card (included with the Ender 3), stick it in the machine, and hit print.
  4. … time passes… (3D printing can take a long time)
  5. Your print job is complete. Now you pry the model off the build plate with the included paint scraper and try not to stab yourself in the process.

Making a 3D Model (.stl)

There’s a lot of 3D modeling software out there. I chose one called OpenSCAD, because it’s a programming language for generating 3D models. I like the idea that my models live in Git, and I can see text-based diffs to understand what changes I’m making.

Screen Shot 2018-10-08 at 11.10.20 AM.png

Here’s the code for that model I showed in the Cura screenshot.

I have a chip with some header pins that I wanted to cover, so I built a set of sleeves for the pins. First, I measured the pins. You’ll want a decent ruler with millimeter markings for this part.

IMG_8254.jpg

Then, I sketched out a rough diagram of the model I wanted to code.

IMG_81F3D6C33C81-1.jpeg

The idea was to make a set of “cups” for each pin. This is simple to describe as subtracting one extruded rectangle (the inside of the cup) from another extruded rectangle (the cup itself).

As you can see, it’s not a lot of code. It could probably be even cleaner and more minimal if I was better at the language. (Can you spot the bug? Luckily, not a fatal one.)

Screen Shot 2018-10-08 at 11.18.46 AM.png

You can use an external editor instead of the built-in editor in OpenSCAD, and it will automatically detect file changes and re-render the model. I use VS Code, which has a syntax highlighter plugin for .scad files.

Once you finish building the model, you hit F6 in OpenSCAD and it compiles the code. Then you can use the STL button to export a .stl file. There’s also a command line interface.

Slicing

There’s a variety of slicer software. I use Cura, which is the only one I’ve tried. It’s free and works great with the Ender 3, once you set it up properly.

First you add a printer. There’s no preset for the Creality Ender 3, so choose “Creality CR-10”, which is pretty close.

Screen Shot 2018-10-08 at 11.35.54 AM.png
I renamed mine to “Ender 3 (Based on Creality CR-10)”.

Next, you need to tweak some settings. Use the drop-down in the top-right to “Manage Printers…”.

Screen Shot 2018-10-08 at 11.36.09 AM.png

Select your printer and click “Machine Settings”.

Screen Shot 2018-10-08 at 11.36.24 AM.png

In the Machine Settings dialog, adjust the Width, Depth, and Height to 220mm, 220mm, and 250mm, respectively.

Screen Shot 2018-10-08 at 11.36.30 AM.png

That’s it!

Next, you load your .stl file.

Screen Shot 2018-10-08 at 11.40.55 AM.png

You can adjust the layer height, which is essentially your print resolution. Smaller layers will take longer. Infill, the internal support I mentioned before. Generate support is a good idea, but not an issue for this particular model. And “Build Plate Adhesion”—this one makes a little puddle around your model on the build plate. I highly recommend this one. This keeps your model from peeling up during the build process, which will mess up the final print.

If you click on the model, you can drag it around and adjust settings. In the screenshot above, I’ve selected the Scale tool, to show you what physical size the model will print at. Cura interprets units in OpenSCAD as millimeters—exactly what I wanted.

When you’ve got everything configured, you click “Prepare” in the bottom right. Cura then computes the slices (G-code) and gives you an estimate for the material and time required.

Screen Shot 2018-10-08 at 11.48.57 AM.png

Here’s the printer in action.

IMG_8255.jpg

And 20 mins later, the finished sleeve!

IMG_8257.jpg