← Home Subscribe About Archive Photos Replies Also on Micro.blog
  • After a clean macOS reinstall, running a web project using the canvas package (via react-pdf) failed with the following error:

    Cannot find module '../build/Release/canvas.node'
    

    Many occurrences online suggested that fixing this only required to reinstall the package but it turns out that in my case, a Python library was missing:

    ModuleNotFoundError: No module named 'distutils'
    

    It turns out what fixed the error was:

    pip install setuptools
    

    💻

    → 2:58 PM, May 14
  • Aujourd’hui, je vois des publicités pour Instagram où la plateforme prétend jouer un rôle dans la législation européenne sur l’accord parental pour les téléchargements sur l’App Store. Les potards de pompiers pyromanes sont à 11 chez Meta. 💻 × 🏛️

    → 11:57 AM, May 5
  • My tech blog is now located at https://mickf.net/tech/.

    For the last 15 years or so, I used the hostname bootstragram.com, but I grew tired of the name. It brings back stressful memories that make me clench my teeth. I prefer to consolidate all my online presence under mickf.net from now on. I have completed the most part of the redirection tasks and will finalize the details in the coming weeks.

    💻

    → 1:16 AM, May 3
  • I am not a frequent user of Instagram. I visit occasionally because some of my favorite people and places only post there. I noticed that the platform has shifted from square previews to rectangle previews. If I were a heavy user, this change would have driven me crazy. I remember how some people used to be creative with their posts, creating really cool feeds filled with square previews. Instagram threw away all that effort.

    Instagram users: it’s never too late to leave. Pixelfed — or Micro.blog — are very solid fediverse alternatives.

    💻

    → 7:17 PM, Mar 5
  • Here is my Year in Review from Letterboxd for 2024.

    I love Letterboxd and have been using it since 2012. It has improved continuously over time. I also appreciate their commitment to web standards. Just look at the RSS feed icon on any user’s diary! 🍿 × 💻

    → 10:39 PM, Jan 8
  • The trick that made Mickey Mouse famous: a fascinating video by Phil Edwards explains how optical sound technology contributed to the success of the first Mickey Mouse cartoon by achieving perfect sound synchronization. 🍿 × 💻

    → 11:10 AM, Jan 6
  • Mattt:

    op lets you manage 1Password from the command-line. (…) Its killer features is the op run subcommand, which can dynamically inject secrets from your 1Password vault into your application’s environment. Instead of storing sensitive values directly in your .env file, you reference them using special op:// URLs.

    Smart. Replacing secrets by references also means that backups are easier. I also wonder if we could define a URL scheme for keychain items URL instead of op to fetch secrets. 💻

    → 10:54 PM, Jan 5
  • I just realized that The Ringer has removed their RSS feed with the latest redesign. What a shame. I guess this is goodbye until this is fixed then. 🍿 × 💻

    → 5:30 PM, Jan 4
  • This fun little game helps you choose your favorite monospace font from 30 candidates. My winner was Hack. I have been using it since 2015 and will continue to do so. 💻

    → 4:15 PM, Dec 30
  • Spotify drives me crazy with its song shuffle functionality. For example, the Apple TV app does not include a shuffle option. Instead, it applies the shuffle setting from other versions of the app you may be using. This is quite maddening.

    My ideal shuffle behavior would be the following:

    1. Never defaulting to shuffle tracks for albums. I prefer to listen to complete albums in their intended order. Who doesn’t?
    2. Implementing a per-playlist shuffle setting. Some of my shorter playlists have a specific order, while I only use shuffle for the longer ones.

    🎵 × 💻

    → 2:35 PM, Dec 2
  • YouTube tends to transcribe “ChatGPT” as “Chachi BT”. Funny.

    When you search for “Chachi BT” on Google, there are so many results and pretty much all of them are indeed about ChatGPT. Meaning that no human edited the posts before publication to fix this typo even in titles, meta tags, etc. Scary.

    🍿× 💻

    → 10:17 AM, Nov 8
  • Notes for later.

    The State of React 2024 survey lists some tools for forms and data visualisation. Since some were unknown to me, I’ll list them all here.

    • Forms:
      • React Hook Form
      • react-jsonschema-form
      • Formik
      • @formily/core
      • React Final Form
      • Mantine Forms
      • Redux Form
    • Data Visualisation:
      • D3
      • Nivo
      • React-Vis
      • Recharts
      • Tremor
      • Victory
      • Visx
      • Chart.js
      • Highcharts

    💻

    → 12:02 PM, Nov 7
  • Many people of my RSS feeds recommended Panic’s Cabel Sasser talk at XOXO 2024:

    • Kottke: Best not to know anything going into it… just watch all the way to the end.
    • Daring Fireball: The less you know about this talk, the more you’ll enjoy watching it unfold. Just remarkably good. Trust me, watch it now, before anything about it is spoiled for you.
    • Pixel Envy: Seriously – watch first, then click.

    Watching it did not disappoint. 💻 × 🍿

    → 5:01 PM, Oct 20
  • Big thanks to Manton Reece for pointing me to this hilarious bit by John Mulaney about captchas.

    It’s now up there with Michael McIntyre’s sketch on passwords in the hall of fame of tech-related comedy. 💻 × 🍿

    → 12:18 PM, Oct 10
  • Naming things is quite famously one of the hardest problems in software development.

    When you realize there is a better name for something, it’s important to rename it, even if it’s tricky. Clear, accurate names improve the developer experience, while bad names make maintenance harder, slower, and riskier. Leaving sub-optimal names in a codebase is technical debt. 💻

    → 10:39 AM, Oct 9
  • A simple workflow for translation keys typed with TypeScript

    Since my web projects use typed translation keys, my work in progress would typically add unwanted TypeScript errors every time I added a new translation key, and that would annoy me a lot.

    So I wrote a little script that watches a temporary JSON translation file (as used by Lokalise) and merges it into all the translation files of the languages that are supported every time it changes.

    This way, once I am done with a feature, I can upload the new keys all at once in Lokalise’s upload tool. 💻

    → 5:45 PM, Sep 30
  • iA Presenter looks like a really nice app. Eager to give it a try. 💻

    → 7:03 PM, Sep 28
  • Oh, Slack, you sweet rebel. Why stick with standard Markdown when you can craft your very own, bespoke, buggy, half-working version? 🤦‍♂️ 💻

    → 6:53 PM, Sep 18
  • Slack is gradually moving away from finished software. Instead of refining the core features of a messaging platform (like proper Markdown support, for example), each new version adds features I neither need nor want, such as task lists and canvas. 💻

    → 3:53 PM, Sep 16
  • TIL I learned that 5000 and 6000 were not good options for ports for web development.

    • 5000 is now used by ControlCenter on macOS;
    • 6000 is blocked by Firefox because it is used by X11.

    💻

    → 6:31 PM, Sep 11
  • Apple Event 2024: Carbon Footprint of the iPhone 16 Series

    I recently watched the 2024 Apple Event, where they briefly discussed their efforts toward carbon neutrality by 2030. While the event touched on Apple’s sustainable packaging initiatives, their website provides more detailed information on the environmental impact of their products.

    Here’s what I found about the carbon footprint of the latest iPhones:

    • The iPhone 16 Pro Max 256 Go has a carbon footprint of 74 kg.
    • The iPhone 16 Plus 128 Go has a carbon footprint of 60 kg.

    Quite better than the Apple Vision Pro.

    If you’re interested in learning more about Apple’s progress toward sustainability and carbon neutrality, their website offers comprehensive details. It’s worth considering how these efforts align with their 2030 environmental goals.

    💻

    → 12:00 PM, Sep 10
  • How to Remove YouTube Controls from a Paused Video for Better Screenshots

    If you’ve ever tried to take a clean screenshot from a paused YouTube video, you’ve probably noticed the overlay controls and gradient at the bottom of the screen that get in the way. Fortunately, there’s a simple solution using JavaScript in the browser console:

    The steps to remove YouTube controls are:

    1. Pause the video at the frame you want to capture.
    2. Open the browser console (typically by pressing F12 or Ctrl + Shift + I).
    3. Run the following JavaScript code to remove the bottom gradient and control bar:
    document.querySelector(".ytp-gradient-bottom").remove()
    document.querySelector(".ytp-chrome-bottom").remove()
    

    After running this, the video controls and gradient will disappear, allowing you to take a clean screenshot of the paused video.

    💻

    → 11:06 AM, Sep 10
  • It’s impressive that Marques Brownlee and David Heinemeier Hansson have achieved high profiles in the tech community while also reaching international levels in sports—ultimate frisbee for Brownlee and car racing for Hansson. 💻

    → 8:55 AM, Sep 3
  • When I had to choose between Notion and Craft, I picked Craft mostly for its offline capabilities. I have been questioning my choice ever since, especially after Notion introduced databases. I felt confident it was time to switch but Craft just announced objects. I wonder if that will be enough to close the gap. Craft probation extended. 🖥️

    → 9:58 AM, Aug 7
  • I have been using Base to handle SQLite databases on macOS for as long as I can remember. Today it failed me for the 1st time in a long time. It has not been updated in 4 years, which is not a problem per se but shows that my issue won’t be fixed anytime soon. So I am on the market for a new SQLite app of choice.

    Trying Ducklet and Beekeeper Studio. 💻

    → 1:25 PM, Jul 22
  • Thoughts about the state of web tooling

    I spent some time yesterday evening with a starter template of Remix + Vite. Here are a few thoughts:

    • I couldn’t figure out how to import CSS. The Remix documentation referred to Vite’s, which was technology-agnostic and suggested that importing CSS should be straightforward. However, my attempts failed. When simple tasks become difficult, I understand the strange popularity of Tailwind.
    • Vercel has its own package to run Remix, leading Remix to remove their Vercel starter template from their repository. From an outside perspective, it seems ego battles are harming the developer experience.
    • Sass seems to be considered outdated compared to all the PostCSS options.

    I still believe the web is moving towards some consolidation among tools, but it’s very frustrating right now. 💻

    → 11:09 AM, May 30
  • Too many menu bar apps. They do not thrive with the MacBook Pro notch. We still need windows. 💻

    → 10:11 AM, May 7
  • The YouTube app on Apple TV is so frustrating to use. When opening a link from another app — such as the awesome Play — it will present the user profile selection screen first and then will lose context and present YouTube home screen. And ads seem much longer than on the browser. An alternative such as Juno on the Vision Pro that I read about would be awesome. 💻

    → 11:08 AM, Apr 3
  • Clicking “Trust & Enable” for every macro every time Xcode updates to latest package versions sucks. 💻

    → 6:44 PM, Apr 2
  • I wrote a Swift script to find iOS simulators identifiers. What I did over time explained here: bootstragram.com/blog/find… 💻

    → 8:06 PM, Mar 29
  • Got reminded of this awesome joke today.

    There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.

    💻

    → 7:14 PM, Mar 14
  • Un membre de ma famille m’a demandé d’inspecter un email annonçant une lettre recommandée électronique venant de AR24 pour savoir si c’était un message légitime ou un scam. Après 10 minutes d’investigation, il s’avère que c’est légitime mais c’est comme si La Poste, Docaposte et AR24 faisaient tout pour avoir l’air que ce soit l’œuvre de pirates. 🤦‍♂️💻

    → 9:57 AM, Mar 11
  • I am not a big fan of the latest iterations of Craft: global search results are harder to read, calendar/journal entries are harder to navigate in, and overall new features seem to focus on parts I have no interests in, rather than approaching Finished Software.

    Notion and Obsidian might get back on the table pretty soon. 💻

    → 4:28 PM, Feb 29
  • This Chores 2.0 demo fake app is obviously hilarious and could be life-changing. But my point about the Apple Vision Pro being still holds. 💻

    → 7:10 PM, Feb 6
  • How much the Apple Vision Pro costs… environmentally

    The carbon footprint of an Apple Vision Pro amounts to 335kg of greenhouse gas emissions, slightly higher than the 300kg emitted by the 16-inch MacBook Pro I currently use. This represents approximately 15% of a yearly emissions budget of 2 tons, or about 3% when depreciated over a 5-year period.

    As a programmer specializing in Apple technologies, I am naturally curious about the Apple Vision Pro. However, I have decided against purchasing one, not primarily due to financial constraints, but because I believe its environmental impact exceeds what is justifiable for a product that remains largely nonessential.

    For numerous reasons, I hope the Apple Vision Pro fails to gain traction. However, it seems unlikely. Therefore, I urge you to consider its environmental cost as seriously as its monetary expense before making a purchasing decision. Please aim to offset emissions elsewhere, just as you would seek to save money in other areas if you choose to acquire one.

    💻

    → 6:54 PM, Feb 6
  • I gave swift-openapi-generator a try to interact with Apple’s own App Store Connect API. The result was… unconvincing.

    1️⃣ Compile time of my CLI reached 19 minutes:

    [671/671] Linking mobile-cli
    Build complete! (1137.97s)
    

    2️⃣ The size of the CLI was 348M.

    3️⃣ The command I wrote crashed because the API returned values that were not included in the OpenAPI spec.

    Not a great 1st experience. 💻

    → 12:26 PM, Feb 1
  • Jekyll still has a pulse. Should I reconsider moving on? Probably not. Since Ruby is not as needed for iOS development as it used to (CocoaPods being replaced by SPM, fastlane being replaced by Xcode Cloud), it became my 3rd language. Soon to be 4th if I hold on to my resolution to learn Rust this year. I also found out about Astro, which is a good mix between Jekyll and going full on Remix. 💻

    → 5:38 PM, Jan 16
  • I just wrote my mission statement as a programmer. A little introspection never hurts. Especially when you find out you stand where you wanted to be. 💻

    → 3:44 PM, Jan 8
  • I iterated on my stupidly simple colour tool: write any colour hex code in the form field and the page will use it as a background colour. With shareable URL.

    At first I wanted to demo theoretical properly typed forms flows on a very simple form but when I realised I did not have much time, I made the scope smaller.

    But you know what? I love it. 🌈 💻

    → 12:45 PM, Jan 4
  • I just released version 0.2.0 of swift-blocks. It is a package of all the code I repeatedly use in all of my Swift projects. I love it. And maybe you will too. I also wrote a post to introduce it to the world. 💻

    → 12:37 PM, Dec 24
  • Johanna Stern interviews a guy who stole more than 300k$ from iPhone users through social engineering. TL;DR: Do not share your passcodes. Do not let people use your iPhone without supervision. I usually do that with 1 big exception: when I hand over my phone to my kids… and their babysitter. I wish iOS could provide a kids mode with an allow list or deny list of apps that are safe to use by anyone. 💻

    → 10:59 AM, Dec 21
  • Following up on Manton Reece’s default apps post, here’s my list for 2023:

    • 📨 Mail Client: Fastmail
    • 📮 Mail Server: Fastmail
    • 📝 Notes: Craft
    • ✅ To-Do: Things and GitHub
    • 📷 iPhone Photo Shooting: Apple Camera
    • 🌅 Photo Management: Apple Photos
    • 📆 Calendar: Apple Calendar
    • 📁 Cloud File Storage: iCloud
    • 📖 RSS: NetNewsWire and Feedbin
    • 🙍🏻‍♂️ Contacts: Apple Contacts
    • 🌐 Browser: Firefox Developer Edition (development) and Arc (everything else)
    • 💬 Chat: Messages and Slack
    • 🔖 Bookmarks: Crafts and my own Raycast plugin
    • 📑 Read It Later: Things and Craft
    • 📜 Word Processing: none
    • 📈 Spreadsheets: Google Sheets
    • 📊 Presentations: Keynote
    • 🛒 Shopping Lists: none
    • 🍴 Meal Planning: just started using Paprika
    • 💰 Budgeting and Personal Finance: YNAB
    • 📰 News: My RSS feeds, newsletters (mostly NYT and The Athletic) and some podcasts. This would deserve its own post.
    • 🎵 Music: Spotify
    • 🎙️ Podcasts: Overcast
    • 🔐 Password Management: 1Password
    • 🤖 Code Editing: Xcode and Visual Studio Code
    • 📚 Books: none
    • 🌎 Blogging: Micro.blog
    • 🗒️ Scratchpad: Drafts and Boop

    I added the Scratchpad category at the end. 💻

    → 12:49 PM, Nov 30
  • Great excerpt from Under the Radar, the podcast of David Smith & Marco Arment:

    And my family is very well trained at this point that if they see a bug happens in one of my apps, they must immediately drop everything and bring it to me because we all know the old adage “a bug in the hand is worth two in the report.”

    💻

    → 5:04 PM, Nov 20
  • I just posted a new post about software design: “Get rid of types you don’t control early: a lesson (re)learned”. Some Rolling Stones jokes included. 💻

    → 2:12 PM, Nov 10
  • remix.run/blog needs a RSS feed. https://github.com/remix-run/remix/discussions/7506 💻

    → 10:32 AM, Nov 3
  • I love open-source code, but when I come across something that needs improvement in an open-source repository, I sometimes hesitate to point it out because I don’t want to be seen as overly critical or ungrateful. However, I recently felt it was the right thing to do when I raised the issue that vapor-community/bcrypt may no longer be relevant in a somewhat positive manner. Most importantly, I want to express my gratitude to @[email protected] for their time and dedication to the Swift Server Workgroup. 💻

    → 3:44 PM, Oct 31
  • Bandcamp Schadenfreude. I was offered a deal to become an employee for Bandcamp back in 2011. Then the deal was off for reasons that didn’t make sense. Since then, I had mixed feelings: I liked the product as a listener, not so much as a musician, and I resent founders and managers from then — I know I shouldn’t but I do — and I am not sure they are genuinely nice people. 💻

    → 7:02 PM, Oct 21
  • I have a songbook GitHub project that contains chordpro files and creates my own PDF songbook. I geeked out a bit so that the PDF is generated by a GitHub action and uploaded to my new web home that I am slowly building brick by brick. You can see the final result on my Guitar Songbook page. 🎸💻

    → 12:45 PM, Oct 19
  • I used to love Evernote so much. I had to log in to access old content today, and it made me upset to see how bad of a product it is now. For instance, I could not find a way to see who were the people having access to a shared note. 💻

    → 5:57 PM, Oct 18
  • Renewal costs for .net domains on Gandi are going through the roof. Transferring to CloudFlare now. 💻

    → 12:32 PM, Oct 2
  • GitHub - aaronpk/Meetable: an event listing website

    I just found out this project by Aaron Parecki. I just moved to a new city and trying to find local events forced me to spend time on Facebook, which is the de facto solution for venues to advertise events. An alternative would be great so I love that Meetable exists. I know nothing from the tech stack though so not sure I could contribute or tune it for my needs if i was willing to invest time on it for a side-project. 💻

    → 6:30 PM, Sep 24
  • Celebrating the 200th pull request on my Statium monorepo. So much more gratifying for solo side-projects. 💻

    → 11:05 AM, Aug 29
  • Writing on the web post-Jekyll, Ghost edition

    Jekyll does not seem to do well. Despite being used by GitHub for GitHub pages, largely used plugins from the community — such as jekyll-assets, — are falling behind Jekyll 4 or the end of life of Ruby 2.

    Ghost has very convincing pros: it is easy, fast and beautiful. It also has everything one can need fully integrated when you just start publishing.

    But for a technical person such like me, who has an history of web publishing behind, it also has major cons:

    • MySQL over PostgreSQL. I already run a PostgreSQL DB. I don’t want to run another one;
    • All the built-ins (SEO, analytics) are lost when Ghost is used as a headless CMS;
    • Poor markdown support: line breaks are preserved in posts;
    • Lack of control over the HTML that is being produced;
    • No support of multiple websites for small publishers.

    As such, Ghost does not sound like a good CMS solution for me. To be continued. 💻

    → 3:24 PM, Aug 6
  • 👨‍💻 Yesterday, I pulled out my Sortmash iOS app code off dusty shelves as I needed to sort a large amount of data by order of preference — namely my Sorare cards 🤦‍♂️ — and it was a very fun experience. Exploring a pre-ARC Objective-C with embedded dependencies — TouchJSON and ASIHTTPRequest — felt like traveling in time, and made me so grateful of where we stand now. Making the code run again was surprisingly easy but visually very buggy since the code was from an era where iPhone and iPad had each a unique screen size.

    → 11:04 AM, Feb 22
  • RSS
  • JSON Feed
  • Micro.blog