updated tantek.com/relmeauth@CSSWG meeting to demo :-moz-ui-invalid, :-moz-ui-valid, and :user-changed polyfilled to work while modifying the input (typing, paste, etc.) before clicking outside.
Note that :-moz-ui-invalid already only triggers *after* the user leaves the input, thus acting as a warning to the user that they need to go back and fix something, instead of interrupting them while they're typing.
However for the valid case, as soon as the user has entered something valid, you want to give them positive feedback thus letting them know they can take the next step (leave the input, submit the form, etc.).
Despite the proposals in the Yahoo article, I still think a “dumb” capture/view mode would still be better on a vacation, where all you could do with your device was capture photos/text/GPS and subsequently view/edit what you captured. Even limited notifications distract and detract from a vacation.
However, the idea of “social media updates only from people you’re close to, either geographically or emotionally” would be useful when not on vacation. I'd use that as an Evening Mode most nights.
Original content rather than “shares”
In addition, the ability to filter and only see “original content — no shared news stories on Facebook, no retweets on Twitter” would be great as reading prioritization — I only have a minute, show me only original content, or show me original content from the past 24h before any (re)shares/bookmarks etc.
This strong preference to prioritize viewing original content is I think what has moved me to read my Instagram feed, and in contrast nearly ignore my Twitter feed / home page, as well as actively avoid Facebook’s News Feed.
Ideally I’d use an IndieWeb reader, but they too have yet to find a way to distinguish original content posts in contrast to bookmarks or brief quotes / commentary / shares of “news” articles.
Tame your inbox? No, vacation should mean no inbox
The Yahoo article suggests: “tame your inbox in the same fashion, showing messages from your important contacts as they arrive but hiding everything else” and completely misses the point of disconnecting from all inbox stress while on vacation.
SMS smart phone texting frustrations vs stress-free iPod
While I was on the Alaska cruise, other members of my family did txt/SMS each other a bit, but due to the unreliability of the shipboard cell tower, it was more frustrating to them than not.
With my iPod, I completely opted out of all such electronic text comms, and thus never stressed about checking my device to coordinate.
IRL coordination FTW
Instead I coordinated as I remember doing as a kid (and even teenager) — we made plans when we were together, about the next time and place we would meetup, and our general plans for the day. Then we’d adjust our plans by having *in-person* conversations whenever we next saw each other.
Or if we needed to find each other, we would wander around the ship, to our staterooms, the pool decks, the buffet, the gym, knowing that it was a small enough world that we’d likely run into each other, which we did several times.
During the entire trip there was only one time that I lost touch with everyone and actually got frustrated. But even that just took a bit longer of a ship search. Of course even for that situation there are solutions.
My nephews and niece used walkie-talkies that their father brought on board, and that actually worked in many ways better than anyone’s fancy smart phones.
Except walkie-talkies can be a bit intrusive.
My question is:
If walkie-talkies can send high quality audio back and forth in broadcast mode, why can’t they broadcast short text messages to everyone else on that same “channel” as well?
Anybody have one or a similar two-way radio that also supports texting?
Or would it be possible to do peer-to-peer audio/texting purely in software on smart “phones” peer-to-peer over bluetooth or wifi without having to go through a central router/tower?
That would seem ideal for a weekend road trip, say to Tahoe, or to the desert, or perhaps even for camping, again, maybe in the desert, like when you choose to escape from the rest of civilization for a week or more.
6 cities, two each across three countries: Brighton, Edinburgh, Götenborg, Portland, San Francisco, and especially a warm welcome to Malmö which is hosting its first Homebrew Website Club meetup this week!
When did you last eat without using digital devices at all*?
Me: last night picnic, Dolores Park. *Except showing each other photos/videos related to our topics of conversation, read-only, no taking photos either.
Makes me think mobile “smart phones” and other similar devices should have a mode similar to “airplane mode”, let’s call it “dumb camera mode”, where all they can do is review your album of existing photos/videos, and maybe take photos/videos. No notifications, no switching apps.
Maybe allow taking text notes too (not txts nor emails!), on a photo or by themselves, to capture things mentioned in conversation (auto-location-tagged and datetime-stamped like EXIF of course — when did I take this note, and where was I).
There was something quite nice about the post-digital-camera pre-camera-phone era. It was much easier to have a focused and continuously present experience, for hours at a time.
Most of my time on the Alaska cruise^ was like that.
♫ vimeo.com/68510983 Depend on snowflake APIs? Born slippy indeed. This Is My Jam going readonly, citing particularly: “changes to those services have meant … 100% of our time’s been spent updating years-old code libraries and hacking around deprecations just to keep the lights on”
#NPSF #trackish workout 4x (2x200 600) I did 2x200 br-break 2x200 300, 2x200 600, 2x600
Overslept until I finally awoke with my last alarm at 5:45, got ready and had to drive just to make it to Golden Gate Park’s Music Concourse (Kezar closed today for restriping) 5 min late. Looked like the crowd was just getting ready for the first sprints — they must have warmed up already. Still feeling sore from last week but did most of the workout. Just gotta keep showing up.
ISO date 2015-08-04. Having left the curtains open the night before, I awoke on my own at 5:04 despite having gone to bed after midnight. The four page folded newsletter for the day said sunrise would be at 4:52 (no need to guess apparently), yet when I looked outside, the sun was just starting shine on the tops of nearby mountain peaks.
My roommate stirred, I asked him if he wanted to see the sunrise, he said no. Should I close the curtains? No. I let him keep sleeping. I got dressed and went up to see what was blocking the sun.
We had docked right next to a giant mountain, just the pier, a broad boardwalk with minimal vehicle access, and train tracks between us and the mountain’s sheer vertical face.
A forklift on the boardwalk carefully lifted and lowered gangplanks into place. I went outside and up to the Star Deck (19) to take more photos.
Another cruise ship was docking behind us, it had a giant helipad on its bow. Sunlight continued to descend down the sides of the mountains in front and to our port side.
An older gentleman powerwalked with walking poles on the official jogging track, a small loop on this highest deck. I descended back down to the Sun Deck, and took photos of Skagway from the bow, still lit only by dawn’s refracted light above.
The buffet finally opened at 6am and I was too hungry to wait for anyone else. Smoked salmon, a small premade veggie omelette, scrambled eggs with mushrooms & swiss cheese with salsa on top, diced roasted potatoes with ketchup on top.
An hour later I had caught up with my personal journal, and finished writing most of day 2’s log. Just as I got up to return to our rooms, I saw my mother approaching and saved my table for her. A few more of our crowd drifted in, sat down with their full buffet plates, and we tossed around ideas for our day onshore in Skagway.
With hours remaining before disembarkation, I returned to my room to nap a bit, and read some more MATM. Mom came by our balcony and we quickly summarized Skagway plans. I succumbed to connecting, tethered via her iPhone6. I found out later that media (like video) sent over a tethered connection is heavily down-sampled, until the grainy result is barely identifiable. I took another video of helicopters taking off and returning to the cruise ship across the way, an upsell tour option no doubt.
Got to about 1/3 of the way through MATM and finally cleaned up to get ready for shore. The kids had finally woken up, a good time to grab second breakfast and blog a bit more while they grabbed their first.
The entire process took long enough that I was hungry again, with only a few minutes to wait until the first cheese slices of the day were ready. My dad waited with me while I grabbed a couple of slices and we found a couple of lounge chairs, now finally illuminated by the mid-day sun. We eventually returned to the rooms to collect everyone to disembark together.
Skagway appears to be the northernmost stop for these massive Alaska cruises (it was certainly ours). By the time we walked into downtown Skagway, it was quite warm, and the tiny town looked like it was being overwhelmed with awkward tourists. The town itself had only one major street (“Broadway”) and certainly seemed to be deliberately presenting itself for tourist shopping.
While everyone else shopped, my younger sister and I found a semi-independent local coffee shop (they “served Starbucks coffee”) and picked up cold drinks. It was far warmer than usual in Skagway according to the locals. There was fairly universal acknowledgment of global warming being a real thing, despite the perhaps dominant conservative attitudes.
Being from a city that has its own far too touristy parts, I’m not a fan of such areas in other towns, especially when the town appears to have reorganized itself around as much. I photographed a few moments of cute small town design. After sampling some fudge from the “Alaskan Fudge Company”, I bought a 3-pack for my mom, and started walking back toward the ship with my dad. Everyone had their own idea of what they wanted to explore on the little touristy strip. I was done.
We made it back to the ship less than three hours after we had stepped foot in Skagway. It felt like it had been longer.
A Return to Cruise Comforts
The poolside grill had a halibut steak special, so of course I ordered one instead of the usual buffet fare. It was the perfect substantive snack before afternoon tea.
There was just enough time after tea yet before dinner to read some more MATM in the cool air-conditioned quiet of my stateroom. We dressed for dinner, and took the steps down to the “Da Vinci” restaurant for seated service. I sat between nephew2 and my dad.
I had noticed that the impulse to check my readers/notifications had returned even though I was offgrid. I think it took 12-24 hours of being off the grid the first time before I stopped checking my mobile for activity. Yesterday’s connectivity in Juneau seemed to refresh bad habits.
Dinnertime Dates and Seagulls
I asked nephew2 what was today’s ISO date. He got it after a couple of tries. When I asked him for the ISO ordinal date, it was trivial for him once he’d gotten the Gregorian ISO date right: 2015-216.
The kid’s placemat had an origami exercise, and a suggestion to start with a 5" on a side square sheet of paper, along with a printed ruler. Noting that all we needed was a square piece of paper, I taught nephew2 how to make a square piece from any rectangular piece by folding the corners over to make a square, then folding that crease back & forth repeatedly to weaken the paper to the point where it would tear cleanly in a straight line.
I pointed out that we had done so purely with the power of knowledge and our bare hands, without any tools. This seemed to please nephew2.
We proceeded to fold up origami seagulls one by one — a shape I hadn’t folded before, so I talked it through out loud with him, as I was figuring out each step myself, and he kept up. There were a few folds where he needed some help, however he’d apparently done some origami before, so he picked up the rest very quickly.
Triumphantly placing our seagulls on the table we talked about what to try next. Both of us have short attention spans so we tend to get along quite well, not being content to just sit and wait for whatever is supposed to happen next at a grown-up’s dinner table. We decided more math instead.
Squares, Cubes, and a Connection
He easily reviewed 1 through 10 squared. I pointed out that cubes were merely those same squares, multipled by their square factor again, and we started from 1.
1 was obvious. 2 he guessed without thinking so I made him talk it through. 3 he had to think through. We got to 4 cubed and the appetizers finally arrived. Caesar salad for me, a shrimp cocktail for him.
I walked him through 4 cubed with hints, and how the result was also a square! We broke it down to how many 2s it took. And how many 2s it took to multiple into an 8. Eventually he put it all together and got the right result: 64.
5 cubed was easy for him. 6 cubed took a bit more work, but once he got it he was super happy: 216.
I asked him if he remembered what the ISO ordinal date was that he had just figured out. He paused a moment, recalled, repeated 2015-216 from memory, his eyes lit up and he roared with laughter. He had just connected why I had chosen to drill him on cubes. (It being the 216th day of the year, 216 also being 6 cubed).
My dad the retired mathematician (math professor even), decided to keep quizzing him on cubes, and asked him about 7. Nephew2 figured it out as 7 time 50 minus 7. He knew 7 squared was 49, and that he could more easily figure out 7*50 = 350, and then subtract 7 = 343. Neither of us had taught him that explicitly. Interestingly, his older brother figured it out the more traditional way, 7*40 = 280 + (7*9 = 63) = 343. He went on to state 8 cubed and 9 cubed. They nephews challenged each other to 10 cubed which they both remarked was easy: 1000.
We finished dinner (I had a baked Alaskan salmon special, coffee, bites of others' desserts), and returned to our rooms.
Bittersweet But Real — My Vanilla Sky
I gathered my reading & writing things and went back outside to the Lido deck, grabbed a reclining chair by the pool under the big screen, caught up on my personal journal, and finished writing up day 2’s log.
The outdoors movie happened to be “The Longest Ride”, seemingly a classic Hollywood romance cliché, with an unrealistic and deceptive narrative as usual.
Removing myself from such reinforcements, I noticed the sky had turned into a swirling blend of blue, purple, pink, orange, and yellow (featured photo at top). We were on our way and the natural beauty around us snapped me back to reality.
I took it in and a few photos too, then returned to my room and got in bed. I read more MATM under the glow of my iPod’s backlight until I was halfway through the book.
I’ll take bittersweet but real triumphs & failures any day over deceptive cheery narratives that set unhealthy expectations.
My iPod lockscreen clock read 0:04. I put everything down and seconds later fell asleep.
You should all be very proud of what all of you collectively created 10 years ago in the six days of planning and 2-ish days of BarCamp itself.
10 years and 1000s of BarCamps later, the barcamp.org site (a wiki) is still being used to organize them worldwide and direct people to separate independent BarCamp sites as well (like barcampnashville.org — going strong since 2007) independently of any of the founders or original planners. Organic growth beyond anyone’s expectations or wildest dreams.
I remember at the closing session remarking how maybe we’d do a second BarCamp the next year. It was not to be, because others couldn’t wait to organize the second, and third etc. BarCamps on their own.
Only a few of the individuals who participated in the first BarCamp helped with the immediately subsequent camps, both facilitating and spreading the cultural seeds of BarCamp. Hat-tips to Chris Messina (@factoryjoe at the time) & Andy Smith (@termie), and Amit Gupta (@superamit) in particular for Amsterdam and New York City, the second and third BarCamps respectively.
They were able to because we had documented everything about BarCamp on an open wiki on the web (no login needed to view, searchable, and search-engine friendly).
We had opensourced the very processes (the human “software”) of running a BarCamp, which meant that anyone could create and run one, experiment with variants, and contribute improvements. We had shipped an opensource implementation of the Freedom of Assembly and didn’t even realize it at the time.
#NPSF #trackattack 2d ago workout 1600 1200 800 400 200 abs I did 1600 br-break 800 400 200 100 abs
First session at the track post-cruise, also first time after running to the Monday @Nov_Project_SF Fort Mason / Aquatic Park workout the day before. Felt much slower to start, found my track legs eventually, and then surprised myself on the 200 and especially the 100.
Rather than stake any claim to being the Alphabet, I decided it would be more useful to document an alphabet of the IndieWeb, choosing a primary IndieWeb building block for each letter A-Z, with perhaps a few secondary and additional useful terms.
article posts are what built the blogosphere and a classic indieweb post type. audio posts like podcasts are another post type. Most sites have an archive UI. The authorship algorithm is used by consuming sites and readers.
backfeed is how you reverse syndicate responses on your posts's silo copies back to originals, perhaps using Bridgy, the awesome backfeed as a service proxy. Many indieweb sites publish bookmark posts.
design in the IndieWeb is more important than the plumbing of protocols & formats. The delete protocol uses webmentions and HTTP 410 Gone for decentralized deletions. Consider the disclosure UI pattern.
event, exercise, and edit, are all very useful types of IndieWeb posts for decentralized calendaring, personal quantified self (QS) tracking, and peer-to-peer collaboration.
food posts are also useful for QS. Follow posts can notify an IndieWeb site of a new reader. Use fragmentions to link to particular text in a post or page. Both the facepile UI pattern and file-storage are popular on the IndieWeb.
generations are a model of different successive populations of indieweb users, each helping the next with ever more user-friendly IndieWeb tools & services to broaden adoption, activism, and advocacy.
homepage — everyone should have one on their personal domain, that serves valid HTML, preferably using HTTPS. Come to a Homebrew Website Club meetup (every other Wednesday) and get help setting up your own!
jam posts are for posting a specific song that you’re currently into, jamming to, listening to repeatedly, etc. The term “jam” was inspired by thisismyjam.com, a site for posting jams, and listening to jams of those you follow.
Known is perhaps the most popular IndieWeb-supporting-by-default content posting/management system (CMS) available both as open source to self-host, and as the Withknown.com hosted service.
like posts can be used to “like” anything on the web, not just posts in silos. Longevity is a key IndieWeb motivator and principle, since silos shutdown for many reasons, breaking permalinks and often deleting your content.
microformats are a simple standard for representing posts, authors, responses etc. to federate content across sites. Micropub is a standard API for posting to the IndieWeb. Marginalia are peer-to-peer responses to parts of posts.
note posts are the simplest and most fundamental IndieWeb post type, you should implement them on your site and own your tweets. Notifications are a stream of mentions of and responses to you and your posts.
ownyourdata is a key indieweb incentive, motivation, rallying cry, and hashtag. The excellent OwnYourGram service can automatically PESOS your Instagram photos to photo posts on your own site via micropub.
quotation posts are excerpts of the contents of other posts. The open source Quill posting client guides you through adding micropub support to your site, step-by-step.
reply is perhaps the second most common type of indieweb post, often with the reply-context UI pattern. Use a repost to share the entirety of another post. An integrated reader feature on your site can replace your silo stream reading.
text-first design is a great way to start working on any post type. Use tags to categorize posts, and a tag-reply to tag others’ posts. Use travel posts to record your travel. The timeline page records the evolution of key IndieWeb ideas.
UX is short for user experience, a primary focus of the IndieWeb, and part of our principle of user-centric design before protocols & formats. Good UI (short for user interface) patterns and URL design are part of UX.
video posts are often a challenge to support due to different devices & browsers requiring different video formats. The Vouch extension to Webmention can be used to reduce or even prevent spam.
XFN is the (increasingly ironically named) XHTML Friends Network, a spec in wide use for identity and authentication with rel=me, and less frequently for other values like contact, acquaintance, friend, etc.
YAGNI is short for "You Aren't Gonna Need It" and one of the best ways the IndieWeb community has found to both simplify, and/or debunk & fight off more complex proposals (often from academics or enterprise architects).
Z time (or Zulu time) is at a zero offset from UTC. Using and storing times in “Z” is a common technique used by indieweb servers and projects to minimize and avoid problems with timezones.
I realized I was getting pretty close to a whole alphabet of building blocks. In particular the list of Community Resources has 16 of 26 letters all by itself!
Rather than try to figure out how to expand any of those into the whole alphabet, I decided to keep them focused on key things in 2014, and promptly forgot any thoughts of an alphabet.
Monday, since the topic of conversation in nearly every channel was Google renaming itself to “Alphabet”, I figured why not make an actually useful “alphabet” instead, and braindumped the best IndieWeb term or terms that came to mind for each letter A-Z on the IndieWebCamp wiki.
Subsequently I decided the list would look better if the first letters of each of the words served stylistically as list item indicators, wrote a custom post stylesheet to do so, and rewrote the content accordingly. The colors are from my CSS3 trick for a pride rainbow background, with yellow changed to #ffba03 for readability.
Since I wrote up the initial IndieWeb alphabet on the IndieWebCamp wiki which is CC0, this post (and its custom post styling) is also licensed CC0 to allow the same re-usability.
ISO date 2015-08-03. I awoke to my first terrestrial travel timezone change on the open water. We gained an hour. It was ~5:45 Alaska Time, or more reliably for today, 05:45 -0800. I put on just enough casual clothes to go outside, and brought my book to read.
Everyone else was sleeping, and I was hungry, again. After photographing another sunrise at sea, I picked up some breakfast to go from Horizon Court and walked up to deck 17 to enjoy the outside air & view. My mom showed up and wanted to check out the deck 19 walking track. Having found the stairs to it yesterday, I took us up and we fastwalked a few laps, taking more photos.
It was colder than expected, but a quick room roundtrip and a layer fixed that. Got my dad while I was at it and rejoined my mom outside on the sun deck railing just in time for the ship’s naturalist to announce over the speakers: there she blows!
The Super Pod
We started seeing the humpback whales two at a time, one water spout, then another, sometimes a tail flip, then another. Between the pairs, sometimes a whale cruising on its own. Rather than take photographs, I looked through binoculars for the best views I could get. Besides, my parents were taking plenty of photos and videos on their iPhone 6s.
There were so many whales, they just kept coming, or rather we just kept passing them by. They seemed happy enough, arching their backs above the surface, and flipping their tails up too.
Two of them came quite close to the ship. As they passed by us on the port side, they leapt from the water and breached with big crashing splashes! Amazing, I’d never seen whales breach like that in person before.
Finally the ship’s naturalist exclaimed that we’d seen somewhere between 50-60 whales, a super pod of whales, larger than he’d ever seen before.
No yoga class today; instead I joined my mom in the hardwood floor area of the gym and we did a bunch of stretches. I completed a simple floor stretch yoga routine from memory. Afterwards I took photos of the weird day spa marketing materials I had noticed the day before, then went to second breakfast with everyone else.
Back in our rooms we watched our approach to Juneau from the balconies. Fascinating scenery in the nearby mountains, more and more signs of human habitation as the passage narrowed. We kept watching as the ship turned to approach the piers and docked.
Knowing it would be a little while before we could disembark, I showered, changed, and packed my backpack for a full day of all possible Juneau adventures. Totally overpacked.
We gathered in the hall outside our rooms and descended together to the disembarkation deck. Rather than wait twice as long for taxis, we walked 15 minutes into town and quickly came upon the Heritage Coffee Roasting Company.
Securing our first local coffee of the trip, my younger sister and I said bye to everyone else who decided to take a taxi to a salmon hatchery. Sis and I just wanted to explore downtown, plus she wanted to meet up with a local friend of hers.
A Sea Plane and A Social Break
I took advantage of our few minutes at the cafe to get on their wifi (captive portal password: coffee), post a couple of photos, and receive a few text messages.
We walked back down to the docks to look for the meeting point my sister’s Juneau friend suggested. They’d last seen each other a decade ago in New York City, both having left years ago after tiring of its dehumanizing grime & grind.
While waiting we watched sea planes land in the harbor. One in particular came towards us so I captured a clip for a friend — a sea plane propels itself forward on the water, turns to approach its docking slot, and gets help from humans on adjacent piers who rotate it around and back it into place — like something you might see in a Richard Scary book.
My sister’s friend showed up. I saw her before my sister did, before she saw my sister. When they did, their faces lit up, their voices exclaimed joy in harmony.
On her recommendation, we went to a nearby taqueria for halibut tacos which were quite tasty. They even had Cholula. My sister and her friend caught up as if not a moment of 10 years had passed. I was happy to be a silent third wheel sitting in the sun, without any expectation of interaction, a social break without solitude.
More iOS App Deletions
Two things have dominated the use of my mobile device for the entire cruise: taking notes and taking photos (or short videos).
Filming the sea plane docking filled up my iPod and it refused to do many things (obviously take photos or video) until I had cleared out some space. At least it helpfully directed me to “Usage” preferences which quickly revealed the most bloated apps.
The biggest culprits? iOS8 “default” apps.
I’d previously deleted a dozen iOS native apps after being annoyed by their update noise. This was much worse: loss of primary device functionality. So I deleted the most bloated apps that Apple installed with the iOS8 upgrade that I never asked for nor needed nor used:
… and got back 1.1GB from dumping just those four! Two of which should have simply been well designed indiewebapps instead of “native” apps.
Minutes to Mountain Hiking
My sister’s friend led us uphill out of downtown, into rows of residences, which disappeared after a few blocks. Suddenly (while I was distracted deleting apps) we were hiking up Mt. Juneau, dense woods on either side, cut only by the road and rushing river below.
The air was as clean and crisp as any I’d ever breathed. Summer hikes in Yosemite came to mind. We crossed a bridge over the river and found a spot where it slowed to a crawl over polished stones and walked over to splash our faces.
Spotting a few flat & thin rocks, I piled them into a stack ten high, topped with a chunk of bright white quartz. We stood for moments in silence just breathing and listening.
The hike back down went by much more quickly, as it always does. We stopped by the state capitol where I took the opportunity to use the facilities.
Posts & Messages; A Tram, A Hike, and A View
Without a specific plan, we wandered around more of downtown, browsed a local used bookstore, and stopped for another round of coffees.
I posted day 1’s log, a brief note, and sent replies to a few text messages. Receiving them, a day or two old already, it was nice taking the time to absorb, reflect, as you might with letters received, even if short, and short in reply.
We continued our wanderings, a gift shop, a juice bar, and finally walked back towards the ship, considering a meal or a tram ride & hike. We found the rest of the family who had just returned from said tram.
Restaurant wait times having swollen with cruise tourists, we decided an appetizing hike was in order. We took the tram a ways up Mt. Roberts, bringing along my sister’s friend as our guide. We hiked from the tram terminus Mt. Roberts Nature Center uphill past the edge of the map they’d posted to an incredible view of the bay below, lit by a slowly setting sun. Now we were hungry.
After scampering down the hill, we had to wait just 10 minutes in line for the tram ride back to the shore. Restaurant wait times unchanged, I used their wifi for one last grid sync and confirmed that a professional recommendation I'd sent had been received.
With our ship scheduled to leave port soon, we said our goodbyes to my sister’s friend, thanked her for guiding us on such an active day, and reboarded as the sun sank toward the mountains opposite the bay. Every sunset at sea has been different, and I have yet to tire of them and the landscape’s orange glow.
Dinners, Finishing TRON, A Speechless Nephew, and Unexpected Memories
I returned to my quarters to drop off my overpacked backpack. At ~30-40 pounds extra, I figured hiking swiftly at altitude and keeping up with my sister and the local served as good trail strength training. And made a mental note to pack one tenth as much next time we went ashore.
Now starving, my sister and I went to our usual, the Horizon Court buffet, where my other sister and brother-in-law had saved us a table. I devoured a couple of rounds of Alaskan halibut in a Thai coconut sauce, buttered peas, mashed potatoes, mixed greens salad with shredded carots, beets, blue cheese dressing, and a bowl of corn & potato chowder.
My sister and I returned to our rooms to rest our legs for a bit. My roommate (nephew1) was getting ready for bed so I took the the opportunity to read a bit more MATM. He asked if we could watch the rest of TRON, and with only 27 minutes remaining I set it up.
I kept reading with TRON in the background, occasionally underlining or making notes in the margins. Nephew1 asked me why I was writing in the book, I said because I’m taking notes. He asked if it was my book, I said yes, it was given to me by the author because I’m in it.
He looked incredulous. I had just reached the chapter on the 2010 Federated Social Web Summit, paused the movie, and flipped the book around with my finger on the paragraph where the author had mentioned me, and explained microformats as building blocks for a social web. For a moment nephew1 was speechless and looked like he thought that was even cooler than the movie he was watching. Then he turned his gaze back to TRON.
We finished the movie, and I said goodnight to him as I turned out the lights and ventured out. My day adventures sister also happened to exit her room. She was in search of hot water for tea, I was hungry again. We parted ways at the pizza bar, I got my slice of cheese, found a deck chair under the night sky, and started writing up day 2.
I started fading just after midnight, and only then found out that the “The Age of Adaline” was the movie playing in the background (on a large digital display above the pool) while I wrote. Its frequent shots of San Francisco kept drawing my attention. A brief glimpse of The Conservatory of Flowers from JFK drive brought back a flood of fond memories of running through Golden Gate Park.
The movie finished, I called it a night, and went to bed while the memories lingered.
Timezones are one of the quirkiest things any programmer has and will ever have to code, because they’re a political construct. They were and are decided by largely non-scientific non-technical politicians. But it’s worse than that, timezones themselves change over time. What timezone a place is in, and worse, daylight savings time, and when daylight savings time starts and stops all change, pretty much every year some place on earth.
Thus the moment you depend on a timezone in your data format, database, storage, files, your persistent canonical copy of your information, you’ve made your data fragile and vulnerable to passive corruption over time. Fragile to programmer errors (programmers get quirky things wrong all the time), and vulnerable to its meaning being changed by political bodies you have no (or nearly no) control over.
Solution one: UTC all the times
There are two solutions programmers have adopted to avoid political and temporal timezone problems, the first is to always store times (and dates!) as UTC, or "Z" time.
The problem with this “UTC all the times” approach is that it makes harder for humans (including yourself) to inspect & verify stored times.
Data that’s harder for humans to inspect and verify is also more prone to errors, especially small passive errors that go unnoticed. Programmers who have to debug such data are humans. Harder for them means harder to debug, means more bugs that survive longer. QED.
Solution two: local time & UTC offset
Rather than UTC all the things (or at least times), the second approach is to store precisely what the local time was at that time, with a time offset to UTC. This way the time (and date) is inspectable and verifiable as what you saw on a clock at that time. What you remembered seeing.
Times with offsets are also automatically convertible from local observed time to UTC and thus machine-processable into a universal timeline, regardless of past or future timezone changes. It’s the approach we’ve taken in microformats for quite some time and found that it helps keep data DRYer.
One possible exception to this “use an offset to UTC” approach are times for things that happen purely online. Web servers have their own clocks, likely set to UTC, and independent of any daylight time savings changes etc. When such servers receive messages, like a webmentions, or other HTTP requests, it makes sense to store them in the same “offset” as the server’s own time, UTC.
Here’s both an offset and exceptional UTC time from an actual email I received.
... 08:34:12 -0700
... 15:34:41 UTC
The first time shows when a user (in a physical timezone) sent an email. The second shows when an email server (set to UTC) received it 29 seconds later (assuming synchronized clocks).
I’m not going to provide complete examples of the bad approaches because I don’t want you to even think of using them. I’ll just leave you with this, if you see things like:
... America/Los Angeles ...
in your data, you’re depending on named timezones and making a mistake.
The best you can do to avoid this problem, or to “clean” such data is if you have access to it close to the time of creation (when it is unlikely there have been any timezone changes between when the data was created and your present time), automatically convert the named timezone reference into an absolute time +/- numerical hours (and minutes) offset from UTC, and then store that with the time, instead of the named timezone.
Bonus: “Set Automatically” Breaks Your Clock
Here’s a bonus problem. That seemingly useful “Set [timezone] Automatically” feature in computers, phones, works reasonably well on land, sometimes fails briefly when flying across timezones.
However, on a ship that’s nearly completely off the grid, “Set [timezone] Automatically” fails epically.
Say if you’re taking a cruise from Seattle to Alaska, and hit the open ocean, far out of the reach of any landbased wifi or cell towers that “Set Automatically” depends on. It may fallback to shipboard wifi or perhaps even a shipboard cell tower. But “Set Automatically” based on wifi SSID databases or cell tower triangulation assumes that neither of those things move.
Actual result: as we traveled up to Alaska and now back, anyone using “Set Automatically” in their iPhones etc. found their clocks automatically bouncing between an hour more forward than they should be (based on Seattle) and back. Their smarter devices were dumber at the simple task showing the time. I didn’t see anyone with an Apple Watch to see how good it was at telling time on a ship.
ISO date 2015-08-02. After sleeping soundly the first night aboard, my alarm woke me gently at 5:40am. Without knowing what our precise latitude and longitude would be when, I had to estimate when the sun might rise for us. I say us, because the night before my roommate, nephew1, had agreed to get up and go running with me at sunrise.
This is the same nephew that has left me minutes behind the past three years in the Turkey Trot 5k. And he’s only getting faster, faster than I’m getting faster. But first I had to get him up. Took only about 10 minutes and we were up and running up three flights of stairs to the Lido deck.
The sky was already aglow. Once outside we ran up another flight of stairs to the Sun deck. It was quiet and empty, except for a small handful of photographers with their serious cameras.
Nephew1 and I found a nice vantage point after walking around the ship. As the sun crested the landmass to the East (likely Alaska), everything grew brighter until we could see orange glimmers on the waves.
We ran a lap around the upper deck, including up and down stairs as needed to keep going around. Suddenly it was clear we were both hungry (a common theme it seems), he told me quietly, no demanding, no whining, no complaining.
I’d learned that when a preteen even quietly says they’re hungry, it’s best to listen. Knowing the Horizon Court buffet had opened at 06:00, we stopped in to get a small bite and quickly found nephew1’s dad already inside, snacking and working on his laptop.
We finished our little first breakfast snack break and nephew1 wasn’t so sure he wanted to run anymore. I convinced him to stick with it, he convinced me that it was ok if he “only” did 3km. We ran several laps around the ship and hit 3km just as we got to the staircase between decks. I let him know he’d achieved his goal and he happily returned to our room.
My training schedule (which continued after last week’s half marathon) called for 4 miles today, so I kept running until I hit that and more. I returned to my room to change for the one yoga class I’d signed up for and had some time so I read a bit more of MATM.
Five til nine I left and ran up to the gym. Easily made it on time and grabbed a spot next to my mom and middle sister. Leading the yoga session was an Australian fitness instructor, who seemed friendly enough, yet had received perhaps just cursory training in all the different course offerings.
He took us through a warmup, some unethusiastic sun salutations, and then a few warrior sequences. He closed with simple floor stretches, the customary shavasana, and cross legged sitting pose finish.
Feeling a bit wanting, I went through an arm balance sequence. First, 30 seconds of crow pose, doing my best to hold the pose and relax, breathing regularly while I counted down from 10 then up then down again. While relaxing I could feel the very subtle swaying of the ship (it’s a big ship) under my hands.
My mom had also continued with her own stretches. I offered to show her side crow — she was there when I first learned it from Jordan, my favorite teacher at Mission Cliffs. She declined for now, citing some back stiffness.
I sat into chair pose, twisted to one side, hands down, hips up & knees on triceps, leaned forward and balanced for 10 seconds. Then side crow on the other side. I stood up to warrior 1, twisted to one side placing my hands on my thigh, twisted further and placed my hands down on the floor. Lifting my hips up again and onto my triceps, I leaned forward into side crow split legs for a few seconds. Just learned that a few weeks ago. Then the other side. Closed with a dual wrist stretch plank and mayurasana.
Second Breakfast and Softserve
Returning to my room I read some more of MATM, up to the 20% mark. Finally showered & changed for the day and went back upstairs to the Horizon Court for brunch AKA second breakfast with my parents and middle sister.
Afterwards my dad and I took the elevator up to deck 19 (The Star Deck) which I hadn’t figured out how to otherwise get up to. We found and walked the official “jogging track” which had a net enclosed basketball court at one end. Found the steps down to deck 18, then 17, then 16 which I’d run past numerous times that morning. Labeled only with an innocuous “Center Court” sign, I made a note of the foot of these stairs for future explorations.
I showed my dad the entire loop around the boat that I had run earlier that morning. He seemed quite proud. It was only a week ago that we had both completed the 2nd half of the San Francisco Marathon.
The thing about running is, on the days where you get in a satisfying medium to longish run, you never stay full for long. After our walk lap I grabbed a chocolate softserve with sprinkles and found a nice table by the pool to catch up with all the things I didn’t do before I left the grid. Most things I let go, into the future, to the Sunday after my return. I noted a couple of things to check should I opportunistically find a decent uplink at our next port of call.
A slice of margherita pizza helped me keep the momentum and both finish braindumping recent memory from yesterday & today til the present time, as well as get started on writing up day 1’s log into a post.
Lunch and Day 1 Log
As I serialized memories to text by the table, my younger sister came by and said hi, also going for a walk around the boat. A while later my father came by, and I was hungry again. I wrapped up my thoughts in a paragraph, and we went to lunch.
As usual I started my buffet plate with a huge salad (that’s buffet hack #1, salad and veggies first, then protein, lastly if you have room maybe a bit of starch, skip dessert). The smell of Indian food hit my nose and I decided to try the Dhingri Matter [sic], paired with some mashed potatoes. A few fried calamari with tartar sauce and a very small piece of trout rounded out my plate.
My father and I both ate and took in the view. We were both in the mood to write, he got out his notebook, and I my laptop and continued writing yesterday’s log. Got to the sunset writeup, was hit by a strong memory, and rewrote it three times before capturing it in a short aside. Suddenly it was five minutes to tea time. A good stopping point for sure.
Dad had mentioned that Tea Time was my mom’s favorite meal of the cruise. Perhaps even her favorite thing on the cruise. We walked quickly to the Da Vinci Restaurant, the same place we’d had our sit down dinner the first night.
My mom was nearly the first person in line waiting for them to open. We joined her and by the time they started letting people in the line had grown. We asked for a table for 8, they asked us if everyone was here. We looked back in line, and most of our crew was back a few people. We waived them up and got seated.
Tea time is just as you might expect. We sat at a nice round table for 8. Tea cups and small plate settings for everyone. Within moments a server poured us all cups of tea. Then the platters came.
First the pastries, as cute as you might see in any fancy bakery, all lined up on a tray held by a server more than eager to explain what each of them were and then gently use her tongs to pick up whatever you requested or pointed at and place it on your plate.
Next the cookies, soft, crunchy, butter, peanutbutter, chocolate, and some banana bread too. Third the sandwiches — miniature, just larger than bitesize. Each tray was brought by a different server.
Finally the fresh baked scones arrived on a round platter, kept warm under cover of aluminum foil. As the scone server offered and served them one by one, she was followed closely by a waiter who served dollops of jam, clotted cream, or both upon request.
Then of course the inevitable additional offerings of all the above and teacup top-ups. Stuffed, once again.
First Formal Evening
Afterwards I wanted to do nothing but recline, and yet it was too nice out to do so indoors. I found a chair by the Calypso pool, kicked back, and finished writing up day 1’s post. There was just enough time left to get dressed for our first formal evening. Apparently on cruises like this they designate 2-3 nights as “formal” nights where everyone is expected to dress-up, perhaps to set more of a deliberately dressed-to-impress party atmosphere.
I changed into the only button down shirt I’d brought, my other black pants (the first pair had soaked up a bit of water from that poolside chair), and my nicer black jacket, G-star, along with my polished black boots. No tie, blazer, nor white shirt. None of those is who I am, and I’m supposed to be having fun on this cruise, so I dressed formal my way.
We walked together as a family down to the Crown Grill restaurant for our reservation. They were not quite ready for us, so we took a few formal photos at the black felt backed photo station just outside.
Once again, amazing food. Salmon in many forms, and other tasty things. After they took our orders for dessert, they came back with a birthday dessert for my mom, then everyone else’s orders, as well as an extra dark chocolate mousse heart garnished with a pool of strawberry jam, a couple of raspberries. I won’t even try to describe the nine layer smores that a couple of us got. You’ll just have to wait til I update this post with photos.
Sunset and Sleepy TRON Time
After a nice post-dinner walk, we watched the sun set on the sea yet again. The farther North we went, the later the sun actually set, nevermind how long it took for it actually get dark out.
Somehow after all that I was hungry yet again, and grabbed a slice from the pizza bar. Finally around 22:00 I went back to my room where my roommate nephew1 was just getting ready for bed, definitely past his normal bedtime.
He asked if he could watch more TRON, and I said yes, but we should probably limit it to 20 minutes tonight since it was already late. I setup the laptop at maybe a minute or so before where we left off, turned off the lights and hit play. I fully intended to go back out again, since I was already all dressed-up.
I kept writing and somehow just fell asleep. That sort of thing happens when you try doing things lying down in bed in the dark.
I awoke almost 50 minutes later, and in an instant knew that the movie was farther along than it should be.
I told my nephew we had gone way over and needed to change into our pajamas and go to sleep. Realizing I’d been up since 05:40, then having run, done yoga, eaten so much, and walked around & up/down stairs a lot, the exhaustion suddenly made sense. We called it a night. The Solar Sailer escape would have to wait.
ISO date 2015-08-01. We boarded the Crown Princess not long after checking in at the port, after having them verify our passports, take our self-assessed medical questionnaires, and give us our boarding cards. My parents had kindly arranged early boarding for us.
Just before we stepped onto the gangplank they checked our boarding cards and took our photos (without glasses). Thoughts of a complimentary cruise yearbook briefly went through my head.
Finding our rooms easily, we unloaded our backpacks and put away our small hand luggages. We had checked-in our rollaways at the Princess Cruises counter at Seatac for them to bring directly to our staterooms later that afternoon. Apparently hotel rooms on ships are called “staterooms”.
When you sleep little or not at all the night before, you’re a lot hungrier the next day. After checking out our rooms, their balconies, which happened to be connected, we quickly went to get lunch. There was no line at the Horizon Court, one of many buffet restaurants on the ship that’s open continuously from 06:00 to 23:00. I had pan cooked Alaskan cod with lemon, mashed potatoes, a big salad, and a small piece of onion focacia.
As we left the line went out the door. Curious about our workout options, we went to explore the gym.
To get to the gym you have to walk through the spa, with all manner of marketing posters and upsells of various rejuvenation, pampering, and beautification options. (Writing this makes me want to go back and photograph the posters, realizing just how strange they might seem out of context.)
In addition to wide spread of cardio and weight machines, most with a beautiful view out the front of the ship, they offered various classes on the hardwood floor behind the machines. Yoga, pilates, TRX, etc. As part of the cruise package we’re on, we each have $50 credit on our boarding cards (which double as room keys, triple as onboard credit cards), and a $12 yoga class seemed like a reasonable way to spend some credit. The classes only had about 15 spots each, with 3 lines for a waitlist. That seemed small for a population of nearly 3500.
We explored the upper decks, took in the views, and watched our departure from Seattle Harbor. We went back to our rooms, and I decided to read a bit from the three books I brought and take a nap to keep catching up on my sleep.
I awoke a couple of hours later (apparently I needed that nap) to the sounds of my roommate (nephew1) scurrying about and noise from next door as well. Everyone was getting ready for the imminent safety drill.
Each cabin has lifevests for precisely the number of occupants. We were instructed that the drill was imminent and to carry (not wear) our life jackets to the Muster Station for our section. Everyone in my family was already on their way well before the official drill time. I grabbed my life jacket and made my way as well, following the well placed signs and arrows to the Muster Station.
Found my parents, sister, a nephew, and my niece in the Muster Station which turned out to be an auditorium. Crew members scanned our boarding cards at the entrance. The crew member on stage quickly quieted everyone down and then started welcoming people by country and making other comical banter. Once in a while an official sounding (or perhaps just British accented) voice would come on the loud speakers reminding us what was going to happen in mere minutes.
Minutes before drill time, the lead crew member became increasingly serious, teaching us what would happen in case we had to abandon ship, finally instructing everyone how to put on their lifejackets, and then had us all do so.
16:00: the general alarm sounded. 7 short bleats and one long bleat. Everyone looked around, and the various crew members did a once over the crowd. Having passed the drill, we were told to take off our lifevests and return to our rooms. We did so, putting the lifevests back where we found them.
A Little Tour, A Few Mental Exercises
After the drill we wandered around the boat a bit, walking from pool to pool (pretty sure I counted four, not counting the hot tubs).
We stopped to check out the Calypso pool in particular, above which was place a massive display and adjacent speakers, for daily movie showings.
My parents arranged for reserved dining for our dinners. 17:30 and 20:00 were the only two options so naturally we chose 17:30, better suiting the kids and us early risers. After our little mini-tour, we changed to look a bit nicer for dinner. For me that meant zipping up my fitted Betabrand jacket rather than being loose and casual with a black v-neck t-shirt underneath.
Dinner was sit down and order style, and I suddenly realized just how hungry I was (again). Feeling even more impetuous and impatient than my nephews & niece, I decided to first help nephew2 work on the puzzles on his kid’s placemat, and then we did mental exercises while waiting for our food.
First I asked him to tell me the ISO date, which he nailed without hesitating. Two thousand fiften DASH zero eight DASH zero one. Then a big grin knowing he’d nailed it. So of course I hit him up with a bigger challenge, the ISO ordinal date. He protested, claiming he hadn’t practiced it.
No chance I was letting him off that easy. I told him, no problem, let’s figure it out from what we know. How many days in January? 31. How many days in February? 28. What does that total? 59. How many days in March? 31. Add that? 90. Ok let’s put that aside, 90 days in the first quarter. How many days in April? 30. May? 31. June? 30. Total? 91. Let’s put that aside for the second quarter. 181. Yes that many days in the first half of the year.
How many days in July? 31. What day is it in August? 1. Add those. 32. What was the number we had before? 181. Now add those. 213. So what’s the ISO Ordinal date? Two thousand fifteen DASH two hundred thirteen. Nailed it. In his head, no paper needed.
The bigger goal here is of course to teach him two general purpose problem solving tools by practicing them: deconstruction and clustering/chunking. Every problem can be deconstructed into smaller, often trivial pieces. By clustering and chunking these solved pieces into larger pieces, you can keep the whole solution in your head as you build it back up.
Having mastered dates (all an 8-year old needs to know about dates anyway), we moved onto other units. I grilled him on metric lengths. Millimeters, centimeters, decimeters, meters, kilometers. With a little help, he got all those too. What about weight / mass? 1 kilogram is 2.2 pounds. He told me his weight / mass in both.
What about the periodic table of elements? Apparently he hadn't studided these yet. So I let him "phone a friend" and ask his older brother for help. We got thru nearly the first two rows. Finally we ended with naming airport codes and our food arrived.
Dinner And A Sunset
Our food arrived, one course at a time. For my appetizer I had Alaskan salmon gravlox. Then a simple small Caesar salad. Finally the baked Alaskan salmon special. Everyone else ordered dessert. I merely helped with some of the chocolate bits.
The temperature outside had swiftly dropped from high 80s down to windchilled 50s. We returned to our rooms and put on a layer or two. I grabbed a book to read as well. My younger sister and I went out to the upper sports deck level to walk around and watch the sunset.
The sun lit the cloudy horizon on fire, glinting off the tips of the waves. Approaching the bow of the ship, we had to push against an ever stronger headwind. I held my camera firmly, took a few more shots near the bow, then put it away, leaned into the wind, and just enjoyed the view.
A little windchill can’t scare off a San Franciscan. I walked back to the semi-protected Calypso Pool area where a movie was playing. Didn’t matter which one, it was just background. I picked out a pool chair, reclined comfortably in my layers, and only then noticed that everyone else on the chairs was bundled-up under indentical red green patterned wool blankets. It wasn’t the first, nor would it be the last time on the ship that I would suddenly feel different from everyone else around.
I started reading More Awesome Than Money (MATM), and while doing so gave in to the nearby unlimited pizza and softserve bar. A couple of slices of margerita and a small chocolate softserve later, I’d read thru about 10% of MATM and decided to return to my room.
Introduction to TRON: A Bedtime Movie
My roommate nephew1 was already getting ready for bed, and I found myself sleepy as well. Earlier I’d disclosed that I “brought” a few movies with me (they just happened to be images on my laptop from a few DVDs at home), and he’d done his due diligence, asking his parents which he could watch. Of the dozen or so I had that was permitted to see, he picked TRON.
It was already late, so we collectively decided to watch the first half hour, and then go to bed. It’s amazing what observations an 11-year old will make, and what questions they ask. Especially when seeing a movie with some of the earliest computer generated special effects.
We watched up through the scene where Kevin Flynn is introduced, and talks his friends and former colleagues into helping him break into ENCOM. As they were sneaking past towers of computers, we paused the movie and went to sleep.
A POSSE portal, or IndieWeb-Silo Bridge, is a syndication feature that takes a fundamental shortcut through cyberspace. Observers inside the silo see a local representation of hypermedia from the IndieWeb.
Finished #SFMarathon 2nd half in 2:12:59, >5.5min PR! 3rd half with dad. Thanks Rebecca for pacing, #NPSF cheergang for a big mile 12 boost. They were like an acceleration tunnel that drew me in and shot me out like a rocket.
I ran the whole thing until mile 12 at a 4 minute run / 1 minute walk pace, except for a few downhills where I ran longer, and water stations where I walked sooner.
The last mile plus I walked only once and ran as fast as I could when I saw the finish, just barely breaking 2:13.
My average pace was a 10:09 min/mile. Nearly the same speed as the 10:05 min/mile I did at last year’s Bay to Breakers, but for almost twice the distance.
The past two months of focused training since my disappointing 2015 Bay to Breakers paid off. I’m back, and I know what to do to keep improving.
Afterwards I found my dad at the finishers area, we collected our Challenge Medals (California Dreamin' for completing both the Huntington Beach SurfCity Half and an SF Marathon Half), and went out to a celebratory brunch with fellow runners including a couple of @Nov_Project_LAX friends.
Yesterday morning I ran through a forest in pitch darkness for the first time. I had a headlamp, a general sense of direction (uphill), and the knowledge that friends were just out of sight up ahead.
When I left my house it was dark as night in the city, which really means never darker than the dim glow from diffuse streetlamps and other light polluters. I ran nearly a kilometer before meeting my fellow #nopasoparungang members at the intersection of Frederick & Stanyan streets.
From there we ran half a mile up Stanyan’s steepest segments (240 feet elevation) to Belgrave Ave and the eastern edge of the Mt Sutro Open Space Preserve. Undaunted by poison oak warning signs, we leapt onto the narrow dirt forest trail. In mere seconds we disappeared into the dense woods, the city glow faded, and our headlamps barely lit the trail ahead. Anything beyond 10 meters was nothing but gray shapes blending into darkness.
Our gang of four split into lead and tail pairs, and we soon lost sight of the lead headlamps. We didn’t bother navigating by mobile, even the dimmest of backlighting would have been blinding. Whenever the trail split, we chose the uphill path.
Not only was the forest darkness pierced only by our headlamps, it was silent except for the sounds we made, breathing, pounding the trail, rustling leaves, snapping twigs.
The lead pair rejoined us from behind, having taken a wrong turn and doubled back. We emerged from the south side of the forest onto the street and found the few other @Nov_Project_SF early gang arrivals who took our photo.
Now seven strong, we hiked up Johnstone drive just a bit and ran uphill onto the East Ridge Trail, again leaving civilization behind in just moments. We ran all the way up to the Mt. Sutro summit, to a clearing formerly used for Nike Missile Control Site SF-89C.
Looking back through the dark forest I could see dawn’s light in the East.
From Fredrick & Stanyan we had only run a mile, and yet the second half of it through pitch black woods, and 400 more feet of incline for total of 640 feet of elevation gain.
Tapering for this weekend's race, once I reached the summit I did reps of planking, tricep dips, pushups, all while swatting perhaps nearly 100 mosquitos. Everyone else ran up & down the ridge trail and others nearby. A few more runners found us during the 30 minute hills workout.
Afterwards we ran back down to the meeting point on the street, and hugged the 6:25am arrivals. Then we did it all again, this time in the sunrise lit trails below.
This is November Project San Francisco #hillsforbreakfast. We run through poison-ivy laden mosquito-infested forests from darkness through dawn and into the sunrise.
Why are we shushing with our fingers? We heard from a concerned hiker that "the sound travels really far" out of the forest (which is odd, because the sound from the city doesn’t seem to make it into the forest). For more, see: NPSF: Do you know what it feels like to be 90 years old?
2014 was a breakthrough year for IndieWebCamp and the IndieWeb movement. Beyond our technical achievements in creating, building, deploying, and using simple formats & protocols on our personal sites, we organized record numbers of IndieWebCamps and Homebrew Website Club meetups. We gave talks to audiences of thousands, and the press started covering us in earnest. We saw the launch of Known and its hosted service Withknown, a user-friendly mobile-web ready solution for anyone to get on the indieweb.
With our increasing visibility and popularity, we encountered perhaps the inevitable re-use of our community terms or similar terms to mean other things, and subsequent online confusion. As expected we also saw the shutdowns of many more silos. We lost a very special member of the community. We kept moving forward and finished the year with the first of its kind virtual online IndieWebCamp, and verbal commitments to each other to launch personal site features for the new year.
Table of Contents
A lot happened in 2014. Enough for a table of contents.
Anyone can call something a movement, but that doesn’t make it so.
A tweet is not a movement.
A blog post is not a movement.
A single-page-site is not a movement.
A manifesto is not a movement.
This is a movement. People are a movement.
This is everyone who participated in one or more IndieWebCamps during 2014. Real people (with the exception of one cat), passionately using their own personal websites to express themselves on the web, creating, sharing, and collaborating with each other to grow the independent web.
Click / tap the image to go to a fully interactive version on the IndieWebCamp wiki, with every person (but 3!) linked to their personal site.
The 100+ participants above participated in six IndieWebCamps in San Francisco, New York City, Portland Oregon, Berlin, Brighton, Cambridge MA, and Online. Twice as many as the previous year:
IndieWebCamps by year
Handcrafted ASCII graph (took Tufte class twice, not his fault):
You can see summaries and links to all of them here: IndieWebCamps
Beyond double the number, 2014 saw innovation in the very format of IndieWebCamps with a simultaneous three location annual main event, as well as the first IndieWebCamp Online. Thanks to David Shanske for organizing and leading the charge with IndieWebCamp Online using IRC and Google Hangouts.
Homebrew Website Clubs
In addition, 2014 was the first full year of Homebrew Website Club
meetups. 27 days in total across several cities: San Francisco, Portland, Chicago, Minneapolis, New York, London, Paris.
A Chicago chapter started 2014-04-09 and met 16 times.
The IndieWeb community went through some minor growing pains in 2014, and tragically lost a key community member. There was also the continued series of site shutdowns, some of which members were able export from, but all of which broke the web.
Losing One Of Our Own
Mid last year we lost IndieWeb community member Chloe Weil, and we miss her very much.
Chloe participated in the very first IndieWebCamp 2011, as a shy apprentice, but learned quickly & eagerly, and put her many creative skills to work building & growing her own personal web presence. Here she is at that event, third from the left edge:
Vox Media acquired the staff & technology of Editorially, whose founders subsequently shut it down
Short Notice Shutdowns
The second most frequent shutdowns came suddenly, or nearly suddenly, unexpectedly, and sometimes with a complete loss of content (without any opportunity to export it).
Spreadly - site went offline without any notice
Fotopedia - 10 days notice and "all photos and data will be permanently deleted"
Justin.tv - two weeks notice and all videos deleted
Codespaces - most content deleted by vandals, site shutdown rather than attempt recovery.
The Cloud Is A Lie
So-called "cloud" services have been heralded as the new most reliable, scalable, available thing for storage etc., and yet last year:
Ubuntu One cloud sync service shut down with only two months notice.
Breaking The Web
All these shutdowns break the web in some way or other. However there are particularly egregious examples of breaking the web, such as when third-party link-shorteners and identity providers are shutdown. In 2014 we lost another one of each:
s.tt link shortener, shutdown by parent company and site Repost which itself shutdown as well
myOpenID.com, a popular OpenID provider, also shutdown.
Losing A Classic
Lastly we lost a classic site in 2014:
43things.com - after 10 years of service, the sites owners decided to shut it down.
Last and least of our challenges, but worth noting for the consternation it’s caused (at least on Twitter, and perhaps that’s telling), the overloading of the term and prefix “indie” has led to some confusion.
When I first used the phrase “indie web” to refer specifically to independents using their personal websites for their online identity and content (instead of large corporate silos like Facebook & Twitter, or even group sites running open source like Diaspora), I knew both that the prefix “indie” was already both in heavy use across industries and with different meanings.
When Aaron Parecki and I deliberately chose to use the term “IndieWeb” or phrase “Indie Web” to refer to a difference in focus from “Federated Social Web”, and then co-found IndieWebCamp with Amber Case & Crystal Beasley, we viewed our usage of “Indie” as deliberately continuing in the same spirit and theme as earlier "Independent Web" efforts (such as the early 2000s "Independents Day" campaign), and complementary to “Indie” efforts in other fields.
2014 saw the launch or promotion of other things labeled “indie” on the web (and at least somewhat related to it), which had little or nothing to do with the “IndieWeb” and was a source of repeated confusion (and continues to be).
The privately held startup “ind.ie”, bootstrapped & crowdfunded, and yet developing various "independent technology" or "indietech" efforts which could easily be assumed to overlap with "indieweb" did not relate in substance to the IndieWeb at all.
There were numerous instances of people confusing "ind.ie" and the "IndieWeb" in their posts, and criticism of one would inevitably lead to errant conflation with and criticism of the other. It got so bad that "ind.ie" themselves posted a blog post:
Are you the same as IndieWeb?
No. IndieWeb is a separate movement and yet we have some overlap of goals.
Despite this effort at proactive documentation, confusion has continued, though now it's typically quickly followed up by a clarification that the two are not the same, and link to one or both of the above.
indie.vc not IndieWeb-specific
A new VC firm launched in 2014 called "indie.vc". Due to their name and web presence, they too were inevitably confused with “IndieWeb” or people assumed that they were some sort of IndieWeb investment fund. Neither of which is true.
In the future it is possible that indie.vc will fund an IndieWeb startup, but until that day comes, they are disjoint.
Despite such challenges, the IndieWeb community proposed, discussed, specified, built, and interoperably deployed the following indieweb technologies in 2014. These IndieWeb innovations in the past year were nothing short of web technology breakthroughs.
And the best part: all of the following are 100% free as in freedom, creative commons zero (CC0) licensed, openly documented, and real: interoperably shipping, often with multiple open source implementations.
This is technology by independents declaring independence. You could even call them “indietech” if you thought they needed another buzzword, which they don’t.
In alphabetical order:
fragmention — a way to use a URL to link and cite individual words or phrases of a document.
h-feed — while previously proposed on microformats.org, in 2014 the indieweb community adopted h-feed as the primary DRY way to markup a feed or stream on an HTML page, published multiple indieweb sites with it, as well as multiple indieweb readers consuming it, consequently upgrading it to an official microformats.org draft.
marginalia — within a few months of the invention of fragmentions, community members realized they could post indie replies to specific paragraphs or any phrase of a post, and the receiving post could display them as comments in the margins, thus inventing distributed marginalia, a feature previously only available in proprietary text editors like Word, Google Docs, or the Medium silo, and not actually distributed, aside from emailing around Word documents.
Micropub — a standard API for publishing and updating posts on indieweb sites (conceived in 2013, first interoperably implemented in 2014) with:
person-tag — a special kind of tag on a post or in post content that refers to a specific person by URL (and name) rather than just a word or phrase. Only publishing examples in 2014 (subsequent interop in 2015).
In addition to all those groundbreaking technologies, IndieWeb community members continued to evolve what types of content they posted on their own sites, documenting the paths as they paved them with permalinks on their own websites — all of the following have documented real world public web publishing examples (at least one, typically many more) on their very pages in contrast to the more aspirational approaches taken by other current attempts in this space (e.g. ActivityStreams, and the since defunct OpenSocial)
collection — a type of post that explicitly lists/embeds multiple other posts chosen by the author
edit — a special type of reply that indicates a set of suggested changes to a post (only publishing example(s) in 2014)
exercise — a broad post type that represents some form of physical activity, i.e. quantified self, or in particular:
food — a new post type that represents eating or drinking
invitation — a new post type for sending someone one person an invitation to someone else’s posted indie event. Also supported by Bridgy as a way of backfeeding invitations made on Facebook POSSE copies of event posts.
quotation — a type of post that is primarily a subset of the contents of another post usually with a citation.
sleep — similar to exercise this post type is for tracking when, how deeply, and how long you sleep.
travel — a post type about plans to change locations in the future.
Beyond technologies, several indieweb services were built, deployed, and significantly improved by the community.
Withknown launched, both as the open source Known project you can download, install, and run independently on your own domain, and a hosted service at withknown.com that made it easy for anyone to quickly signup and get setup with a modern indieweb enabled site, and 1000s did.
There's lots to technology development beyond the technology itself. Over 1000 new pages were created in 2014 that documented everything from concepts, to brainstorms, designs, and everything else indieweb related that the community came up with.
The IndieWebCamp wiki is now the pre-eminent reference for all things Independent Web.
If you have a question about something "independent" and "web", you're very likely to find the answer at https://indiewebcamp.com/
Here are some of the top such resources created in 2014:
archive — the UI Pattern of providing archives of your posts that users can navigate
communication — how to create a communication / contact page on your own indieweb site, with clear one-click buttons for people to contact you as desire and are capable of being contacted.
disclosure — how to proactively disclose some aspect about a site that the site owner wants the user to explicitly be aware of
facepile — the UI pattern of providing a set of small face icons as a summary of people, e.g. that like a post, or have RSVPd to an event
file-storage — why, how, and examples of the common IndieWeb practice of storing your data in flat files (instead of the customary webdev habit of using a database)
follow & unfollow — documentation and implementation of the concept of (un)following people and posts
FreeMyOAuth — a one stop page to quickly access the "what have I authorized on what services" lists so you can de-authorize any apps you no longer use or don't recognize
generations — perhaps one of the most important pages created in 2014. generations showed for the first time an overview of how the IndieWeb approach of engaging development leaders first (e.g. by focusing on selfdogfooding), then journalists & bloggers, etc. provides a rational and steady growth path for the indieweb to eventually reach anyone who desires an independent presence on the web that they own and control.
HTTPS — best step-by-step documentation for how to setup HTTPS on an independent site, with choices, levels to achieve, and real world examples
mobile — a great summary of mobile first and other mobile specific design considerations, how tos, etc. for any indieweb site
mute — the ability to skip seeing someone's posts, while still following them in general
notification — research and analysis of both push notifications and notification pages across various applications and silos
onboarding — the user experience of a first time user of a site, service, or product, who is looking to sign-up or otherwise get started using it.
payment — how to create a payment page on your own indieweb site, and how to create the links to various payment services for your readers to click and pay you directly
scope — summary of what are OAuth scopes, examples of them used by IndieWeb apps, sites, and silos.
this-week-in-the-indieweb — a weekly digest of activities of the IndieWebCamp community, including a summary of wiki edits for the week
URL design — a collection of analysis and best practices for designing human-friendly and robust URLs, e.g. for permalinks
wikifying — simple steps for new community members to start engaging on the wiki
Summary And Looking Forward
2014 was a year of incredible gains, and yet, a very sad loss for the community. In many ways I think a lot of us are still coping, reflecting. But we continue, day to day to grow and improve the indieweb, as I think Chloe would have wanted us to, as she herself did.
By the end of 2014 we had community members organize IndieWebCamps in 2014 in more cities than ever before, and similarly, start more local chapters of the Homebrew Website Club as well.
I'm grateful for each and every person I've met and worked with in the community. Everybody brings their own perspective, their own wants and desires for their own website. As a community, we can best help people by channeling their desires of what should be done, into what they should do on their own website for themselves, building upon the work of the community, and then, how can we connect amongst our sites, and in-person, to motivate each other to do even more.
That's exactly what we did at the end of the year.
New Year Commitments
At the last Homebrew Website Club meetup of the year on 2014-12-17, we decided to make verbal commitments to each other of what we wanted to create, launch, and start using on our own site by the start of the next year.
I wrote most of this post incrementally on the IndieWebCamp wiki with a bunch of contributions from the IndieWeb community (citations, images etc.). Thus the text content of this blog post is CC0 licensed for you to re-use as you wish and preferably quote, cite, and link. Please credit the “IndieWeb Community”. Thank you for your consideration. — Tantek
5y+1d ago was the 1st Federated Social Web Summit #FSWS2010, a key inspiration for @IndieWebCamp. @evanpro organized it with @rejon and brought together so many creatives working on such different approaches.
I think that was the first time I openly expressed preferring to focus on the independent web, or "indie web" in contrast to what was already becoming an oligarchy of large corporate social(media) web sites.
In the afternoon we proposed and split up into BarCamp-style participant driven break-out sessions:
Screenshot from Ben Roberts’s computer receiving notification via Chrome: When he clicks that it loads his notifications page: https://ben.thatmustbe.me/activity which shows more information: including receiving comments on his photo in the same minute from both Kevin Marks and Kyle Mahan.
* 3 different implementations * Mobilepub, P3k+Prowl, Woodwind + (Known | Red Wind)
And as a bonus:
* from 3 different geographical locations * Boston, Portland, SF Bay Area * in 2 different programming languages * PHP, Python
And last but not least, the combination of Ben Roberts, Aaron Parecki, Kyle Mahan achieving SWAT0 is a HUGE breakthrough for the web since they all did it: * on their own sites * with software they personally wrote
Not until my hand brushed up against you did I realize something was wrong. You were warm, too warm. Despite closing your lids last night you hadn’t slept. That morning you were a pale shade of gray, unresponsive, staring blankly and blinking.
I hoped it was temporary, yet I knew it might be your time. Looking up your symptoms I found you weren’t the first to have this blinking fever. You finally relaxed and stopped blinking when I held your primary pressure point for a few seconds. I let your heat dissipate while I read what to try next.
Despite being with you for years I was only now learning you could repair yourself if I pressed a few more of your buttons. You told me you were ok.
When you awoke on the train you froze, gave me the weirdest panicked look, and told me as much in so many languages I didn’t understand. I held your primary pressure point again and let you rest til we got home. You were always easy to carry.
I stopped by the bookstore and picked up a couple of volumes from fans of yours and your kind — they’d written so much about you collectively over the years.
That evening I woke you up again after letting you sleep the afternoon away and there it was again, that blank pale gray stare, blinking an empty question.
I tried having you repair yourself again, and again you said you were ok. Maybe you were at least in mind, maybe it was only your body failing you. So I did the only thing I could do and ordered a replacement. I knew you couldn’t be upset about it though I suspected.
The next day I transferred your mind to a conduit and the morning after that your new body arrived. It took less than half an hour for it to absorb you from the conduit, but were you really all there?
You seemed happy and responsive, up for anything. You’d forgotten a few things; I had to give you another key to the house. I confess your new body was smoother, more beckoning to the touch. Your expressions were brighter, more colorful. You spoke more crisply. Enough differences to notice, but you were still you.
I kept your old body on life support, just in case there was something else I had to ask your old self that your new self had forgotten. You didn’t even notice your old self until the house told you to pick a new name and you took a number. I knew other parts of you depended on your name so I renamed your old self instead. You were you again.
It’s been less than 24 hours and I’ve only noticed a few more things that didn’t make it through the conduit. You forgot some of your preferences I knew by heart so I reminded you.
You forgot how to check yourself before going out in public; that will take me longer to teach you, as it was a friend of mine that taught you that last time and I still don’t know how he did it.
Your old body lasted about four years. Four years together, traveling across continents and more time zones than I remember. Four years of keeping up with me, even if I was running, jumping, or sometimes even climbing. I couldn’t help but hear the words echoing “Four year lifespan” yet I knew that was a quote from a movie. Just a coincidence I’m sure.
I’m getting used to the new you. You seem to be ok with it too. I’m sure there will be more we’ll have to figure out together but isn’t that how it always is?
The CSS WG has published a second Candidate Recommendation of CSS Basic User Interface Module Level 3. This specification describes user interface related properties and values that are proposed for CSS level 3, incorporating such features from CSS level 2 revision 1, and extending them with both new values and new properties.
Call for Implementations
This notice serves as a call for implementations of all CSS-UI-3
features, new properties, values, and fixes/details of existing
features. Implementor feedback is strongly encouraged.
Thorough review is particularly encouraged of the following features
new in level 3:
Please send feedback to the (archived) public mailing list
with the spec code ([css-ui-3])
and your comment topic in the subject line.
(Alternatively, you can email one of the editors and ask them to forward your comment.)
How not to onboard users, as shown by @UserOnboard: * Block content with a “Your email” form overlay * Misleading copy: “Without further ado, here is...” [actually with one further “ado” — please give us your email address first] * Mocking copy: “Thanks for reading!” blocks content to be read * Creepy first-person copy: “… because I know you’re busy” — ‘I’ who? Is @UserOnboard claiming to be a self-aware AI?
Emotionally intense yoga class (because I saw Inside Out last night?) Afterwards I did my first headstand! Positioning myself at the base of the wall helped me get my form right. Held it for 10 seconds without touching the wall.
Five is only half the ten Yasso 800s you’re supposed to do if you’re training/timing for a full marathon. However, I did sub-4-min 800s which if I'd done 10 of it would mean I should be able to sub-4-hour marathon. Does doing half that mean I should be able to do a sub-2-hour half marathon? Going to keep training hard & smart and bring everything I’ve got at next month's SF Half Marathon (second half). I should at least be able to beat my 2:18 PR from Surf City.