Recent submissions

Comment · 8 years ago
I'm willing to make a speculative bet on Brave/BAT. The existing user growth is good, and the incentives for their ad system are basically correct for everyone.

The product Brave is actually peddling is akin to anti-cheat software: It takes steps to prevent fraud throughout digital advertising and improve the cost effectiveness of digital ad campaigns. That pitch means that they have the ear of advertisers already, and it's only a question of executing on the rest. Given prodding, advertisers will cooperate in order to fix up the market because what they really want is a "commoditize your complements" scenario. They are not there to become adtech wizards. They want to find qualified customers for their primary business. If Brave succeeds in forming a coalition, you'll start to see businesses from other sectors talk it up and give users and content creators hard incentives to sign on. They can even use such marketing efforts as part of their own speculative plays on the currency.

On the user end of things, that means that Brave engages in the click fraud arms race, but with higher-powered weaponry than can be accessed from within Javascript. They get a deal that is a definite improvement on the status quo: they choose exactly when and where they want to see ads. For the other parts of the system, the cryptocurrency marketplace replaces most of the middlemen and associated incentives for fraud. If you're in the business of total control either way(whether it be "never-again-an-ad" or "I want to access as many users as possible"), it's a devil's bargain, but if you're interested in getting the Web on a more sustainable path where quality is encouraged, this is something that could do it.

Comment · 8 years ago
Comment · 8 years ago
This is kind of analogous to photorealism versus cartooning. A history or biography would attempt to adapt events and experiences directly to the page: "this happened, and then this happened, and it felt like that". Fictional work transforms those same elements into exaggerated characters and scenarios. Both kinds of works require some creativity to build up a coherent story, but fiction has a freer hand to manipulate elements and choose its focus.

Just making it up without adapting from anything real usually isn't something that good fiction is built up from, though. That path goes directly to cliche, and it's easy to find cliched fiction.

Comment · 8 years ago
Reading aloud is something I've returned to in later years as speaking practice, vocal warmup, and testing my own writing. It was, of course, a chore in school.
Comment · 8 years ago
There's a profound wisdom to knowing the niche you're in, and Zig does seem to have that. The applications part of the stack is saturated with options, all trying to encroach on each other, but when it comes to the genuinely low-level, unsexy stuff...the viable options are all pretty old languages, and languages that patch over those old languages.

And with respect to discussion of boilerplate, you can, of course, always have a "Zig++" language that patches over Zig. By cutting out its own metaprogramming functionality, it's much more straightforward to generate useful Zig source. There are a lot of advantages to restraint in the design, and Go does share that, too.

Comment · 8 years ago
I read all that and still think, "you don't what you're talking about".

This is 100% a problem of dependency management, i.e. a problem common to software everywhere at all times that has never gone away. Whether more work survives is ultimately a factor of whether it's whether it's easy to make it survive, not on the "blame them for lacking effort" angle. Some folks will take the extra time, some won't.

The software that still has its dependencies, we can do something about. For most games that equates to "emulate the release platform, and we get the playable release back" - which is the defacto standard, since it's relatively easy to get copies off a ROM or CD, and it's the single artifact that is most representative of creative intent. It absolutely makes sense that almost all the effort would go towards that. We like seeing Leonardo Da Vinci's plans and studies, but he was focused on results, and we mostly know him for those results.

The source is more specialized, and not as easy to subject to the emulator model. A lot of shops "back in the day" did not even have good backup or version control practices and the game's build system involved a whole custom software project of its own, and only one person knew how to make it go. Getting it even to the point where all the code and assets were accounted for would incur a person-weeks expense, and studios then as now would finish a release with layoffs to shave off salary expense, which in turn gave an incentive to jump ship before finishing to dodge the layoff, leaving certain knowledge about the project in limbo. And employees are often not trusted enough by the management to let them bring in an external drive and dump the project: the optimism of "preserve the art for the future" goes right up against the pessimism of "i'm building a business, not art", and the psychopathy of "if they can't dump the project, they can't steal it". (yes, it happens - on both ends) There are numerous barriers in those crucial weeks around the ship date that can cut off this aspect of archival right at the start, and many a preserved game is the result of some hero who went against the direct wishes of their bosses and made copies in secret.

