2019-09-22

Reviving 56k modems

This is probably my most weird blog post yet. I wrote earlier about the rack bar, something I briefly touched upon was the two 56k modems in the rack. To understand why we mounted two US Robotics 3453 about 2 meters from each other at a 90 degree angle in a 42U rack laying down on it’s side we have to jump back to October 2018.

Wberg and Summalajnen visited me in San Francisco and we spent 2 weeks talking about what we wanted to build for next year’s iteration of ANDERSTORPFESTIVALEN. Part of our brainstorming session ended up talking about how ridiculous it was browsing the web using a dialup connection. The slow speed, combined with the sparse amount of information presented using barebones UI, all of this in order to access the exciting world of the early internet. Fighting for your slot on the phone line with family, having the dialup modem hang up due to someone lifting the phone. All of these are problems of the past that we luckily don’t have to experience anymore using the modern Internet. What if we could recreate this experience? Not simulate, recreate. Simulation would be building a dialup environment” but knowing it wasn’t real would make it a simple gimmick, to get the actual feeling we would have to actually make it like it used to be.

Could we connect two modems together and build something using these? Bar dashboard? A bar menu? The exact shape was still unknown but we knew that we needed modems in order to see if this idea would even be feasible. We ordered two US Robotics 3453 modems, two relics of the past that can be found on Ebay for about $10 dollars today. The modems are built like tanks (except for the RJ11 port) so you can expect these to work as well today as they did back then. Once the delivery was in, I had a chance to meet up with wberg during an event, where we spent one night connecting these old modems together, hoping they would just call each other out of the box.

modems

Sadly, this was not the case. Digging deeper and using the AT commands for these modems, we issued commands to have these dial up but the modems only complained about no dial tone. Could this check be disabled? The modem surely must have an on-board configuration that allows us to set the parameters of operation? Digging deeper into the S-Registers of the modem (the custom settings for this particular modem) we found some hints that the modems could do this, but nothing was documented to the point where we could understand it out of context.

If you’ve ever tried to search the internet for information about this it’s clear that most of these endeavours stopped being interesting to people once broadband became inexpensive enough to run long distances along with cheap ethernet for home connections. The majority of sites that present information are either forums linking to dead sites or ASCII graphs trying to convey information around this subject. It’s highly frustrating to see how fast information disappears from the internet, almost like tribal knowledge falling out of view. The hard links” that people used as references are long gone and we are left deciphering clues from russian forum posts. After a while it turns out that the definite source on DIY phone circuits available today is ePanorama.net’s index of Telephone line audio interface circuits”. I’ve taken the liberty to archive this site locally, if this site ever goes offline I pledge to host this once again in order to help people avoid the same situation that we had to endure to find information.

Back to the modems, it turns out that these modems needs a line current in order to open relays on the modem. Without the modem detecting current, the software just refuses to open the line regardless of what S-Registers we tried. This took us a long time to figure out and after hearing the internal speaker open it’s line for the 200th time without any result we almost gave up. Foxbat helped solder a small circuit to emulate line voltage and to our surprise both modems for the first time started dialing numbers! Sadly, they did not connect to each other. Getting the modems to dial was only a small part of the larger challenge, the actual problem was configuring these modems to talk to each other. Having changed every single parameter in the S-Register didn’t help either as it became very hard to know what settings were set on each modem. To remedy this, we went over every single bitmask in the S-Registers and reconfigured these to be the same at which point the modems finally opened up a connection between each other.

foxbat

Once the actual modem link finally was alive, some configuration had to be done in order to make sure that the modems communicated back and forth, then figuring out how to actually pipe data over these beasts. For someone that’s born with REST and JSON, it’s almost unthinkable that you can pipe whatever data you want to a serial port without having to think about what the modems do underneath but this really is the case with modems. It’s amazing how simple this actual step was and I could see why people believed newer solutions to be complex. Once we got the hang of the underlying transfer representation, I wrote a quick mockup of how a menu” reading our Firestore database would look using NodeJS and blessed (yes, I’m linking to neo-blessed because the original project was abandoned).

With this actually working, the question was What do we do with this shit?”. Since the terminal bar menu” had been an idea we’ve thrown around for Anderstorpsfestivalen quite a bit over the years it was obvious that we had to do this, but was this the only thing? The experience we tried to replicate was the modems actually being interrupted, so what if we added an actual phone you could lift to break the modems? What if this phone also had someone actually screaming at you through the receiver? All these ideas got thrown around now that we knew that the actual idea was possible.

Rendering the bar menu / dashboard itself without even using X really stroke a chord for us. By making it so simple that it can be streamed like a BBS it can convey a certain visual experience that modern rendering stacks will have a hard time to approximate. Browsers do a tremendous job at rendering fonts and graphics so stepping away from this stack gets us closer to the past. On top of this, combining old rendering technologies with modern realtime backends seemed like an extremely stupid idea which meant it had to be done.

In order to build a bar menu out of this I started to sketch out a simpler framework” around blessed. Blessed itself has a pretty normal rendering loop but since we wanted to develop isolated modules” that would fit on a grid, simplifying the developer experience would help iterating on the different parts. Since wberg hadn’t worked with NodeJS at all before, it would also help him if the modules had clear entry and exit points instead of being one large file. I began iterating on this framework in December 2018, rewrote the entire thing in February 2019 once I knew what the pain points were and started onboarding wberg on to writing modules for this. The structure of the framework essentially looked like this:

Framework

