HN user

Veraticus

667 karma

[ my public key: https://keybase.io/veraticus; my proof: https://keybase.io/veraticus/sigs/G1Ro8x6X6YjIOvvOBG4h-DIjnNEqmfTzZX8klUo-jyE ]

Posts30
Comments137
View on HN
savecraft.gg 3mo ago

Show HN: I built an 8-axis MTG draft advisor that runs inside ChatGPT

Veraticus
2pts1
joshsymonds.com 3mo ago

Dashboards Are Already Dead

Veraticus
5pts2
github.com 4mo ago

Show HN: I built an open-source MCP server that parses game save files

Veraticus
11pts6
github.com 3y ago

Show HN: Fly.io Lemmy

Veraticus
4pts8
blog.m1finance.com 8y ago

Startup roboadvisor M1 Finance drops fees, goes free

Veraticus
11pts0
joshsymonds.com 11y ago

Chef Cookbook Continuous Integration

Veraticus
2pts0
joshsymonds.com 11y ago

The Numbers Behind Consulting in 2014

Veraticus
1pts0
joshsymonds.com 11y ago

How to Turn Yourself Into a Programmer

Veraticus
4pts0
joshsymonds.com 12y ago

Your Job Is To Code

Veraticus
13pts6
joshsymonds.com 12y ago

Programming the New Family Business

Veraticus
3pts0
joshsymonds.com 12y ago

Rails Consulting for Fun and Profit

Veraticus
121pts67
joshsymonds.com 12y ago

Cryptolalia, for creating Cicada 3301 ciphertext puzzles

Veraticus
1pts0
github.com 12y ago

Show HN: cryptolalia, for creating ciphertext puzzles using many amusing ciphers

Veraticus
1pts0
joshsymonds.com 12y ago

What Makes a Good Programmer Good?

Veraticus
34pts27
gistifyapp.com 12y ago

Show HN: Gistify, a Mac App for Gists

Veraticus
1pts0
joshsymonds.com 12y ago

RubyMotion Update: One Month Later

Veraticus
1pts0
joshsymonds.com 13y ago

Why I'm Not Using RubyMotion in Production

Veraticus
146pts73
joshsymonds.com 13y ago

IOS 7: Impressions & Thoughts

Veraticus
2pts0
joshsymonds.com 13y ago

Big Brother Is Both Savvy and Incompetent

Veraticus
2pts0
gistifyapp.com 13y ago

Show HN: Gistify - Mac App to quickly and easily make gists

Veraticus
1pts1
joshsymonds.com 13y ago

Gistify 1.1.0: Visibility & Accounts

Veraticus
2pts0
joshsymonds.com 13y ago

Gistify: A Mac App for Easy Gists

Veraticus
2pts0
joshsymonds.com 13y ago

Why Your Startup Is Failing (and How to Fix It)

Veraticus
1pts0
joshsymonds.com 13y ago

The Perils of Overengineering

Veraticus
1pts0
joshsymonds.com 13y ago

Why I'm Not Applying to 37signals (But Why You Should)

Veraticus
19pts16
joshsymonds.com 13y ago

Existing Rails API Solutions Suck

Veraticus
2pts0
github.com 13y ago

Huey, a Gem for the discovery and control of Phillips Hue lightbulbs

Veraticus
2pts0
joshsymonds.com 13y ago

Show HN: Kinotify, a RubyMotion app for movie release notifications

Veraticus
2pts0
joshsymonds.com 14y ago

How Not to Apply for a Job

Veraticus
5pts2
joshsymonds.com 14y ago

Why RubyMotion Is Better Than Objective-C

Veraticus
44pts65

A friend of mine plays a lot of Arena and kept asking ChatGPT for advice, and as many of you know, it worked badly! It would confidently recommend things that didn't exist or had rotated out of Standard months ago. I thought it was a cool problem to tackle, so I built ten MCP reference modules that give Claude and ChatGPT access to real MTG data: 17Lands draft stats across all 31 color archetypes, Frank Karsten's hypergeometric mana base math, Scryfall's full card database, and the MTG Comprehensive Rules with semantic search.

The rabbit hole I fell deepest into was the draft advisor. It's an 8-axis WASPAS scoring engine — baseline win rate (Bayesian-shrunk so sparse archetypes don't produce noise), N-wise card synergy, curve fit, castability via Karsten's tables, signal openness, role composition, color commitment, and opportunity cost. Empirical winning-deck data only works for card-intrinsic axes; state-dependent axes like signal and opportunity cost need theoretical sigmoid parameters or survivorship bias destroys the differentiation.

