117 comments

[ 3.2 ms ] story [ 186 ms ] thread
Interesting, maybe a bit more like bubble memory than a hard drive.
This is really cool. I really like Minecraft computer components, but I could never help to think that if the guys who build them, started playing with something practical, the results might be more tangible.
This is a great learning experience for anybody, young or old. Maybe the builder in the screenshots is a carpenter and just trying to learn how hard drives work. Maybe he's a kid who will build the next gen drive in 20 years based on his ideas seeded here. How do you know?
Because if he's lucky, he'll be weaving magnetic core memory in 20 years.
I have a friend who used to keep excitedly showing me his crazy, impressive redstone ALU/CPU designs. I kept trying to get him to buy an FPGA and build out something with real hardware, but he maintained that a big part of why it was fun was because of the environment and community that came with Minecraft. That might go some way toward providing an explanation.
So, did anyone do a Minecraft-to-VHDL transpiler yet? :) Sneak up on them and convert their in-game creations to something that can be synthesized into actual hardware.
Or the other way around, so we (boring people) can synthesise fully working Minecraft worlds from VHDL ;)
We can finally build a Minecraft-Implementation of Processing Sequences!
Or not. I think that the medium plays a very big part here. It's the essence of hacking, twisting something like Minecraft engine to run processors, and hard drives, and stuff. Doing the same on VHDL? Boring.
Think of it more like a better UI on top of EE307 or whatever your local equivalent is for low-level hardware design. I had to scratchbuild a functional CPU using nothing but NAND gates to pass mine. I got through it, somehow, producing a CPU which would run minimal assembly-esque programs but which existed on no physical hardware and wouldn't be for for any purpose if it did. If you can do it with red stone I think any rational person would say you have all the knowledge my class tried to impart.
It's the old Church-Turing thesis in a way; instead of using logic gates implemented with silicon transisters, they're using physical blocks and switches in minecraft. The principals are the same, just a different 'substrate'. DNA can be used as a computing substrate[1], and at a more macro level, the structure of cells[2]. The minecraft guys have a lot more in common with the early computer engineers who used relay switches and diodes on rotating drums.

[1] http://en.wikipedia.org/wiki/DNA_computing [2] http://en.wikipedia.org/wiki/P_system

"playing" "practical" "results" "tangible"

The relationships between those not-necessarily related words would need considerable detail for the claim to mean anything.

Play doesn't require results, a virtual world in a computer will never be tangible and is likely used by people uninterested in being tangible, practical things usually aren't involved in playing, it goes on and on.

I've worked in hardware, and think this kind of play is meaningful.

You confront many of the engineering challenges you'd face (in terms of line routing, timing challenges, design concerns, modularity, etc), but they have simpler and more straightforward constraints because of the different medium.

You're also really unlikely to get results using exactly this same skill set when trying to work with real hardware. The immediate need for programming and complicated tools becomes apparent when you try to grapple with the complexity of modern ICs.

If you're just going to have them blink LEDs using logic gates, I fail to see what you think you're getting from hiding all the logic circuitry in little black boxes and making the parts harder to work with. I've encountered all the engineering concepts (minus some physics concerns) I learned in several quarters of circuit design as an undergrad.

The reality is that Minecraft actually is a very good tool for introducing hardware concepts, because it removes the dependence on understanding software to do something.

(Really, the tooling around hardware needs to be better, particularly for things like FPGAs. Raspberry Pis and Arduinos are making good inroads.)

I'm a Minecraft modder and while mods are really exciting, sometimes the vanilla stuff is where it's at.

Awesome job.

Command blocks also bring a whole new level to that.

There is vanilla and then there is vanilla with command blocks.

They are getting closer and closer to modding and are almost like an in-game programming language.

For example, here [1] is a command block command that procedurally generates giant oak trees [2].

[1] http://pastebin.com/raw.php?i=QzS0M4Vn

[2] https://youtu.be/6cJL4lM7KR4

(comment deleted)
Thank-you so much for sharing Life in Life!

It's the perfect way to convey how complicated transistor-level emulation is to design...

The game of life simulation is definitely ready for another layer of meta, GOL simulating GOL simulating GOL...
Once you know how to simulate GOL within GOL, you can go as deep as you want.
A period of a single cell would take 35328^2 periods and (2048*2048)^2 cells of the most underlying game of life simulation.
A Life acceleration algorithm would help with that, but each cell would still require 4Tb of storage (though that storage could be shared by all cells, II think).

https://en.wikipedia.org/wiki/Hashlife

And there is not real purpose since the rules are the same for every level. Making them different and more complex would be interesting.
It's turtles all the way down: https://www.youtube.com/watch?v=D6aP9S9rEQk
According to the description, this was done with video editing, rather than an actual running nested simulation.
It is a simulation of Game of Life in Game of Life. They did loop the video though. Obviously it's not possible to fully simulate such a huge machine. You could do it with sufficiently clever optimization, but the result would be equivalent to video editing.
Even if this has no practical reason to exist, it makes me happy to know that it does. The world is a better place for it.
It is nice to imagine that I have millions of these in my computer and for each there is small data janitoring gnome.
Cool, makes me want to start tinkering with Minecraft, but can't really afford anymore time sinks in my life. Still its amazing what people can do with it.
(comment deleted)
(comment deleted)
Someone needs to make a FUSE driver that patches into this with a mod for Minecraft.
Hm, add CPU and we can play chess :-)
This is a good opportunity to plug ORE, a Minecraft community specifically for this kind of thing:

