Hacker News new | past | comments | ask | show | jobs | submit | doty's comments login

> Look, most modern software is spending 99.9% of the time waiting for user input, and 0.1% of the time actually calculating something.

I'm sorry to say that this argument is not even wrong.

As programmers, it is not useful to us to think about that 99.9% of time. The 0.1% of the time is literally our entire job.

"Most of the universe is not Earth, so why do we spend so much time thinking about things on Earth?"


Am i mis-reading this article?

BESIDES not having any particular way to validate a token without asking the service, making the rate a hell of a lot slower than 2^64 tokens per second (lol wut) doesn’t it also assume that you have 2^46 valid tokens in existence? Isn’t that 70 TRILLION valid tokens, or nearly 9000 tokens per human on earth?


From the post:

> The same doesn't apply to the player sprite, as Aseprite takes minutes to compile the atlas for the nearly 1000 frames we have.

Why does compiling a sprite atlas for the player take 60ms/frame?


I'm sure Aseprite could be further optimised to press down the constant factor, but it is performing a rect packing algorithm among other things, which is an NP-hard problem.


The bin packing problem is NP-hard, but rectangle packing is "merely" NP.

However, most people just use a recursive biggest-fit-first ¹), a simple heuristic that is surprisingly hard to beat for most workloads.

I couldn't figure out what Aseprite is doing from their website or documentation, but if it's not that then it might be worth it writing your own sprite packer.

¹) https://codeincomplete.com/articles/bin-packing/


Yeah I don't know what they use either, but so far repacking that atlas has not been frequent enough that writing my own packer would save time.


I say- it’s like they hooked a computer to a car. At first I thought “oh man, look! They hooked a computer to a car! Think of all the cool things you can do!”

A few months later I had learned how to reboot the drivers side door latch because of a software failure, somewhere… and I thought “oh yeah, right. It’s like they hooked a computer to a car.”


BTW that code has a security vulnerability in it: the size computation can overflow and you can end up shrinking your buffer, and you will end up smashing your heap, and then bad things.