The framework handled all the backend services (DarkSky, Google Calendar, Firestore, Postgres and SNMP) and exposed these through nice interfaces to every single module. Since Firestore has realtime updates, the framework could help to redraw these modules on updates from Firestore to create a realtime update experience. Each module would make up one distinct square” of a larger grid. Since there would have to be multiple pages, the system would handle the display loops for each of these modules and placing them on the correct place. The framework then multiplexed the output of these modules onto different targets, such as a telnet server and an SSH server, allowing us to stream the actual data over the modems easily. It also hosted a local rendering pipeline for developing parts. The different exposed hooks for the part is:

Load: This function is run once when the modules is first loaded which allows the module to bind data notifications, hook into firestore notifications and do the first pass of data fetching. The data services is exposed here from the framework which allows the part to store a reference to this object for future invocation.

Hook: This function should replace a blessed-grid” object class which i implemented that has all the information the system needs to display the part, this includes borders, labels and padding for the part.

Display: Runs every time the module is displayed from being hidden, this is where the module would render the data and modify the render state that the framework holds for the part.

Update: For animations, this function is run every frame as long as the part is displayed and allows the part to modify the render buffer to create simple animations.

After a couple hours spent iterating on these parts with wberg we ended up with these pages:

page1

Common to every data” page was that the menu to the left always persisted with the other data changing. On this page we had a schedule that read data from Google Calendar, a weather widget I implemented that used the DarkSky API to fetch data and an image to ASCII art renderer which i beat into submission in order to scale images and render them to the different parts.

page2

The second page holds detailed sales statistics from PSQL, showing remaining stock, how many of the different items that had been sold at any given point, top 5 sold items and some beautiful (absolutely terrible) ASCII bars that would render the top sold beers & drinks.

page3

At page 3 we started running out of ideas so we implemented some more data queries from PSQL together with actual network data pulled over SNMP from our network layer, this allowed the people visiting to see the statistics of the festival WIFI in realtime on this dashboard. How did we envision this to look at the actual bar? Since I rendered the bar earlier to visualize the idea it was easy to throw in a screenshot into the rendering to find out.

page4

So the last remaining issue to solve was how to build our circuit in order to get the phone to break the modems and the attached Raspberry Pi to play back a sound into the actual phone. Since the phone we had functioned like a proper telephone and allowed power to flow through the upper conductors on the phone jack (3&4) when the hook was on, using that to detect if the phone was on the hook or not became easy. The last part was figuring out how to interface audio onto an old phone, luckily the page I mentioned earlier had a pretty sketch that made this seem trivial.

sketch

Wberg drew a world class professional blueprint of how the electronics was connected when we added in the GPIO detector for the phone.

sketch2

phonework

With all of the outstanding problems solved and with the help of Love Olsson (thanks again for everything Love, without your help this wouldn’t have worked out) there was just a matter of keeping polishing all the rough edges, solve bugs in the dashboard, make the modem software better for the hangup functionality and implement the Python wrapper that controls the sound playback until mid-July 2019.

Time really flies and I was suddenly in Anderstorp. It feels like I skipped almost a year but that’s the amazing part about working on longer projects like these. Since they technically never get finished, the showcase at the festival becomes the actual goalpost. It’s hard to describe the relief I felt once we setup the modems back to back and tested the dashboard onsite, seeing it work over the modems for the first time.

modemsonsite

One problem had started to manifest itself that turned out to be harder to deal with onsite, this being the aged RJ11 connectors on the modems that had deteriorated over time. Since our current location here was in the middle of the forest in Sweden, finding new connectors to solder on wasn’t an option. After watching wberg trying to adjust the pins for an hour, decided to just hard solder a 5 meter cable between the modems which in theory would eliminate all these issues (also make the modems permanently connected).

wberg fixing

Thankfully this solution worked. Sometimes bruteforce really is the best solution to a problem. Gujjdo worked on mounting these modems to the switches within the racks, as the alignment had to be perfect for the symmetry between both sides of the rack to work.

mounting modems

mounting modems2

With all this mounted, we started up the modems and the dashboard and waited for the night to set in order to see it in action.

mod3

mod1

mod2

mod3

What about the stupid phone? Not forgotten! In fact we mounted a real telephone jack on the side of the bar for the phone to be plugged into and waited until the second day of the festival at which point we brought this phone up. One last minute addition that we built on-site was that since we already had the audio circuit built, what if we allowed the microphone from the phone to actually be piped out through the large loudspeakers? Like a really bad announcement microphone that you hear at trains, cruise boats or shopping malls where the PSTN system is also an announcement system. Soldering on some connectors to jack this into the mixer was a breeze and the phone got a fair amount of usage as an announcement microphone.

phone

announce

Fozzie captured an audio clip of how bad this actually sounded using a handheld dictaphone. You can really hear the profile of the electret condenser microphone just screaming cruise boat.

In general, I was really happy about how all this eventually came together. It was a long multi month team effort where everyone helped to build the complete idea. It also sort of proved my point that technology put in the right context can be art, allowing people to experience specifically crafted moments through using and observing these contraptions. Being there really conveys outdated 90s technology that had gotten a second life and many people remarked on the memories and feelings that this brought back to them. That in itself was very fulfilling, setting out to communicate a specific feeling and succeeding in using the tools to do just that.

Modems for sure are part of a lost era, representing the heydays of the Internet. Edward Snowden wrote about these days in his book Permanent Record”.