http://openredstone.org/

That video on their main page is mind-boggling to me.

I have a friend who's a regular on that server, and he would occasionally explain to me things like how they take advantage of how Minecraft's redstone handling works to shave precious ticks off the latest ALU design's return time, or how they created a fully vanilla-compatible "internet," to pass data through wires between different people's machines.

They've got mods set up to copy and paste blocks, so you can build modular systems out of components and avoid repetitive block-placing, but AFAIK, everything else is vanilla. It's incredible.

I have to ask: Has anybody managed to mine Bitcoin in Minecraft yet?
Provided you set the input block, the implementation shouldn't be too hard. You need an incrementing counter included in the input, some feedback that will stop it and a huge field implementing the hashing. Likely much less complicated than the drive presented here... but much larger.
Interesting fact: If ENIAC was tasked with calculating the current Bitcoin hashrate, it would have to mass as much as the world's oceans and would require an earth's surface worth of solar panels to power it.
If he can shorten the duration of the redstone signals to be very small pulses, he'd have a 'flash' drive!

/Working with PCIe flash memory products, so getting a kick..etc..

//Sorry

This is clearly a memory, not a hard drive. Kind of expect better from HN...
It's persistent storage; your data will still be there if you power down Minecraft and start it up again later ;)
It's a hard drive. The storage is persistent. Assuming your argument is that the world the device is constructed in isn't guaranteed to be persistent, then that renders physical hard drives in our physical world as non-persistent; let's see how persistent our data is when Sol goes red giant... ;-)
What does persistency have to do with whether it's a memory or a hard drive? There are plenty of persistent memories.
jeremycole is correct, its closest real world analogy is a bubble memory or the short lived fad of using CCDs as a large linear memory (that went nowhere around the mid 80s) or most accurately its compared to an ancient mercury delay line (although Hg delay lines and CCDs are/were not persistent but their mechanical operation is similar)

There was a fad of endless loop tapes in the 80s... Exatron stringy-floppy. That is probably the closest physical analogy. Think "cassette tape interface" with electrically controllable R/W on an answering machine cassette, all conceptually of course this isn't how it actually worked. It had nothing to do with a floppy other than storing about the same amount of data, very java vs javascript like.

http://en.wikipedia.org/wiki/Exatron_Stringy_Floppy

Hmmm. I stand corrected. :-) Thanks people. :-)
It's a sign of the times. "Hard drive" has come to mean simply "nonvolatile local storage." Some people who know better even talk about "SSD hard drives" without snark or irony.

It wasn't that long ago that "hard disk" meant "3.5 inch floppy disk" to many people. Pedantically speaking, they were wrong, too, but the little floppies were hard to the touch and they did store files. It made sense.

It's a triumph, in a sense, that so many people are at least able to grasp the function of this invisible machine (the hard drive) even if they aren't using the term in an engineer's excruciatingly precise and correct way.

At what point will Minecraft come out of the closet and proudly claim to be the largest computing principles MOOC ?
In recent versions of MC, you can do a much better delay line memory with comparators. You can actually end up being able to store 2b / block (2 and not 4 because comparators have to be placed on something not a comparator.) - it would be half that but there's a trick you can play to avoid requiring redstone dust between comparators.

The delay is faster too - 1 redstone tick / 4 bits, or 40 bits/sec per line, as opposed to this implementation's 1 bit / 8 redstone ticks / line, or 1.25 bits / sec / line. (Note that this implementation of piston tape is decidedly suboptimal: the maximum is actually 3 bits / 4 redstone ticks / line = 7.5 bits/sec/line, as you can actually check for 8 different block types (glass / solid / sticky/non-sticky piston facing 3 directions) and you can make a faster-resetting piston loop.)

The biggest issue with comparator delay-line memory is that there's no way of pausing it.

There's also a way of storing arbitrary amounts of data per block, and that's to use the fact that items with NBT data will stack only when their NBT data is identical. The easiest way to see this is to try to stack renamed items, but there are others. You can make a hopper or dropper chain and encode data in which line which enchanted item is in.

I have yet to see a practical implementation of the above, though.

A comparator memory isn't really a hard drive, because it loses its data if turned off.
Define "turned off". A comparator loop persists just fine without any input, just like a piston loop.

It's non-volatile sequential access memory - which, in my opinion, is the same category a hard drive falls under.

I'm not sure that delay lines will retain data when the chucks that hold them are unloaded by the server.
Yep, they do.

Repeater delay lines used to not, but that bug was fixed.

(comment deleted)
How do you read off the state of the NBT data?

