jgmontoya
J.G.Montoya.Hodl
I identify as a non-taxable entity. #Bitcoin / Sat stacker. Interested in all things CS. Expect multiple languages.
Public Key
npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p Profile Code
nprofile1qqsfydhe43fphchwpf20rnllmukl0ayc9h6wd6ue9pnawv77hnu4kdgpr9mhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtmkxyq3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7qgkwaehxw309aex2mrp0yh8qunfd4skctnwv46qzrthwden5te0dehhxtnvdakqzrmhwden5te0dehjuum5wghxxus60yl5s
Show more details
Published at
2023-06-18T20:48:15Z Event JSON
{
"id": "fba7af3e2646369d37c9fa2194d9ed0f8ddc272f2c14e0aa33e7a57b35985306" ,
"pubkey": "9236f9ac521be2ee0a54f1cfffdf2df7f4982df4e6eb992867d733debcf95b35" ,
"created_at": 1687121295 ,
"kind": 0 ,
"tags": [],
"content": "{\"name\":\"jgmontoya\",\"username\":\"jgmontoya\",\"display_name\":\"J.G.Montoya.Hodl\",\"displayName\":\"J.G.Montoya.Hodl\",\"picture\":\"https://pbs.twimg.com/profile_images/1362867154874474497/vfiOgwvD.jpg\",\"banner\":\"https://pbs.twimg.com/profile_banners/40809806/1606926227/1080x360\",\"website\":\"\",\"about\":\"I identify as a non-taxable entity. #Bitcoin / Sat stacker.\\nInterested in all things CS.\\nExpect multiple languages.\",\"nip05\":\"[email protected] \",\"lud16\":\"[email protected] \",\"lud06\":\"\"}" ,
"sig": "51f0925a4e6936030032731c1635e939852a556affdaf298d355baeb067815680339efa21d3ccdc6271f936477a18f9d39eee2d25b2703cae90c79d46bd84a79"
}
Last Notes npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya What's the problem with `const`? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Love to see it! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Why not just use opencode? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Also make it privacy focused for increased hardness! #nevent1q…zl3u npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya It will never be ready. Share anyway! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I would definitely try with the White Noise CLI, try pointing your agent to https://github.com/marmot-protocol/whitenoise-rs/tree/master/src/cli If you do it I'd be super interested to know how it goes! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya The instructions on the readme were wrong. Sorry about that! That's fixed now so whenever you decide to take a look it should be easier to set up 😁 Sorry for the frustration 😅 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Lovely npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya In principle: yes But we're changing how we manage relays A LOT and we might lose some of that functionality initially (not clear atm to what extent). In any case, it's something that I'd say we do want to support so if you try it out we'd be happy to receive feedback on it! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Thanks @npub1ye5…knpr for helping me test this! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Got media working on the @npub1wht…r3ec TUI https://cdn.nostrcheck.me/78bde8408a57277264e205260bd0c00cec2b5e43df84dedff863e235f3b8f99e.webp Inline image rendering, media upload/download and previews, profile pictures, reactions, message deletion, reply previews, NSec export, logout, follow-checks, view user profiles, create groups with members. All done by directly using the White Noise CLI. BTW you can point your agents to https://github.com/marmot-protocol/whitenoise-rs/tree/master/src/cli and tell them to try out the White Noise CLI. It works surprisingly well. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya There's still some known issues, but we'll work hard to make it even better! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya It's still in early development, we noticed a bunch of issues and we know there's many improvements still to be made. Even with that being the case, the last release is better than the one before it, so there's no harm in releasing. Next release will be better than the current one for sure. Perfect? Of course not, nothing is. But consistent continous improvements beats "not-releasing because there's bugs" in the long run. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya This was made to showcase what can be built with the new White Noise CLI, go check it out! It was vibe-coded in a couple of hours, so beware that there might be some bugs with it, but it works! And the CLI is intuitive enough that AI can understand it and work with it pretty quickly! #nevent1q…ps95 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya This was made to showcase what can be built with the new White Noise CLI, go check it out! It was vibe-coded in a couple of hours, so beware that there might be some bugs with it, but it works! And the CLI is intuitive enough that AI can understand it and work with it pretty quickly! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya It turns out, I completely fucked my follows list. Nostr FTW! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Sure! All good questions!! Why daemon + client? The split exists because WhiteNoise initialization is expensive and stateful. The daemon (wnd) does a bunch of stuff on startup. The client (wn) is a thin JSON-over-Unix-socket wrapper. Each command connects, sends one request, reads one response (or streams), and exits. This means for example `wn messages list` doesn't need to initialize the whole stack, it just asks the already-running daemon. Does the daemon actively sync state? Yes! It subscribes to Nostr relays for real-time updates and runs background maintenance tasks. Does the daemon hold keys? Not continuously in memory. Keys are stored in the platform's native keyring (macOS Keychain, Linux keyutils, etc.). When the daemon needs to sign or decrypt, it calls get_signer_for_account() (mod.rs:834-855) which retrieves the key on-demand from the keyring. The nsec is only in-process transiently during signing operations, it's not cached in a struct field on the daemon. We do have NIP-55/Amber support, but I haven't really tested doing anything with it on the CLI. Socket auth: is there anything beyond Unix file permissions? No. File permissions are the only security boundary. Any process running as the same OS user can connect and issue any command, including `export_nsec`. Any malicious process running as your user has full access to all accounts. This is standard for local daemon IPC, OS user isolation is the security boundary. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya White Noise CLI merged!! Check it out: https://github.com/marmot-protocol/whitenoise-rs/tree/master/src/cli #nevent1q…wxk6 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya wn messages send <group-id> "This is how you will be able to send a message using the White Noise CLI" npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Brewing some big plans 🦫 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I created a small tool to search for stuff in nostr: NST: Nostr Search Tool It's very very basic but hey, if you happen to need a cli tool for searching stuff on nostr based on how close they're to you (or someone else) in the social graph you might find this useful https://github.com/jgmontoya/nst npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Each time someone adds nip-04 support to a client, a cute baby marmot dies. #nevent1q…xa0e npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Wtf is this? 😂 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I implemented a "user search" feature in White Noise, and it was slow as fuck. So I had to do it again, properly this time. I am pretty satisfied with the result. Next release of White Noise is going to ship with a pretty decent search feature. You can read more about it here: https://blog.jgmontoya.com/2026/02/22/user-search.html npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya It started as "just some simple search functionality, nothing too fancy" but then performance demanded more fancy... On the WhiteNoise <-> Vertex integration, I'd like that to happen but we would need to solve privacy for the White Noise user without opening up Vertex to ddos. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya What a weird thing to comment npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Do you know if there's any good diving accounts on nostr to recommend to my good friend @nprofile…gvsh who's new in nostr?? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I use opencode and Claude Code. I don't want to pick a side. PAI is a project that adds hooks, agents, skills and memory to AI coding assistants. I like a bunch of what it does. But the repo is hard to navigate, customization isn't obvious, and it only works with Claude Code. So I did what any reasonable person does and built my own thing. Shaka is my take. Clean directory structure you can actually reason about. Customizations that survive upgrades. It's still very simple and early stage, but I'm working on making it smarter. It's been running my setup for a while now and it's been really useful to me, so I figured it might as well be useful to you! Check out Shaka 🛠️ github.com/jgmontoya/shaka npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Big Tech is Big Brother. The only option is building freedom tools that they can't stop, or spy on. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Big Plans: Flutter Edition #nevent1q…eu9z npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Pretty cool! What are you building it with? Do you have a repo link? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya That's understandable, we'll get there! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Oh no! This is hard to fix because the issue is probably from the other side key packages. If possible, could you tell the other person to update if they're running an older version? If that still doesn't work they could try to: - Go to settings, then developer settings - Delete all key packages - Publish new key package Thanks for giving the app a try. We will continue working hard to fix these (and other) errors! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya @nprofile…q4vt teaches how Zaps work! #nevent1q…08cs npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Big plans 🦫 #nevent1q…erv3 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Check out my sisters art!! #nevent1q…8wk5 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Hard time debugging? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Elaborate npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I dont know about you guys but I feel like activating a soft fork due to fear/threats of legal consequences would set a terrible precedent and would be far worse than any amount of spam ever would be npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya And surprisingly, there seems to always be room in your suitcase for "just one more"... Even if its already about to explode npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya What do you mean? Isn't it showing 1.46% right there on your screenshot? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Ideally more than 6 😴😴 npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Best thing to do in my experience is try to guide the rest of the team so they improve their reviews as well. Once you trust everyone is reviewing properly you don't need to actually be on top of every PR! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Which one is you though? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya I'm not sure about that... @nprofile…upeu look at this guy! npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya Writing Ruby is such a joy npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya > Let this be a reminder that freedom is not for granted Latvian guide after giving the tour at the KGB building. He now owns some sats. npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya What would be the advantage of that over simply always using MLS? npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p jgmontoya How much should you trust relays, really?