Nowadays, project tooling tends to fall a little more along standardized lines, and if you start with the goal of minimizing dependencies, you can feasibly have a smooth path to restoring the build without incurring the same overheads that make managers give up on archival to save a dime. So while commercial conflicts of interest remain, it's gotten easier, relatively, if your project scope is not so large that you need to bring in the custom tooling again(which, of course, is what happens in AAA). It's not "sneeze and you've preserved history" easy, but we can work on that.

And what if we're talking about an online game? That's the preservation nightmare taking place today. All the MMOs, mobile games, and so on - those are living things. You can't reconstruct a userbase. So even having running code and assets, it gives you a part of the experience, but it will be empty, fossilized. You will have to fall back on video footage to see it in contemporary context. That said there is the occasional revival effort, such as with Habitat[1].

tldr; if you want better archival, support game labor, support projects that improve basic software infrastructure.

[1] https://en.wikipedia.org/wiki/Habitat_(video_game)#Revival

Comment · 8 years ago
I think most of the dynamic/static bias depends on the specific experiences of your problem domain.

If you have a lot of types of data to model(layers of records, sequences, indirection, etc), dynamic types make it easy to start bodging something together, but result in write-only code. So you end up wanting to have additional structure and definition - maybe not immediately, but just after prototyping is done and you have a first working example.

If you're just applying a routine algorithm that ultimately does a round trip from SQL, you don't need that additional assurance. The database is already doing the important part of the work.

If you have simple data but it needs to go as fast as possible, you end up wanting to work at a low level, and then the machine size of the data becomes important - so you end up with a static types bias.

Comment · 8 years ago
Another helpful comparison is Lisp syntax versus Forth syntax. If you actually want a simple, terse, unstructured language, Forth is the way to do it: Words will consume and return any number of inputs or outputs to the stack, and you get entire classes of error when it's unbalanced that would surface as syntax errors anywhere else.

Just adding s-expressions is actually a huge jump up in syntactic complexity and structure, since now you can define a whole hierarchy statically, "on the page", instead of having to use a series of stack operations to manipulate memory from afar. And then as you lucidly put it, going from s-expressions to a practical Lisp dialect adds another level of context on top of that.

(And yeah, it's possible to bolt structure onto a Forth dialect, too, but the "Chuck Moore way" is that you do that custom every time you need it, instead of trying to generalize. Generalizing a concatenative structure leads to something like Factor.)

Comment · 8 years ago
That really speaks to the horrors of America, given that in Japan, as a white male foreigner with command of "hai", "arigato" and on good days, "ah, so desu ne", I definitely got the sense of being put up with - albeit more so in Tokyo than elsewhere.

But at the same time I can sympathize in that street interactions in California have grown openly hostile across the board. The level of polite hospitality is so low and paranoia so high that it is actually hard to go outside and do business without ending up in a confrontation of some kind. Just the other week I was crossing the street in SF after seeing a movie[1] and a lady(a white lady) crossing the other direction gave me the finger and screamed "fuck you, fuck you" for no reason I could fathom.

We passed, and then I had a feeling of deja vu and thought, "didn't that happen the last time I saw a movie here too? Does this woman just go around in the evening cursing out strangers for self-care?"

And that is the kind of thing that sounds dreadfully believable for SF these days. The privilege spares me from most avenues of material loss, but that's hardly something to be proud of.

[1] The film was Sorry to Bother You, if it matters. I enjoyed it

Comment · 8 years ago
Comment · 8 years ago
Leverage.

You don't throw your foe to the ground with brute force alone. You take him off-balance, and move in with good timing and technique.

If your goal is solving climate change, well, the leverage isn't really in the technical solution, but in the political economy. We need a redesign. That's problem one.

But if it's the power structure that needs changing, what affects it? Knowledge. Signalling. Valuation. And then you get into things that you can potentially change as a tech worker, by pushing for information systems that change our valuation metrics to match a philosophy of sustainability. And that positions actors who wish to take sustainable actions to have the leverage to realize it.

That, I think, is the trick to feeling OK about it. At the end of the day, it's a war fought in an abstract, everyday sense: Build up your sense of morality and build your career around those principles. You might not be the hero, but you won't be the villain.

Comment · 8 years ago
I love how the ambiguity has caused BOTH compiler teams to comment on what they're optimizing.
Comment · 8 years ago
I use the "dueling sins" model of "copying versus coupling." Early lifecycle code benefits from the flexibility of copying. Mature code benefits from the coupling forces of abstraction. Both have the capacity to do harm.
Comment · 8 years ago
Comment · 8 years ago

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton