mmcloughlin | 1 year ago | on: Study: Air purifier use at daycare centres cut kids' sick days by a third (2023)
mmcloughlin's comments
mmcloughlin | 4 years ago | on: The Zen of Drinking Alone
I avoided AA due to the quasi-religious aspect, but Smart Recovery meetings helped me in the initial phase (https://www.smartrecovery.org).
I was always concerned about the longer term aspect of replacing alcohol in social settings, and there is still some awkwardness there but non-alcoholic beers have really helped for me. The scene has exploded in recent years and they're really quite good, see Athletic Brewing for some excellent craft non-alcoholic beers (https://athleticbrewing.com). In a social setting you could be drinking one and nobody would have to know. I don't hide it but I'm still glad to have something "special" to drink at an occasion. And I drink them alone too: they fill that role of something to drink when I want to relax, and I enjoy that placebo effect.
mmcloughlin | 6 years ago | on: Destroying x86_64 instruction decoders with differential fuzzing
MC Hammer project for LLVM tests round-trip properties of the ARM assembler. http://llvm.org/devmtg/2012-04-12/Slides/Richard_Barton.pdf
Sandsifter x86 fuzzer. https://github.com/xoreaxeaxeax/sandsifter https://youtu.be/KrksBdWcZgQ
mmcloughlin | 7 years ago | on: Present code with step-by-step highlights [slides]
https://speakerdeck.com/mmcloughlin/better-x86-assembly-gene...
The sample code is in a file with special comments at the end of each line specifying which slide numbers it should be revealed on as well as inline commentary to show to the right of the line. Syntax highlighting is provided by Pygments.
I was thinking about open sourcing it, it's actually only approx 200 lines of Python but I think it's quite effective.
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
avo currently implements the x86 subset of Go assembler. It's definitely possible to add support for additional architectures, but it may be a fairly significant project.
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
> Any chance of ARM/ARM64 support?
Yes multi-architecture support is definitely something I've had in mind. However I wanted to limit the scope for the initial version, so I could produce a result in a reasonable time and allow me to gauge interest.
> It would be super useful if you could generate the code to memory then execute it directly.
avo was inspired by PeachPy and asmjit, both of which can produce executable code directly. So implementing an assembler in avo is something I have had in the back of my mind. However it wasn't one of my primary goals.
The use case I initially had in mind is massively unrolled crypto routines, where there's a lot of assembly code required but not much going on conceptually. My AES-CTR mode CL (https://go-review.googlesource.com/c/go/+/136896) and meow hash port (https://github.com/mmcloughlin/meow) got me thinking in this direction.
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
https://github.com/mmcloughlin/avo/blob/0e253b3753beb409b3dd...
It gets to the point where the only source of truth is the Go assembler itself. My test suite takes the avo instruction database and generates a massive assembly file with one line per instruction form, then passes this to `go tool asm`.
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
https://github.com/mmcloughlin/avo#credits
PeachPy actually has Go output already, and Damian Gryski has used this to great effect:
https://github.com/mmcloughlin/avo/issues/40
Unfortunately because PeachPy wasn't initially written with Go in mind there are some rough edges and Go features it simply doesn't support. avo hopes to fill this gap for Go programmers.
mmcloughlin | 7 years ago | on: Avo: Better X86 Assembly Generation from Go
Go (Plan 9) syntax is not sufficiently different to make it a powerful intermediate representation, hence SSA as you point out. In fact many of the differences are frustrating subtle changes in instruction mnemonics or operand order. This might be okay if there was a canonical instruction database that made all these differences from Intel and AT&T easy to discover. However these exceptions are really recorded in various parts of the golang.org/x/arch/x86 repo. Producing the instruction database for avo was quite a time-consuming process. See:
https://github.com/mmcloughlin/avo/blob/master/internal/load... https://github.com/mmcloughlin/avo/issues/23
I've gained a lot more familiarity with the assembler and supporting infrastructure, so I'm hoping I may be able to contribute to this area of the core Go project.
mmcloughlin | 8 years ago | on: Your pprof is showing
I still think there are some valuable lessons here.
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
https://godoc.org/github.com/mmcloughlin/globe#Globe.Image
This can be passed to an image encoder like
https://golang.org/pkg/image/png/#Encode https://golang.org/pkg/image/gif/#Encode https://golang.org/pkg/image/jpeg/#Encode
These functions take io.Writer objects. SavePNG was provided for convenience.
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
https://github.com/mmcloughlin/globe/blob/master/examples/ci...
In fact I might switch it, since the cities json file I used has some oddities.
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
Interactive would be hard. It would be relatively simple to output an animated gif though, as the pinhole library does here
https://github.com/tidwall/pinhole/blob/master/examples/eart...
I'm planning to add this feature.
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
I guess I wanted to use it to visualize data coming from other Go projects I was working on, so it made sense. A tiny example of this is https://github.com/mmcloughlin/spherand which correctly generates random points on a sphere. I also had seen pinhole (https://github.com/tidwall/pinhole) and thought it would be fun to play around with.
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
gg and pinhole made this easy to write. The globe package really just deals with mapping (lat, lng) space to cartestian coordinates (and also includes some land/country datasets).
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
Also credit has to go to https://github.com/tidwall/pinhole where all the actual rendering happens!
mmcloughlin | 8 years ago | on: Show HN: Globe visualizations in Golang
https://github.com/mmcloughlin/globe/blob/master/examples/Ma...
It came from this node package
https://www.npmjs.com/package/cities.json/
It looks like the dataset has more cities in some countries than others.
https://www.cnbc.com/2024/08/19/universal-free-school-lunche...