• Reflecting on 35

    A birthday is just another day, but it’s a good opportunity to stop, reflect on the past year, and plan for the next year.

    Looking Back on 35

    Excluding the covid doldrums we’re all familiar with, 35 was a good year for me, both professionally and personally.

    • I (helped) launch two major (different) versions of some factory automation software at work.
    • I wrote an article in Japanese that was published in a real-life magazine.
    • Interviewed and got a dream job that'll let me have a meaningful impact on climate change.

    • Built and released my first project in years (Tanzawa).
    • Paid off my car note (6 year loan, paid off in 1.4).
    • Fully embraced that I'm an early riser and began prioritizing health.
    • Running more months of this year than previous years (though there's still been some big gaps, I'm hopeful).
    • Hit over 1 year of weekly The Week posts.
    • Dodged 'rona and got us vaccinated very early for our age group (less than a week after eligibility), which gave us full vaccination during delta.
    • Took two small overnight stays in Japan (Saitama last November, Yokohama less than a week ago)

    Looking Forward on 36

    Looking forward to 36, I'm not quite sure what to expect.

    Work-wise, since I'll be joining a new company in a few days I can't really list any specific goals. There's too many unknowns. But what I do hope is that I integrate to the team quickly, can share what I know, learn what I don't, and have a smooth work life while having an impact on climate change.

    • Go on a couple small family trips in Japan (covid allowing). I'd love to ride the Shinkansen with Leo.
    • Continue running and or cycling, but on a more regular basis, rain or shine. Ideally I want to do a couple of 5ks during the week and a longer run/ride on the weekend.
    • Reduce my non renewable energy usage (put solar panels on the house).
    • Build and release an electricity related side project.
    • Reduce my plastic usage / trash (this is difficult as it seems no matter what you buy in Japan, it's wrapped in at least one plastic bag). We throw out about 1 40L bag per week today, which seems like way too much. I'd love to get that down to 1 40L bag per every two weeks, or even per month.
    • Introduce Leo to his grandparents. Leo has only met my mom on my side of the family when she came to visit shortly after he was born. I'd like him to meet the rest of the family, so maybe a trip to the US once borders open up a bit more?

    I have no idea how many of these I'll be able to accomplish this year, but maybe writing them down like I have here will give me a fighting chance to remember and make progress these goals this year. 
  • Removing Social Media (from my phone)

     The past few months my Twitter usage has increased. Initially it was because there was a lot of "word of mouth" information about vaccine availability (and we got our jabs quite early thanks to Twitter). And then it was because it's a good way (perhaps the best way?) to tap into the foreigners in Japan "community".

    But lately, I've felt like Twitter's been sucking me down a hole and eating too much of my time. Especially in the mornings when I first wake up. It hits me with all of the injustice and crises in the world. And for no real benefit...

    YouTube tries to feed me nothing but political outrage. It's mostly unusable unless I'm directly linked to a video or subscribed to a channel. And while there's plenty to be outraged about, it's nothing new. I don't want to watch political outrage before bed. I want to watch documentaries about the good parts of society. Documentaries about coffee, art and, public transportation.

    Instagram feeds me mostly travel content and photos of bread. Honestly, mostly not bad. But I all I think about each time I open the app is that I'm helping feed Facebook and their success.

    I'm going to try what Cal Newport advises when trying to cut down on social: remove the apps and logout after each session to add friction to get started.

    So far I've deleted Instagram off my phone. I've logged out of Twitter and delete its app as well. YouTube gets a pass, but only as I use it to sling Simon to my TV for Leo.

    My hope is that I'll be able to reclaim the mental space taken by social media, slow down again, and start doing things that matter with that time.
  • Less Meat

    One of my recent quests in life is to reduce the amount of meat that I consume. There isn't a single reason why, but rather it feels like a manifestation of slow culmination of thoughts and beliefs.

    Whether it be literal less i.e. physically driving less or buying less junk or less in the sense of slow, the idea of less has always had an appeal to me. Better living with less. This thinking is counter to a lot of those I grew up around and was a constant source of conflict.

    Why now? Why meat? I can't give can exact reason for why now, other than, why not now? Why meat? The answer to that is more complex.

    Each burger we consume comes with a at least of costs baked in: the direct cost of a life of the animal and environmental (cutting down forest to make room for cows, shipping animals across an ocean to get processed in a foreign country, just to be shipped back to their origin for sale).

    The first is true no matter what. I'm mostly fine with that cost. It's the circle of life. I'm glad it's not me that has to do it. If it were, I'd probably be vegan. The second, the environmental costs, can be controlled, or at least managed by our consumption choices. Do we go for the cheap back of mince from the super center or do we go for the grass-fed  at Whole Foods?

    The Power of Defaults

    When I was in my teens I was massively overweight. I was well over 100kg and only 172cm. While 172cm hasn't changed, but I'm currently in the low 70's (still too high, but I digress). What made this possible wasn't exercise, but learning about the power of defaults.  

    If you can change your default, you can make substantial changes with significantly less effort. So if your goal is to lose weight, it's less work to reduce consumption rather than burn off excess calories consumed. By changing my default from burger, fries, and a coke to burger and a diet coke or just burger or maybe the chicken sandwich could shave off 600+ calories, which is at least an hours worth of running. And since it's just a default, if I really wanted fries or a coke that day, I could, but I had to make the decision.

    Likewise, I've changed my defaults for meat. As beef as it has a higher CO2 footprint per kilogram than pork or chicken, I mostly stopped buying beef and replace it with pork or chicken. Default changed to not beef. The other default I've been working on default: no meat.

    Changing Defaults

    My default breakfast has changed from toast with eggs, and maybe some sausage or bacon to toast with peanut butter and a banana. I can still eat an egg if I want, but I usually don't.

    Lunch is harder to default for me, but I've been defaulting to less or no meat dishes. I'll have some pasta (either a butter-soy-garlic Japanese style pasta, or a Naprotian (sans bacon as is traditional)), taco rice (with beans instead of meat or just little meat), or onigiri with a Japanese style omelette (tamago-yaki).

    Dinner still typically has some kind of meat or fish component, but it's no longer the main. It's used more like a spice. To replace the gap we've been increasing the variety of vegetables that we buy and eat in it's place.

    I don't have a particular goal of becoming vegetarian or vegan (though many creatives I respect are e.g. Moby, Casey Neistat etc..), but I may end up there.

    For now it's just a journey of exploring life with less meat. A life with less harm. A life with more veg. A life with different defaults.
  • Technology I Use

    Inspired by James, I'll chime in with the technology I use. Most of it is a few years old at best.

    Computer Setup

    My main computer is a mid-2014 15" Macbook Pro with a 2.8Ghz Intel i7 CPU, 16GB ram, and 512GB SSD hard drive. It got a fresh battery back in January so it should be good for another few more years.

    I do feel the limits of it occasionally, but not often. As it's been a while since I've gotten a new computer, I am getting the urge to replace or augment it. If I replace it outright, it would probably be with another Mac, Thinkpad, or a Frame.work.

    If I were to replace it with a desktop, it would probably be a used Mini PC coming off lease from some business. But since I mostly use my personal laptop from the kitchen table (not my home office), I'd need to remote into the desktop most of the time. But I'm not sure I'd do that.

    Home Server

    I have a 2012 MacMini with 16GB of ram acting as a home media server. I got it from my brother and the clips that hold the ram in are broken / missing (I have no idea how). So it's using a broken cd-r (as is how I received it) to create pressure to keep them in place.

    This server also runs mac OS and is hooked up to my ScanSnap and a Drobo with  14TB of storage. Since it redundant, only half is actually usable. As is, it'ss fairly under-utilized with just Plex and iTunes. Maybe spending time on r/SelfHosting could improve that. If I were to get a new Mini computer, it would likely be replacing both my laptop and my home server.

    Work Setup

    I've been working remotely / working from home for all but 2 years of the past decade. I've always kept my work setup separate from my home setup in that period. Currently my work computers are provided by my employer and they're generally the latest MacBookPro that's refreshed every 3 years.
    • Keyboard: Happy Hacking Lite2 USB with a US layout
    • Headphones: Airpods on mobile.  Sony MDR7506 Professional Large Diaphragm at my desk.
    • Mouse: Magic Trackpad and a random Microsoft Optical mouse
    • Webcam/Microphone: Built in. (I really should upgrade this)
    • Monitor: Dell U2720QM 27 inch 4K


    • Operating System: macOS Catalina at home, BigSur at work. Ubuntu on my servers.
    • Browsers: Firefox
    • Terminal: Terminal.app / iTerm2
    • Code Editor: PyCharm / emacs
    • Music: Plex / YouTube


    iPhone XR (Yellow, 64GB)


    Apple Watch (Series 5)

    Site Technology

    This site is powered by Tanzawa, an open source blogging engine I started building about a year ago. Tanzawa is built with Python/Django with a splashes of Javascript (Stimulus) for the maps. Mapping is powered by Leaflet.js.
  • Why I'm Joining Octopus Energy 🐙

    A bit over 4 years ago I moved back to Japan, without a stable job. I had been contracting for 3 or 4 years in the US, but a difference in time zones (GMT+9 vs GMT - 4) made that difficult to maintain. I had heard about a Python shop called BeProud and they were remote friendly.

    There weren't many remote friendly companies at the time in Japan, let alone companies that specialized in Python consulting. Being full-remote friendly signaled to me that they'd have a progressive company culture where I'd fit.

    It was a fun just over 4 years, my longest tenure to date. My co-workers were great, bosses nice, and the projects (mostly) fun. Work-life balance is taken seriously (I took 6-weeks of (paid) parental leave after my son was born without any issues – something that's still rare in Japan).

    If you can speak Japanese and sling Python, they're a great company filled with great people.

    So why leave?

    Climate change. Like many, for years I've worried about climate change. But I didn't know where to begin, beyond voting for people that take it seriously and reduce flights/driving where possible. But the challenge is bigger than any individual.

    The most important change society is going to need to make is is getting our emissions to net zero. As fast as we can. And the biggest leaver is changing how we power (⚡️) our society. Japan currently gets 69% of its electricity from fossil fuels. Any way I can help lower this number, beyond just changing my personal electricity, is something worth spending my time and effort doing.

    Per capita electricity from fossil fuels, nuclear, and renewables, 2020

    Like many, while I am worried about climate change and want to help, each time I looked for how I could get involved in non-superficial ways it either required engineering or chemistry expertise that I don't have or in the wrong location or some other  factor that didn't line up. Until now.

    Octopus Energy, one of Europe's largest investors in renewable energy, is a working to make a "green dent in the universe".  They do this in a number of ways:

    1. As an electricity provider, they offer dynamic tariffs that move with the wholesale price of electricity. Using data science and machine learning, they then help their customers take advantage of renewables by increasing electricity usage when there's an abundance of energy on the grid (which is usually when there's a lot of renewables producing  electricity) and reduce usage when there's less abundance (and usually dirtier, fossil fuels).
    2. They're generating their own green electricity that they put on the grid.
    3. They sell and service electric vehicles
    4. They're making green-Hydrogen as a service.

    The system that powers all of this is called Kraken and they're bringing it to the US, Australia, and Japan (in partnership with Tokyo Gas), allowing customers to take advantage of cheap green energy and reduce demand when it's mostly fossil fuels. 

    Starting in October, I'll  be working on the integrations that allow  Kraken to be used in Japan and helping de-carbonize Japan's electricity supply. Hopefully over the coming years this 69% will decrease.With any luck, my work will directly contribute to driving that number to 0% as quick as possible.

    While I'm sad to leave BeProud and co-workers I enjoyed working for and with, the opportunity to use my skills to fight climate change in a meaningful way is not one that I could pass up. To my new co-workers, I look forward to working together to make our green dent.
  • Two Memories About Trees

    Where I live in Yokohama we have some small forests that they've decided to turn into parks. There's some paths through them, they're nice. I'm not sure if they're "native" forests or not, but the patches of green are nice.

    Trees are something I've found myself become more of an advocate for as I've gotten older. We need more of them. Not just for the carbon capture features, but for the purely practical reasons: their shade helps cool us down and they clean the air. There's also some psychological benefits of seeing green, too.


    Growing up in southern California, our house was a typical post-war ranch style house. In the back we had 3 big lemon trees that produced more lemons that any person could consume. Out front the entire street was lined with tree.  Most houses didn't have trees in their yards because of these mature trees provided shade most of the day. It was great when you were playing outside, riding your bikes and skateboards.

    But these trees roots were deep and apparently starting to interfere with some plumbing. So the city decided to cut them all down. They replaced them with these young trees that looked like toothpicks in comparison.

    The difference in street temperature and the harshness of the light being outside was immediate. Without trees to filter the sun going outside your house you were blinded be the light. The rest of the neighborhood kept their trees, just ours became this hot barren wasteland.

    But it's been 20 years. Writing this post I looked at street view on Google maps to see what has changed. All of the trees on my street have gotten bigger and can provide enough shade for a single parked car. Except the one in front of my old house. It's still a twig (or more likely got replaced again). The city also seems to have found their way to the rest of the neighborhood as there's not much shade along the sidewalks anywhere anymore.


    One of my favorite summer treats were tips to Knotts Berry Farm, an amusement park.  The day before we'd go we'd visit the local Vons and pickup sub rolls, deli meats, and other sandwich fixin's. We take the van (a Ford Econoline). This van had 2.5 rows for seating: two seats up front, a bench in the back, and a single seat in the middle, giving you a nice open area around the sliding door.

    Knott's has multiple parking lots, but one of them was park-like and almost entirely covered in shade. We'd park there with a big cooler full of sandwich goods and drinks. During lunch we'd leave the park, enjoy the breeze, and have a nice picnic in the van. 

    Sometimes, even with the trees, it was a bit warm. On those days we'd have our "Texas coolers" (a cool/ice cool wet tea towel wrapped around our neck) help. Without those trees any picnic would have been hot and miserable.


    I don't really have a way to end this post. I just always think about trees and heat island effect more during summer and these two memories of growing up resurfaced themselves. 
  • Gathering Requirements for Native Crossposting in Tanzawa

    Ru made a feature request for Tanzawa to be able to syndicate / cross post from Tanzawa to other sites natively. I think it's a great idea and spent some time to collect my thoughts about what that could look like.

    My thoughts were posted on GitHub, but I'm copying them here so I always have a copy and in case people who read my blog but don't follow  the Tanzawa GitHub have any input.


    Agreed – being able to syndicate content directly from Tanzawa would be ideal. All syndication is currently manual (it doesn't hurt enough to automate it, yet).

    Base Thoughts 

    If we can figure out what the workflow would look like, I think we can define some base requirements for the feature. A couple of general thoughts about syndication:

    • I don't think posting should be syndicated automatically on publish. There's a couple of reasons for this: 
      • Tanzawa doesn't support any kind of background tasks. Posts that have a bunch of links take a while to complete it tries to send webmentions. Adding more external requests could increase the response time to longer than the request timeout allows quite easily. This is especially true because webmentions require 2 requests per save (before content update and after content update). We could probably process webmentions concurrently to speed this up, but that feels like a bit much at this point? It may be easy with asyncio, but I'd need to research it.
      • When I was posting with Wordpress there was a syndication checkbox (via brid.gy) and found it you'd get errors if you saved twice as the post had already been syndicated. Because there also wasn't a preview, it was always a bit of a gamble for how it would post.
    • Syndication is a separate concern from authoring posts themselves. And as such warrants dedicated screens to make it _right_.  Initially I had thought it might work well to handle syndication via a modal on the edit post page, but the more I think about it, it would box us in.
    • Brid.gy is still super handy for backfeeding likes/replies as webmentions. I still think brid.gy is useful / "required" unless we were to build in some kind of polling mechanism, which is difficult without support for cron/background tasks. ( It could be done "easily" with a django management command, I'm hesitant to introduce undue complexity).
    • "Syndication" feels a bit jargony to me. Is "Cross post" (or something similar)  a better term to use in the interface?
    • Each syndication destination is going to require some kind of settings (API keys, mostly). These can / should be managed via the Django admin?


    Create of  Syndication/Cross Posts

    This is assuming that all syndication can be handled with the same form.

    • Creating a new syndication would happen from the edit post button. The button should be on the meta menu (on the right), below the publish  buttons and only display once the post is published (you can't syndicate a draft).
    • Clicking this button would take you to dedicated syndication page.
    • The top of the page would be a form. The form would display the syndication text and up to 4 photos (with the caption).

      The syndication text is free text and pre-filled with either the post title + link or the first 280 chars of the note. Above the text field itself would be a segmented control (tabs? radio button?) that when clicked would let you toggle between the different presets.

      You may not want to syndicate each photo, so perhaps a checkbox is warranted to let you select which photos will be sent.
    • Finally at the bottom there's some checkboxes for which networks to syndicate to. As you can only syndicate a post once per network, posts that have already been syndicated to would be disabled with text explaining that you've already syndicated to that network for this post.
    • Once syndicated they'd store the url of the syndication and create a TSyndication record.

    Syndication List

    I think we'd want a separate section for syndication, like we do with "Posts / Files" on the left for syndications / cross posts. 

    Clicking that would show you a list of your most recent syndication activity ( syndication destination (link to twitter etc..), syndicated text, link to the related post). 

    Selecting a crosspost would show you a (readonly?) version of the syndication Create form.


    Does that sound about right? Anything you'd change or we should consider (especially regards to Mastodon,  I don't have an account/haven't used it before).
  • Writing Professionally in a Second Language

    I just finished an article that will be published in this month's Web+DB Press magazine, a monthly web-related programming magazine in Japan. The entire magazine, including my article, is in Japanese. I want to reflect on the process of writing professionally in a second language and contrast this with my first experience when writing the 2nd chapter of Professional Python Programming 3rd edition (PyPro3).

    Picking a Topic

    Unless you're writing for yourself, the general topic is going to be decided for you. The company I work for writes regularly for Web+DB Press. GraphQL's been gaining popularity lately, and since I've built a few projects with it, a co-worker asked if I was interested in writing an article about GraphQL. Remembering how difficult it was to write PyPro3, I was a bit hesitant at first, but thought it'd be a good test to see how much my Japanese had I'd improved over the years. I also wanted share what I'd learned building GraphQL APIs with Django.


    Outlining is the process where you set the scope and decide in in more detail what you want to write about and the general order that you'll write. Before you can start outlining you need to first decide roughly how long of an article you want to write. The length of a magazine article is often decided for you, so it's mostly a matter of figuring out what you can fit into the allocated space.

    My outline was fairly basic, just a bullet list to help guide me along as I wrote and the base idea for what we'd build in the article.


    Writing in your first language is difficult enough. Writing in a second language maintains the challenges of writing in your first, but also adds an extra layer on top. Not all idioms or expressions in your native language can be expressed in eloquently or in a similar manner in a different language.

    Having a solid outline of what you're going to write about, including the order and main points you want to cover makes writing much easier. This applies to writing in your first language as well, but it's doubly important in a second language.

    When writing PyPro3, I could write and speak Japanese, but writing a narrative piece was difficult. Many of the words I was using weren't quite yet internalized and reading what I wrote 5 minutes prior was a challenge. So I ended up writing the gist of what I wanted to say in English, and then translating it as best as I could before a native speaker cleaned it up for me.

    This time around, 3 years later, my outline was in Japanese and I didn't write any of the article in English first and then translate. Writing was a lot quicker too as I had become used to explaining code and what it's doing from work. I made the quickest progress when I was focusing on writing for a specific co-worker and explaining GraphQL to them.


    Editing in a second language is difficult. I won't say I'm useless, but I don't have that feeling when something sounds "off" like I do with English. Without that sense, it was difficult to know exactly how to fix feedback from internal reviews and the editor at the magazine.

    The actual process of editing this time around was much easier, however. A co-worker and I would pair edit, where I'd pull up the document on my screen via Zoom and we'd work through the comments together. This made it much easier to ask for advice or for clarification or a second opinion. 

    Beyond not having a native feel for the language, skimming is also much more difficult. This makes finding the paragraph a particular comment is referencing a bit slow. I got better as I practiced, but I also found that copying a snippet of the comment and using the Find feature of my editor helped immensely. 


    Good writing in any language requires clear thinking and proper planning. Being able to stay in the same language for planning, drafting, and editing makes the entire process much easier. Having native speakers check and edit your work  allows you to gain a better understanding of your second language, not only at the grammatical level, but with sentence patterns and flow as well.

    I'm grateful to have been given the opportunity to be published, especially in my non-native language and hope I'll have another chance in the future.
  • 🏔Tanzawa is Public 🎉

    Over the past few months I've been talking about the release of Tanzawa. And over these few months I keep on building up what the first release needs to be in my head. It must: 

    • not have any bugs
    • be easy to use
    • have proper documentation for getting started

    and so on and so forth. I keep on finding new things to add or fix that are "must haves" and so I keep on finding reasons to delay the release. And it's slowly been adding a bit of self-induced stress.

    No more.

    Tanzawa is now open source. It lives on GitHub at jamesvandyne/tanzawa. It has bugs. It has a bunch of edges rough enough to cut you. It has zero documentation for how to install and use it.

    But I'll address them overtime. And eventually, someday,  it will reach my vision of being a simple and sustainable  home on the web.

    If you need help or have questions or want to lend a hand: reply here, ping me on twitter @jamesvandyne, or open an issue.

    Tanzawa is public
  • Picking a License for Tanzawa

    As Tanzawa is getting closer to being something I can release for other people to use, I've been trying to decide on the best license for it and my goals for the project. The most likely scenario is that Tanzawa will only power my blog or a handful of blogs and that I'll be the only regular contributor. I'd love to be proven wrong, though 😀.

    My main goal for Tanzawa is to provide a system that slightly-technical folks can use to create their own home online. My secondary goal is to explore low-resource computing and using Tanzawa as my proving ground. If I can find a model that would allow me to build a revenue stream around Tanzawa, that would be great, but it's not a primary focus.

    I've considered all of the main open source licenses: Apache, AGPL, MIT, and BSD-3.  Each license is appealing to me for different ideological reasons. 

    Before researching licenses a bit, I had thought I would pick the AGPL. I really like changes would need to be released to the community. Wordpress uses the GPL, too. 

    But then I started thinking about the possibility of building software around Tanzawa to support paid hosting for Tanzawa blogs. This bit wouldn't be open source and it may require some custom hooks into Tanzawa. Picking the AGPL would lock me in needing to release these changes. Being the original author, I could just dual license it to myself, but it gets a bit murkier if anyone contributes to the project.

    I considered the MIT and BSD licenses together. BSD is basically public-domain in my mind. You're free to use Tanzawa how you please and keep all your changes to yourself. I'm not entirely opposed to this, and I'm sure it happens in reality with GPLed code. This said if someone uses Tanzawa to build something, I'd like them to acknowledge that what they've built is built on Tanzawa.  While I think scenario is a low probability, it's not zero.

    The last license I considered is the Apache license. What sets it apart from other licenses is its stance on software patents. Basically is someone contributes to Tanzawa and then sues me (again, low probability), they lose their right to use the software. But not being able to be sued gives me a piece of mind I can't get with the other licenses.

    Now to merge license files into the repository.
Previous 3 of 5 Next