HNHacker News
TopNewBestAskShowJobs

quincunx

288 karma · joined September 11, 2012

submissionscomments
quincunx··on New images of Jupiter
Why is Jupiter so colorful?

If the variation of color are indicative of a similar variation in density, why is there so much turbulence in Jupiter, why are the upper layers not more consistent? Tidal motion? Anyone know?

quincunx··on Grind – A first person shooter for Amiga 500
I don't think you can follow the path originally trodden (competing on asmone 68K/hw with your fellow local coders, exchanging snippets of hw reg info and source) however there's a terrific short series of videos on youtube you might consider:

https://www.youtube.com/@WeijuWu

Wei-ju Wu lays out how to code directly on the hardware in an accessible manner and, importantly, from C, instead of 68K, with lots of examples. Then, if (or rather: when) you have to, you can always step down a level into 68K assembly to get better performance.

quincunx··on Paris to bring back swimming in Seine after 100 years
I have a few of these rules

Interesting, can you share some other such rules?

quincunx··on ARM or x86? ISA Doesn’t Matter (2021)
"No, that's SMP" - is perhaps too resolute a definition. I'd say SMP is across processes, SMT is within a process, which would put the distinction in software, not hardware architecture.

Definitions are more grey, muddy and dependent on context; in that line of thought, I feel the parent you're responding to is accurate enough to not warrant criticism or even downvotes.

quincunx··on Framework Laptop 16
For some (myself) the right shift key is the main shift key; so doing away with it would be terrible. Typically holding it down with the right pinky while typing full speed ahead, as well as single movement stroke patterns for <>{}?"+_ and so on, so heavy on all caps C snake case type use (if that makes sense.)
quincunx··on How We built a $1M ARR open source SaaS
What a great link.

At the time of writing, Goal Conversions:

- Visit/blog 12800

- Signup 8

I knew anecdotally that HN doesn't convert but, oof, that's rough..

quincunx··on Blinkenlights: PC Binary Emulating Visualizer
The colorful stripes are more likely the decompression routine hammering dff180 (the background color) as a "busy signal" for the user. The Amiga has "chip RAM", which on many unexpanded machines is also the only type of RAM; there are no pre-reserved regions in chip ram; everything (code,data,framebuffers) can be anywhere the programmer wants.

I think OP is (probably?) referring to 8-bit C64 era technology, where framebuffers/video ram are at a fixed location in memory?

quincunx··on Now DuckDuckGo is building its own desktop browser
ok, interesting. I just checked, as of right now I still very much get the message "Unsupported Browser - In order to provide the best experience we require you use a different browser." So I'm not sure where our configurations differ.

Firefox 95.0.2 64-bit fwiw.

quincunx··on Now DuckDuckGo is building its own desktop browser
I also use Firefox as my daily, but more and more software seems incompatible with it.

For instance, AWS EC2 Global View insists I switch away from Firefox, that's just one example, but there are more.

Anyone know why? I've always viewed Firefox as the de-facto standard, why the recent breakage? Why is it deemed acceptable, by AWS of all orgs?

quincunx··on Why Not Rust? (2020)
| keep in mind that picking Java over Cobol for banking software in 90s retrospectively turned out to be the right choice

Is the Java written in the 90's still the same Java written today? I feel the mentioned Lindy effect equally applies to dialect. C++ today is radically different to C++ from the 90's. I'd venture COBOL from the 90's is likely quite similar to COBOL today.

quincunx··on Opt Out of Cynicism
Can you elaborate a bit on "resisting"?

Been a while since I read it, but iirc one of his examples is of fellow captives telling themselves they'll be free before the new year, then the new year comes, still not free, and those would be the first ones to go (your "giving up").

But the alternative I never took as "resisting" - but "purpose." Frankl's own purpose being the study of people under such extreme conditions, but his point (again, iirc) being that having that indefinite, daily, purpose is what keeps people alive and brings meaning.

Now, granted, it's been a while since I read it, but can you provide some color to this notion of "resisting" ? It'd be interesting if you took something completely different away from it (or if I remember it incorrectly and should be corrected.)

quincunx··on The Matrix Awakens: Unreal Engine 5 Techdemo [video]
The tech is pretty, not sure it works as a demonstration of gameplay though.

For some reason this strongly reminds me of The typing of the Dead. A "Typing of the Matrix" would fit the theme quite nicely!

quincunx··on Books that changed my career as a software engineer
* Mythical Man Month (Experience)

* Rapid Development (Profession)

