Macross: One Day More
I saw this at Anime Expo in 2001 at the Anime Music Video Awards. It was in the Drama Category, but it was, for me, a bit of comedy as well. So epic.
I saw this at Anime Expo in 2001 at the Anime Music Video Awards. It was in the Drama Category, but it was, for me, a bit of comedy as well. So epic.
Offer elders to sit away from the aisle and closer to the wall. Maybe this is a subtle tactic to steer them away from being able to pay (see below).
Do not use your own chopsticks to grab things from communal dishes. Instead, use the communal chopsticks.
If you must use your own chopsticks to grab something from a communal plate for some reason (maybe there are no communal chopsticks or they haven’t come to the table yet), you can use the back side of your chopsticks since that side has not been in your filthy mouth yet.
If your teapot runs out of tea, you can take the lid and place it off to the side of the pot to signal to staff that you need a refill. If it’s a metal teapot, just keep the lid open.
If you’re at a place where they have staff pushing carts around, the cart person can be aggressive in getting you to accept something from their cart. If you’re unsure, they may say something like “It’s really good, you should try it!” Just a polite “no thank you” and/or a shake of the head is a good response.
Dim sum is not an all-you-can-eat buffet.
If you see others at the table, especially elders, who have empty tea cups, get the teapot and pour tea in their cup; and then, always lastly pour for yourself.
When someone pours tea for you, tap your index finger near your teacup to give thanks.
Eat the chicken feet.
If something’s too hard to grab with your chopsticks (it’s slippery or irregular shaped), sometimes it’s just easier to stab things with your chopsticks instead.
If there’s a lazy susan, don’t turn it if someone else is already turning it.
Fight to pay the check. Lose. Be upset that you lost.
The pro move is: going to the bathroom, paying the check on the way back, and making others upset that you paid without them knowing.
Take all the leftovers home: there’s no shame in it, and they make great leftovers. Wetter foods (like chicken feet, you got those, right?) should be in separate containers from dry foods (like buns).
On the one hand, this looks like a direct threat to us software engineers - because it means that the models can build effectively any piece of software you can define in this way.
Look a bit closer though and you’ll note that defining goals, providing unambiguous instructions, and figuring out the right tools… is kind of what software engineering is.
It takes a lot of experience and skill to do this well. If you can do it well, you’ve now got superpowers.
This helped me a little bit with my Deep Blue feelings: the realization that there’s still a lot of skill to be had in driving models that get this good.
Outlining that simply:
The smart home has reached a tipping point. Many of its early pioneers are aging out — a decade plus is a long time for a startup. Most have been bought by bigger companies, likely attracted by the shiny thing but then quickly dismayed by the bottom line. Back then, a cloud server was cheaper to build than a local hub, but servers continue to cost money, and once a company decides to shut down a product, reasons to keep paying fade rapidly.
Definitely for me a consideration when buying products, especially smart home products, is whether they can keep working even after the company shuts down.
Also, the same thoughts have crossed my mind when I was rebuilding Little Memory to 2.0. If a bus hit me today, would the app still keep working without me? I don’t want folks getting stranded without me and losing access to their diaries. For me, it’s a matter of respecting the user and their data.
Meta’s New A.I. Agent For Losers (via):
What do you mean you had your robot shop for collectible ceramics? Is there any other part of collecting ceramics as a hobby besides shopping for them? Is your hobby now “having bowls?” Hi, I’m Eli Tan, writer for the New York Times. In my leisure time I enjoy owning dishes.
As a flashlight nerd (aka collector), this spoke to me. Yeah, I own (a lot of) flashlights, but, yeah, shopping for, thinking about buying, or even impulse buying is most of the fun of collecting.
And this bit:
This is my life. These are the things that life consists of. There’s my work, there’s my hobbies, there’s my health, my future. All the big meaningful elements of life are just a collection of little tasks that you have to do one at a time.
Here are the names of colors in Cantonese.
| Color | English | Cantonese | Jyutping |
|---|---|---|---|
| Red | 紅色 | hung4 sik1 | |
| Orange | 橙色 | caang2 sik1 | |
| Yellow | 黃色 | wong4 sik1 | |
| Green | 綠色 | luk6 sik1 | |
| Blue | 藍色 | laam4 sik1 | |
| Purple | 紫色 | zi2 sik1 | |
| Pink | 粉紅色 | fan2 hung4 sik1 | |
| Brown | 啡色 | fe1 sik1 | |
| Grey | 灰色 | fui1 sik1 | |
| Black | 黑色 | hak1 sik1 | |
| White | 白色 | baak6 sik1 | |
| Gold | 金色 | gam1 sik1 | |
| Silver | 銀色 | ngan4 sik1 |
In April, I started inviting folks to test out Little Memory 2.0, a full re-write of the one-sentence-a-day journal I launched in 2011. I had most of the bones of the new app ready at that point, but, as most folks who develop software professionally know, the last 20% can often be the most tricky, difficult, and filled with unforeseen bugs.
I’ve generally felt uncomfortable storing people’s memories on my own servers. What if I got hit by a bus today? Someone would have to make sure the servers keep running so folks could keep reading and writing in their personal private journals. That’s definitely not something I’d want for myself or for Lil’memmers.
Not only that, but now that all your memories live on your phone, you can read/write offline, even without internet access. And it opens up the door for some exciting new features. I can’t wait to get 2.0 into people’s hands and start iterating on the app with some ideas I’ve had queued up for years.
A diary is about the most personal data an app can hold, and every app holding it is one breach, acquisition, or bad decision away from leaking that extremely sensitive and private data. With AI becoming more and more capable every day, the possibility of servers getting hacked grows. I’ve never used any Little Memory data for AI training, but even the possibility that your data could be read or used for training is something I would rather avoid.
With Little Memory 2.0, the iPhone app is offline-first. Memories are written and stored on the phone, you can keep a diary without an account, and your private and personal data stays in your control and in your phone rather than in the cloud.
Little Memory 2.0 is now live in the App Store with all the latest updates.
Longtime users: Your memories are ready to come home to your iPhone. Download the new app and import them to your device so you can read and write without needing to be online.
New users: Welcome! Write one sentence about your day in less than 15 seconds, and start seeing your memories come back to you.
I’m excited to share Little Memory 2.0 with you. It’s been a joy getting it ready for users, and I’ve been wanting to get it into people’s hands to make the meaningful experience of reflection and journaling even easier and more enjoyable.
I think you’re going to really like the new app, and please reach out if you have any feedback or find any issues.
I, too, have been concerned about the vertical tab bar on the iPhone Duo not having space for labels. But looks like tap and hold reveals them. Nice solution.
Around mid-2021, I’d started developing SwiftUI apps in a new way. I’d previously considered architectures like MVC, MVVM, VIPER, etc and many of them never felt right. I often found myself spending time considering where to put business logic. With SwiftUI, it wasn’t entirely clear where data-level changes should be taking place.
Most (or any?) business logic certainly shouldn’t be living in the views, but should I be building controllers to manage data? When I did that, I ended up struggling to define the boundaries of each controller. Dependencies would start to get messy, and I’d start getting circular dependencies across controllers that called each other. Controllers would start to get really big, especially for authentication, and I’d often struggle to quickly find code I was looking for.
Action?
In my work using React, the one-way data flow in Redux and how it handled actions was an idea that came to mind to try
to tame these large controllers I was noticing in my projects. I started with adding a simple struct in Swift that would work
like an action that a view or another action could call:
struct LoginAction {
let email: String
let password: String
func execute() async throws {
// ...
}
}
With a call site like:
let action = LoginAction(email: "...", password: "...")
try await action.execute()
I essentially pulled out each function from my controllers and now had them each as their own structure.
Having a dedicated struct for each action gave me some nice things:
execute() without exposing them to other actions, whereas if this were all part of a controller it would be less isolatedActionActions could be done within an execute like: otherAction.execute() (this gets even cooler later when we pass through RunContext)What about dependencies? In the case of this LoginAction, I’d have to bring in some sort of API to actually make an HTTP request and
execute that request.
ActionRunner and RunContext
struct ActionRunner: Sendable {
let runContext: RunContext
func run<A: RunnableAction>(_ action: A) async throws -> A.Output {
try await action.execute(in: runContext)
}
}
protocol RunnableAction: Sendable {
associatedtype Output
func execute(in context: RunContext) async throws -> Output
}
struct RunContext: Sendable {
let services: ApiServices
}
And then we update LoginAction to:
struct LoginAction: RunnableAction {
let email: String
let password: String
func execute(in context: RunContext) async throws -> LoginResult {
let service = context.services.account
let response = try await service.login(email: email, password: password)
// ...
}
}
An ActionRunner can be added to SwiftUI’s EnvironmentValues to make them easy to get from your views:
struct LoginView: View {
@Environment(\.actionRunner) private var runner
// ...
private func login() async {
do {
let loginAction = LoginAction(email: "...", password: "...")
self.loginResult = try await runner.run(loginAction)
} catch {
// ...
}
}
}
And this is how chaining would look now:
struct LoginAction: RunnableAction {
func execute(in context: RunContext) async throws -> LoginResult {
let service = context.services.account
let response = try await service.login(email: email, password: password)
let storeTokenAction = StoreTokenAction(token: response.token)
try await storeTokenAction.execute(in: context)
// ...
}
}
I ended up adding a helper function as an extension to RunnableAction:
extension RunnableAction {
func withAnalytics<Result>(_ event: AnalyticsEvent, _ perform: () async throws -> Result) async rethrows -> Result {
// ...
}
}
So we can call it in our Actions thusly:
struct LoginAction: RunnableAction {
let email: String
let password: String
func execute(in context: RunContext) async throws -> LoginResult {
let service = context.services.account
return try await withAnalytics(.login) {
let response = try await service.login(email: email, password: password)
// ...
}
}
}
I’ve been calling this the Action Runner Architecture. It’s served me well across multiple projects in offline-first apps, CoreData apps, API driven apps, and App Clips. I’ve codified it into its own package, and I continue to use it in my projects today.
There are still issues that are not yet fully addressed here:
ActionRunner for testing so that dependencies are stubbed in a testing RunContextActions in a single file, but I still need make decisions on where things goI found it interesting that Whatnot, in 2022, came up with a similar pattern that they show in their blog post: Reacting to Native: How we rebuilt a unicorn iOS app in 4 months.
Their example of their BookmarkLivestreamAction smells very similar to what I’ve done with my own pattern:
class BookmarkLivestreamAction {
// ...
func run(completion: @escaping FollowLivetreamRequestCompletionHandler) {
/// ...
}
}
A more modern implementation would likely use Swift’s structured concurrency rather than the escaped closure, and I prefer to make sure my actions don’t hold state, so mine are always structs.
As far as I know, TLF is the biggest German flashlight forum online, and possibly one of the biggest in any language. The epic beanshots thread is legendary.
Sad to see it’s shutting down.
Native is now the future of mobile at Shopify (via):
Native still means building and maintaining software on two platforms, that cost has not disappeared. What changed is that agents can now do enough of the implementation, translation, testing, and review work that it’s no longer the deciding factor it was in 2020.
React Native apps can be fast. Ours are. We are making this change because agents have reduced the advantages of sharing implementation, while the advantages of building for each platform remain. Native keeps us closer to platform capabilities and first-party tooling, with fewer framework and dependency layers between our code and the platform.
I’ve noted before that React Native can make more sense for larger teams that have more bandwidth for more testers and have expertise in React/JS tooling as well as native code/tooling, which helps manage the “write once, debug everywhere” problem. With smaller teams, I find that it’s harder to manage, as code changes can easily scatter bugs across platforms. And with React Native, you still need platform expertise, but now you need both native expertise and React Native expertise.
From their engineering blog, it also looks like they were bumping into issues managing code re-use between the React Native and native layers:
For the Shop App, this coincided with our next major React Native investment: adopting the New Architecture. That work would have required us to revisit native module integrations, rendering, and the boundaries between shared and platform-specific code.
I imagine some of the code re-use complications come from trying to build native widgets, extensions (looking at you, Notifcation Service Extension), and things like App Clips. It’s already complicated enough to manage and architect modules and shared code for a single platform (with varying platform versions too!): now think about having to consider how to do it across multiple platforms!
I was curious when the first use of the term “frontier model” came about and who coined it. It looks like it was originally defined in a joint research paper in July 2003: Frontier AI Regulation: Managing Emerging Risks to Public Safety:
For the purposes of this paper, we define “frontier AI models” as highly capable foundation models that could exhibit sufficiently dangerous capabilities. Such harms could take the form of significant physical harm or the disruption of key societal functions on a global scale, resulting from intentional misuse or accident. It would be prudent to assume that next-generation foundation models could possess advanced enough capabilities to qualify as frontier AI models, given both the difficulty of predicting when sufficiently dangerous capabilities will arise and the already significant capabilities of today’s models.
Though it is not clear where the line for “sufficiently dangerous capabilities” should be drawn, examples could include:
- Allowing a non-expert to design and synthesize new biological or chemical weapons.
- Producing and propagating highly persuasive, individually tailored, multi-modal disinformation with minimal user instruction.
- Harnessing unprecedented offensive cyber capabilities that could cause catastrophic harm.
- Evading human control through means of deception and obfuscation.
This list represents just a few salient possibilities; the possible future capabilities of frontier AI models remains an important area of inquiry.
By this, it seems like frontier models are by definition considered to be dangerous or maybe more accurately that they have the potential to be dangerous:
Our definition focuses on models that could — rather than just those that do — possess dangerous capabilities, as many of the practices we propose apply before it is known that a model has dangerous capabilities.
Here lies my old anime watched list that I used to update whenever I’d watch any episode of anime.
Looks like I stopped mid-2003, when I’d landed in Kyoto for my study abroad. I’ve since finished some series and started others, so this is kind of my little anime snapshot in time.
Repertoire [by date]:
If you showed up at Defcon and gave talk about how your autonomous malware did something unexpected and damaged someone else’s computers, the first question from the audience would be “Why are you so shit at making secure sandboxes?” It wouldn’t be “How are you so awesome at making hacking tools?”
America is built for driving. There’s hidden demand for something better.
44 percent of Americans — approaching half the country! — would rather live where homes are “smaller and closer to each other, but schools, stores and restaurants are within walking distance.”
That’s a lot more than I expected. But I wonder how that’s split between more rural and urban folks.
The National Association of Realtors (NAR), using a sample of 2,000 adults in the 50 largest US metro areas, 59 percent said they prefer “houses with small yards, and it is easy to walk to the places you need to go.” The remaining 41 percent would choose “houses with large yards, and you have to drive to the places where you need to go.”
I definitely am of the camp of wanting our lives to be more walkable. It gives us more opportunities to interact with one another and more chances to feel like a part of a community. Also, it doesn’t cost anything! (looks at gas prices at $6.29/gal right now)
John Gruber did a recent “1yr later” (or maybe a “where are they now”?) review of the iPhone Air and iPhone 17 Pro. I’ve gotta chime in with my experience with the 17 Pro. I’ve been on the iPhone Upgrade Program for years, and every year, after around the 1st week, I start noticing scratches build up on my screen. This time, that didn’t happen. And now, nearly 1yr into using the same phone: still no scratches. For me, this has been the most noticeable and worthwhile difference upgrading from the 16 Pro.
There is also something great in seeing an interface that grows with you, or one where you can say “I wonder if…” based on your prior interactions and expectations, and the interface actually rewarding you for that thought.
I can get pretty strict about the use of terms, symbols, and gestures in an app. This kind of discovery of features is what that kind of strictness and consistency allows for. I see it very similar to game design, where you teach the user the rules of your interactions and visual vocabulary, and once they’re in that world they know what to expect.
When I studied in Kyoto, I took a part time job at a chain sushi boat restaurant, Hakodate Ichiba (すし処 函館). My Japanese was good enough at the time such that they let me stand in front of the house and make nigiri sushi and yell out “いらっしゃいませ” and “マグロいかがでございますか?”
As part of my training, I practiced hand pressing rice for nigiri. I had to make 100 and 80 of them had to be within spec before they would allow me to start making nigiri for actual customers. Each one had to weigh 12.5g (+/- 0.5g) and my manager would check that the rice would not be pressed too hard (like mochi) or too loosely (it would fall apart). It took me a week for me to pass and start getting items onto the belt.
I’ll occasionally have a sushi party at home or at a friend’s place and get a chance to use these old skills again. The trickier bit for me is not knowing how to cut the fish, since that was done for me by other folks. But at least I’ve got my own tricks for making yummy sushi rice now.
Inspired by Kottke’s recent Emptying the Tabs, here’s my own dump from my own digital hoarding:
Understanding the Apple ][. Because, y’know… I might need to reference this later.
Douglas Adams on the English–American cultural divide over “heroes”:
You cannot make jokes about failure in the States. It’s like cancer, it just isn’t funny at any level. In England, though, for some reason it’s the thing we love most. So Arthur may not seem like much of a hero to Americans – he doesn’t have any stock options, he doesn’t have anything to exchange high fives about round the water-cooler. But to the English, he is a hero. Terrible things happen to him, he complains about it a bit quite articulately, so we can really feel it along with him - then calms down and has a cup of tea. My kind of guy!
Ah, good ol’ Arthur Dent. He was my kind of hero when I was growing up. Also, I’d love to give Blackbooks a good re-watch sometime.
Japan’s Dodo Land. A place to be annoyed, for those of us who love to be annoyed.
How Money Works. It leaves your wallet? What else do you need to know?
Inner Drumming. I’ve yet to have a chance to learn drumming, but this sounds like my kind of learning.
Why the open social web matters now. I mean, the Internet seems to be in decay, so maybe this posting on my blog is all for naught?
Adaptive Mixtures of Local Experts. Some light reading for when you want to dive in to how a Mixture of Experts (MoE) LLM model works, straight from the source. Been wrapping my head around MoE’s vs dense models.
Why did AMD just buy this REALLY WEIRD chip company? YouTube video discussing the acquisition of Taalas by AMD. Smells like positioning for local AI, and has hints of what folks were doing for making ASICs for crypto mining.
Why your local LLM feels dumber than it is.
Remote for OpenCode. Looks promising, and fancy way to handshake via iCloud, but doesn’t seem like it works yet outside of the local network. Maybe Tailscale is the right way forward?
Aging Brains Blend Memories Together Instead of Just Forgetting Them, Study Finds. Our context is just filled up, alright. Need to compact.
There’s more than this, but that’s it for now. I can least feel like I can close these tabs and come back to this list if I need to come back to them. Thank you for your attention to this matter.