Before you recoil, knowing well the toxic madness that infests that hive in our time, understand that for me, when I came to know it, the Internet was a very different thing. It was a friend, and a parent. It was a community without border or limit, one voice and millions, a common frontier that had been settled but not exploited by diverse tribes living amicably enough side by side, each member of which was free to choose their own name and history and customs. Everyone wore masks, and yet this culture of anonymity-through-polyonymy produced more truth than falsehood, because it was creative and cooperative rather than commercial and competitive. Certainly, there was conflict, but it was outweighed by goodwill and good feelings—the true pioneering spirit.” 1

It’s fair to say that we didn’t completely catch the full representation of what Snowden mentions, although we provided a small glimmer of it. Hopefully our future plans for this will realize the vision further, the true pioneering spirit.


  1. Snowden, Edward. Permanent Record (p. 4). Pan Macmillan. Kindle Edition.

2019-08-31

ANDERSTORPSFESTIVALEN 2019

night

night

night

night

night

night

night

night

night

night

night

night

2019-08-02

GORUCK Star Course - 50 Miler - San Francisco

For you that aren’t aware, the GORUCK Star Course is an event where you have to walk 50 miles in less than 20 hours with a 20 pound weight plate in your backpack. The event starts at 21:00, meaning a long night of walking and you get the hit list” of coordinates once the event starts, meaning you have to balance plotting your route against time lost to walking.

How did we end up here?

A normal after work beer with a colleague did lead us into the subject of the Goruck Star Course 50 miler. My colleague really wanted to do this event and talked about what he had heard and read about it. While this didn’t seem to tempting due to the distance, I wanted to be encouraging and told my colleague that I’d promise I would walk with him if he did it. Anyone who knows me knows that I do not break a promise/bet that i make. My colleague took me up on the offer and we started doing early walks in February to feel this event out, which in turn had my colleague ordering the weight plates.

During this same time period I ran a half marathon with Conrad who has made a very inspiring turn in his life by shedding tons of weight and really gone to a new fitness level in a short amount of time. I’ve done tons of half marathons before but it was really fun to actually run with someone that had never done it before and I asked Conrad shortly afterwards if he wanted to join our team for the Star Course. He said he would think about it” and I do not blame him because the offer itself is insane. Pay money to basically walk for longer than you’ve ever done and on top of it carry a weight on your back? Why?

He eventually decided he would join me on this trip and we started talking about how we would train for this event. Around this time my other colleague dropped out for a variety of reasons and I honestly do not blame him for it. Realizing early that this is a too big of a cake to eat is sane and is something I think most people should feel better about doing. If you don’t feel up to the task it’s better to wait another year and train more for it than diving into the insanity. The problem with this is that me and Conrad had sort of decided mentally that we would do it and our main motivation was suddenly gone. At this point we could have given up on this idea altogether, however, we’ve grown attached to the idea of doing this that we decided that we would try our hand at this regardless.

Training for the event

The cutoff time for this event is 20 hours, our goal was to finish at 19:59:59. As in, our goal was to get through the finish line, not aiming for a specific time. We tried training as much as time allowed with our schedules which ended up being approx 6 longer rucks” (carrying the weight in a backpack) prior the event. Both me and Conrad does strength training and running outside of this which helps a lot also. The training events served two purposes that are important, the first being to build the mental & physical strength to carry the backpack for longer distances. The second and most important being to verify that the gear selection actually worked. There were a bunch of parts of our loadout that we ended up changing during training because they caused chafing or did not contribute enough function for the weight. All these spent hours ended up being crucial to the success of this event.

Two of these training walks were particularly memorable, the first one being half of the SF Crosstown Trail. San Francisco has created a crosstown trail” which spans from the east part of SF all the way over the city to the west. On paper this sounds quite boring, walking through generic San Francisco neighbourhoods but in reality this is a really well planned walk with a lot of interesting parts. I was surprised to find so find so many hidden gems of the city and we only did 2/3rds of the walk.

cross1 map

cross1

Sara joined us for this walk, she couldn’t participate in the Star Course due to a wedding in Sweden but she enjoyed walking with us and seeing these beautiful spots of San Francisco.

cross2

The walk goes through unknown parts of San Francisco that feels remote, although in the middle of the city like the image above.

cross3

The second memorable” walk was San Francisco -> Mount Tamalpais. The cool part about this walk is the change in scenery along the route. It starts out with San Francisco urban, crosses the Golden Gate bridge, goes into Sausalito, through Mill Valley and up to Mount Tamalpais which is a visible change in both scenery and nature.

tam map

For this one both me and Conrad had focused on figuring out packing and setting a good hydration & nutrition schedule for walking. We’ve both switched to the Hyperlite packs and went for a hike with a lot of elevation.

tam1

Mount Tamalpais offers some less than optimal trails which was perfect in order to train terrain with a heavier backpack after having walked 25 kilometers. Apparently the rain period that hit the area earlier in 2019 had eroded a lot of the previously better paths.

tam2

tam3

After visting the peak, we made our way down to West Point Inn which is an inn with a beautiful location, overlooking the entire Bay Area. You can also see Karl The Fog engulfing San Francisco.

tam4

Gear Strategy

It’s important to talk about one of our main strategies that attributed to us finishing this event, namely our approach to weight. We knew that we had to carry a 20 pound weight in our backpack, so why make it harder by adding auxiliary weight? While the event is centered around the Goruck brand, it’s not a requirement to use their gear for completion of the event as long as the gear you’re using meets a certain criteria. Every pound we shaved off on gear surrounding the weight plate meant less weight that would be carried around the course. For us this meant going with Hyperlite Mountaingear’s Windrider 2400. As interesting the Goruck Rucker 25L looks, the Hyperlite weighs 580 grams less and features a hip belt. Now, for all the other Goruck events that means carrying a backpack while crouching through mud I would recommend against using an ultralight bag for durability. For this specific event however that focused solely on walking, ergonomics and weight trumps durability.

