import SwiftUI | |
struct ChatGPTTextField: View { | |
// MARK: - State | |
/// State to hold our `TextField` query. | |
@State private var queryMessage: String = "" | |
/// Focus state for our `TextField`. |
This is a proposal for a "lure service".
While this can serve as the foundation for countless features, the primary goal is to solve the "boot into an empty landscape" problem. In other words, it's trying to close the loop of "one person uses Urbit" -> "they invite another to their group on Urbit" -> "they get on Urbit and immediately know what to do with it" -> "they invite another".
Thus, we will first consider the case of inviting someone into an Urbit group who may not already use Urbit.
Invites should be regular links. These work on any device, can be transmitted over any transport (including publicly in a tweet or physically via qr code), and are very low-friction to click. When you click this link, you should expect to receive an invite to that group.
To make this happen, we must somehow establish an association between the person who clicked the link and their @p. We should make this work for as many cases as possible -- especially, it should work even if they don't yet have a @p.
A blood black nothingness began to spin. | |
Began to spin. | |
Let's move on to system. | |
System. | |
Feel that in your body. |
console.log(1); | |
(_ => console.log(2))(); | |
eval('console.log(3);'); | |
console.log.call(null, 4); | |
console.log.apply(null, [5]); | |
new Function('console.log(6)')(); | |
Reflect.apply(console.log, null, [7]) | |
Reflect.construct(function(){console.log(8)}, []); | |
Function.prototype.apply.call(console.log, null, [9]); | |
Function.prototype.call.call(console.log, null, 10); |
I like (love ?) Keynote because it
- is a simple to use presentation software,
- is vector based (when zooming it just looks gorgeous)
- exports to powerpoint
If I could remove that last argument, I would, but the fact is that, as a consultant, the final document is almost always expected to be a powerpoint document. Don't ask me why, it is just so. I am fighting against it but I did not win the battle so far ...
https://gist.github.com/ljharb/58faf1cfcb4e6808f74aae4ef7944cff
While attempting to explain JavaScript's reduce
method on arrays, conceptually, I came up with the following - hopefully it's helpful; happy to tweak it if anyone has suggestions.
JavaScript Arrays have lots of built in methods on their prototype. Some of them mutate - ie, they change the underlying array in-place. Luckily, most of them do not - they instead return an entirely distinct array. Since arrays are conceptually a contiguous list of items, it helps code clarity and maintainability a lot to be able to operate on them in a "functional" way. (I'll also insist on referring to an array as a "list" - although in some languages, List
is a native data type, in JS and this post, I'm referring to the concept. Everywhere I use the word "list" you can assume I'm talking about a JS Array) This means, to perform a single operation on the list as a whole ("atomically"), and to return a new list - thus making it mu
Device/Platform | Typeface |
---|---|
iOS 9+, watchOS, tvOS, OS X 10.10+ | San Francisco |
iOS 1-8, OS X 10.9 | Helvetica Neue |
OS X 10.0-10.8 | Lucida Grande |
Android 5+, ChromeOS | Roboto |
Android 1-4 | Droid Sans |
Windows Phone, Windows Vista-10 | Segoe UI |
Windows XP | Tahoma |
Kindle Fire OS | Droid Sans |
"...Copernicus' aesthetic objections to [equants] provided one essential motive for his rejection of the Ptolemaic system...."
- Thomas Kuhn, The Copernican Revolution
"All of us had been trained by Kelly Johnson and believed fanatically in his insistence that an airplane that looked beautiful would fly the same way."
- Ben Rich, Skunk Works