Donat Studios
donatstudios.com · Personal blog · on HN since 2013
Donat Studios is a developer's personal site with posts on CSV, Go, Git, software licensing, and old projects and tools.
What HN saysHN commenters link it for the Falsehoods Programmers Believe About CSVs essay, the post on running git gc, and as a collection of rants and tools.
22HN people shared it
14linked it in comments
23stories submitted
1.0Kstory points
3 months agolast shared
2013people per year2026
Most-shared posts
- 1CoffeeScript's Scoping is Madness6 people · 5 points · first shared 2013 · 3 comments on HN
- 2Problems with CSVs (2016)5 people · 260 points · first shared 2016 · 188 comments on HN
- 3CSV: An Encoding Nightmare5 people · 5 points · first shared 2016 · 1 comments on HN
- 4Go modules have a v2+ problem3 people · 217 points · first shared 2020 · 158 comments on HN
- 5The Joys of Unix Keyboards3 people · 134 points · first shared 2019 · 143 comments on HN
- 6Releasing my tools under the MIT License was probably a mistake (2023)2 people · 129 points · first shared 2023 · 122 comments on HN
- 7Git garbage collection? You're not going to need it2 people · 7 points · first shared 2021 · discussion on HN
- 8Go Binary Sizes Are Relatively Stable – Donat Studios2 people · 4 points · first shared 2019 · discussion on HN
- 9Mac terminal run unsigned binaries2 people · first shared 2025
- 10GitHub shouldn't allow username reuse1 people · 216 points · first shared 2018 · 147 comments on HN
- 11Go Binary Sizes Are Growing out of Control1 people · 21 points · first shared 2013 · 6 comments on HN
- 12PHP Has Grown Up, You Should Too1 people · 2 points · first shared 2014 · 1 comments on HN
- 13Go's New Iterators Smell (A Little) Funny, but It's Probably OK1 people · 2 points · first shared 2024 · 1 comments on HN
- 14Tool to Convert GIFs to Zoom Compatible MP4's Using WASM Ffmpeg1 people · 1 points · first shared 2020 · discussion on HN
- 15Numberphilia – Semantic Version Numbers and You1 people · 1 points · first shared 2015 · discussion on HN
What HN people wrote when they linked it
donatj · 2026-01-15
https://donatstudios.com/
Kind of a collection of rants, tools, and old projects... largely from before GitHub became a thing.
My site's getting kind of old and creaky, but I update it from time to time.
There's a fair number of articles that were "I ran into this problem at work, so I wrote a blog post about how I fixed it" we just had the amazing upside of having a link to send somebody when they run into the same problem. I've been told by coworkers that they found my posts googling their problems before.
walrus01 · 2026-08-19
yes, though the level of headache is relatively minimal. I meant I'd stop using it if things became completely impossible to run unsigned code (or the hassle went from a couple of extra seconds of work to some convoluted process) . Additionally something like this takes less than a minute to do once.
https://donatstudios.com/mac-terminal-run-unsigned-binaries
lelandfe · 2025-07-03
How to make git an elephant: https://donatstudios.com/yagni-git-gc
kmangutov · 2025-04-17
Interesting to understand what is possible in this Deno/Pyodide environment. For example sklearn works despite being quite an involved dependency [1]. Another side to this is data input/output, which seems possible with a low level interface [2]. Very exciting that (a simple) end-to-end ML experience is now possible in the modern browser.
[1] https://www.erp5.com/NXD-Blog.Scipy.and.Scikit.Learn.Compiled.To.WebAs… [2] https://donatstudios.com/Read-User-Files-With-Go-WASM
layer8 · 2023-01-17
Which CSV though? The format isn't well-defined in practice: https://donatstudios.com/Falsehoods-Programmers-Believe-About-CSVs
clon · 2020-11-04
Here is a good start:
https://donatstudios.com/Go-v2-Modules
With the relevant HN discussion:
https://news.ycombinator.com/item?id=24429045
tyingq · 2019-10-18
A pretty good overview of the awkward period with Excel: https://donatstudios.com/CSV-An-Encoding-Nightmare
masklinn · 2019-09-04
> Your explanation makes sense. It would complicate the compiler in this regard.
The compiler part's easy, it's the meatpiler which gets into an odd funk when implicit declarations don't do the expected thing (which will eventually happen). Not having implicit declarations is much simpler and more straightforward for everyone involved.
I used to find implicit declarations NBD, but I've slowly soured on them (starting with CoffeeScript: I found its declaration inference decisions absolutely awful and that started me really thinking about implicit declarations, see http://lucumr.pocoo.org/2011/12/22/implicit-scoping-in-coffeescript/ for more on the subject, or https://donatstudios.com/CoffeeScript-Madness for a more brutal take).
chubot · 2018-04-11
Yes his other article said this too:
https://donatstudios.com/CSV-An-Encoding-Nightmare
As of this writing, there exists a single usable CSV format that Microsoft Excel can both read and write safely across platforms. Tab delimited UTF-16LE with leading Byte Order Mark.
I work with CSVs in R, but I don't work with Excel that much. Thanks for the useful tip.
bakery2k · 2017-05-30
fixing the gaps in Lua. Moonscript's [...] default local
Roberto Ierusalimschy, the creator of Lua, believes that "Local by default is wrong." [1].
I don't necessarily agree that local-by-default is inherently wrong, but every implementation of local-by-default that I've seen has had flaws.
It looks like MoonScript is no different - its scoping rules seem to suffer from the same "madness" as CoffeeScript [2].
[1] http://lua-users.org/wiki/LocalByDefault
[2] https://donatstudios.com/CoffeeScript-Madness
dchest · 2016-01-04
Cor does not has a keyword to declare variables, instead, Cor declares it for you the first time it is used. If a variable with equal name is declared in outer scope the compiler will assume you are using the declared outside. Unless you write the variable as a simple statement. This technique is called variable announcing.
Sadly, it's the same mistake that CoffeeScript made: you cannot just introduce a variable, to be completely sure you didn't break anything, you'll have to search for all uses of it in outer scope above and inner scopes below.
https://donatstudios.com/CoffeeScript-Madness
michaelwww · 2013-07-28
This article "CoffeeScript's Scoping is Madness[1]" and the reddit programming discussion thread[2] convinced me to scratch CoffeeScript off the list of languages to consider. Ain't nobody got time for that.
[1] http://donatstudios.com/CoffeeScript-Madness
[2] http://www.reddit.com/r/programming/comments/1j1cw7/coffeescripts_scop…
wk_end · 2024-03-07
No, CoffeeScript doesn't have the same semantics as vanilla JavaScript; not in any meaningful sense I can think of, certainly not in the way that TypeScript does.
Most CoffeeScript will simply syntax error if you feed it into a JS interpreter (and vice versa), and there's no trivial syntactic transform to get around that (i.e. it's not just a new surface syntax over JavaScript). Various features in CoffeeScript have no equivalent in JS, so new code needs to be synthesized for them; even fundamental features that are shared by the two languages are different - for just one example, this [0] article shows that how a function is compiled in CoffeeScript is non-local - the compiler is tracking variable scopes to get around the fact that CoffeeScript and JavaScript have different scoping semantics.
With TypeScript, the "compilation" process is (almost):
parse(typeScriptCode) -> treeMap(removeTypeAnnotation) -> write That's it! TypeScript code is syntactically valid JavaScript code, just with added type annotations (and, as mentioned, soon that'll still count as syntactically valid JavaScript code); JavaScript code is syntactically valid TypeScript code without any type annotations - which doesn't make it syntactically invalid! Indeed, if you turn down the strictness settings on tsc to permit untyped code, the compiler doesn't even complain about it.
[0] https://donatstudios.com/CoffeeScript-Madness
jasode · 2017-06-10
>The people writing parsers are the ones who need a language specification to decide what to parse,
If an old 1970s mainframe is spitting out "broken" csv files that you need to parse, a new 2005 csv formal specification trying to impose some sanity to the landscape is irrelevant. That short RFC4180 tries to constrain what is "correct". It can't enumerate all the ways csv files are "incorrect".[1] The programmer has to look at the actual bad csv files he's trying to parse. As of today, Citi bank still exports broken csv for credit-card transactions. (Citi inserts extra CRLF in between quotes which breaks MS Excel csv import.) I don't need a formal spec telling me how it's broken. It's quite obvious by simply viewing it in Notepad.
>Meanwhile, writing CSV docs is just a for loop with a printf. That's it.
No. For example, if the field has a movie title with embedded quotes[2] or maybe a measurement using a one double quote for inches (e.g. [Sony 4k TV 65"])[3], using a naïve printf loop without generating extra escape characters will break many csv parsers that try to conform to RFC4180.
[1] although someone did try to enumerate bad csv files: https://donatstudios.com/Falsehoods-Programmers-Believe-About-CSVs
[2] example movie title [Precious: Based on the Novel "Push" by Sapphire] :
https://en.wikipedia.org/wiki/Precious_(film)
[3] https://stackoverflow.com/questions/17808511/properly-escape-a-double-…