When is the right time to make positive behavior changes?

Every day.

Idea: I need a daily health checkin


Yesterday I _

Today I am feeling _

Plans for today: _



Last Friday Don Park pointed me at the project, which started as a Google 20% project and has since been open sourced (when?).

There’s a lot to like about Camli for content producers concerned that about the erosion of control over their digital legacy due to “leaking” of their various creative works into content stores controlled by third social providers, ad networks, and spying agencies. Social network TOS typically grant the network provider with various rights over your content, while ad networks and spying agencies never asked your permission in the first place.

their your creative legacy is being eroded as their works third parties help themselves to liberal licenses under the banner of social networking. storage services integrated with the devices and applications you use every day.

The vision is that you can push all


Do all the things in the video:

And then


Photo Blog

Camli seems like it could be a good fit for the photo blogging workflow I have been dreaming about for awhile.




People who will want to hear about this article when it’s ready:


@bretolius @nbdijulio

Photo journaling with camli notes

I’m considering using camli for an application, and am trying to understand how permanodes and indexing interplay with the schema. As a kind of user story, I’m going to lay out how I plan to represent my application data in camli, and would appreciate if you would pick it apart.

The application is a graphical journaling workflow. It looks like this: From a cafe, the user lays out a page on pen and paper. With Android phone, user photographs the page, which is added to store. The user decides to publish permanode is created for publication. Either immediately or some time after, annotate regions of the image as links. The annotations would look like: region: type: boundingBox data: [[left, top], [right, bottom]] reference: anotherPermanode (which I think would be created with a name at annotation time, and could be linked to an image file later)

SPAs interacting with the store

What glue would be needed to let a SPA interact with Camli?

March 25 Update


Render blog from CAMLI


v1 camliharp

Move my site build over to Harp with as little disruption as possible



v2 camlijade

Render site using metadata represented in Camlistore.


Mostly what I use Harp for is to parse _data.json and pass that data to Jade.

Things I’d like to continuously archive into my store


eholscher’s Docs Talk

Graphics site

Camlistore looks neat glossary of terms

Going to Unhosted Hackathon at Mozilla PDX tomorrow


Rough Drafts

My Journey from Jekyll to Harp

Ignite Portland 12 Highlights


Ignite Portland on USTREAM


Agenda for #Unhosted Hackathon

“towards a common vocabulary for personal digital systems”

Existing resources?

Term dump


New Articles

Dedrudge Your Web Editing with instant

Daily Zen

writing a system using libraries or a framework is like growing an organism:

A “natural” process, in the sense that at each step in the growth of the system, the state is in some way the right and proper state given the previous state and the environmental constraints.


jarofghosts jung https://npmjs.org/package/jung ericholscher Inspiring talk on why creating documentation

Technical writing is hard. If you want to be better at, you’d better start now.

Documentation is outreach. It provides a guide

Good docs Nginx tutorial example. i18n

Kronda samantha fox naughty girls need love too

Occulus Rift

James: Jamie Heinemen

pricenomics pandas (pandas has a book which is the best resource) https://pypi.python.org/pypi/Shapely deplyer

cartoon guide to statistics


julia vega http://trifacta.github.io/vega/

Dedrudge Web Editing with Live Reload

What a drag!

Anyone who has edited HTML, CSS, and JS has experienced this cycle

Instant is a preview server. It saves you the above drudgery by telling your browser to reload whenever you make a change.


npm install -g instant-server

Use it

Just run the instant command from your webroot. For example, to use it with a Jekyll site, use jekyll build -w mode (-w is for watch).

cd $

Any static web publishing system that can continuously update its output directory (ie Jekyll) can be used with instant, an NPM module that provides a LiveReload-style server as a standalone shell command. For example, with Jekyll:

Math and Physics Blog

This should be a page (like Things) Post ideas

Category Theory for Dummies


What to do with the Chanterelles?

Polish Soup! Monday dinner.

New Site: wth is this, i don’t even know

Site updates

lots of fresh updates to my blog, preparing for foundation switch http://eric.pdxhub.org/

