ByteCode.News
Submit RSS Atom Sign in

Back to the channels

#nevet

  1. dreamreal 16000=the number of concurrent threads Quest wants.
  2. nevet ok, dreamreal: updated 16000.
  3. dreamreal 42=the answer to life, the universe, and everything.
  4. nevet ok, dreamreal: updated 42.
  5. dreamreal acceptance test=<reply>Acceptance tests are often an integration test that covers multiple architectural boundaries, and covers a system requirement: \"can register a user\" might involve a web page for presentation, a serverside controller for handling data from the web page, and a database for storing the data, along with anything else involved; it covers performance, UX, and UI acceptance too.
  6. nevet ok, dreamreal: updated acceptance test.
  7. dreamreal advice=<reply>Advice outside of context is just dogma - and even WITH context, it's just advice. Follow what works for you. Good luck out there!
  8. nevet ok, dreamreal: updated advice.
  9. dreamreal idea
  10. nevet IDEA is one of the "big two" Java IDEs, and probably the most popular of them. Has a free and commercial edition, and has capability to work for many, many, MANY languages. URL: https://jetbrains.com/idea See also: ide and ~eclipse
  11. dreamreal idea.seealso.forget
  12. dreamreal forget idea.seealso
  13. nevet ok, forgot seealso on idea.
  14. dreamreal idea.tag=ide
  15. nevet ok, dreamreal: updated idea.
  16. dreamreal idea
  17. nevet IDEA is one of the "big two" Java IDEs, and probably the most popular of them. Has a free and commercial edition, and has capability to work for many, many, MANY languages. URL: https://jetbrains.com/idea Tag: ide
  18. dreamreal forget eclipse.seealso
  19. nevet ok, forgot seealso on eclipse.
  20. dreamreal eclipse.tag=ide
  21. nevet ok, dreamreal: updated eclipse.
  22. dreamreal netbeans
  23. nevet netbeans is generally the redheaded stepchild of IDEs for Java, now managed by apache since no-one else was willing to adopt it. Capable but an also-ran. URL: https://netbeans.apache.org/ See also: ide, ~eclipse, and ~idea
  24. dreamreal forget netbeans.seealso
  25. nevet ok, forgot seealso on netbeans.
  26. dreamreal netbeans.tag=ide
  27. nevet ok, dreamreal: updated netbeans.
  28. dreamreal ide
  29. dreamreal search ide
  30. nevet Search for 'ide' matched: ~acceptance test, ~advice, ~eclipse, ~glot.io, ~idea, ~ideone, ~jwz idea, ~jwz java, ~netbeans, ~pep 3, and ~sowa
  31. dreamreal ide=<reply>IDE stands for "Integrated Development Environment," a tool that manages entire development lifecycles and typically provides services like code completion, build invocation, test invocation, debugging, and much, much more.
  32. nevet ok, dreamreal: updated ide.
  33. dreamreal ide
  34. nevet IDE stands for "Integrated Development Environment," a tool that manages entire development lifecycles and typically provides services like code completion, build invocation, test invocation, debugging, and much, much more.
  35. dreamreal ide.tag=ide
  36. nevet ok, dreamreal: updated ide.
  37. dreamreal ide
  38. nevet IDE stands for "Integrated Development Environment," a tool that manages entire development lifecycles and typically provides services like code completion, build invocation, test invocation, debugging, and much, much more. Tag: ide
  39. dreamreal hmm, need to have a way to searh tags, actually. Hmmmm hmm hrmmm
  40. bot [jottinger/bytecode.news] New issue #60: Add tag-based factoid search operation - https://github.com/jottinger/bytecode.news/issues/60
  41. bot [jottinger/bytecode.news] New PR #61: Adding tag command for factoids - https://github.com/jottinger/bytecode.news/pull/61
  42. * nevet joined #nevet
  43. * dreamreal!~dreamreal@about/java/dreamreal changed the topic to: This is the channel for the development of the software that runs nevet: https://github.com/jottinger/streampack
  44. dreamreal tag ide
  45. nevet Factoids tagged 'ide': ~eclipse, ~ide, ~idea, and ~netbeans
  46. dreamreal woot!
  47. bot [jottinger/bytecode.news] New issue #62: Factoid reference prefix (~) is not protocol-aware - https://github.com/jottinger/bytecode.news/issues/62
  48. * dreamreal joined #nevet
  49. * jreicher joined #nevet
  50. * jreicher joined #nevet
  51. dreamreal so... question. there're two repositories for nevet: one is streampack (see topic) and the other is bytecode.news, which is a ground-up rewrite and redesign. I think my goal has been always to get it working as a ground-up rewrite, then migrate TO streampack... thoughts?
  52. blue dreamreal: wdym with migrate?
  53. blue just change the name
  54. dreamreal streampack already exists as a repo
  55. blue containing what?
  56. dreamreal the old nevet code
  57. blue then just delete it
  58. dreamreal was thinking: tag, rm -rf, copy, add, commit
  59. blue why?
  60. blue what advantage in that?
  61. dreamreal because there's still stuff in the old nevet code that bytecode doesn't have, of course
  62. dreamreal it's not a 1:1 feature set, although bytecode has features streampack was intended to have
  63. blue you're mixing milk and meat. port stuff over until streampack/old nevet is obsolete, then delete it
  64. dreamreal not just obsolete, replaced, then, which is more or less what I'd intended to do
  65. blue yes
  66. blue I wouldn't invest time in merging repos, seems like a timesink to me with little gain
  67. dreamreal as usual, you're a wonderful person who requires only a moderate amount of tolerance
  68. blue I give you the raw unadulterated truth. at the mild cost of current annoyance, you avoid falling on your face later
  69. blue it's also called the min-max principle
  70. blue minimise dumbness, maximise immediate action
  71. dreamreal Sure. Yet you also make sure to offer opinion, and the opinion is distracting from the truths.
  72. blue ya. just remember that 99% of what humans say are opinions
  73. blue 'truth' is just an SEO term we use to make our opinions sound more legitimate to ourselves
  74. blue take it with a grain of salt
  75. blue especially MY opinions
  76. dreamreal Yet we can always write clearly such that our opinions don't get in the way if we're baseline competent. If.
  77. dreamreal For example, I could have just decorated that last statement with "and krautrock suxxxx!"
  78. blue yes
  79. blue but you also made your sentence meaningless, and you knew you would, by adding that if, because that if is all you had to say really
  80. dreamreal Of course! The "if" at the end was a twisting of a knife to illustrate a point.
  81. blue yes. but all you meant to say is that we are for the uttermost part NOT baseline competent. that's the crux of the matter, isn't it
  82. dreamreal only for people who fail the metric regularly.
  83. blue fair
  84. Chronos dreamreal: Oooh, tags. +100 for tags.
  85. dreamreal Tag support has been in since early days, but apparently SOMEONE forgot to search for them specifically. Fixed.
  86. Chronos dreamreal: Side note: Thank you for supporting dark mode.
  87. Chronos My eyes have always been, shall we say, imperfect. Dark mode is much easier on them.
  88. dreamreal on the sample content site?
  89. dreamreal or my website?
  90. dreamreal blue: thanks for the input, though: it got me to file issues for coverage in bytecode vs streampack (mostly AI features) and gave me a migration path. When I finish getting the certs set up for the domains this weekend, I'll probably do the cutover.
  91. bot [jottinger/bytecode.news] New issue #66: Rename repository from bytecode.news to streampack - https://github.com/jottinger/bytecode.news/issues/66
  92. bot [jottinger/bytecode.news] New issue #65: URL summarization with blog draft creation - https://github.com/jottinger/bytecode.news/issues/65
  93. bot [jottinger/bytecode.news] New issue #64: Channel/user sentiment analysis operation - https://github.com/jottinger/bytecode.news/issues/64
  94. bot [jottinger/bytecode.news] New issue #63: Poetry generation and analysis operations (LLM chaining test) - https://github.com/jottinger/bytecode.news/issues/63
  95. Chronos dreamreal: On your website.
  96. dreamreal Chronos: you have blue to thank for that, he pushed me into it
  97. Chronos Either it defaults to dark in general, or it's querying the user preference. Either way, it's dark, which me and my eyes very much appreciate. :)
  98. Chronos blue: Thank you!
  99. Chronos I can tolerate white, but it does hurt my eyes.
  100. dreamreal me too, I just don't design UIs at all so the L&F was very default
  101. Chronos Random off-topic comment: Every time I scratch at the surface of Go (the programming language), it's so obscenely ugly. I've never seen a language with so many warts and gotchas in my life.
  102. dreamreal Perl noob, eh
  103. blue yw, dreamreal
  104. blue dreamreal: I've finally found a *somewhat* acceptable way to manage separate browser profiles per web app
  105. blue so in the case of discord, I have this:
  106. blue spawn-sh "brave --app=https://discord.com/app --user-data-dir=$HOME/.config/web-apps/discord";
  107. nevet spawn-sh "brave --app=https://discord.com/app now has karma of -1.
  108. blue it's basically a bespoke browser profile only for discord, and the only thing I've yet to get in order is not rely on the totally buggy bitwarden browser extension, but get accesses directly from a locally installed bw client
  109. dreamreal heh
  110. blue this is how browsers should be, imho. completely separated contexts per domain. obviously it would make fb & co tracking impossible, but that's a design goal, not a bug
  111. blue it also makes XSS attacks moot: if you're only logged into one website per profile, there's no other profile to be hijacked
  112. blue something like `<a href="https://my.bank?sendto=dreamreal&amount=120" class="hidden"></a>` becomes impossible
  113. blue you might argue this breaks oauth, but it doesn't *have to*: auth requests can occur in an ephemeral tab that gets destroyed after you auth
  114. blue website -> user clicks "login with gh" -> ephemeral tab opens, you log in, but the context isn't shared with the main window. nor should it be anyway, per oauth
  115. blue this also solves another problem: whenever I want to oauth with google, I get a side-effect of staying logged in later. but's unintended: I only wanted to have delegated auth to the website
  116. blue dreamreal: substack was hacked, fyi
  117. dreamreal wha? url?
  118. blue wife told me should got an email aobut a notice of a security breach, you should have got one as well
  119. blue she got*
  120. blue they claim emails and phone numbers were leaked. I'd consider all data leaked, tbh
  121. dreamreal haven't gotten one yet, and substack has none of MY information on it; my id on substack is entirely obfuscated
  122. dreamreal they don't even have my phone number or main email address
  123. blue https://haveibeenpwned.com/Breach/Substack
  124. nevet blue mentioned url: https://haveibeenpwned.com/Breach/Substack ("Have I Been Pwned: Substack Data Breach")
  125. blue happened oct 2025, blew up now
  126. dreamreal wow
  127. blue it doesn't matter: I suggest you'd recycle your password for good measure anyway, if you have one
  128. dreamreal yeah
  129. blue https://www.csoonline.com/article/4128287/substack-data-breach-leaks-users-email-addresses-and-phone-numbers.html
  130. blue "Passwords are still possible — users who signed up before 2023 might have one — but in 2026, the user must actively choose to create one"
  131. blue Welp, the confirms the notion that you should never store passwords if you can help it
  132. blue that*
  133. dreamreal yeah, that's an issue for this app too
  134. blue unless you're an email provider or other source of truth provider, storing passwords not very smart
  135. dreamreal yeah, I want to use oauth or something else, but that's definitely not a strength for me
  136. blue I'd even argue that storing passwords for a secondary, non-source of truth website, has zero benefits
  137. blue it doesn't increase security: people who have access to your source of truth can typically reset passwords
  138. dreamreal I don't think I'd argue against that assertion :D
  139. blue the only 'downside' of magic links is that there's a bit more friction. but if you stay logged in and your device has a pin/password, it's all good
  140. blue also technically I'd argue that magic links offer stronger assurances on identity
  141. blue just knowing a password is weaker than "I have access to this account's source of truth"
  142. dreamreal Yeah. MY problem is that I am behind on security design for that surface
  143. blue that WILL become an issue for you once the frontend gets more focus/attention
  144. dreamreal It might be good to focus on it before it deploys, then
  145. dreamreal better to get it as right as possible before we commit to a published design
  146. Chronos dreamreal: Ha! I've never been a fan of Perl either. I've had to do some minor maintenance on Perl scripts. 2/10. Would not recommend.
  147. blue yes. you could start simple: not full oauth, just magic links. magic links are easy: generate a code with a timestamp, send email to user. user needs to enter code within timestamp. you don't need oauth for that
  148. dreamreal I loved perl back in the day :(
  149. blue the magic link table is simple, too: id: primary, code: string, created: Date
  150. Chronos blue: I agree that browsers, by default, should be completely separated contexts per domain. Although that'll never happen. :(
  151. blue you could even use the code as primary since it needs to be unique anyway, but I'd add id for good measure
  152. blue Chronos: agreed. there's simply zero incentive to break truly secure web, and with google basically owning the only viable browser stack outside of macworld, AND being an ad provider at the same time, the odds are basically zero they'd push in that direction
  153. dreamreal blue: so what would that do: "to log in, click here, then check your email"?
  154. dreamreal click the email link, bingo-bango, you're logged in?
  155. blue dreamreal: yes. that's one variant. another one is sending you a (usually six-digit) code per email, that you then need to enter in a 2nd step
  156. dreamreal which one's better?
  157. blue I prefer the latter approach, it's a bit more secure since you can tie the frontend session to the sent code
  158. Chronos blue: yep. They even "gave up" on their whole "no third party cookies" things. Which seemed like the minimum they should do
  159. dreamreal Hmm, I wonder how that'd be integrated into the auth system
  160. dreamreal can you file an issue for it?
  161. blue sure
  162. dreamreal thank you
  163. blue basically the idea is that you're sending a 'password' (short-lived, but still password) per email. that verifies: source of truth (I OWN this email) and matched identity (I am the one who initiated this action)
  164. blue inside the <form> tag, you'd put something like the record's id, from the db
  165. blue anyway, I'll keep the details to the gh issue
  166. blue dreamreal: https://github.com/jottinger/bytecode.news/issues/67
  167. dreamreal Grazi! (and nevet will inform us of it soon enough!)
  168. bot [jottinger/bytecode.news] New issue #67: Passwordless authentication via email one-time codes - https://github.com/jottinger/bytecode.news/issues/67
  169. dreamreal and there it is! Good issue, BTW
  170. dreamreal todah
  171. blue welcome
  172. blue added a small bit about expiry, which I'd forgotten
  173. blue obviously you can choose any other value than 10 minutes, some websites do 20 minutes. I think 10 minutes is good
  174. blue the higher your desired security level, the lower the cutoff time
  175. blue note that interestingly, this is *not* a real login workflow: it's an auth workflow, unbeknownst if you have an account or not. it doesn't even need to check if the email address is in the db before proceeding
  176. blue the check itself can occur postauth, and then you fork on login/account creation
  177. blue Chronos: yup. would be really nice though if there were a browser with proper isolation. funnily, modern browsers do *hardware* isolation so that the entire browser doesn't crash if one tab hangs up. but they didn't go the whole nine yards and properly separated contexts
  178. blue separate*
  179. Chronos Doesn't Slack do that authen-via-email thing?
  180. blue possibly, it's fairly common today
  181. blue slack is not an ID provider so I'd argue it fits
  182. Chronos I don't know enough about security to know if that's a good idea, or a bad idea, or sometimes a good idea, or sometimes a bad idea, or somewhere in between depending on context, or or or...
  183. blue you can note this: it's almost always a bad idea to store passwords, as a provider. it has virtually no benefits, and only downsides
  184. blue I like password managers, but they're not systematic. many people don't use them, and use weak passwords. and also reuse them across services
  185. blue if you don't store passwords you eliminate an entire error category
  186. blue similar to payment data: that's why you don't store CC details, normally
  187. blue some websites store like the last 4 digits for verification, but today you'd just store a token from stripe or whatever
  188. blue anything that's sensitive should be stored at its source of truth
  189. blue banks, email providers, payment providers... those usually have dedicated security team.
  190. blue teams*
  191. Chronos blue: Don't most services store hashes instead of passwords?
  192. dreamreal they do but that's not really sufficient
  193. Chronos And use some combination of user name, salt, and password to generate the hash? Making it harder to brute force the password.
  194. * Chronos isn't a security person, so only knows some high level basics.
  195. dreamreal harder != sufficient
  196. Chronos What would be sufficient?
  197. dreamreal for password storage? It's a moving target, that's the whole problem
  198. dreamreal it used to be a salt+encrypt, but computational increases meant that could be broken
  199. Chronos My assumption is there is no perfect solution, just good enough solutions.
  200. dreamreal yeah, that's always the problem. Moving to a "hey, we're sending this to a known address for you, YOU verify" moves verification to whatever the email provider uses, and stores nothing useful locally except "they used this one-time pad that's no longer useful, bwahahaha"
  201. dreamreal I guess you could have an exposure surface IF they got a pad generated, scooped the number recorded before it was used, and used it themselves
  202. dreamreal i.e., hit the app, export the data, use the data before it expired...
  203. * Chronos is sufficiently unfamiliar with email to know how secure it is these days.
  204. dreamreal email itself, meh, the providers are responsible for it
  205. Chronos If I personally ran a website, I'd seriously consider washing my hands of authentication complexity, and using emails for that.
  206. Chronos Most websites have some kind of flow for resetting passwords via email anyway... so...
  207. dreamreal Yeh, well, email is sort of a "do you own your identity" thing. My problem is that bytecode should not ever assert ownership of identity; it has password support for users, but right now it's exposed only in HTTP (it has a tiered authentication model). What blue is suggesting moves that password out, in favor of "can you echo a signal we sent to someone we presume is you" which is, indeed, a lot
  208. dreamreal more securer.
  209. dreamreal It also has a lot less of a burden for ME, and I'm all for that!
  210. blue Chronos: dreamreal is basically on target here. The problem isn't how well protected you store them, the problem is you store them at all. Any attacker could get them and just wait until the technology's around to crack them.
  211. blue it could be long enough that it's irrelevant, the systems/people are already dead, but it could also be tomorrow
  212. bot [jottinger/bytecode.news] New PR #68: Adding poetry operation and ai module - https://github.com/jottinger/bytecode.news/pull/68
  213. * nevet joined #nevet
  214. * dreamreal!~dreamreal@about/java/dreamreal changed the topic to: This is the channel for the development of the software that runs nevet: https://github.com/jottinger/streampack
  215. dreamreal a poem: roses are red/violets are blue/omg that guy reeks
  216. blue Chronos: if bytecode should not ever assert ownership of identity, then it may practically not store passwords
  217. blue those two sentences are effectively the same thing
  218. * dreamreal taps the glass
  219. dreamreal poem sunsets with indigent cats
  220. nevet a poem: Cardboard kingdoms catch the amber light,/While tattered sentries warm their matted fur./The sky spills gold on alleys out of sight—/A feast of color for the ones who were//Once sleek, perhaps, or never knew a lap,/Now stretched on concrete, watching heaven burn./The sun asks nothing, minds no widening gap,/And gives its copper coins at every turn.//They blink at beauty with their knowing eyes,/These scraggly prophets of the dimming street,/As crimson bleeds through all the merchant's lies/And makes, for once, the gutter bittersweet.//The light fades equal on the lost, the least—/One moment's warmth, one democratic feast.
  221. a poem: Cardboard kingdoms catch the amber light,/While tattered sentries warm their matted fur./The sky spills gold on alleys out of sight—/A feast of color for the ones who were//Once sleek, perhaps, or never knew a lap,/Now stretched on concrete, watching heaven burn./The sun asks nothing, minds no widening gap,/And gives its copper coins at every turn.//They blink at beauty with their knowing eyes,/These scraggly prophets of the dimming street,/As crimson bleeds through all the merchant's lies/And makes, for once, the gutter bittersweet.//The light fades equal on the lost, the least—/One moment's warmth, one democratic feast.
  222. nevet Analysis: This poem is written in iambic pentameter with an ABAB CDCD EFEF GG rhyme scheme, making it a Shakespearean (English) sonnet. The volta occurs at line 9 ("They blink at beauty"), where the focus shifts from describing the scene to reflecting on the democratic nature of sunlight. The formal structure creates poignant contrast with the subject matter—stray cats in urban decay—elevating the marginalized through traditionally elevated poetic form.
  223. blue the whole 'reset your password via email' thing is a chain of trust, anyway; passwordless logins generalise this concept
  224. blue whilst getting rid of the footgun which is storing passwords
  225. dreamreal a poem: roses are red/violets are blue/omg that guy reeks
  226. nevet Analysis: This poem is written in free verse with no consistent meter or rhyme scheme (the traditional "red/blue" rhyme is broken by "reeks"). It subverts the classic "Roses are red" quatrain form by replacing the expected romantic or humorous couplet conclusion with a blunt, colloquial observation, creating bathos through the abrupt tonal shift.
  227. * nevet joined #nevet
  228. * dreamreal!~dreamreal@about/java/dreamreal changed the topic to: This is the channel for the development of the software that runs nevet: https://github.com/jottinger/streampack
  229. dreamreal poem epic potato chips
  230. nevet a poem: Golden discs of crispy fate,/Salt-crowned treasures on my plate./Crunching thunder, flavor bold—/Each chip worth its weight in gold.
  231. a poem: Golden discs of crispy fate,/Salt-crowned treasures on my plate./Crunching thunder, flavor bold—/Each chip worth its weight in gold.
  232. nevet Analysis: This poem is written in iambic tetrameter with an AABB rhyme scheme (fate/plate, bold/gold). It's a quatrain—a four-line stanza—that playfully elevates potato chips through hyperbolic imagery and precise meter.
  233. dreamreal a poem: I hope that Chronos/Eats his children/More rarely/Than Saturn Do./WORD.
  234. nevet Analysis: This free verse poem lacks consistent meter and rhyme scheme. It employs capitalization irregularities and conversational tone ("WORD") while drawing on Greek (Chronos) and Roman (Saturn) mythology - ironically referencing the same deity to create intentional redundancy that undermines its own comparative statement.
  235. blue a poem: Awoke dead. Woke dead. Oke dead. Ke dead. E dead.
  236. nevet Analysis: This experimental poem uses systematic erosion, removing one letter from the beginning of each line to create a descending visual pattern. It lacks traditional meter and rhyme, employing instead a concrete/visual form that mirrors its theme of gradual dissolution or death through linguistic decay.
  237. * dreamreal giggles
  238. blue he totally missed the social criticism...
  239. dreamreal Of course. And there are length constraints on the analysis, too. And stop gendering an LLM!
  240. blue you fool, nevet is a male word in hebrew
  241. dreamreal a poem: I hope that I/can eat my pie/While in the sky/But I'm not high
  242. nevet Analysis: This poem follows an **AAAA rhyme scheme** with consistent end rhymes (I/pie/sky/high). The **meter is iambic dimeter** (two iambic feet per line: "I HOPE / that I"). It's a **quatrain** written in a whimsical, sing-song style reminiscent of nursery rhymes.
  243. dreamreal the LLM is ungendered though
  244. dreamreal anyway, the chaining works
  245. blue shrug, it's all nevet to me! if I hebrew, he'd say 'he'
  246. dreamreal which is the whole point
  247. blue spoke hebrew*
  248. dreamreal *nod* I get it, nevet is male, the llm is not, this is all proxied
  249. dreamreal okay, that means the AI infrastructure works AND the loopback stuff is in place
  250. blue you know what's also proxied? CONSCIOUSNESS!
  251. dreamreal now I get to look at the userauth stuff again :/
  252. blue hahahaha
  253. dreamreal The summarization stuff for channels and urls is actually really important going forward, but userauth is a little more core
  254. dreamreal Chronos: the url summary via LLM is actually *huge* and represents an idea I've been working on in one form or another since 2002 :D
  255. dreamreal blue: so... we need to think about the auth a little more, because of REST
  256. blue dreamreal: shouldn't REST be per oauth?
  257. dreamreal I mean... the UIs would use it
  258. blue you mean the frontends will use rest to communicate with the backend?
  259. dreamreal they damn well should, yes
  260. dreamreal they should have no access to the underlying system
  261. blue and in case of auth'd operations, you send the user's jwt token with the request?
  262. dreamreal Yeah
  263. blue that sounds pretty straightforward to me
  264. dreamreal I'm iterating on the issue, will have comments for the issue soon for your review
  265. dreamreal I can't adequately evaluate UI issues, IMO
  266. blue acknowledged
  267. Chronos dreamreal: Rather than "echo a signal we sent to someone we presume is you," what about emailing users a magic temporary URL?
  268. dreamreal Chronos: give me a sec, writing a comment that captures my thinking
  269. dreamreal I don't really like the magic url bit, but it's six of one, half dozen of another, file a comment, that's why it's an issue!
  270. Chronos blue: Yep, that makes sense — I love the idea of not storing passwords at all.
  271. dreamreal Me too
  272. dreamreal blue's nowhere near as stupid as people say! ... just as annoying, though. :D
  273. blue the annoying bit is a feature, not a bug
  274. dreamreal yeah, that's what you keep saying
  275. Chronos dreamreal: What don't you like about the magic URLs?
  276. Chronos s/magic URLS/magic _temporary_ URLs/
  277. Chronos (I'd give the user ~10 minutes to use the magic temporary URL emailed to them.)
  278. dreamreal Well, the magic url is yet another path for the UI to follow, for one thing
  279. dreamreal Maybe it's nothing, but I don't do UI unless I'm given no other choice, and I will ALWAYS find a way to have another choice because my UI skills don't suck, they blow
  280. dreamreal plus, the magic code path is easier to localize per UI (I am hoping the initial ui deployment has two execution paths)
  281. Chronos My _instinct_ is that the advantage of a magic temporary URL is that the user doesn't need to take the extra step of copying and pasting something.
  282. dreamreal so I am hoping to have nextjs.bytecode.news and primate.bytecode.news on day one, with www pointing to whichever one is best
  283. dreamreal Chronos: yeah, I get it
  284. dreamreal I just think it binds the url to a specific UI
  285. blue Consider this, Chronos. A magic URL is something you could by accident send someone, granting that person full access in your name
  286. blue It's not inherently a problem, but an avoidable one
  287. Chronos Ah. Hmmm. Legitimate reasons.
  288. blue There's also the ages-old idea that GET should be idempotent. Magic URLs violate that principle. They incur a login.
  289. blue (itempotent and not stateful, that is)
  290. Chronos You guys have definitely thought this through.
  291. dreamreal I can't say *I* have!
  292. * Chronos chuckles
  293. dreamreal I'm winging ALL of this, man
  294. dreamreal poem flying by the seat of someone else's pants
  295. nevet a poem: Trusting hands I cannot see,/Steering through uncertainty—/Not my grip upon the wheel,/Just faith in what another feels./Blind passenger to their command,/Flying where I cannot land.
  296. a poem: Trusting hands I cannot see,/Steering through uncertainty—/Not my grip upon the wheel,/Just faith in what another feels./Blind passenger to their command,/Flying where I cannot land.
  297. nevet Analysis: This poem is written in iambic tetrameter (four iambs per line) with an AABBCC rhyme scheme (see/uncertainty, wheel/feels, command/land). It's a short lyric poem consisting of a single sestet that explores themes of trust and surrender through the extended metaphor of being a passenger.
  298. Chronos I like that y'all are discussing this. I get *so exhausted* of all the bikeshedding in software engineering.
  299. blue Magic links are *still* better than passwords: however, I'd consider passwordless auth the gold standard.
  300. Chronos These days, the words "best practices" make me want to break down and weep unconsolably.
  301. blue well yeah, best practices is performative nonsense
  302. dreamreal This is a pretty severe rewrite of the auth module, but ... honestly, with 0 deployments and 0 users, who cares? Let's GET IT AS RIGHT AS WE CAN!
  303. Chronos I think I misused the word bikeshedding above.
  304. dreamreal And if there's a good idea out there that damages us little but we have to code? Darn it all to heck, I guess we programmers get to program some
  305. Chronos I think I should have said... something about being a lemming...
  306. dreamreal yakshaving?
  307. dreamreal spherical cow-moulding?
  308. Chronos One thing I *don't* like about magic links is now you have *two* browser windows.
  309. dreamreal I think I could have this auth code stuff written for the back end by tomorrow
  310. Chronos dreamreal: Regarding getting it right: dreamreal+=1
  311. Chronos ^^^ Bug. Karma module should pick that up.
  312. Chronos (Just kidding)
  313. blue "The 202 response is returned whether or not the email exists in the system (prevents account enumeration)" < this is good
  314. dreamreal but I want to make sure we're doing it right
  315. dreamreal Chronos: heh
  316. Chronos dreamreal: How are you handling the sending of emails? Using a third party service?
  317. dreamreal +1 and -1 was thought about - as was the "^^" signal indicating agreement
  318. dreamreal Chronos: MTA locally
  319. blue "This means fishing with a fake email is harmless: the OTC record expires in 5 minutes and nothing persists." agreed
  320. dreamreal you configure which MTA you want to use and it gets used :D
  321. dreamreal and MTA configuration on this thing was a TOTAL pain in the arse, and will always remain so: I expect user interfaces to say "remember to check your spam folder" even though I have dkim set up
  322. blue "Issuing a new code invalidates all previous codes for the same email
  323. blue "
  324. blue that is stronger than the guarantees I offered, but why not
  325. Chronos How would email authen handle synonymous emails? Examples being "johndoe@gmail.com" vs. "john.doe@gmail.com", and "johndoe@hotmail.com" vs. "johndoe@outlook.com"?
  326. Chronos Those first two and last two emails are identical.
  327. dreamreal Chronos: well... okay, so the way nevet handles users, the email is actually irrelevant
  328. blue Chronos: read dreamreal's write-up, I believe it handles that
  329. dreamreal there's a principal and the principal has related identities
  330. dreamreal on IRC, it uses SASL to validate, and an admin HAS to set that up
  331. dreamreal so I have it set that if I log on to libera as "dreamreal" without sasl, i'm not, like, nevet's concept of dreamreal
  332. blue Scheduled cleanup purges expired records
  333. blue bit conflicted about this
  334. blue technically, it's ok... why not reuse codes, in theory
  335. dreamreal each IRC server has its own rules, but I can set it up so I'm authed if I'm dreamreal on libera, but epesh on undernet... is just this guy
  336. blue I guess I'm overthinking this, I don't really care in a 16.7M space
  337. dreamreal http authentication is the SAME AS IRC in structure: it's an identity that resolves to a given user principal
  338. blue it does adhere to the idea that the code is time-bound, anyway, so all good
  339. dreamreal Chronos: all that to say that IF the system manages to create john.doe and johndoe and johndoe+foo and john.doe+foo for a single user principal... it's noisy but I don't care
  340. Chronos dreamreal: Can you paste a link to your email authen write-up? (It's probably above, but may be hard for me to find... due to eye issues)
  341. blue Chronos: https://github.com/jottinger/bytecode.news/issues/67#issuecomment-3929533643
  342. Chronos Thank you good sir.
  343. blue yw
  344. Chronos My vision issues are hella annoying.
  345. Chronos It's really hard for me to spot "stuff" in a sea of text.
  346. dreamreal https://github.com/jottinger/bytecode.news/tree/main/lib-core/src/main/kotlin/com/enigmastation/streampack/core/entity <-- see User and ServiceBinding
  347. Chronos Like, extra double deluxe family size hard.
  348. dreamreal I get it :(
  349. dreamreal so the token stuff we're talking about is for a *specific* service binding, over HTTP
  350. Chronos My IRC client does a good job helping to distinguish some key things though.
  351. dreamreal IRC, DISCORD, SLACK are all different services and have different binding mechanisms, so this is scoped almost exclusively to HTTP
  352. Chronos Off to eyeball those pages :)
  353. dreamreal (what the ingress adapters do is say "do I know how to map a user to a principal? I do? So let me do that" - discord does not, neither does slack. IRC does, therefore I can admin the bot from here... and console assumes the user principal is always the super-admin.)
  354. dreamreal and for authentication on IRC, it HAS to be MY SASL-authed account with known attributes, so someone would have to snipe my IRC login for real to fake it. And I can always lower my permissions, anyway.
  355. blue dreamreal: ack'd
  356. blue the addition of the email to the table for rate-limiting is good
  357. dreamreal blue: so the next question for YOU is: how difficult would it be to leverage that mechanism from a UI?
  358. dreamreal I mean, you're one of the people who'd have to use this
  359. dreamreal if the answer is "AGH I'd rather bite off my own neck" then there's a problem
  360. blue hm
  361. blue well, I'm wondering where is the association in POST /auth/login
  362. blue both email and code are known
  363. blue shouldn't it rather be id and code?
  364. dreamreal Which id would that be, though?
  365. dreamreal the internal userprincipal id?
  366. blue the uuid (v7) column
  367. Chronos "6 hex digits" — I would like to suggest eight Arabic numerals instead: (1) Less confusion about 1 vs. l, 0 vs. O, etc. (2) All of humanity is familiar with 0-9; not all of humanity if familiar with a-f. (3) It's even more secure than six hexadecimal digits.
  368. dreamreal Chronos: arabic! You're talking to two Jews here!
  369. blue lol
  370. Chronos hahahaha :)
  371. * dreamreal scoffs. Arabic numerals. Pfft. We'd be better off using 0-9.
  372. blue I don't disagree with Chronos. you chose a very low cutoff time, 5 minutes. can go with 0-9, too
  373. * dreamreal points to the "comment" button
  374. blue 0-9 space would be indeed easier to memorise, in case you're not a copy-paster
  375. Chronos Comment incoming!
  376. dreamreal and JUST IN CASE: yes, I know
  377. dreamreal much appreciated
  378. dreamreal Chronos: ++
  379. nevet Chronos now has karma of 2.
  380. dreamreal blue: ++
  381. nevet blue has neutral karma.
  382. dreamreal blue: ++
  383. nevet blue now has karma of 1.
  384. blue that is stronger than the guarantees I offered, but not continuity
  385. blue ugh, wrong message
  386. blue dreamreal: sending the email and code in the 2nd step proves account ownership, but not
  387. blue continuity
  388. dreamreal what do you mean when you say continuity?
  389. Chronos Comment added!
  390. blue only the user who initiated the process can finalise it, in the same browser tab
  391. blue that only works if the frontend knows the id
  392. Chronos OK, back to reading the rest...
  393. dreamreal Well... so the *last design* (from my comment) doesn't create an id until an actual token is matched
  394. blue so after step one, you can an entry in the new table, right?
  395. dreamreal I guess we could aggressively create ids, then require the id, an email, AND the token to complete it
  396. blue you create*
  397. Chronos 5 minutes can be a little tight when my Internet or email are slow. 10 minutes suggested.
  398. dreamreal Chronos: get good internet, loser!
  399. Chronos Well, happily, mine is crazy good, these days! Fiber ftw!
  400. dreamreal blue: in the design I was thinking, the id is not created until after step 2
  401. blue so let me rephrase this. after step 1, you create an entry in the new table, containing the code, right?
  402. blue id/email/code/create_at <- that row gets created after step 1
  403. dreamreal I guess we could do it earlier but that implies a cleanup of stale accounts (from a "have they ever logged in?" perspective)
  404. blue created_id*
  405. blue I'm talking about the new table, not about user accounts
  406. blue the one_time_code table
  407. dreamreal Ah, right, okay, so you're talking abotu an EPHEMERAL id, not one associated with the account itself
  408. dreamreal "this is the id of the login token"
  409. blue yes. I'm talking about the id of the record of the new table (under Database changes, New table:)
  410. blue I'd expect *this* to be returned after step 1, and be reused in step 2
  411. blue alongside the code
  412. dreamreal so the flow is: user hits a login page, which generates a token and the id associated with that token (the row id, basically) and is attached to an email; the email is sent with the TOKEN, user types in the token on the page (which still has the id, and the email, never having had the token) and the backend goes "let me look at this up... yep, you pass, here's your JWT"
  413. dreamreal am I understanding this correctly?
  414. blue yes
  415. blue the way it's phrased now, it'd be pretty easy to completely automate account creation
  416. blue this is not necessarily something you want
  417. Chronos Love the passwordless authentication docs.
  418. blue the id you return to the UI/frontend from the first request, is ephemeral in the sense that the user doesn't even see it. it's basically a nonce
  419. blue it's then mirrored back in step 2, alongside with the code that the user provided
  420. blue the id says: I used the browser tab that initiated everything, the code says: I am the owner of the email
  421. dreamreal Yeah. I like this idea.
  422. blue the email is basically irrelevant after being used to send the code. in your code, since you want extra throttling/security, you keep in the db. but it needn't be used in step 2 to verify anything, that would be circulatory
  423. blue s/in your code/in your case/
  424. dreamreal Yeah, the email isn't important internally anyway.
  425. blue well I suppose it's not entirely irrelevant: it can be used to match the account / prefill the account creation form
  426. dreamreal Yeah, but it's just paperwork at that point
  427. blue yep
  428. dreamreal the nonce is the main driver: "I gave you a secret code here, I emailed the other secret code, make them match, thanks, here's your JWT"
  429. blue yes. the nonce is the "I am here physically", the code is "I know something"
  430. Chronos It would be nice to be able to change email addresses
  431. dreamreal well, we will have profile updates, that's captured as PUT /auth/profile
  432. Chronos Oh, ok, sounds good
  433. dreamreal changing email address is probably a downstream concern, actually... or even a "hey, email an admin for this" concern
  434. dreamreal if you can't convince me you're actually the same person at oldemail@foo and newemail@bar, then screw you, create a new account, wanker"
  435. blue dreamreal: since you're storing the email in the table... you don't have to send it in step 2
  436. dreamreal yeah, I know, it's just extra, and you know how much I like being extra
  437. blue you're already enforcing one code per email, anyway. code uniquely points at email
  438. blue alrighty
  439. Chronos dreamreal: Yeah, I was thinking from the perspective of the user having access to both emails. If the user loses access to their current email, that seems like a support/administration issue.
  440. dreamreal Chronos: it causes me great pain, personally, too, because that HAPPENED to me
  441. Chronos dreamreal: How?!
  442. dreamreal namecheap let a domain expire with a warning that I missed
  443. Chronos oh crap
  444. dreamreal "HEY WELCOME TO OUR SALES THIS MONTH!!!! btw your domain is gonna expire in three weeks and you don't have autorenew and your funds are insufficient anyway good luck"
  445. Chronos I've gotten to the point in my life where I'd prefer to pay for the next 30 years up front.
  446. dreamreal except the all caps was in bright flashing neon
  447. dreamreal The new squatter offered to sell me my domain back for $25k :D
  448. dreamreal i was like "WOW enjoy it mate"
  449. Chronos dreamreal: Jesus. What was the domain? If you don't mind sharing.
  450. dreamreal autumncode.com
  451. blue dreamreal: thinking about this in terms of flexibility: how about returning a JWT in step that has a CREATE_ACCOUNT_ONCE privilege?
  452. dreamreal I'm sure you've heard of it quite a lot. It had one page on it, a landing page.
  453. Chronos It's still for sale :)
  454. dreamreal Chronos: yeah, no-one is going to buy it. Ever.
  455. blue this would allow UIs to show a small screen "you don't have an account yet, would you like to create one" + terms + set your account name etc.
  456. Chronos "Get a price in less than 24 hours" — Yeah, no. If you can't tell me the price up front, go fuck yourself.
  457. Chronos (Talking to GoDaddy, heh)
  458. dreamreal blue: Would we NEED that? I mean, wouldn't that come out of the flow anyway?
  459. dreamreal Chronos: Well, I *did* get a price out of them, but it definitely made me laugh
  460. dreamreal but replacing my email address on services has been a drag
  461. blue I'd like to mentally separate authentication from login. authentication always happens first. if there's already an account, login happens. but if there's no account, I feel there needs to be a conscious "create account" step
  462. dreamreal I told them that haha, my bad, if they wanted to sell it to me for $100/$200 USD, I'd take it as a very expensive lesson learned with no hard feelings, but uh...
  463. Chronos dreamreal: Losing access to my primary email is one of those things I have nightmares about. Literally. I can't imagine how painful it would be to get everything updated.
  464. dreamreal blue: diagram it out! I mean, if there's a good way to go here, I'm for it!
  465. dreamreal Chronos: it wasn't my primary, thank God - that's actually on a different service altogether - but yeah
  466. dreamreal blue: remember, on the HTTP auth side *I consider myself a newbie and ignorant*
  467. dreamreal if there's expertise I am *all for* leveraging it
  468. dreamreal if someone works out the right way to go and tells me what I need to do and I can understand/justify it, I'm a-doing it
  469. blue hm, maybe it's too complex and account creation needs to be automated
  470. blue lol, andrew just pooped all over the issue
  471. dreamreal nah, it's fine, we don't shut down conversation about it
  472. dreamreal I mean, he's not wrong, it's just that *I* don't know how to externalize all auth
  473. dreamreal he may
  474. dreamreal After all, from a user stance of bytecode.news, we really don't care what a user identity is - only access rights are affected. The user identity controls what control you have over your data, that's it.
  475. dreamreal IF there's a way to say "oh, google says this is dreamreal@gmail.com" and we have a way to know that, well, that's cool
  476. blue I don't know what he's gonna suggest, but you need ACLs *anyway*. even if you just do auth by google
  477. blue you're STILL gonna save dreamreal@gmail.com SOMEWHERE
  478. dreamreal The ACL is already there
  479. blue he's being ridiculous
  480. dreamreal I dunno about that
  481. dreamreal I'm not sure I know what he's suggesting
  482. blue neither do I
  483. dreamreal so let's do the smart thing and find out!
  484. dreamreal poem messing around and finding out
  485. nevet a poem: Dancing close to edges, testing every line,/Pushing buttons, crossing borders, thinking it'll be fine—/Until consequences whisper, then begin to shout,/That's the ancient rhythm: messing around, finding out.
  486. a poem: Dancing close to edges, testing every line,/Pushing buttons, crossing borders, thinking it'll be fine—/Until consequences whisper, then begin to shout,/That's the ancient rhythm: messing around, finding out.
  487. Chronos For what it's worth, I *refuse* to authenticate to websites using that weird "Sign in with your Google Account" feature. For some reason, it makes me *deeply* uncomfortable. This may simply be a psychological issue.
  488. nevet Analysis: This poem is written in rhyming couplets (AABB rhyme scheme) with an anapestic/irregular meter that builds momentum toward each rhyme. The form is a single quatrain with a contemporary, cautionary tone about the consequences of reckless behavior.
  489. Chronos I don't mind giving some websites my email address, but I don't want my accounts magically automagically linked to my Google Account.
  490. blue Chronos: ya, as noted about, it's also completely broken. auth-by-email is a simple, secure replacement
  491. dreamreal a poem: andrew is a fartknuckle/his hair as white as lard/and every time he speaks his mind/I think 'what a canard.'
  492. nevet Analysis: This poem is written in ballad meter (alternating iambic tetrameter and trimeter lines) with an ABCB rhyme scheme (lard/canard). It's a quatrain employing humorous invective, using the traditional folk ballad structure to deliver comedic insult.
  493. blue my point is that dreamwould would need to build some kind of auth flow ANYWAY, even if he just ends up using google oauth
  494. blue there's no kind of work being 'saved' by andrew's suggestion here, as far as I can tell
  495. dreamreal Well, I have a feeling the gesture is "use oauth" as opposed to "use google oauth" but yeah
  496. dreamreal well, let's see what he says
  497. blue he might have misunderstood: passwordless email auth is conceptually the same thing as delegated oauth
  498. blue "why build this at all" is moot. this is the minimum you need to build, anyway (perhaps bar the table)
  499. dreamreal sure. But let's HAVE THE CONVERSATION. Architecture by fiat is doable, but if we can build consensus it's better.
  500. blue right
  501. Chronos Password-Less Email Authentication (PLEA)
  502. blue ya
  503. Chronos (I thought I was being inventive and clever there)
  504. dreamreal working on infrastructure for sentiment analysis now
  505. blue ya I noticed
  506. dreamreal Chronos: did you catch my message about the url summary stuff?
  507. blue ~sentiment
  508. blue hm, broken
  509. dreamreal not implemnted yet, I'm coding it NOW
  510. * blue does snail-imitating noises
  511. dreamreal golly
  512. dreamreal fixing these infrastructure things is gonna be great, esp if some day I can do !summarize https://apache.org/foo/bar/some-news-item and have a draft article put in the admin queue for verification/validation/editing into shape
  513. Chronos dreamreal: No, I missed it
  514. Chronos Looking now
  515. dreamreal see 14:28
  516. dreamreal assuming EDT, whch is the only REAL timezone that matters, of course
  517. bot [jottinger/bytecode.news] New issue #70: Migrate service-rss to use lib-polling - https://github.com/jottinger/bytecode.news/issues/70
  518. bot [jottinger/bytecode.news] New issue #69: Migrate tell operation to use provenance override on OperationResult.Success - https://github.com/jottinger/bytecode.news/issues/69
  519. bot [jottinger/bytecode.news] New PR #71: Adding sentiment operation - https://github.com/jottinger/bytecode.news/pull/71
  520. * nevet joined #nevet
  521. * dreamreal!~dreamreal@about/java/dreamreal changed the topic to: This is the channel for the development of the software that runs nevet: https://github.com/jottinger/streampack
  522. dreamreal sentiment #nevet
  523. nevet Error: Sentiment analysis requires ADMIN role
  524. dreamreal grrr, I AM an admin!
  525. dreamreal I'll need to work on that structure some for auth but I'd rather it fail than assume too broadly, sentiment analysis works from console
  526. Chronos dreamreal: "url summary via LLM" = LLM coming up with those-urls-with-links-like-this?
  527. * NeXeN joined #nevet