Can command blocks match items on NBT data or chests on their data?

You can do it without command blocks.

Use an item sorter.

An item will stack with another item if they are identical, which includes NBT data. Using an item sorter you can detect this.

As parent said, items with the same name stack together, items with different names don't. There are item testers in minecraft based on whether the item will stack.
I can see several ways that you could implement storage and processing using that, thank you.

For anyone else thinking about the problem, there are two processes that could be used by item sorting to do processing:

1. You can use the stream of items through a pipeline (if deterministic enough) to encode a bit of strings. You can do this without enchanting, because you only need two item types.

2. You initialize an instruction decoder and have it sort the item based on type, which then triggers a command block to decode the instruction further.

>> "I have yet to see a practical implementation of the above, though."

"Practical" is of course used here in the loosest possible sense :)

Reminds me of http://xkcd.com/505/ "A Bunch Of Rocks"

Although: no need for someone immortal with infinite time and energy to run the simulation, rather lots of people each devoting a small amount of both to it...

For people interested in how computers work, I recommend the book/course "From NAND to Tetris - Building a Modern Computer From First Principles"[1]. It starts of with boolean logic and NAND gates, and it steps you through making a computer that can play tetris.

[1] http://www.nand2tetris.org/

I haven't read that one, but I'll definitely check it out. I'd also recommend Charles Petzold's book called "Code". One of the best technical books I've ever read!

http://www.amazon.com/Code-Language-Computer-Hardware-Softwa...

Besides "Code," I highly recommend "The Pattern on the Stone" by Danny Hillis, who also happens to be the designer of Thinking Machines' massively parallel supercomputer, the Connection Machine. It covers more material than Code in a lot less time.

In "Code," Petzold makes sure to cover the material exteremely slowly so that you won't miss any details, so it may get boring for some, but I would also read Code if you have the time and interest.

I remember hearing that the nand2tetris people were going to do an edX course on it in the fall. Does anyone know anything about that?
Thank you so much. I have been looking for something that explains these principles to a non developer but technically interested designer this looks like it will do the trick.
I always wonder when I see these things, are players placing each block individually? Or are they mapped out in some file and fed to the server to render?
I imagine they use programs like MCEdit.

You'd create parts of the hardware in Minecraft, then use MCEdit to copy and paste those parts.

http://www.mcedit.net/

In addition to MCEdit, which reads and writes Minecraft worlds offline, there is WorldEdit, which can be used in-game (whether via a client-side mod such as Single Player Commands or via the official server-side plugin). If I recall correctly, with CraftScript installed one can also automate block placement. With the right config you can make this all work in SSP or SMP - WorldEdit will use blocks from one's inventory instead of creating them ex nihilo.
In classic minecraft there used to be a convenient command where you could type /cuboid or /z and then place or destroy two blocks, and it would fill the area in between. There were countless more server-side commands and mods that let you build large scale structures. Copy and pasting sections, building spheres or cylinders, making shapes hollow, etc. Flying was much easier and faster too, although it did required a mod.

Minecraft now has so many more features and block types. But I miss some of those features, and building large scale structures is much more difficult.

Can someone tell me what's more difficult to create? This hard drive or the scientific calculator that someone else also created in minecraft?
This will not work as described. I think his design is a good idea, but still does not work.

I build a better harddrive (with 4 kb storage!) over a year ago, imgur link will follow.

Now to the design problem in this HDD: see that all the blocks are blue in the platter? No way to swap each of the bits without magically creating new green blocks. My hdd solves that problem by having BOTH block types available on the platter. But see for yourself:

http://imgur.com/a/8ESMW

What won't work?
How confident are you?

I know very little about Minecraft, but if this doesn't work, it pretty much has to be trolling. (No way you build something like this and not notice that it doesn't work.) And then I wouldn't expect them to offer a link to download the map, and I wouldn't expect someone else to say they've got it working: http://www.reddit.com/r/Minecraft/comments/2e0ghk/fully_func...

Imagine a write process: You'd need to somehow replace the visible blue blocks with a green block. But where does the green block come from?
I don't know much about MC or computers, but as far as I understand each bit has both blocks, shift up for blue=0, shift down for green=1. Here: http://i.imgur.com/rqZm4DU.gif
Yes, but you don't see BOTH block types on the big tape. Swapping bits requires one block for each state, but the green ones are missing from the tape screenshots.
I don't think that they have to necessarily be green. So the fact that you don't see them may not mean that they are not there. He may be using blocks the same color as the structure for aesthetic purposes.
ok, it does work. i totally forgot about the command blocks. he's using them to change the block type.
If you like to play with logic stuff, this is something to try out: http://www.neuroproductions.be/logic-lab/ It's simple, but does it job pretty visually.
That's awesome! The making of layout is quite effortless.
Really nice, however I there is some buggy behavior in this logic simulation: It can end up in an inconsistent state:

I have a little Robot Odyssey experience where it would loop forever between inconsistent states. However that design is not perfect either, it's still much better than this in my opinion.

The interface is quite nice though.