Icon Fonts

http://gomakethings.com/icon-fonts/ http://pdx.esri.com/blog/2013/08/16/three-color-semantic-font-icons/


Daily Zen

nothing yet


Start a blog with Harp

What’s HarpJS?

data.json for metadata

Instead of putting a YAML header (or “front matter”) in every file, Harp opts to put all page metadata for a directory in a per-directory data.json file.

contrast with docpad Since all these fields are in data.json This is because page linking usually only works with the metadata. - YAML headers confuse parsers, since they invalidate the MIME type.


SCSS support is landing soon, so no issues with Foundation.

Try Harp

  1. Clean working copy
  2. Feature branch
  3. Get stuff working *

* Get Stuff working



Wish I had typed up the intros

Map Time PDX! half mile project pct




Site updates

lots of fresh updates to my blog, preparing for foundation switch http://eric.pdxhub.org/

Icon Fonts

http://gomakethings.com/icon-fonts/ http://pdx.esri.com/blog/2013/08/16/three-color-semantic-font-icons/


Daily Zen

nothing yet

Liquid Limitations

This is the story of how I finally hit a Liquid limitation that I couldn’t work around with a series of ugly hacks.

Last night at MaptimePDX I decided to add a Leaflet map to my blog, just for fun. It would show markers for all posts with a location field. An example post:

title: Locatable Post
permalink: with-location/
  lon: 0.5
  lat: 102.0

This post has a location field!

For the map, I needed to aggregate all the location data into a single GeoJSON index. My first attempt:

{ "type": "FeatureCollection",
  "features": [{% for post in site.posts %}{% if post.location %}
    { "type": "Feature",
      "geometry": {"type": "Point", "coordinates": [{{ post.location.lon }}, {{ post.location.lat }}]},
      "properties": {
        "title": "{{ post.title }}",
        "url": "{{ post.url }}"
      }{% unless forloop.last %}, {% endunless %}{% endif %}{% endfor %}
{% endraw %}```


{ “type”: “FeatureCollection”, “features”: [ { “type”: “Feature”, “geometry”: {“type”: “Point”, “coordinates”: [0.5, 102.0]}, “properties”: { “title”: “Locatable Post”, “url”: “/with-location/” } }, ] }

Unfortunately the output still has a trailing comma, which <a href="#" rel="tooltip" title="yes, this is an awkward flaw in JSON that XML doesn't suffer.">isn't valid JSON</a>. This is because the last location-having post *isn't* the last post in the collection. I'm hacking around the lack of <a href="#" rel="tooltip" title='a "select" or "filter" tag.'>collection filtering</a> in Liquid by nesting an `if` tag inside the `for` tag, which breaks `forloop.last`. 

The above experience is representative of using Liquid: inconsistent, ad hoc language semantics get in the way and generally increase the cognitive cost of using it.

Granted, I could implement the semantics needed to drop my trailing comma as a Jekyll plugin, but this wouldn't change the root problem: *Liquid is a terrible templating language*.

Right now I'm investigating moving to DocPad, however given its chronic issues with memory usage, I may go with something more basic.


Liquid is the template system used by Jekyll. It is designed to provide basic output control for customers who are building their own sites/emails/what-have-you but hosting in your system, while preventing them from doing things which might adversely affect system security or performance.

. Even in a secure sandbox, a bit of Ruby code could easily consume lots of system resources.

So Liquid is designed to not only be secure, but to minimize the opportunity for the template author to write inefficient code. Here is a list of some of the capabilities the language *doesn't* support, along with my guess as to why.

Newly in Jekyll 1.1, *includes can take parameters*. This makes Liquid seem more like a real modular language, with the includes acting as reusable modules. For example:

{% raw %} {% include my-sidebar.html title=“Blarghing!” %} {% endraw %}```

You can also use variables as

Grid renderer

how to render a table of posts?

posts.html takes a list of posts takes an optional “view” argument processed by a case statement

{% raw %} {% wtf is this? %} {% endraw %}