Try it! The MCP works out of the box with MTG rules, cards, stats, and mana base. If you connect the lightweight Savecraft daemon to your Arena install, it'll watch your `Player.log` and context will automatically flow to the LLM on your specific decks and matches, enabling the draft advisor and play advisor modules (and other cool stuff).

Everything is open source and Apache 2.0 @ https://github.com/joshsymonds/savecraft.gg

I'm Josh! I built Savecraft (https://savecraft.gg | https://github.com/joshsymonds/savecraft.gg). It's an open-source MCP server that parses game save files and gives Claude/ChatGPT access to reference modules that do real computation -- an 8-axis WASPAS draft evaluator for MTG Arena using 17Lands data, drop rate calculators with magic find scaling for Diablo II, crop planning for RimWorld, and more.

The blog post is about why I threw away all my wireframes and built the whole thing as a conversation. You see, dashboards are collections of pre-answered questions, and the interesting questions are always the ones the designer didn't anticipate.

The longer version involves getting banned from every gaming subreddit on the internet for mentioning AI, a Reddit moderator accusing me of "interpersonal relationship theft," (!) and a RimWorld veteran telling me my tool was "incredibly useful," lamenting their aging Google skills, and downvoting me to zero. It's been a ride, HN...

Oh this is really interesting! I hadn't explored Steam Cloud as a data source. Currently the daemon watches local save directories and parses through WASM, but if Steamworks exposes an API to pull save files remotely, that could work as a server-side adapter (same pattern I use for WoW via Battle.net API). That would eliminate the daemon entirely for Steam games, which is by far the biggest friction point in the install flow right now.