In the spirit of the bag, all the gear I carried was optimized for weight. If we thought we wouldn’t need it, it didn’t go into the bag. Since the climate in the Bay Area is relatively stable, especially in August (FOG FOG FOG), carrying a fleece, rain jacket or extra shirt was out of the question. All the supplies like caffeine pills, ibuprofen and batteries was repacked into lighter containers in order to shed weight from our backs. Since this is an event based mostly in the city, we assumed that most would be walked on concrete. Hence instead of going with heavy hiking boots, I went with Adidas UltraBoost shoes and Conrad used Adidas Terrex hiking shoes, which weighs a lot less than hiking boots and provides better cushion.

Gear List

Most other participants publish one of these lists and it helped us immensely in preparing for the event. Being able to see other participants strategies from previous years in what to bring influenced our thinking although we for sure had our own twist on the list.

  • Hyperlite Mountaingear Windrider 2400. This backpack weighs nothing and comes with comfort that’s way beyond its league. It also looks like a plastic bag from a corner store, which is a debatable aesthetic.
  • 3 packs of Jelly Belly beans. These foul tasting sugary beans was nice to have when our energy levels started to fall. I don’t recommend them but I couldn’t live without them.
  • 3 packs of Greenbelly Meal2Go. Weight, taste, calories. This has it all in a good package. Around 350 calories per bar and there’s 2 in each package, perfect for splitting on 2 persons.
  • Titan Fitness 20 lb Ruck Plate. Gotta make use of that Amazon Prime subscription! A weight is a weight and honestly I don’t see the reason of paying double for the Goruck brand name one. In the end this is just a weight.
  • Trail Toes Magical Cream. I do not know what’s in this and I probably do not want to know. It works wonders. Buy it. I scooped some up in a smaller & lighter container.
  • Black Diamond Storm Headlamp. Here’s a place where I didn’t really consider weight. Being seen in the middle of the night in FOGUST of San Francisco was a priority, hence this headlamp.
  • Platypus Big Zip Hydration System. I like water and water likes me. 3 liters of water was a good amount for the longer stretches of this walk and the tube can disconnect from the bladder which makes it a breeze to refill.
  • Garmin Fenix 5 This has been my running watch since 2017 and it is not the best smartwatch, however, it does have an insane battery life when tracking and for this event it was really needed. Being able to track the entire event and still have 25% battery left is something an Apple Watch can’t do.
  • Shitty Craft running shell from 2012. I don’t have a link because this jacket is so old. It works though and weighs nothing compared to a shell jacket. Only used for the start when we got cold by sitting down waiting for it to begin.
  • Runescape Sponsor Battery Pack 10000 mAh. Saw a lot of people talking about the cool batteries that they had while I was cruising along with this shitty Runescape battery that they handed out at TwitchCon 2017. With that said, the battery itself was pretty sweet, a lot of juice for the gram and no fuzz with extra connectors. Powered us through the event.
  • Printed picture of my colleague that couldn’t attend.
  • Ibuprofen. Thought we wouldn’t need these but oh man you start consuming these like candy towards the end.
  • Caffeine pills. Taking one of these every 3 hours starting at 04.00 made the sleep deprivation less prevalent.
  • Offbrand plastic bottle. Mostly to fill with extra water at stops and consume before hitting the bladder.

Worn Clothing

  • Icebreaker Merino Cool Lite Top. Yeah this top did the job. It was sufficiently warm to hike in and dried fast enough.
  • Shitty Craft running boxers from 2012. Out of all the boxers I tried, these prevented chafing the most. I came through the entire event without any chafe which was a miracle.
  • Patagonia Quandary Shorts. Hiking shorts that I can recommend. Light and airy yet durable with a good fit.
  • Smartwool Run Ultra Light Micro Socks Running socks to keep feet cool.
  • Injinji Sock Liner. I don’t know about these actually. I removed them halfway through and it’s hard to say if it made any difference to the blisters.
  • Adidas Ultra Boost 18 Running Shoes. Ultra Boost makes walking on concrete feel like walking on melting ice cream. I attribute a lot of my less-broken legs to the cushion and padding in these shoes. If I had known it would rain as much as it did I would probably have gone for the TERREX series but these served the purpose well.
  • Houdini Power Wrist Gaiters My hands are always freezing but I don’t want to wear a jacket so this is the compromise.

Event day - THE BIG SUCK

Me and Conrad arrived at the race location at 19:30 as specified. We realized that this was a Jebait to get people to be in time for the 20:00 actual call time as the organizers started polling for teams at 20:00. After feeling a bit Jebaited we got checked in and had our bags checked out by the organizers. One of the organizers made a small remark on our UL backpacks which I had almost expected but it was fine all in all. I was starting to get really excited, mostly because this event was beyond anything that I had done prior. I have participated in running events of many sorts, geocaching events, cycling events, skiing etc but this is a unique event in so many ways that I did not know what to expect. In order to keep track of the participants, the participant is responsible for posting a picture of the team in front of the waypoint at every stop to Instagram.

start of the event

The event starts with the main organizer holding a small speech with a large American flag. I was a bit wary of this at first but the organizer had really had a good speech with this. I’m always afraid that people use these moments to steer towards racism but the organizer made strong points about encouraging diversity and equal value which I felt was really powerful to hear. I’m not American by any stretch but I could still stand behind the values the organizer expressed.

