HN user

jvns

3,739 karma

Julia.

http://twitter.com/b0rk, http://jvns.ca

Posts72
Comments131
View on HN
opensource.googleblog.com 2y ago

Google Season of Docs 2024

jvns
3pts0
termshark.io 5y ago

Termshark – A terminal UI for tshark, inspired by Wireshark

jvns
3pts0
wizardzines.com 7y ago

Every Linux networking tool I know

jvns
12pts0
www.shellcheck.net 9y ago

Shellcheck: a shell script linter

jvns
2pts0
jvns.ca 9y ago

So you want to be a wizard

jvns
2pts0
honeycomb.io 9y ago

Instrumentation: The First Four Things You Measure

jvns
4pts0
medium.com 9y ago

How We Built the World’s Prettiest Auto-Generated Transit Maps

jvns
3pts0
jvns.ca 9y ago

A swiss army knife of debugging tools

jvns
2pts0
python-compiler-workbench.herokuapp.com 9y ago

Python compiler workbench

jvns
2pts0
twitter.com 9y ago

How I got better at debugging

jvns
2pts0
medium.com 10y ago

Algorithmically generated transit maps

jvns
4pts0
doc.rust-lang.org 10y ago

The Rustonomicon: The Dark Arts of Advanced and Unsafe Rust Programming

jvns
191pts59
codeascraft.com 10y ago

The Etsy site performance report

jvns
1pts0
python-compiler-workbench.herokuapp.com 10y ago

Python compiler workbench

jvns
3pts0
jvns.ca 10y ago

Java isn't slow

jvns
4pts0
www.pgbovine.net 10y ago

Automatically create Docker images by running the program you want to package

jvns
1pts0
codewords.recurse.com 10y ago

How to trick a neural network into thinking a panda is a vulture

jvns
268pts66
jvns.ca 10y ago

Why Ruby’s Timeout is dangerous and Thread.raise is terrifying

jvns
47pts20
jvns.ca 10y ago

How I got better at debugging

jvns
7pts2
jvns.ca 10y ago

A better way to profile multithreaded programs

jvns
80pts10
jvns.ca 11y ago

An argument for hiring junior developers

jvns
3pts1
jvns.ca 11y ago

