James' Audiolog: Indie.am

James' Audiolog: Indie.am

Download on the App Store

James' Audiolog: Indie.am episodes

  • Arcade.gs using SQL.js http virtual filesystem (Static SQLite)
    Exploring the JS HTTP Virtual File System with Arcade Games Data

    In this follow-up to the JS HTTP virtual file system post, I experimented with a new website using a different data set. This time, I utilized a 10 MB data set of arcade games from the Internet Archive's Arcade project. The data is spread across flash games, categorized under titles and names, and comprises about 11,000 to 12,000 records in a SQLite database. Most of the data is indexed, and I built a view to test the performance.

    Performance Insights
    CDN Performance

    The CDN performance is outstanding, slightly faster than anything else I've deployed to any CDN I've used. This gives me a good idea of where the system excels and where it might fail. The website is impressively fast, featuring infinite pagination for each category. It loads 30 records at a time using normal paginated SQL queries like LIMIT and OFFSET, making the process almost instantaneous. On a fast internet connection, the loading indicator is practically invisible, with subsequent requests for additional pages taking only about 30-40 ms, which is imperceptible.

    Cold Start Challenge

    However, there's a significant cold start problem. The WebAssembly module must be loaded before the first request, taking anywhere from 900 ms to 1.5 seconds. The module is a 1.3 MB binary WebAssembly file containing the SQLite database driver. This delay can be hidden by using it as a feature, starting the download asynchronously when the webpage loads.

    Query Performance

    The initial query requires loading about 1.2 MB of the 10 MB database, but subsequent requests are extremely fast, often around 5-10 ms, likely due to caching. For instance, some requests come in at about 40-50 ms for 30 KB of data.

    User Experience

    When users land on the homepage, the initial cold start problem can be masked since it occurs asynchronously. The webpage loads in under a second, and the download of the WebAssembly file begins, taking about a second. As long as it takes users a couple of seconds to navigate to their desired category, the experience feels quick and seamless.

    Considerations for Larger Data Sets

    Optimizing further might not be feasible with a 10 MB data set. For larger data sets, the cold start problem can be hidden effectively. I considered how this approach might work for platforms like Netflix or HBO Max, where the entire public database of titles could be stored in a database, with URLs to images, descriptions, and titles.

    Memory Usage

    One trade-off is that the data gets cached, potentially consuming a significant amount of memory in JavaScript, equivalent to the entire database size. This could be an issue for platforms like webOS or lower-end Android devices, especially Amazon devices. However, higher-end devices like Apple TV could handle it, though implementing such technology might not be worth the effort due to the need to reinvent everything from scratch.

    Conclusion

    This technique allows deploying a website directly to a static CDN without worrying about a database server, while still providing the ability to query a SQL database in read-only mode. It's a neat solution with potential use cases, especially in data science for exploring data sets.

    9 min
  • Sql.js-httpvfs (Static SQLite) 5 months later
    Exploring SQL.js HTTP VFS: A Journey in Remote Database Querying

    I've been experimenting with SQL.js HTTP VFS for a few months now. Essentially, this is a SQLite engine compiled into WebAssembly that can run against a remote database. The intriguing part is that it implements a virtual file system and supports range requests.

    The Concept

    Imagine you have a gigabyte-sized SQL database stored in the cloud. As long as your server supports range requests, this setup allows you to fetch data one kilobyte at a time. This is similar to how SQLite would read a local database from the file system if configured to page with file reads of 1024 bytes. The exciting aspect is that if you index and organize your data efficiently, you could theoretically perform the same requests remotely from a browser to a SQL database on a CDN. This means your backend server wouldn't need to run a database instance.

    Initial Experiments

    In August, I spent a couple of weekends writing a possible analytics clone using SQL.js HTTP VFS. It was an interesting project, but I didn't delve deeply into it. The implementation cleared a lot of data, almost as if downloading the entire database, so it didn't thoroughly test the concept. However, it served as a valuable proof of concept.

    Rewriting and Optimization

    Fast forward to December, I decided to rewrite the project. I started with an injected log parser, ending up with a 300 MB log file, which I parsed into a roughly 300 MB SQLite database. This provided a substantial database to experiment with. The size required me to optimize log parsing and inserts, reducing the time to parse over 1.3 million rows to about 57 seconds. This included parsing IP addresses, country lookups, URLs, and user agents—all done locally without web requests.

    Querying Challenges

    Running queries on this indexed database locally resulted in approximately 13-second queries to group by pathname and count requests for the top 25 pages. This wasn't ideal, especially since I only loaded eight hours of data. In a production environment, the dataset would be much larger. Adding a few indexes significantly improved performance, reducing query times to 100-300 milliseconds.

    The Realization

    As I was about to implement the WebAssembly module to run everything remotely, I had a realization. What does this setup truly offer? While it allows for scaling the number of reads infinitely, it doesn't make much sense unless you're dealing with massive datasets that can't be pre-computed. For my use case, with only eight SQL queries to run, pre-computing on the server was more efficient.

    Conclusion

    This project was an intriguing exploration of a virtual file system over HTTP. While it was fun and educational, it didn't present a compelling use case for my needs. Unless you're dealing with scenarios where pre-computing data is impractical, the benefits of this approach are limited. Nonetheless, it was a fascinating experiment that expanded my understanding of remote database querying.

    8 min
  • AirPods Max
    AirPods Max: Day One Review

    I've been using the AirPods Pro pretty much since they came out, and they are probably my favorite pair of headphones ever. I've tried higher quality headphones, including some nice open-back ones, which I can appreciate for short listening sessions of an hour or less. If headphone jacks and wired headphones were still a realistic option, I would consider investing in a high-quality set to maximize audio quality. However, the AirPods Pro offer a great mix of features: fast wireless pairing, decent battery life, durability, portability, wireless charging, excellent noise cancellation, and perfect ergonomics around the touch controls. As I said, they are my favorite pair of headphones, even though there's a bit to be desired in audio quality. When compared to over-ear headphones, you can notice the difference.

    Testing the AirPods Max

    I tested the AirPods Max a few times in short, 10-minute sessions. Unfortunately, I wasn't as impressed as I hoped to be. They do deliver a better range than the Pros, especially over time, with lows and highs that are pretty much nonexistent on the Pros. However, after using them for a day, the ergonomics are just not up to par. The overall experience of using the Pros is a 10 out of 10, but the Max offers about 30% higher quality audio at the cost of losing a lot in other areas.

    Ergonomics and Usability

    The buttons on the AirPods Max are in a weird place, and the headphones don't fit well. They tend to move around, especially when I'm wearing glasses. I often have to remove the headphones to adjust my glasses, which is quite annoying. My ears also get hot and sweaty after an hour, so I have to take them off. Additionally, noise cancellation turns back on every time I start a listening session, and I can't find an option to fix that. It's a minor issue, but still inconvenient.

    Charging and Build

    I feel like a dinosaur with the lightning cable. When I lay the headphones flat, the metal bits bang against each other unless I position them askew, which feels odd. Perhaps a stand could solve this issue. The sound quality is significantly better, akin to a nice set of wired open-backs, maybe 20% better. However, I'd still rather sacrifice that 20% for the convenience of wireless headphones.

    Conclusion

    The entire experience of owning and using the AirPods Max doesn't feel as polished as the AirPods Pro. I'm going to give it a few more days, but I don't think this is going to work out.

    5 min
  • I broke my Amazon Account (not interesting)
    How I Broke My Amazon Account: A Tale of Two Addresses

    Managing multiple addresses on Amazon can be a tricky business, especially when your living situation requires a bit of creativity. Here's how I ended up breaking my Amazon account due to having separate addresses for living and package delivery.

    The Problem: Two Addresses

    I live in an apartment building that uses a service called Fetch. Fetch receives our packages on our behalf and hand-delivers them to our door. This service eliminates the need for package lockers, a mailroom, or dedicated staff. It works well, but it requires us to use an alternative address downtown for package deliveries.

    How Fetch Works

    Packages are shipped to the Fetch warehouse and then re-shipped three to four times a day to our apartment building. Someone from Fetch usually delivers them by van. This system generally functions smoothly.

    The Amazon Account Dilemma

    The complication arises when some packages need to be delivered to my actual home address, while others need to be routed to the Fetch address. This situation ended up breaking my Amazon account.

    The Customer Support Saga

    I spent about 45 minutes with Amazon customer support to resolve the issue. Here's what I learned: Amazon stores a separate default shipping address for each of its services, such as Fresh, Prime, and Subscribe & Save. However, when you visit the addresses tab, it only allows you to change your default address for Amazon Prime.

    The Address Tab Limitation

    The addresses tab shows which addresses are being used for services like Subscribe & Save or Fresh, but it doesn't let you change the default. To fix this, I had to create duplicate addresses and juggle them across the different services. It was a bit of a convoluted process, but eventually, I managed to set the addresses correctly.

    Conclusion

    After about 45 minutes of tinkering, I finally resolved the issue. For a while, my Amazon Fresh deliveries were going to the wrong address, but now everything is back on track. If you find yourself in a similar situation, be prepared for a bit of a hassle, but know that it can be fixed with some patience and creativity.

    3 min
  • Mario Kart Live: Home Circuit
    Myocart Live Home Circuit: A Delightful Innovation

    Myocart Live Home Circuit is easily one of the most delightful and creative products created in the last two years. It features a real-life Mario Kart with a camera attached, enabling augmented reality (AR) on the Nintendo Switch. While it might be slightly overpriced, with a manufacturer's suggested retail price (MSRP) of around $130—about half the price of a Nintendo console bundled with Mario Kart 8, the latest version of Mario Kart—it's a delightful concept.

    A Unique Experience

    I've been playing around with it for the past few days, and I managed to snag a super slick Black Friday deal, bringing the price down to about $20 after purchasing a bunch of Apple gift cards for something else I was planning to buy anyway. The product is polished to the last detail and works exceptionally well, although it has a limited shelf life.

    The kart drives around in circles in spaces like the kitchen island and the living room. Unfortunately, we don't have enough space to create many creative circuits. However, it's super quick and easy to get started with the light cardboard cut-out gates included with the game. The experience is incredibly realistic, almost identical to playing Mario Kart, the video game.

    Innovation Over Profit

    It's fascinating to consider companies green-lighting products that may not be profitable. While a limited run is possible, this isn't a project you green-light expecting it to become a cash cow. Instead, it's a project you approve because it's probably the most innovative and interesting thing Nintendo has done as a company since the launch of the Switch.

    Nintendo has essentially replicated the Mario Kart experience on a 1/25 scale with a little car you can race around your house. It's crazy! You can even have two players with two switches, remotely controlling two of these karts. It's a truly polished product.

    A Delightful User Experience

    When I think of a delightful user experience or first experience, Myocart Live Home Circuit is the one that comes to mind. It blows my mind that a game company could create something like this today.

    4 min
  • Should Reddit Clone Clubhouse?
    Should Reddit Clone Clubhouse?
    The Question

    Should Reddit clone Clubhouse? It's a question worth considering. Reddit is reportedly planning to integrate a Clubhouse-like feature into its mobile app. The hope is that this will boost user retention and increase mobile app usage. But will it work? Let's explore the arguments for and against this move.

    The Pro Argument
    Getting Ahead of the Trend

    Reddit should consider cloning Clubhouse because it's a new format that's gaining traction. By adopting it early, Reddit can prevent its users from jumping to alternative platforms that offer similar features. The format is particularly effective with large audiences, and Reddit, with its vast user base, could introduce a new type of interactive behavior within its already organized communities.

    Leveraging Existing Structures

    Reddit already has a discovery mechanism in place, and there's significant value in launching a new app feature that leverages this. By integrating a Clubhouse-like experience, Reddit could enhance the way users interact with topics they are passionate about.

    The Counter Argument
    Lack of User Demand

    There's no clear indication that Reddit users are clamoring for a Clubhouse-like experience. Historically, Reddit users have been quick to adopt new content formats, often before Reddit itself addresses these needs. For instance, when users wanted image hosting, they created Imgur, and it took Reddit years to catch up. The same pattern occurred with video content and chat features, with platforms like Discord filling the gaps.

    Asynchronous Nature of Reddit

    A significant challenge is that most Reddit content is asynchronous. Users consume content at their own pace, regardless of time zones, and it doesn't require simultaneous participation. In contrast, Clubhouse content is synchronous, requiring users to engage in real-time, which is not how Reddit typically operates.

    Resourceful Moderators

    Reddit moderators are known for their resourcefulness. If they wanted to host Clubhouse-style meetups, they would likely have already found ways to do so. The absence of widespread adoption of such tools suggests there's no organic demand for Clubhouse-like interactions within Reddit communities.

    Limited Applicability

    The only subreddit that currently resembles a Clubhouse format is AMA (Ask Me Anything). While integrating Clubhouse-style content creation into Reddit's mobile app could be fun, it's important to consider that Reddit users and moderators are adept at finding their own solutions to meet their needs.

    Conclusion

    If Reddit users truly desired to share content in a Clubhouse format, we would likely see posts across popular subreddits with links to upcoming Clubhouse rooms or Twitter Spaces. However, this isn't a common occurrence today. While the idea of integrating Clubhouse features into Reddit is intriguing, the contrarian viewpoint suggests that Reddit users will continue to find their own tools to fulfill their content creation desires.

    5 min
  • Pokémon brilliant diamond shining pearl
    Pokémon Brilliant Diamond and Shining Pearl: A Review

    Pokémon Brilliant Diamond and Shining Pearl have been well ported, and thankfully, they aren't plagued by bugs. The gameplay is smooth, but there are some notable issues that stand out.

    Faithful to a Fault

    One of the main criticisms is that the game feels too faithful to its original handheld version. This transition to a TV console hasn't been as seamless as one might hope. The biggest problem with many Pokémon games, including this one, is the lack of challenge. It's simply too easy.

    Tedious Interactions

    A specific issue with Brilliant Diamond and Shining Pearl is the excessive need to press the confirmation button. This repetition makes the game feel slow and cumbersome. The user interface and navigation through menus and dialogues are not as smooth as they should be, especially for a game of this caliber.

    Lackluster Design

    In terms of design, the gym layouts are uninspired, and the storyline fails to excite. Overall, the game lacks the thrilling elements that make a Pokémon game engaging.

    The Battle Experience

    The battle system is another area where the game falls short. Players often find themselves spamming the A and B buttons to rush through slow menus, loading screens, and battle introductions. This process is time-consuming and detracts from the overall experience.

    Conclusion

    In conclusion, while Pokémon Brilliant Diamond and Shining Pearl offer a faithful port of the original games, they suffer from several design and gameplay issues. The slow navigation and lack of engaging content make it feel lacking in the user experience department.

    2 min
  • Stadia’s product positioning is such a disappointment
    The Curious Case of Stadia: Potential and Pitfalls

    Stadia is a fascinating yet somewhat disappointing product from a consumer perspective. I've been exploring it through a free trial, and the performance is impressive. It offers 4K visuals with minimal input lag, all functioning seamlessly. With data centers located in Seattle—or perhaps Kirkland—it's no surprise that it works well.

    The Promise of Stadia

    Imagine pitching Stadia as the next generation of gaming. It could be marketed as an infinitely powerful game console, surpassing the capabilities of the PS5 or even a truckload of Xbox Ones, all instantly available and free to use. However, the current marketing strategy is to repurpose existing devices for gaming, which feels like a missed opportunity. They're not effectively highlighting the unique value or benefits of the product.

    The Marketing and Positioning Problem

    Stadia's marketing strategy seems to lack clarity. They're attempting to create their own versions of Game Pass or GeForce Now, but the positioning is unclear. This isn't just an issue for Stadia; similar services face the same challenge. Microsoft, for instance, doesn't want to undercut Xbox sales, and Nvidia benefits from hardware sales.

    The Current Messaging

    Here's the exact copy from Stadia's homepage: "Stadia turns the things you already own into portals to the biggest games. Try Stadia Pro free for one month, $9.99 a month after trial, cancel anytime." This messaging doesn't convey the true value of Stadia. It doesn't tell me that I can play games like Cyberpunk at higher quality settings than on any computer I own, or on a PS5, PS4, or Xbox One. Instead, it suggests that with a TV and a Chromecast, you can play games—missing the point entirely.

    The Confusion and Missed Opportunities

    The entire page neglects to mention that Stadia has a free tier, allowing users to play without a monthly fee or additional hardware. This oversight creates confusion. Stadia could be a cash cow if it adopted a business model similar to console hardware vendors, who lose money on hardware but recoup it through software sales. Google could control the marketplace, encouraging third-party games on Stadia, which should be straightforward given it's a cloud-based PC game platform.

    A Vision for Stadia's Future

    Imagine if Google allowed users to use any controller with any hardware, similar to how Game Pass Ultimate operates. They could potentially earn more from software sales than the $9.95 monthly fee from Pro users. This pricing model seems out of touch with the potential of the platform.

    The Competitive Landscape

    Game Pass Ultimate could be the Xbox One killer if Microsoft chooses to pivot. They could partner with Apple to bring Game Pass Ultimate to Apple TV, offering a smooth experience that competes with Google TV and Fire Stick. It seems like Microsoft's game to win if they're willing to make sacrifices.

    Google is the only player gaining new market share, while others like Nvidia aren't selling titles with GeForce Now subscriptions. The economics of server space may not work out positively for cutting-edge Nvidia hardware. Microsoft could capture more PC game sales from platforms like Steam and Epic by bolstering their own store.

    Conclusion

    Stadia represents a massive opportunity for Google, yet its current positioning is painfully inadequate. There's so much potential here, but the execution leaves much to be desired.

    This is me posting an audio log after a while. Cheers!

    8 min
  • Interesting FedEx issue
    The Curious Case of My Delayed TV Delivery

    My TV delivery saga began with an unexpected twist. The TV was supposed to arrive on time, but it reached Portland a day earlier than scheduled. This early arrival threw the FedEx status updates into disarray.

    The FedEx Status Confusion

    Initially, the status update was baffling. It claimed that the projected delivery date was "yesterday," which was clearly a mistake since it was already the third of the month. The update stated that the delivery had been changed from the fourth to the second—a date that had already passed.

    Stuck in a Pending State

    As the system tried to reconcile these errors, the delivery status got stuck in a pending state. It couldn't provide a new projected delivery date. Despite being in Washington, the package didn't make it onto a truck for delivery today.

    The Outcome

    While the delay is not a major issue, it certainly was an interesting experience. The TV will be delayed by another day, and I'm left waiting for the next update. Hopefully, it will be on a truck soon and arrive without further complications.

    2 min
  • Shameless copying (as a product designer)
    The Era of Shameless Cloning in Tech

    In recent years, we've witnessed a trend in the tech industry that raises eyebrows: the shameless cloning of successful products. It started with stories, then moved to Clubhouse, and now, it seems, Microsoft has joined the fray with its clone of Notion, named Loop.

    The Legality and Ethics of Cloning

    While such actions are technically legal or legally defensible, especially for a large company, this kind of cloning is something that didn't happen as blatantly in the past. We're not just talking about copying a few features here and there; we're seeing entire products being replicated, right down to font sizes, button placements, and color schemes.

    The Designer's Perspective

    As a designer, this trend feels unsettling. It's easy to label it as being in poor taste, and it certainly feels "dirty." However, I'm sure the legal teams have thoroughly vetted these actions to ensure they don't breach any monopoly laws. Despite this, it still feels inherently wrong.

    A New Norm?

    It's a strange time to be a designer. If this becomes the norm, can you imagine being on a team tasked with cloning a product? It's a bizarre concept and one that challenges the creative integrity of the industry.

    The question remains: Is this the future of product development, or will the industry push back against such practices? Only time will tell.

    2 min

About James' Audiolog: Indie.am

From the publisher's feed

Hey, I'm James, and welcome to my personal Audiolog. I mostly use this to share personal updates, via Indie.am. DM me for an invite!