Starting speech

Once the clock hit 21:00 we were handed our hit list” of waypoints to walk to and take a photograph of. One thing that really struck me here is that you didn’t get any time prior to the event to make a route, rather the routing started as the event timer started meaning that you had to balance creating a route against your eagerness to walk. Me and Conrad shred through the list and added all the waypoints into RoadWarrior (an app dedicated to routing for waypoints). Since I’ve stayed in the city for a good time now I have a good local knowledge about the hills and the routes which helped us further optimize the route that RoadWarrior suggested. Once we had gone through the waypoints twice and talked through our approach we decided to hit the road and walk the path clockwise. This took us about 15 minutes, other teams spent longer and some just walked off and started routing while walking. I think we found a good balance, but it helps being a really fast typer on a smartphone. All my work emails on my smartphone paid off as I entered these coordinates at a very fast speed into the routing app.

Route

Unlike some other event reports I’m not going to annotate every stop, rather give an overall description about the experience throughout and pick out some stops. If you want to see all the waypoints” we hit, check out the event Instagram at /teamperryman.

Our event started out rough with us not being able to get a picture of SS Jeremiah, which was cleared up by communicating with the event support team through Instagram DMs (I will say, it’s such a weird way of running an event but it seems to work for them). After the initial hurdle our walk gets a good pace and we start talking to a team that we catch up with. We head over to Dragon Gate that’s 150 meters from our office, so no trouble finding this one for sure.

mid city

After Dragon Gate, our next stop is the ballpark down in Mission Bay. It’s not too bad of a walk but it includes backtracking the full route in order to hit the SF mint. In hindsight, hitting the mint first and then walking towards Dolores Park would probably have been a better idea but that would only have saved us a minimal amount of time. The good part about the route we took was that it kept elevation in the city to an almost zero compared to what SF have to offer, sparing our muscles for the hills yet to come.

Once we hit Dolores, my feet started to hurt a fair bit due to my shoes being tightened way too hard early on. I had my laces adjusted for running and walking for 3 hours really made my feet expand, something to consider for other times. After Dolores we found a place that sold pizza by the slice, which we took opportunity of.

shoes

We hit the famous Painted Ladies, met up with a 15 people participating from SFPD. They all seemed to be in a much rougher condition than us which I attribute to them having walked much faster to get there. I do think setting a solid pace that you know that you can keep for the entire event is more important than rushing out of the door and jogging early, only to drain everything you have.

Painted Ladies at night

We end up trailing these guys for a while, just because they happened to walk in front of us and that we needed to walk a bit slower due to my foot recovering from being laced too tight. This group ended up walking too slow for our taste and we decided to pass them at the next stop, which was the San Francisco Columbarium.

Walking Behind

From here on it started to get a lot tougher. We are about 5 hours into the event and the fog is really coming into San Francisco together with a light fog drizzle that makes everything wet, regardless of what direction or path you take. Heading up to the Mt. Davidson Cross was the first real brutal” part of the event, as the climb up there really got our pulse up.

Conrad uphilll

I thought that my shoes were RIP from all this mud and water but they actually sustained all of this pretty well until later stages of this.

RIP SHOES

From here on there was one more waypoint at a school staircase which was pretty easy as it was mostly downhill from the cross, after this waypoint we headed for our 3,5 hour long walk down to Pacifica where the Battery #244 waypoint awaited us. We figured that this would be a waypoint prior to the event due to the events always including one long stretch”. There really aren’t any interesting stretches if you aren’t passing the Golden Gate Bridge and I had a feeling that we wouldn’t do it. It was just too obvious to add a stretch over the bridge so my bet was that we were walking to Pacifica. This walk was sort of the make or break for this event. The battery would be our halfway point of the event, if we could hit this point then finishing would be a breeze as it would just be repeating the same distance again.

This walk was a long and really tested our pace, sustaining the pace for 3 hours without virtually any breaks at 3AM was though on us, especially when we hit Colma as it was just closed down industrial areas and shopping malls along the Interstate 280. Our goal was to hit Battery at around 0630 as Conrad’s SO would meet us sometime after 0700 with a resupply. Even if we didn’t end up taking much from the resupply, the fact that someone came to meet us helped a great deal with morale. If you are doing this event and have an opportunity to schedule a resupply from a friend, do it.

Once we hit Westborough in South San Francisco we see reflective bands bouncing in the distance. Seeing since it was 03:59 our bet was that this was other participants that we had caught up with and these guys were heading into a McDonalds. My feet started to hurt really bad at this point so we considered this also being a fantastic idea as the place had just opened and a warm coffee nice. The team we’d met up with was /dadbodssf, a team that we would up meeting on and off for the next 4 hours. Really nice group of people. They had an insane pace down to Pacifica but ended up slowing down after hitting the battery.

Dadsons

After leaving the McDonalds I proceed to switch socks and remove the sock liners. The weird part is that my right foot was completely fine but my left foot had multiple blisters that hurt beyond what I at that point thought was acceptable (little did I know…). I also applied some trail toes which helped alleviate the friction between the toes. Once this was done we proceeded to walk up the hill that leads into Pacifica. This is a long hill that leads on forever, passing over the mountains that separate Pacifica from the other part of the bay.

