This may sound silly, but I don't think I've actually seen a more elegant functional visualization of how computers work at that level. I could see this being used as an educational aid to introduce students to the key concepts.
If you like this you might also like the games "Human Resource Machine" and "TIS-100", which both give a similarly visual insight into how computers work.
I'd only recommend HRM for people who haven't touched assembly before. For those that have, it is a bit of a waste of time and not very challenging...I kept hoping the problems would be harder, and maybe something that you wouldn't do in an introductory college course.
TIS and Shenzhen I/O on the other hand have unique challenges and are well worth your time investment for help thinking outside of the box. Many different ways to solve the problems, unlike HRM where there is basically one obvious speed and one obvious size solution.
On the contrary, I teach x86 assembly to advanced audiences and I still haven't solved some of the harder optimization problems there. It was so much fun!
Maybe I gave up on the game too early. The difficulty was not ramping up fast enough for me. I might take your advice and reinstall it and continue where I left off.
I thought HRM had a very odd skill curve, started out very easy and then got difficult quickly. I think overall it's too hard for somebody who isn't a programmer, and there aren't enough hard problems for a programmer. And once the problems got hard, it seemed more like work and less like fun. And a lot of it seemed like busy work since there were so few instructions.
Excellent point...I think that is what was happening...I must have gotten to the "hard" zone as you describe, and simply got bored of work, but wasn't challenged (which is what I want from a game).
I don't really know assembly (other than a little RISC) and I breezed through HRM, but I still had a lot of fun with it. There's some real charm and humour wrapped around its programming puzzles, unlike most games of its ilk.
The main game is only half the story though, fully optimising the later levels and especially the optional challenge levels is not trivial!
I enjoy TIS-100/Infinifactory/Shenzhen IO. Nevertheless, I don't think any of those games represent all the key elements quite as explicitly, like the stack pointer and how the stack and heap build up. In terms of games with that level of detail, the only one that comes to mind for me is https://microcorruption.com/ which displays exactly what's in every register and in memory at all times. But I think playing it requires a little familiarity in advance.
My favorite of all of them is SHENZEN I/O though, as it's a bit simpler than TIS-100 but more programming focused than both Infinifactory and SpaceChem. All of them are fun though.
I liked HRM but TIS was annoying and difficult enough that I thought "you know I could be doing TIS-100 or I could have equal frustration figuring out the nordic bluetooth SDK and mbed.io"... I went with the real world device. Same amount of skill required, actually useful though.
'The story of how TIS-100 came to Early Access this week starts where many development stories end: with an idea for a sprawling, grandiose game that proved too impractical to live.
“Years ago, I came up with this game idea called The Second Golden Age,” says Barth. It was basically a cyberpunk thriller set in a future Middle East crawling with nanotechnology other weird future tech.
“You'd be an engineer, and you'd be dabbling in all these different technologies; you'd be designing all these tiny little devices that could like, go into your bloodstream, and it'd be a super-cyberpunk engineering game,” says Barth.
The idea was to build an open world filled with different kinds of puzzles for the player to solve, a bit akin to Myst. Multiple systems of puzzles would be in play -- all of the chemical engineering puzzles in SpaceChem would be akin to one distinct subset of puzzles in Golden Age, for example -- and players could learn things about the world and advance themselves by mastering various puzzle mechanics. as the player could explore a virtual world filled with different kinds of puzzles to solve. Recently, Barth took a shot at making his idea a reality.
“We were really deep in production on Infinifactory, and I really wanted to ‘go indie’ -- even as an indie developer -- and make something on my own, to prove I could still do that,” recalls Barth. “Because now I don't make anything by myself, right? We have between 4-7 people on our team full-time, plus a bunch of external people. I wanted to see if I could make something -- not by myself, because I still didn't -- but at least with a smaller team.”
So Barth set out to try and recapture something of his past by crafting his Second Golden Age with some collaborators, designing a game with a story and five different puzzle games within it before realizing "Oh god, I can't make another game. There's so much work here! It doesn't make sense, it will cost a fortune to make the art, I just...I don't have time for this."
But out of that aborted attempt came a piece of game design that would become the foundation for a game he could actually make, a game about solving puzzles with assembly code.
“One of the puzzles I designed [for Golden Age] was exactly TIS-100,” says Barth. “The original story of The Second Golden Age was going to involve, as you're going around this future city in the Middle East, you can stumble into this junk shop where you find this old computer.'
Yeah, very usual, and these companies make me very happy - they make exceptionally well paying customers when they critically need to redo everything into a "normal" application.
I did this when I worked at JPM Chase in 2008; not as developer but as an analyst on treasury side. I executed $B daily of margin trades through an Excel macro.
Not very sophisticated. Each row in the spreadsheet was a trade. The loop would just send commands to a 1970s-era mainframe terminal application. Everything had to be executed in order, just like a human using the keyboard to enter the trades manually. The trades required several calculations, and you'd have to enter the results in terminal screen to execute the trade. Other analysts had been doing those calculations one by one on a calculator next to their mouse. The efficiency being, they didn't need to switch between apps on their PC.
This macro only existed because I built it. They didn't like it much, they wanted me to do it manually. I said OK and kept using the macro anyway. I quit after ~6 months out of boredom.
Unreal. I was working as a developer in their investment bank at that time and by then a lot of their software suite was pretty mature. In credit risk (my group) they had built a sophisticated set of applications to prevent being burned by another Enron. I'm pretty surprised they couldn't ask someone to take your macro and replicate it into a web app, but of course no one asks for our opinion. :)
Sure - but I am guessing a few errors here and there would have much less impact than a single programming mistake. Not that I think this is the right way, but I do understand where they come from.
Human error was much more common. But they did have another tool for reconciling trades that was better. It was web based and auto reconciled most things that were obvious matches. I don't recall why, but they were not too concerned with mistakes so long as we could fix them by the end of business. I think it was because that's when clients would see something was off on their statement/account. There was never a concern of losing money. I wish I could remember why, but this is my cumulative experience in banking industry and I quickly forgot everything I learned.
I can believe it. Once upon a time, a friend of mine at one of the largest oil companies told me how they were passing around a complex spreadsheet with tons of tabs and formulas and it was for managing the budgets of all their chemical plants around the world. I tried to explain how I could just put it all into a database and whip up a front end for it, but he said there's no way a consultant like me could get anywhere near his department since all firms had to be vetted extensively, there'd be a big RFP, etc, and anyway it sounds like they thought Excel was just fine for managing all this money.
I was encouraged to use Excel/VBA by our official Auditors and Advisors at a Fortune 500 public company. The rationalization was (whatever you might make of this):
- Excel is generally "contained" without too many external dependencies (not really true, but truer than others...)
- Excel is easily auditable (true for excel formulas, less so for VBA, but sure, better than Perl etc)
- Excel is easily versioned and frozen (some truth to this)
Obviously none of these answers are universally correct, but there was some truth to this. And Auditors/Advisors are generally more concerned about risk mitigation than other goals.
I don't know about billions, but I've personally witnessed an Excel spreadsheet for millions of dollars that was manually updated.
It was sent over an encrypted Symantec thingie (where it was processed on my side), but errors weren't uncommon, it was really hard to automate, and I did get to see people being over-(and under-)charged due to manual errors.
Edit: a sibling comment has a story about moving billions over a macro, not mere millions :) .
One place I worked, they processed and paid payroll twice one month because someone dropped the files again and the ESB dutifully picked them up and sent them. That was a $6m mistake, took them years to work out how to reclaim the money from the workers (unions involved, contract lawyers, you name it).
A Brainfk interpreter in pure Google Sheets formulas. I chose BF because of how cool and simple and powerful and turing complete it is and because I have a lot of practice implementing it (Just gave a talk at PyCon IL where I live coded one, https://www.slideshare.net/AurSaraf/virtual-machines-and-bra...).
Of course it would be at least as easy to implement any other virtual machine, you might not need the parentheses matcher which was the biggest challenge and I had to go through a few designs until it worked.
These things are so much easier than they seem. I just did a PyCon IL talk where I livecoded a BF interpreter just so the audience gets a feel for how easy it is. Try sometime :-)
Try implementing a simple FPGA in Excel. 4-input look-up-table: MID(lutcell,bin2dec(concat(inputcells),1) and hten the input cells can be done with OFFSET to support programmable routing. You can set the values by hand at first, but then connect it to your VM to load in bitstreams :)
I have met an accountant with no knowledge in programming that wrote an entire accounting suite in an excel spreadsheet, which he would copy for each client.
You would be surprised how many accountants still do that. Accountants are a finicky bunch and they don't trust what a cloud accounting platform such as Xero/QB spit out, so they end up writing their own "custom software" in excel.
Excel 97 had a sort of flight simulator. Excel 2000 had a car game. Earlier versions had other little easter eggs, but I think that Microsoft cracked down on them after Excel 2000.
Turns out the federal government to which Microsoft sells wondered, “if they’re sneaking in flight simulators and dungeons, what else are they sneaking in?” That’s the version I was told, anyway.
That, and Easter eggs are another attack vector. How much of a security audit do you think those get?
My favorite is the Puerto Rico Evolver ( http://www.tropiceuro.com/puerto-rico-evolver/ ), which both allows you to play (vanilla) Puerto Rico (the board game), AND evolves to your playstyle as you play. Pretty amazing.
I am 99% sure you cannot do that. Cross-referencing cell loops are detected and prohibited, so you cannot even make a tape reader. Also, I'm not sure if you can set cell formulas with formulas either.
Awesome! I originally wanted to use only cell formulas to do this but couldn't figure out how to modify cell contents from other cells. Can't wait to see what you put together.
This reminds me of a "game" that a friend and I made in Excel.
The game was, roughly, a text-based adventure game. Each row in the sheet represented a "room", columns across gave names to the directions you could go and the target rooms, a description of the room, etc. I think there were other columns to mark whether the room represented the end of the game too. The UI was a bunch of buttons and cells on another tab that were manipulated by VBA code.
The game was never very good, but we ended up creating quite a lot within that limited framework.
VBA is less limited than people like the believe. When I was bored in one college lesson I was playing around with calling Win32 APIs inside a Word 97 macro. I was able to call winsock and write a simple chat application.
Even without diving into the Win32 APIs, there is an absolutely amazing amount of stuff that gets exposed via COM and, as a result, is easily accessible from VBA.
Of course, the biggest downside to all this power is that people actually used it. This is how you end up with businesses that live and die by gigantic and virtually impenetrable Excel workbooks.
Amazing, I did avoid hell to collegues by implementing some form of counter in VBA. My most prized coding contribution. 8 lines that evaporated hell (filtering 1000 rows in Excel to find duplicates) into fun.
I didn't know about App Scripts. This is very cool not just because it is a relatively clean visualization of a CPU but also because (on a personal level) it showed me what App Scripts can do.
Now if only it displayed the register values in hex or binary. As an education aid in college I found it easier to visualize what was actually happening in one of those bases. Another useful feature for debuggers is to highlight the values that changed in the last step. Sometimes even highlighting the exact bit if displaying in binary. I'm not sure how doable that is in Google Sheets though.
Edit: it's also a nice attention to detail that the stack shares the same heap as instructions. It might have been an easy out to put the stack in it's own column.
I can't see the code without edit access? I go to Tools -> Script Editor, click, and it does nothing. No error even. (Happens in both Firefox and Chrome.)
Yes, me too, I also wanted to see the implementation. I did submit a "Problem Report" on why you don't get visual feedback when opening the script editor and getting an error.
Fun read, it reminded me of a Computing Science assignment I remember to this day - prof had us build a Russian compiler that worked with trits (0,1,2) instead of bits. A tool like this would have made traversing and visualizing it a lot easier.
I had this idea one time to use MySQL triggers to create a bunch of XOR gates and then use those as a basis for a CPU. Then eventually I could run Linux on that and rung MySQL on top of it.
I have a pretty big app that uses Sheets for free storage, apps script for processing and HtmlService to expose an json api endpoints and to serve the UI. I'm pretty happy with it. Totally free app.