I'd love to see your JS lib if you're willing to share it! The raw files would still need per-game parsers (D2R's .d2s is a gnarly bit-packed binary, for example), but moving file access to the server side would be a big deal for adoption.

Savecraft is an open-source MCP server that parses game save files and serves structured game state to AI assistants. Point it at your save directory and your LLM can help you with gear, stats, skills, quest progress, everything. Upload a build note and get detailed and specific advice about how to optimize your game.

I built this because I got tired of screenshotting my inventory every time I wanted to compare two items in Diablo 2: Resurrected (and am too garbage at the game myself to make the distinction). A local Go daemon watches save directories with fsnotify, parses files through sandboxed WASM plugins, and pushes structured state to Cloudflare Workers over binary protobuf WebSocket.

Every plugin binary is Ed25519 signed: community contributors submit source, CI builds and signs the WASM with a key they never touch. Your machine verifies before execution. This was the only trust model I'd accept for running other people's code on my gaming rig.

Server side is Cloudflare Workers + Durable Objects with WebSocket Hibernation, D1 with FTS5 for full-text search across saves and notes, and reference data modules (like a D2R drop calculator) running as separate WASM Workers via Workers for Platforms dispatch namespaces.

Currently supports Diablo II: Resurrected, Clair Obscur: Expedition 33 (what I'm playing currently!), Stardew Valley (theoretically), and WoW (Battle.net API + Raider.io). Linux and Windows are solid, Mac is kind of undertested. Apache 2.0, solo project. The marketing site is https://savecraft.gg

I can and did say that. The world is easier for non-deaf people. I can’t imagine even many deaf people would argue against that statement.

The correct way to argue against this isn’t to say that “objectively” the world is the same for deaf and non-deaf people; it’s that there’s a culture and language bound up in deafness that don’t deserve to die thanks to medical advances. That is true, and makes treatments like these and what they mean to the deaf community much more complicated and difficult.

“Objectively,” left-handed versus right-handed changes nothing about a person’s capabilities in the world, whereas being deaf does.

Cultural norms is an interesting comparison. Despite there being no actual difference in capacity, cultural views forced many left-handed people to be right-handed, making those people miserable in the process for no good reason.

Being free of violent extremism completely is impossible. Someone will always choose violent extremism as their method of political action. Considering their demands based on real, articulable, resolvable concerns validates their methods and encourages their activities.

If they want to be taken seriously, they should abandon their methods. Listening to them will not resolve their concerns and contains no teachings. It instead spreads violent extremism throughout society.

If violent extremists have no choice about how they act, then you should accept that society too has no choice but to reject them. It's just the rain falling, right?

If violent extremists do have a choice, then we can also choose our response to them. And pretty clearly that response should be to ignore their demands and treat them as having abdicated any say in our political system. Otherwise, you validate violent extremism, which creates more violent extremism. Which is bad, right?

There were other choices here. They chose not to make them. It's no one's responsibility to decide other people's bad choices are noble or worthy.

It's a bizarre stance because justifying violent extremism creates more violent extremism, which endangers us all. Choosing this method of political activity should (and in my opinion does) automatically invalidate whatever political arguments you have. If you have legitimate political grievances, bring them to legitimate political arenas.

Note how my philosophy still allows you to address origins, roots, grievances, etc. while also preventing the formation of violent militias because people won't listen to them or take them seriously. Yours forces us to take violent extremists seriously, even when their underlying concerns might not be worthy of consideration. Which is what violent extremists want.

In ethics, just terrorism is a well debated concept.

In what way is terrorism against an occupying external force, and violent extremists targeting the legitimate and democratic government of their own country, the same? Why are you conflating them?

Violence, it depends. If someone argues violence is never justified, that would be a pacifist position.

I said specifically that violent extremism is not justified, and I feel pretty at peace (sorry!) with that statement.

I think there are morally and politically okay applications of violence, but this is a great example of something that is neither.

or how either relates to the previous statements.

Because my point was sympathizing with violent extremists is politically wrong. They are not noble and they are not victims. They have chosen violent means to a violent end when much better alternatives exist. We have no responsibility to take anything they say seriously, and analyzing their disaffection seriously is not some lofty high-minded exercise in empathy, but a mistake.

This is actually the opposite point to what you were trying to make. Nazism was the result of violent extremism becoming politically mainstream, and is the danger in normalizing and sympathizing and treating with violent extremists. It does not reform them, it corrupts society.

I don’t think your comparison to the Irish Revolution is accurate as there is no country occupying the United States. These people have the same political liberties and possibilities as any other citizen.

No, it’s simply one possible reaction — and a bad one. Methods matter at least as much as ideals in politics, and violent extremism is not a valid political method and we shouldn’t treat with it like one.

Those who embrace it made their choice. It is no one’s responsibility to respect bad choices.

Do you think that continually asserting my wrongness makes me wrong?

I encourage you to understand this issue more deeply. But if it is evidence you lack, here it is:

A timeline of TikTok's history of reported security flaws, continual failures to fix them, and why it is currently in this situation: https://apnews.com/article/tiktok-timeline-ban-biden-india-d...

A list of countries that have already banned TikTok and their reasons for doing so: https://www.pbs.org/newshour/world/these-countries-have-alre...

Of course, that list does not include China itself, which also has TikTok banned locally.

You seem to have a misunderstanding of how US law works. Not all laws have legislatively-defined consequences for violating them. For example, consider laws against terrorism: even though terrorism is illegal, sanctioning individuals for terrorism can be done either legislatively or executively and occurs on a case-by-case basis.

Similarly here to ByteDance, which has violated American laws for years and is now experiencing the consequences of its non-compliance.

So actually, my claim is true; your understanding of US law is what is lacking here.

TikTok has failed for years to comply with US laws about not sharing data with the CCP, despite numerous warnings to do so and even a forced partnership with Oracle.

This is the final result of their noncompliance with local laws. Just as Twitter/X's noncompliance with censorship laws has resulted in their ban in China.

If you believe that is so, why is it incumbent on us to accept China's businesses worldwide? Shouldn't we be banning them more to protest slave labor and concentration camps?

No country has a right to do business anywhere and everywhere. I feel like people are really grasping at straws to squeeze this argument under some kind of "freedom of speech" or "freedom of action" umbrella, but those concepts have only ever applied to humans, not nations.