This point marks a significant change in the event, the sun was going up! Our headlamps started being less and less visible and the world around us became more clear as we headed down Westborough Boulevard into Pacifica and we met multiple teams that were heading up the hill as they were doing the path counter clockwise. This sort of felt like the half-way point” of the event and it was a blast to see other teams that also had made the long stretch.

Heading up the hill up onto Battery #244 we were greeted by Team Dadbodssf once again, they seemed less enthusiastic about the event at this point but morale was still high.

battery244

As I mentioned earlier, we had a supply car meeting us in Pacifica which was highly appreciated. Coffee was good and just being able to switch out a few things was a godsend. While supplying, team Dadbodssf passed us on the street behind and I waved hello to them. Marisa took this fantastic picture that symbolises the pain.

pain

People say that the event really starts at 30 miles (48 kilometers). We joked about it frequently during the early stages of the route, thinking that the event was easier than advertised and yeah I’ll admit that we were wrong about that. Around 30 miles for us meant hitting Skyline Drive which would take us out of Pacifica and this was really when the morale started going downhill. The elevation was brutal and the hill felt endless as the fog was so dense that you couldn’t see the end. With no end in sight we trudged Skyline Drive, meeting up with Dadbodssf once again. This time they looked truly broken and their pace was significantly slower than ours, which is how we caught up with them.

This was the hill that symbolised the make or break for me and Conrad. The last major” hill for the whole stretch, the following ones neither had the elevation nor the distance so this was it. The mental game really started happening at this point, our previously very talkative walk had turned into silence and no pictures were taken during this walk. It was truly an awful part of the walk where you had to be extremely stubborn in order to tell your body to keep walking. Sleep deprivation started to get real, as did the pain in my feet.

The event organizers had explicitly asked people to not walk along Skyline Boulevard so once we cleared up Skyline Drive we had to make a decision on how to clear this hurdle. There really isn’t a good way of walking once Northgate Avenue ends. Other teams told us that they had just walked Skyline Boulevard regardless but we didn’t feel for it. It just isn’t safe to walk there and being awake for that long makes your reaction speed go down a lot. We ended up crossing Skyline Boulevard onto the beach, walking along sand trails on the beach which hit our pace a lot but was the safe choice. At the end of this beach walk we had to regain a lot of altitude in order to get back up to the Nike Missile site. This part was the worst part of this entire walk, trudging up for these sand steps that had been destroyed by the rain, amassing a full beach inside your shoes while sweating insanity.

I only have a picture after we cleared the steps but my face says enough.

Stairs

Once up by the waypoint, I had to sit down to empty my shoes of the 1 ton of sand and regain some energy from the steps. We take a longer break here to reload, as this is the last part of the less urban section of the event. After this part we head back into the city to pick off the last 4 waypoints.

Guess which team that shows up? Dadbodssf once again, looking even more broken than before. You can tell that the Pacifica hill broke them as hard it did break us. Mile 30 had passed, the event had begun.

fixing toes

We’re walking into the Sunset district, discussing how scuffed we are. Conrad rates himself a 10 out of 10 on the scuffness scale and so do I. I am truly scuffed at this point, or so I believe. Remember earlier when I mentioned that I thought that the pain 3 hours was unbearable? This was a new record in any shape or form and I wished to have the pain I felt 3 hours back. This was no longer just uncomfortable but exhausting and draining. Every step felt like slamming a concrete brick on my foot. Luckily we had predicted this and increased the dose of Ibuprofen which took us to the fire station in the Sunset.

Since I live in Sunset I had an idea that it would be easier since the areas would be known. It ended up being the opposite, as I knew by heart exactly how long it was to where we had to walk next. It was starting to get really though at this point, as exhaustion started to set in and the day started to heat up. Walking during the night was easy as your excessive heat was fine in a colder climate. With temperatures starting to creep up to 25C during the day, the heat suddenly became harder to deal with. The Dutch Windmill was built in 1902 in order to irrigate the surrounding land using groundwater and served as a good waypoint for the bottom half of Golden Gate park.

Once there we met a team that just had dropped out. They had walked around 32 miles and had decided to not continue, as they had missed a lot of waypoints and just wouldn’t be able to finish in time. They told us that they had set out directly without mapping it out properly and as a result of that missed a lot of the vital routing that went into this event. It was a bit disheartening to see 3 guys that had walked for this long and realizing that they wouldn’t be able to finish it, but it also served as a motivation for us. We now knew that our route had been solid and that we had a good chance of finishing. They gave us encouraging words and offered up food, we took the words but left them with the food onto our 2 last waypoints of this escapade.

windmill

From here on we climb up to the Legion of Honor building in order to take a picture in front of a statue. This walk was actually fine, as walking uphill turned out to be much easier on the legs at this point than walking downhill. That together with knowing that this was one of the two remaining waypoints that we had for hit for this to be over. Easily done, we took a picture of the statue, sat down for a few minutes and headed out to the last waypoint.

At this point in time we stopped thinking about the event as distance walked or time passed and instead of how long do we have to go for this pain to be over”. This fueled us through a rage ruck along Lincoln Boulevard heading up to the Golden Gate Bridge. Conrad had to pop a blister which had gone to the point of him not being able to properly walk. Lincoln Boulevard flew by, I don’t even remember parts of it since I had come to the point where I had to fuel my body with inner rage for it to keep moving. I hated the event enough to keep walking.

Both me and Conrad got emotional at this point. Even if some of this was due to exhaustion, I still think it’s worth mentioning that while other events give you adrenaline kicks, this event gives you the knowledge that you are beating your own body with your mind. You are pushing yourself to a new low and succeeding at it, it’s an emotional moment as you discover the power that your self control has.