* Epistulae Morales ad Lucilium (You're not alone, we all share this.)

* The War of Art (At 9am, you are alone.)

* Competitive Advantage (Porter, a personal choice, it's not about the bytes.)

quincunx··on A QEMU case study in grappling with software complexity
Link to Paolo Bonzini's "Is QEMU Too Complex" talk: https://www.youtube.com/watch?v=FMQtog6KUlo
quincunx··on China’s dodgy-debt double act
What is preposterous about it?

You mean why I felt it was preposterous? Well allow me to demonstrate my naivety...

I would have expected 50% to be "socialist Europe" type spending, and indeed, a bit of googling reveals France is at about 60% of GDP right now, Germany at about 50%, Netherlands at 47%... That 60% of all income is determined by the policies and decision making of politicians, apparatchiks and bureaucrats is, I find, shockingly close to a planned economy.

So why preposterous? Because the US, on so many fronts, positions itself in contrast to Europe - free market ideology, small government rhetoric, fiscally conservative. Anyway, obviously, I was wrong.

quincunx··on China’s dodgy-debt double act
So I thought "gov't spending, majority of GDP" was preposterous, but then I looked at the graph at https://en.wikipedia.org/wiki/Government_spending_in_the_Uni...

Looks like it already blipped the 50% mark in WW2 and is quite close now. Seems to (visually) be leveling though.

quincunx··on Dutch entrepreneurs avoiding negative interest by opening multiple bank accounts
It's not all marketing for the exact reason you state, it doesn't scale with the balance but is fixed. A flat-fee would be interesting for precisely the account holders with a large balance. There would be a bank-run-exodus of large accounts to such an impossible flat-fee bank.
quincunx··on SpaceX will soon fire up its Super Heavy booster for the first time
For Elon Musk, Jim Keller or even Steve Jobs, their value isn't in manually doing the CAD / VHDL / Code, rather, it is being the Eye of Mordor on the critical path and understanding the solution top to bottom. No excuses, only problem solving.

I feel the key insight behind both SpaceX and Tesla is that both the napkin engineering from first principle and then having the force of will to personally see it through /are/ the most important thing. Both qualify as engineering.

Happy to have my fairy tale hero's journey view of success corrected.

quincunx··on Show HN: Carburetta – C/C++ Fused Scanner and Parser Generator
Thanks. It's not that UTF-8 is not on the list, it's always been on the list, it's just not there yet. Hence I felt the need to stipulate the lack of it in the manual, because of its importance.

If you're so inclined, examine rex.c, and you'll see (e.g. rex_nfa_make_ranged_trans() for example) that the engine internally works with ranges of uint32 for this very unicode reason.

The front-end regex parser and driver code, however, are not there yet, so prior to code emission, these beautiful ranges of uint32 codepoints are back-translated into rote uint8 tables. Such is the fate of wanting to ship. It'll come.

quincunx··on Show HN: Carburetta – C/C++ Fused Scanner and Parser Generator
Thanks for studying this, your emphasis is noted - aside from this particular bullet from the "notable limitations," are there any other short-comings that you feel are deal breakers for you?
quincunx··on Show HN: Carburetta – C/C++ Fused Scanner and Parser Generator
Hey, thanks for taking the time. I appreciate the insights.

Carburetta is designed for developer productivity and hence "least surprise"; and so combines the classical distinction of scanner ("lex") and parser ("yacc") but fuses those capabilities together.

This simplifies development as the generated driver code can do more housekeeping and the code in Carburetta becomes more expressive. It is not the goal to improve on the algorithms / state of the art academics of parsers. Instead, it is the goal to improve productivity while using predictable and well known approaches / not reinventing the wheel, however noble that can be. Algorithms here are NFA -> DFA -> scantable for the scanner, and LALR for the parser; these are old, well established algorithms.

That said, have a look at xlalr.c if you'd like to go exotic and disambiguate grammars (multi symbol reductions determined at runtime), but a conscious choice was made to stick with straight LALR for least surprise. Ambiguous grammars, I find, become difficult to think about. xlalr.c is therefore not used for the main parser generation, but the classic lalr.c is favored. You should be able to understand everything that's going on using only base textbook materials (e.g. dragon book.) The xlalr.c algorithm will be phased out eventually, I believe it is currently only used internally (Carburetta, due to the bootstrap problem, is a bit of a chimera, and does not always use itself.)

That said, there is direct support for some of the ambiguities you speak of; e.g. for instance, the infamous "typedef name" ambiguity on identifiers in C can be implemented with <prefix>stack_accepts() and $chg_term(terminal). Have a look in the manual (HTML version is online) for those.

RawParser is cool, but seems to have different goals in mind.

quincunx··on Lisbon’s startup scene rises as Portugal gears up
Looked up the significance of that date for Portugal:

Freedom Day (25 April) is a national holiday, with state-sponsored and spontaneous commemorations of the civil liberties and political freedoms achieved after the revolution. It commemorates the 25 April 1974 coup and Portugal's first free elections on that date the following year.

Nice bridge.

quincunx··on A preview of x64 emulation on Windows for ARM
s/AMD/ARM ?
quincunx··on Read Fewer Books
Please forgive me the pretentiousness of what I'm about to share, but this is so great:

"You complain that in your part of the world there is a scant supply of books. But it is quality, rather than quantity, that matters; a limited list of reading benefits; a varied assortment serves only for delight. He who would arrive at the appointed end must follow a single road and not wander through many ways. What you suggest is not travelling; it is mere tramping." - Seneca, Letters to Lucilius, #45

This is such a powerful idea to me, from about 2000 years ago, that reading everything is like drifting aimlessly never arriving anywhere; it's just so recognizable.

quincunx··on The Polygons of Another World
You'd use a single multi-bitplane interleaved fill-blit if the background surrounding it did not need to be preserved (eg. no mask requirements as per Flow - demos tend to do this for its speed).

I'd imagine Another World creates an off-screen single-bit deep bitmap and uses that as a mask. I sent you an email if you'd like to explore more, however the original programmer probably just remembers what he actually did.

Also note that non-overlapping polygons can be grouped together in both approaches by line-blitting with XOR destination (adjacent polygons share an edge and so the edge is XOR blitted twice); so there are substantial speed-ups to be had.

quincunx··on The Polygons of Another World
That's very kind, quincunx is fine, or no credit is fine too. Glad I could be of help.
quincunx··on The Polygons of Another World
To set the framebuffer to a single color, consider that there are actually up to 6 "framebuffers" (one for each bitplane.) Consequently, it is to either set all bits for a given bitplane to 1 or to set them all to 0. To control the actual word that is blitted without DMA, you would use BLTADAT, BLTBDAT or BLTCDAT registers to control the corresponding blitter input word with DMA disabled (so the blitter does not write into these registers itself.)

A common technique to avoid having to blit each bitplane independently (esp. for BOB sprites where the blits are small and plentiful) is to interleave the bitplanes by row using the BPL1MOD and BPL2MOD register values; these values are added to each bitplane pointer address at the end of each row to move the pointer to the start of the next row; consequently a single blit operation can capture all bitplanes as in memory a row can consist of all row bits belonging to bitplane 0, all row bits belonging to bitplane 1, all row bits belonging to bitplane 2 and so on.

If this is the bitplane layout used then a single blit can only set the values to 0 or 15 (all 0's or all 1's for 4 bitplanes enabled); note however that the blitter too has modulo registers (BLTA/B/CMOD for each input and BLTDMOD for the destination) so perhaps best examine how fancy the programmer got with it (eg. multiple blits to clear the screen to a specific color even if the bitplanes are interleaved using BLTDMOD.)

Obviously I'm a bit rusty given it's been a few years, but I hope this helps. I'm a fan of your work, thank you.

quincunx··on The Polygons of Another World
Love this, love the write up.. but on the amiga...

the A500 had 6 bitplanes, not 5, also, with PAL being the most popular region, I'd say 320x256 was the more popular resolution over 320x200. 6 bitplanes are used for Hold and Modify (HAM mode, where 2 bits select Red, Green, Blue or Palette, and the remaining 4 bits indicate either R G or B values, or the index of the color.) The other 6 bitplane mode is "Halfbrite" which doubles the palette size for a total of 64 colors, where the second half 32 colors are half the intensity of the first half. When running with 6 bitplanes, agnus (the memory controller if you will) steals a lot of cycles for Denise (the display chip) from both the 68K and the blitter. The blitter being crucial for drawing filled polygons.

The second thing that made the Amiga revolutionary (and one could argue, for this reason, that the PCI architecture of Hombre/AAA is not a true Amiga no matter Commodore's demise) - the second thing is the way that Agnus orchestrates memory access much like the microcode inside a CPU orchestrates registers and ALUs. In particular, Agnus controls the memory address lines and chip-register-address lines; the chip-register-address and the memory address lines are opened up simultaneously against eachother with one reading and the other writing. So, for instance, when reading bitplans, agnus opens the chip bus using one of the register addresses 0x110-0x11A for BPL1DAT to BPL6DAT depending on which of the 6 bitplanes is being read; while at the same time driving the appropriate memory address by putting the contents of agnus registers 0x0E0-0x0F6 for BPL1PTL/H to BPL6PTL/H on the address bus of the "chip memory" DRAMs. The datalines of the DRAM and the special chips (Denise here) directly open on eachother (eg. DRAM and Paula chip-selected at the same time.)

I'm not sure if I did it justice and got the elegance of this architecture across in this short post. I'm sure many enthusiasts like me who got their start on the Amiga programming 68K continue to discover new things about this machine.

Good times, warm memories.

quincunx··on MacBook Pro 16" 2019 Teardown
From the article: "we can't help but feel that Apple can do better—especially after seeing Microsoft perform some real engineering magic to make its latest laptops more repairable"

Which leads to this link: https://www.ifixit.com/Teardown/Microsoft+Surface+Laptop+3+(...

quincunx··on Apple of 2019 is the Linux of 2000
You're very kind to offer help like this, but from the article: "... the only way to fix it is to find terminal commands from discussion forums, type them in and hope for the best" quote seems apt.
Page 1 of 3Next →