Perhaps another way to say it-using an evil compiler could bootstrap any kind of malicious code in the compiled artifact whether it’s a compiler or not.
HN user
deckarep
Is it just me…or does article seem a bit contrived? I was expecting to read this to learn about a really powerful hijacking technique when in reality it’s just a program that manipulates your input program.
This is something that could easily occur with scripting languages, backend systems, open source, closed source, etc.
Basically any black-box system that takes in some input could pre-manipulate the input yielding an unknown/unexpected output.
Curious what makes Raylib good for emulators? I’m genuinely interested in this.
Brilliant project and execution. I love the idea of bringing the tactile experience together with a digital gaming experience.
One more thing: Apples’s turnaround was one of the most unexpected things in modern computing.
Also, never have I ate my own words harder with the “Mac sucks” thing.
At the end of the day I’ll use what works.
As a long-time PC user, I remember going to CompUSA and seeing the Mac section of games which was laughable.
Back then you bought Apple if you were a sound engineer or into graphic/media design.
I used to tell people I’m a die-hard PC user simply: Mac sucks!
Fast forward to around 2009 and I’ve been a happy Apple user since then for all my software engineering needs.
Is the platform perfect? Nope! And nothing is.
Is it expensive? Yes, but the quality is fantastic and if one really wants to can get 5 years easy out of any Mac computer…I’ve got 11 years out of my family’s Mac mini that I was able to upgrade a few times.
Which brings me to my only real gripe: the lack of upgrade ability and the obsession with “thin” design.
Please address that because everything else I can mostly get over.
I had a similar problem. My flash content was several modules where the main module swapped in and loaded in sub-modules.
The main screen would loaded but when clicked wouldn’t resolve the sub-modules correctly but I was able to just play the sub-modules and individually and see the old content in all its cheesy glory.
I know this doesn’t satisfy compilation issues but for playing Flash content using a modern engine try out: https://ruffle.rs/
It’s written in Rust (don’t shoot the messenger) and was able to play some flash content I had produced around 1999…
Ok I’m going to go crawl back under my rock.
Awesome blog post Ben! Question: how did you come up with your list of opcodes?
I ask because while some opcodes are obviously needed others as not so obvious and coming up with a balanced instruction set is somewhat difficult design problem.
Question on VM snapshotting: what’s the purpose/point in even having such an ability? What does it allow you to do?
I only know of snapshotting perhaps being necessary to support coroutine based context switching.
Thanks and very cool project!
Big shoutout to the ScummVM team for keeping these games alive and well on modern hardware.
But did you know they also often times will additionally fix existing bugs in these games. Bugs that are now decades old!
These classic titles are now even better to play than when they originally came out.
Also for anyone wanting to learn the history from the man himself Ken Williams recently wrote a book on Sierra’s rise and fall as one of the industry’s top gaming studios.
Obviously he wasn’t there for the tail end of things during the acquisitions and fraudulent period but what I found most interesting is how Sierra was bootstrapped in the first place.
Ken is a brilliant thinker and had the foresight to build a game engine that Roberta could plug and play her game content in because she admitted to not being a great coder.
Later Ken wanted his next generation games to be built as a virtual machine (The Sierra Creative Interpreter) which meant they only had to make the game once and build the VM for different architectures. Again a brilliant move.
Check his book out: https://kensbook.com/
Oh wow, thank you Beej for this work and content! Your resource has been a tremendous reference to many of us myself included and still stands as one of the best resources to network programming today!
TIL: John Carmack almost shipped a game with 1 extra frame of latency unnecessarily...
This is one thing I’ll never understand. I can’t stand heavy blankets but I do like warmth.
Just my personal preference.
- Walking is great: I tell people that my days in general are always better if I started out with a walk or really just some kind of exercise. - Also doing tasks that allow parts of your brain to be asleep. For example if you are a software engineer that relies on the logic/problem-solving part of your brain to be sharp and awake then do an activity perhaps in the evening or on the weekend that allows that part of your brain to sleep/rest. This means engaging at something that allows you to use the creative thought process, or working with your hands perhaps on a mechanical/fix-it task. - Music also helps with mood. But finding the time when you’re ready to relax and listen to something that jives with your mental state is a challenge. It’s all about finding the alignment. - Movies can be helpful in terms of the passive engagement and allowing you to escape your reality for an hour and half can be helpful.
Overall learning to combat the problems with anxiety and mental state are not easy. It takes some trial and error but I think the biggest piece of advice is finding ways to break up your routine is helpful. I have gone years doing the same thing over and over with days on forgetting to live a little...it’s not healthy in the long term.
This world we live in...
Pretty sure my dog will stare at an intruder with a derp face and then run away.
But, she’s still the sweetest little potato ever.
Found this little gem: Chip8 implemented in Go with an SDL based rendering engine.
I don’t know how the inner-workings of NumPy work...but this article seems quite plausible because it’s making use of parallel computation in order to achieve a faster result.
The title just seems to imply skepticism over what looks to be a legit approach.
Haha at: written by a single genius. And so true.
I see this behavior a lot too.
Inexperienced engineers will nitpick about what is often minor “performance optimization”, clearly not seeing the bigger picture. Example, why should we spend precious developer time to rewrite some code using something that is often less readable when it’s called once every 30 seconds?
To the folks who do this: you are better off spending the time making data-driven decisions and optimizing for the big picture. In other words measure first than come up with an optimization that has a large impact on the system. Not this micro-optimization, I-love-to-tickle-myself stuff.
Learn to see the bigger picture.
I’m just gonna leave this right here on the matter: https://youtu.be/JwzDG_kIq68
I agree with this sentiment. A lot of this depends on purely the angle of how you view things.
One example: People claiming the borrow checker gets in their way in Rust because it’s so strict.
Guess what? If your code doesn’t compile due to the rigidness of the borrow checker, it’s incorrect I’m sorry to say. It’s either got a data race, use after free bug or some other invariant. You don’t want that behavior in your code at all.
I’m happy to offload the responsibility to the compiler to check for this.
You won’t get it until you’ve been bitten.
Needs moar stars!
It’s such a nostalgic feeling of the earlier web back when just interest groups, universities, fan pages, web-rings ruled the web. Back before it became commercialized by greedy folks that threw ads all over the place, tracked everything you do and spammed the hell out of your inbox.
I miss the good ‘ol days for what the web was intended for.
One of my first projects was maintaining the site for: Looney Tunes Teaches the Internet.
If you look hard enough it’s still out there.
Ok, is it just me or is Andrew Kelley a one-person, prodigy coding machine? I’ve been following Zig’s development for a few years now and the technical wizardry he’s gone through to develop a powerful, innovative language that is self hosted, challenges all the new systems languages out there, compiles C and supports magical cross compilation is just mind blowing to me.
Thanks Andrew for pushing the boundaries and rethinking what can be possible with modern tooling.
I highly recommend people to watch his live streams. Excellent stuff.
That never stopped the gracious folks on the ScummVM team ;)
Ok honest question I got really excited about Nim when I looked into it about 1 year ago.
But I started looking at community projects on Github and found nothing except for Nimlang itself. This is not meant to be critical of what I think is an impressive language...just more of a question of where are Nim open source projects to be found?
Isn’t that the whole point of blockchain? A distributed ledger with no central authority so no single entity has the power to manipulate the history...
Bingo, generalized statements like this help no one. It’s a very narrow-minded view of software engineering. Instead the author should adopt a more pragmatic view of the world of coding. We don’t live in a black and white world and software is no exception. Use the right tool for the job and remember everything has tradeoffs.