Once we came down to the Fort Point National Historic Site, we snapped the last picture at our last waypoint and just as this happens my left foot starts to hurt at an unreal level. One of the blisters has just turned on hyperpain and I hit a new low for this walk. This is peak scuffed, I thought I was scuffed earlier but this is what being scuffed really feels like. Conrad popped his blister, I decided that since we had about 55 minutes left until finish, Ibuprofen would have to solve for this issue until we could get there.

ggbridge

The last 55 minutes ended up being brutal for both me and Conrad. We both swore to each other to never do this event again as we limped along Marina Boulevard. The sun had come out and heat was really starting to pick up. On top of this we had to avoid the tons of tourists on bikes that seemed to almost wanted to bike straight into us.

Finally, Fort Mason comes into clear view, the last stretch is visible, we know the goal is less than 5 minutes away. Conrad turns on the YouTube clip Streets 1:12 on his mobile phone on a good volume, providing us with the final motivation to clear this event out. I got so much energy from hearing Ryan Lockwood annotate himself playing GoldenEye 64 that I decided to run the last part of the event up to the finish. Thank you Ryan and Marc Rutzou for the ENCOURAGING WORDS you gave yourself in this video, they really helped.

We clocked in at 17 hours and 34 minutes with 1700 meters of elevation climbed, beating our goal with 2 hours and 26 minutes and on top of that, we finished second place. When the organizer told us this I had a good WTF moment followed by a true OMEGALUL. Me and Conrad, never having done the event, using different gear from most other participants clocked in at second place, truly embracing the suck of this event.

finish

I want to end this writeup with two things. The first being to thank the organizers and Team Dadbodssf. It was truly a pleasure to be part of this, even if I’m never doing this again. Dadbodssf also felt like our sister team” during the walk, they were 2 people, had similar goals and similar pace. We exchanged a lot of encouraging words with these guys and we even ended up waiting for them at the finish before going home just because we wanted them to succeed.

The second is more a reflection on something that happened after the event. Once we got our bags and shoes off, they handed out a bunch of beers. I am not the one to say no to a cold beer after having walked for 17 hours and 34 minutes, so I happily accepted the beer and opened it without thinking much about it. It was a Budweiser. I can now confidently tell you that even after all this pain, with the intense hunger and thirst, Budweiser still tastes like shit. I couldn’t finish the beer and ended up switching it for a PBR, which was easier to handle. It truly speaks for how bad this beer is after this event, when I would rather have paid to not drink the beer than to drink it.

And to you that consider doing this event I have one recommendation.

Don’t

2019-07-29

Building a bar out of a 42U Rack

September 2018, two good friends are in my living room and we are discussing what weird project that would be interesting to undertake for ANDERSTORPSFESTIVALEN 4. We discussed a lot of ideas but one thing that stood out was highlighting the romance to the old internet. Back then every part about computers seemed impossible, modems and browsers was such a futuristic experience and the general gist at that time was that this technology would pave the way for a new form of communication. It eventually did, but lost behind was this excitement over technology. Today technology is almost transparent, people think about the applications rather than the technology and lost is the art of tuning a modem to achieve higher speeds over a phone wire.

What if we could capture some of our feelings from this time and create something to homage this era. This idea grew on us until we during a brief visit to one of the large tech companies saw a 42U rack laying on it’s side, remade into a bar. It was a rudimentary design and probably more thought of as a joke but it resonated with our group. We talked about it for the rest of the evening and ended up drawing a rudimentary design on paper.

paper

You probably can’t make anything out of this, but we essentially envisioned this rack resting on the back part instead of the side with one of the sides being cut out with a large piece of plexiglass. Inside would be filled with technology, alcohol and cabling supporting the idea. We distilled it down to being a hybrid physical bar with the innards being the actual inventory display. In the rack we would mount 2 x Cisco 2960 powering the festival network, a monitor for statistics and 2 x 56k modem in order to uplink data for this monitor (more about this later). The inventory display would be a tilted plane with fake ice that has color backlighting in order to create this diffuse light effect that would shine through and illuminate the bottles from behind. The back of the inside of the rack would be large UV painting done by Johanna supplemented by internal UV LED lighting in order to make the patterns stand out.

The problem with deciding on ideas like this is that everyone has their own variation of this concept in their head. During this project I started to understand why gaming companies have concept artists on payroll, as they are the people setting the actual tone and feeling of a visual design before artists implement this into the medium itself. Since this was starting to become and issue for us and discussions started looping around, I drew up a model in Cinema 4D and rendered out some concepts that we iterated on together until everyone was onboard with the concept

Cinema4D

This rendering is from the front and clearly shows most of the elements described above, the UV painting, fake ice, vertically mounted switches and 56k modems mounted on the switches.

bar1

bar2

bar4

So how does one go from these renderings into an actual physical build? The first part is to actually get hold of a 42U rack. Said and done, Alexander and Viktor manages to scrape up a rack that’s about to be thrown out of a server hall in Stockholm and drive this bad boy all the way down to Anderstorp in order to be stored until the build begins.

racky

A couple of months later, the build of Anderstorpsfestivalen 4 starts and we load this massive slug onto a trailer in order to bring it to the festival site. Remember that this thing weighs over 130 kilos so it is less of a fun experience carrying this around. It’s also not often you see a 42U rack loaded up with 20 cases of beer on a trailer.

loadup