How the locate command works (and let's write a faster version in one minute)

jvns
5pts0
jvns.ca 11y ago

Why might a C++ programmer say “I could never write Python”?

jvns
24pts14
jvns.ca 11y ago

Fear makes you a worse programmer

jvns
3pts0
jvns.ca 11y ago

Diving into concurrency: trying out mutexes and atomics

jvns
32pts3
blog.chaselambda.com 11y ago

How tmux starts up: An adventure with Linux tools

jvns
3pts0
jvns.ca 11y ago

Harm reduction for developers

jvns
3pts0
jvns.ca 11y ago

Fun with machine learning: logistic regression

jvns
2pts0
rose.github.io 11y ago

Taste Test

jvns
1pts0
jvns.ca 11y ago

How does SQLite work? Part 2: disk seeks are slow don't do them

jvns
58pts4

From the other side, I’ve fairly often written blog posts that I don’t put much effort into and have no intention of reaching the front page of HN, only to see 12 hours later that somebody submitted it and it’s on the front page.

I realize this sounds like a humblebrag but it is not a positive thing for me to have every single thing I write submitted to HN whether it’s relevant to a broad audience or not.

I tried to grep the code for `api.` to get a sense for all the vendors this codebase is using, and which you'd need to have relationships with to run the code. Here's what I found:

payments:

  https://api.paypal.com 
  https://api.stripe.com
tax stuff:
  https://api.taxjar.com
  https://api.vatstack.com (EU VAT)
  https://apiservices.iras.gov.sg
for iOS app (?):
  https://api.appstoreconnect.apple.com 
  https://api.storekit.itunes.apple
AI stuff:
  https://api.iffy.com  (AI content moderation)
  https://api.helper.ai (AI support)
  https://api.openai.com
other:
  https://api.easypost.com  (shipping labels?)
  https://api.sendgrid.com (email)
  https://api.pwnedpasswords.com (haveibeenpwned)
  https://api.worldbank.org (for purchasing power parity?)
  https://api.dropboxapi.com (for "upload from dropbox"?)

Like I said in the blog post, I'd love suggestions for other things I've missed that happen when you run "hello world", _especially_ if there's a way to use a Linux spy tool to trace what exactly is happening.

Considering adding a few things that are happening in the kernel and trying to use `bpftrace` to trace them, but I need to figure out how to use bpftrace/kprobes and hunt down the relevant kernel functions.

Hello! I wrote this post and I have a couple of things to say about this "DNS is not actually hard" take. It took me many years to feel totally comfortable debugging DNS problems, and I wrote this post to explain why I think it was hard for me.

I also used to think that "no, actually, it's easy!" was an encouraging response to "this is hard to learn". And I kind of get it! I love DNS! I think it is surprisingly simple in many ways, and I've written about that a lot, for example in https://implement-dns.wizardzines.com which shows you how to implement a toy DNS resolver from scratch in some pretty simple Python code.

But over the years I've learned that "no, it's easy to learn!", instead of coming off as an encouraging comment ("you can do it!"), often gets received as "no, it's not hard, actually the problem is that you're dumb". Like, I've been confused about this for years, and you're telling me that, no, actually it's easy? Not that helpful!

So I've stopped telling people that, and instead I put a huge amount of work into trying to understand _why_ people find certain things hard and work to help remove some of those barriers.

DNS-Weekend 3 years ago

note: it was available before, the only change is that now it's in a github repository instead of a zip file that you download from the website

A DNS resolver is both a client and a server -- for example Google's 8.8.8.8 (which this is a toy version of) is a server (you can query it with `dig @8.8.8.8 example.com`), but also a client of the various authoritative DNS servers that it fetches and caches records from.

I implemented this as a command line tool because that's much easier to do in a Jupyter notebook environment, but you can also pretty easily transform it into a UDP server running on localhost and query it with dig in the same way that you would with 8.8.8.8. That's one of the bonus exercises at the end (Exercise 7).

I might end up bringing "convert it into a server" into the main content though because it's pretty easy to do and I think it makes the whole thing seem more "real".

The initial 1000 copies ran out, but I just added a few hundred extra so it should work now.

(the way it works is that I add 1 copy to give away for every 1 copy sold, but it's a manual process)

Unfortunately I've done a bunch of research into this and I've never been able to find a print-on-demand service that prints the zines in a way that I was happy with. Print on demand is easier for regular books, but the booklet format is a bit weird.

The customs situation is a pain though, I wish I had a better solution.

As the author, I don't think this really makes sense on the front page of HN since you have to pay to read the zine.

I am doing a giveaway for folks who can't afford the zine though -- if $12 is a lot of money for you but you think the debugging advice in there would be helpful, you can use code BUYONEGIVEONE at checkout to get the PDF version for free. (it'll ask you for a billing address but if you dislike sharing your address unnecessarily like I do, you can just put a fake address)

Mess with DNS 5 years ago

Restarted the server and it should be back up for now :). Here's the culprit:

2021/12/15 18:39:10 http: Accept error: accept tcp [::]:8080: accept4: too many open files; retrying in 1s

I also implemented a vaguely Hey-inspired system in Fastmail a year ago and it's been good.

One tweak that's really helped me: when I filter things to "The Feed", I also use the filter to snooze them until 6pm, so I only get mailing list emails once at a day.

One thing I find a bit strange about this (as a Gumroad user) is that Gumroad employees don't seem to be granted @gumroad.com email addresses -- when I've needed to email their engineering staff or marketing staff I often get replies from someone's personal email address.

The fact that employees are using their personal email address to do Gumroad business makes me feel a bit uncertain about how securely my information / my customers' information is being stored.

Hell Yes CSS 6 years ago

hey, author here. I always find it weird to see HN posts where you have to pay to read what it says (what's the point?) so here are 6 sample pages from the zine if you're interested in seeing more of what's in it:

* CSS isn't easy: https://wizardzines.com/comics/css-isnt-easy

* Inline vs block: https://wizardzines.com/comics/inline-vs-block/

* Specificity: https://wizardzines.com/comics/css-specificity/

* Centering: https://wizardzines.com/comics/css-centering/

* Hiding elements: https://wizardzines.com/comics/css-hiding/

* The box model: https://wizardzines.com/comics/box-model/

I also put together a site with a few examples of CSS behaviour I find surprising here: https://css-examples.wizardzines.com/

my understanding of US stock options for Canadians (and really for anyone who can't afford to exercise their options) is:

- having ISOs is bad, you don't get any of the tax advantages that Americans get and it means that they expire 90 days after you leave the company if you don't exercise them

- having NSOs that expire after 10 years is good, they can still be risky to exercise (same as with ISOs), but that's not too bad because you can delay exercising for 10 years after you get them, and hopefully they'll become liquid (or worthless) before then

- it's possible for a company to switch employees' options from ISOs to NSOs (for example Pinterest did this https://fortune.com/2015/03/23/pinterest-employee-taxes/), so it might be worth putting pressure on your employer to offer that change if you're in the bad (ISO) situation