• Checkin to Starbucks

    in Kanagawa, Japan
    チャγƒͺγ§γγŸγ€‚γƒ©γƒ³γƒη΅‚γ‚γ£γŸγ‚‰γ€εŸ·η­†γ γƒΌ
  • I've got streams being set properly for each category. The last bit is to clean up the content automatically and rewrite / swap out image tags. Particularly photos posted with Sunlit. Posts made with Sunlit are displayed as an <a> tag (which links to your original image with a "-scaled" suffix) and an <img> tag with a source that proxies through micro.blog.

    It also has an attachment of the second photo, which I am automatically inserting into the post.

    I need to extract all <a> tags, detect if their href attribute has a "-scaled" in it, and strip that. Then I can look in my database for that attachment entry in my db and rewrite the tag as a Tanzawa image insert. Shouldn't take too long. Maybe tomorrow.
  • There's light at the end of the tunnel. I can import all of my post content, including check meta-data, bookmark urls – everything. The only remaining tasks is to build a custom 404 handler that will redirect visits to the old Wordpress urls to their new Tanzawa permalinks and to use the configured Category -> Stream mapping record.
  • Checkin to Iida Farm (飯田牧場)

    in Fujisawa, Kanagawa, Japan
    Took the bike to get some fresh gelato πŸ˜‹
  • Checkin to Kinuta Park (η §ε…¬εœ’)

    in Tokyo, Tokyo, Japan
  • I’ve got all of my extractors written. Next up is actually importing the content. In my import I’m also going to automate cleaning up some of the markup.Β 

    • Removing link wrappers around images. I.e. images posted from Sunlit wrap all images with an a tag. I want to strip that.Β 
    • Rewriting all attachment links to their new Tanzawa permalink.
    • Rewriting all internal links to their new Tanzawa permalink.

    I have a few pages on blog. I’m not sure I want to support pages yet (at least not in such a free form). I could import them as posts, so the content moves over. But instead I think I’m going to move them to my wiki instead.
  • There's still a slog ahead for importing posts, but it seems manageable. I wrote a bunch of utility functions (with tests) to extract and normalize individual fields of data from a post.Β 

    The idea being, once I can extract the data easily, I should be able construct my records by simply calling each function (more or less).

    Migrating comments is going to be tricky as I only support webmentions in Tanzawa and not all comments on my blog originate from webmentions. I think I'll probably just not import comments/webmentions until after I migrate my blog to Tanzawa.
  • After a day-ish of trying to figure out a nice clean ( Javascript-less ) way to make a queue to import images, I decided to just forget the queue and let Tanzawa import images as fast as possible. The number of simultaneous requests seems to be limited by the browser anyways.

    The last thing I need to do is import individual post content. Maybe it's because I'm not building fun features, but this last Wordpress import feels like such a slog.
  • Checkin to Ootoya (ε€§ζˆΈε±‹)

    in Yokohama, Kanagawa, Japan
  • I made a fun hack for importing images. I'm using (part) of the Hotwire stack for the dynamic portions of Tanzawa. Most dynamic web applications today use client side rendering, which means the server sends a json data structure and your browser has code/templates/logic to instruct it how to turn it into html for display. Hotwire is "html over the wire", so all of your logic and rendering happens on the server and the browser just displays the result.

    APIs traditionally return JSON. The image import api I wrote about yesterday also returned json, because that's what apis do. I was thinking the Javascript I need to write to update the page after an element has been imported when it hit me – if each photo in the list is wrapped in a turbo-frame, my api can return html, and all of my logic and rendering is in one place on the server. Perfect!

    My plan was to then just write some Javascript that would traverse my list of images and call the api one by one. Then take the html response and replace the existing item.Β  But then I noticed that Turbo frames can have a source url i.e. I could put my import api url as the source for the frame and Turbo would automatically call it for me.

    Turbo also support lazy loading. Which means that it's not going to load the frame until it shows up on the page. Which means I can import all of my images by just scrolling down the page.

    So rather than have a bunch of Javascript to control a queue to make an api call to manually modify some html/css on the front end, I just have a list of images that you scroll down and each call is automatically made with the results are automatically updated on the page. Simple is best.
Previous 44 of 61 Next