321 karma · joined July 8, 2014
Reading this essay was like kissing a person you didn’t know died six hours ago—you expect warmth, but instead, your vivid lips collide with a cold, bloodless, unresponsive substance.
This is tedious stuff. Not one hint of humor, no detectable pulse. Pedestrian truths expressed in the dullest possible language. Lifeless.
For an essay that starts with the question “What should an essay be?”, I hope not to read many more essays like this.
The fact that this boring essay is so popular here lowers my opinion of HN.
From a practical standpoint, it's a data source where people already have their data. People sign up for Glide and literally create their first app in minutes and it's ready to share. Much of this speed is due to the fact that their data is ready to go.
(The Glide app builder cannot be opened on mobile yet)
Our YouTube channel is probably the best source of info for now.
Comments are stored adjacent to the sheet in our real-time backend, and are associated with the sheet row via the Topic that you pick. Notes are stored in the sheet, so are not real-time.
Glide apps are first and foremost PWAs. We're rolling out shortlink support soon, so your app would be something like mycoolapp.glideapp.io. Android will prompt you to add the app to your homescreen, and on iOS we show a similar prompt. You can pay for a custom domain.
On our paid plan, we can export native builds for you to publish to app stores. Currently we have a React Native implementation of Glide that runs the app natively, rather than wrapped.
Yes, we are looking into streamlining the store publishing process in any way we can, and fastlane will come in handy. We've been surprised by how many users have been satisfied with PWAs so far, though.
As usual, quicktype will:
* Infer nice class and property names
* Generate convenient `fromJson` and `toJson` methods for top-level types, including top-level arrays and maps
* Deduplicate types inferred to be the same
* Detect enums and emit custom marshaling code for them
* Detect heterogeneous JSON data and emit sealed classes with custom marshaling code to keep your Kotlin typesafe
* Distinguish Map<String, *> from custom object types automatically using Markov chains
Thank you for taking a look!For example, given this Bitcoin API data:
{
"0000000000000000000e222e4e7afc29c49f6398783a94c846dee2e13c6408f5": {
"size": 969709,
"height": 510599,
"difficulty": 3007383866429.732,
"previous": "000000000000000000552a7783efd39eaa1c5ff6789e21a0bbe7547bc454fced"
},
"000000000000000000552a7783efd39eaa1c5ff6789e21a0bbe7547bc454fced": {
"size": 991394,
"height": 510598,
"difficulty": 3007383866429.732,
"previous": "00000000000000000043aba4c065d4d92aec529566287ebec5fe9010246c9589"
},
"00000000000000000043aba4c065d4d92aec529566287ebec5fe9010246c9589": {
"size": 990527,
"height": 510597,
"difficulty": 3007383866429.732,
"previous": "00000000000000000009025b9e95911a4dc050de129ea4eb5e40ef280751a0cb"
}
}
You'd expect the corresponding Swift code: typealias Blocks = [String: Block] // a.k.a. Dictionary<String, Block>
struct Block {
let size, height: Int
let difficulty: Double
let previous: String
}
Rather than: struct Blocks {
let _0000000000000000000e222e4e7afc29c49f6398783a94c846dee2e13c6408f5: Block
let _00000000000000000043aba4c065d4d92aec529566287ebec5fe9010246c9589: Block
let _00000000000000000009025b9e95911a4dc050de129ea4eb5e40ef280751a0cb: Block
}
struct Block {
let size, height: Int
let difficulty: Double
let previous: String
}
We taught quicktype to make the same decision by evaluating the JSON property names with a Markov chain trained on simulated class property names. Our blog article goes into detail and lets you play with our Markov chain!