1,577 karma · joined October 15, 2014
And the code used to generate it:
First some python to create a qr code from the link and output it as a json list of booleans:
import qrcode, json
code = qrcode.QRCode()
code.add_data('https://youtu.be/dQw4w9WgXcQ')
code.make()
json.dumps(code.modules)
Copy and paste the out into the browser console and assign it to a variable called `qr`. Then run the following code to generate and display the string in the viewer: (function(qr) {
let start = ' L L L L K L L L L K'
let draw = val => {$('.names').value = val; main() };
let decode = val => val.replaceAll('d','a ').replaceAll('r',' a ').replaceAll('u',' a ').replaceAll('l',' a');
let size = 4
let on = (s) => {
let ret = ''
let line = 'r'.repeat(s-1)+'l'.repeat(s-1)
for (let i=0; i<s-1; i++) ret += line + 'd';
ret += line
ret += 'u'.repeat(s-1)
return ret
}
let right_cell = (s) => 'r'.repeat(s)
let left_cell = (s) => 'l'.repeat(s)
let down_cell = (s) => 'd'.repeat(s)
// draw(decode(on(3)+next_cell(3)+on(3)+next_cell(3)+next_cell(3)+on(3)+next_cell(3)))
let str = start
for (line of qr) {
for (val of line) {
str += val ? (on(size) + right_cell(size)) : right_cell(size)
}
console.debug(`A ${left_cell(size).repeat(line.length)}, ${size}, ${line.length} line ${line}`)
str += left_cell(size).repeat(line.length)
str += down_cell(size)
}
console.log(str);
draw(decode(str))
})(qr)Why isn't the picture posted!
rules:
- "All strings must be quoted and are parsed identically to JSON strings"
- "true and false are the only boolean values"
- """multiline strings
are allowed"""
- """|
there can even be special multiline string types
to indicate things like "dedent every line and
trim the beginning and end lines if empty
"""
# Comments are allowed!
- Number syntax just like JSON
better_than_yaml: true
"a number with multiword key": 1e9
nesting:
present: true
difficult: false
It has the ease of coding of yaml, maps 1:1 with json (so can easily be re-serialized to json or yaml if needed), is familiar to folks who know yaml, and supports comments. And it eliminates ambiguous parses and gotchas, references, tags/directives, and other complexities.Since pricing is roughly proportional to response length (and maybe prompt length?), it seems like ChatGPT could use itself to determine if the search is a good fit or not. Give it a prompt like "I want to know if you are likely to generate more immediately useful and actionable results than my web search. The query I am searching is <query>. Should I run you on this query?"
I tried running that on some sample queries to see its output, and compiled its responses in this table (note the last one is incorrect in my opinion):
| Query | Yes or No |
|------------------------------------|-----------|
| "starbucks near me" | No |
| "twitter" | No |
| "python requests get json" | Yes |
| "peach and mango cocktail recipe" | Yes |
| "hn" | No |
| "image of versaille" | Yes |
Btw, incredibly, ChatGPT actually made that table for me when I said "Please compile all the queries I just asked you about into an ascii table, where the first column is my query, and the second column is your Yes or No answer." The table it printed was correct but formatted as an HTML table, so I asked it to put it in a code block and I got almost exactly what I pasted above (just had to remove two extraneous spaces that made the lines not line up)- decade
- century
- decagon
- centimeter
- decimal system
- decathlon
- centipede
edit: admittedly, hecto is pretty rare and centi is often used for both 1/100 and 100
Today, 100 InReach subscribers nets Garmin around $144/yr * 100 people = $14,400
If the InReach were free except for when activating the SOS, the SOS would have to cost $14,000 to make that same revenue from the same number of users. This would surely lead to more deaths due to folks waiting way longer to send an SOS.
Numbers are estimates but the order of magnitude shouldn't be too far off.
- insert A
- insert B
- insert C
And then I undo, I would expect to be be back at having AB. If I then undo, I would be undoing my undo and have ABC. Then undoing again would get me back to AB. And I remain in this 2-cycle.
Instead I propose the best solution is to be able to “step out” of the editing experience and see your history in a separate UI, and be able to choose a specific past version to revert to. This revert would be an atomic operation that could then be undone.
This is how most versioned consumer systems I know of work today (e.g. Google Docs, Figma, MS Office) and it feels intuitive to me as a user.