Since we basically have to rebuild the rack from inside out in order to fit our specifications, we start with tearing down all the innards and throwing away all the pieces that won’t be needed for this project. 42U racks are designed to hold load while standing up, not laying down. This means that a lot of retrofitting has to be done in order to make sure that the structural integrity is still solid when 8 drunk people are leaning on this beast.

rack teardown

The next step is to mask all of the glass out in order to paint the outer and inner enclosure black. We decided early on that the 90s grey that the rack came in was a bit too much for us to handle in terms of surrounding design so covering this up was the first priority.

paint masking

While me, Alexander and Viktor was working on the hardware side of the rack, Johanna started paining the pieces that would fit inside of this rack and be illuminated by UV LEDs. Initially Johanna had sketched up these la croix” style patterns that would invoke feelings of bad 90s design but still be visually pleasing

lacroix

Once we got the plywood, Johanna ended up forgoing this design and focusing on filling in the natural wood instead. The plywood piece that we bought had these beautiful natural wood lines that could be traced with the neon colors to create a beautiful pattern.

painting

Since the drink inventory would be slanted, there would be room underneath to stash all technology to drive the Raspberry Pi’s and LEDs in order to power the dashboard, modems and landline phone project. The LEDs underneath the acrylic ice is a strip of APA102 powered by a Pixelblaze in order to facilitate easy animations. In the end we settled for slow moving color shifts between colors that worked with the neon colors.

together

Sadly we underestimated the amount of fake ice that would be needed to cover an area like this so we had to settle on centering the drink inventory. Due to this miscalculation of acrylic ice, there was room to add more UV paintings on the slanted area in order to fill out the visual negative that currently existed.

further

As I talked about last year, it’s really something to have these projects materialize in a physical form after thinking about them for so long. This particular project took a lot of slow burning thinking and group visualizing over voice chat which made it so complex to pull off. The end result, albeit not enough ice, was better than what I had imagined that we could pull off.

from top

people

2019-07-28

Kåsböle

Kåsböle

North of Umeå there is a small village by the name of Kåsböle”.

Kåsböle on Map

In order to get some peace and quiet after ANDERSTORPSFESTIVALEN I embarked on a long drive up there in order to meet an old friend. This is a friend that I wish that I could meet more often but due to distance and non-adjacent friend networks seldom do. The few days spent up there was a Swedish dream, everything was as of out of a tourist guide. Light all night, fantastic nature and a peace and calm that differs greatly from the stressed environment of San Francisco. Time feels less important when the surroundings move at a slower pace.

pic

pic

pic

pic

pic

2019-07-01 gradient
2019-06-14

Dazed & Blazed (Pixelcube Part 5)

Been a while since I wrote an update about this project. Lot has happened in life which is why this post has been postponed a bit. Traveled a lot for work and managed to catch the flu on one of these trips which had me spending a lot of time at home, playing RDR2.

Last post talked a bit about drilling but at that time I still hadn’t figured out how to fit all the electronics within the cube. One of the design goals is to have no visible wires except for the power/signal feed coming in at one of the sides. This means that all the power distribution has to happen inside the cube. Since the space and the AWG cable requirement is so high it was impossible to just do this the simple way. Everything has to fit in that tiny 3 way connector which meant that most of the connectors had to be perfectly flush with the 3D printed ends.

endcap

The blue outlined part representes the acrylic tube, meaning the inner diameter is about 31,5mm. Within this diameter, the aluminium profile, passthrough data cable, power cable and LED strip has to fit with junctions and soldering + the MOLEX connector that connects with the other tubes. In order to get this right i tapped the knowledge of 2 good friends who happened to be in San Francisco, Love and Pajlada once again spent a day with me to bounce ideas on how to build this.

lovepajlad

What we ended up deciding on was that the power rail cable would be crimped separately in the MOLEX connector, then there would be a soldered junction in parallel with the power rail that branched out to the LED strip from both directions in order to ensure that there would not be a voltage drop which causes less intensity. The signal passthrough would be fixated using hot glue to the aluminium angle.

Next up, the diffusion film that goes inside of the tubes had to be inserted. Since the diameter is 31,5mm and this film isn’t made to be rolled it was quite a challenge to insert this film without damaging it and creating crevasses in the film. What ended up working is using a round wooden stick on which the film was first rolled up onto, pushed into an acrylic tube and expanding onto it’s shape inside the acrylic tube. Since I once again went too far with my perfectionism I wanted the seem to be invisible, this however meant that the cut between the 2 rolls of film had to align perfectly, so cutting this had to be very exact. Luckily I had just the solution for this.

solution

It turns out you can use one of these plastic mats from IKEA designed for office chairs to not damage the floor as a cutting board, couple this with some 3D printed measurement brackets and a laser cut acrylic template, it was easy to cut these up and fit them into the tubes. You can see the nice effect that becomes when the diffusion is inside of the tubes rather than outside, as the acrylic tube creates a certain glossy depth.

glossy

soldering

Lots of time was spent soldering these together and fixating the LED strip onto the structural bracket. The neat thing about the bracket is that it reflects a lot of the light so the result is a very even light distribution. This picture also shows the passthrough and the exiting power cables from the rail in more clearly, this allowed the result to be very flush.

finishing

Finishing these up felt like a real milestone in this project. The only hardware part remaining now is the connector cables for the ends, which can be made very fast. From now on I need to focus more on getting the software up and running as that has been a bit on backburner due to me focusing on some other projects related to ANDERSTORPSFESTIVALEN.

My hope is to write 2 more updates about this cube in rapid succession, one about how the code has developed and one about the actual launch of this in July, see you then!