I know. I don't care. Partly because it's only an example and the requirements are not spec'ed out. Partly because you have potential overflows basically everywhere, if you disregard the context. Let's just say the caller is assumed to make sure there will be no overflow. (Or just add a no-overflow assertion - I don't care).


If you are subscribed, the footer of the page reads as follows:

You can share this article! This URL can be posted anywhere you like, including in public. Anyone clicking on it can read the article without logging in. The URL is specific to your subscribed account, but no one outside of Destroy All Software can identify your account simply from the URL.


Don't the tuples with named values do that for you?

    (string first, string middle, string last) LookupName(long id)


Yes, saw this after a second reading. Very nice!


I think this PYNQ is Python Productivity for ZYNC (http://www.pynq.io/), not "Python Implementation of Linq" (https://github.com/heynemann/pynq), as suggested by the title.


From http://number-none.com/blow/blog/programming/2016/07/07/brai...:

The game Braid originally shipped to the world in 2008, and after some ports in 2009, I have only worked significantly with the code on a few occasions. But I want to maintain this game indefinitely into the future; in the back of my mind, there have always been some clean-ups that I have wanted to perform on the code. Often when shipping a game, the best answer to a problem isn’t evident, and we are under time pressure, so we solve the problem in some way that is sufficient but sub-optimal. Other times, we need to design the game to meet technical constraints of systems we want to deploy on, but as the years go on, these systems become irrelevant, so the code can be cleaned up. I figured it would be interesting to talk about some of these things in a blog (and the blog will help motivate me to think about these situations and clean some of them up!)


As a game developer in a semi-previous life, this sounds like such fantastic luxury.

Game code is often (not always, and in larger studios that maybe have their own engines even less so) fire-and-forget.

I'm almost kind of jealous. :)


After a few days of working on it, it seems like he’s been able to cut about 25k lines of code from the original ~95k, taking it down to about 70k lines. Pretty nice!

Throwing away never-called functions, chopping out hacks for now-outdated platforms, de-duplicating subsystems, switching to easier-to-reason-about data structures, making assets and related code use more standard formats, etc. must be pretty satisfying, like peeling old faded cracking paint off a wall and refinishing it.

I wonder where he’ll end up.


I am reminded of JWZ's "On Toolkits" (https://www.jwz.org/xscreensaver/toolkits.html):

"Let's suppose that down in the bowels of some particular version of some particular toolkit library, there lurks a bug. Let's suppose that the nature of this bug is something relatively obscure: say that it's something like, if you hold down 5 keys on the keyboard for 10 seconds then drag the middle mouse button, the text entry widget gets a SEGV. (In fact, I'm not making this up: I saw this very bug once, years ago.)

Now, that's the sort of bug that is not likely to be noticed or fixed, because it's the sort of thing that people "never" do. If that bug was reported against, say, a web browser, nobody would much care: User: "I can crash my web browser by doing this crazy thing!" Developer: "Uh, don't do that then." And that's not a totally unreasonable response.

However, in the context of security software, it matters, because then it's not merely a cute trick that crashes the program: now it's a backdoor password that unlocks the screen."


Also from that article is a good advice in general:

Bugs like that will exist in GUI libraries; it's inevitable. The libraries are big, and do many different things. So one way to protect against that problem is to keep the number of libraries used by the xscreensaver daemon to an absolute minimum.

If you want to make less buggy software, you should aim to reduce complexity as much as possible, and not just hide that complexity with a library. The coordination of multiple processes as exampled therein is a good demonstration of how splitting functionality into multiple pieces may mean adding complexity overall because of the need to coordinate how the pieces interact.


This sounds like a job for Erlang, not JWZ staring at C code until he's convinced it won't segfault. A small monitor process could do something reasonable when the big GUI codebase fails, and then everyone wins.


The design of X screen lockers makes that kind of difficult. Exclusive keyboard control is exclusive, meaning the secure locking process and the pretty crashing process aren't going to share very well.


That link is redirecting to an unexpected image for me.

Edit: it works if I copy-paste the URL.


From a personal email, jwz said I could quote: "Every time [Hacker News drops by] someone launches a DDoS. This time it's a SYN flood. Pretty much like clockwork." This looks like a response to that.



Is it some item of human genitalia? If so, you've triggered JWZ's anti-image-hotlinking system.

There must be something somewhat unusual about your browser or maybe something is mangling HTTP requests on their way to his server.


Yes, yes it is.

Does the link work as expected for you?

The strange thing is that it does work for me if I copy-paste the link (as opposed to ctrl-clicking it). There really shouldn't be much that's different between those two requests except for the referrer header.


It does work as expected for me, no matter how I visit the URL. (The first time I viewed the page, I ctrl-clicked the URL.)

> There really shouldn't be much that's different between those two requests except for the referrer header.

I don't know the details, but I gather that that's a big component of the anti-hotlinking system.


jwz just confirmed on Twitter that he blocks requests with HN in the referrer: https://twitter.com/jwz/status/665658171415859200


Odd. Clicking on the link in the HN conversation works just fine for me.

Wait. Does running Firefox in Incognito Mode not send along a referrer?


*referer ;)


I am neither an HTTP server nor client. ;)


Huh. I guess we don't have time for jwz, either.


Appears to be one of those bizarre people who gets offended when people link to them. They were more common back when bandwidth was as precious as diamonds, and I see this article dates from that era. On the modern Web, I've never been sure if they don't quite understand what the internet is for, or what.


You're going to accuse jwz of not understanding the internet? I'm going to assume you have no idea who jwz is.


Anyone who actually gets angry when they're linked to (that image seems calculated to offend, not merely deflect bandwidth usage) has some kind of fundamental disconnect with how the internet is used on a day-to-day basis. It may be a social/emotional disconnect rather than a technical one, but it's still a disconnect.

I suppose I should acknowledge the possibility that he's just kind of a dick and likes trolling people for lulz. That's not really better, though.


It's his server. He gets to decide how it responds when people send it requests. If there's a disconnect, I think it's the people telling jwz how he needs to configure his server.


> It's his server. He gets to decide how it responds when people send it requests.

I don't understand why you think this contradicts anything I said.


Sending drastically different content based on where your URL was clicked from, should indeed count as one definition of "not understanding how the hypertext web works." It's also something you're free to do, and the rest of the web is free to stop linking to you in response.


I suppose I should acknowledge the possibility that he's just kind of a dick and likes trolling people for lulz.

Or perhaps that he's just kind of a troll and likes dicking people.


Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: