That is absolutely awesome. I used to have something like this: a pair of very fast dacs hooked up to the 16 address lines of my computer and another dac hooked up to the databus. It allowed me to look straight into the memory of the machine as the processor was accessing it, quite a powerful tool. Yours is nicer though (and with todays memory size I'd hate to think about the quantity of data that passes in a split second across the bus of a modern pc).
That reminds me of the old story of people having a audio speaker connected to the address but of their mainframe so they could detect error conditions by the sounds being made.
As I recall, it was a radio that was tuned to the Kilohertz band. This was before the FCC was so careful about computers emitting radio waves. A computer that has a clock cycle measured in Kilohertz can emit radio waves in the Kilohertz band.
This makes "music" of a sort, especially when the program running does many things repetitiously. In the early days of computing, multiplication was implemented as repeated addition. Memory access also had a particular pattern of repetitive circuitry.
This provided a base repetition that humans recognize. When code was stuck in a loop, or repeatedly accessed the same range of memory locations, the operators could hear the pattern and know something was wrong.
That reminds me of the time I was poking (literally POKE'ing) around with my TRS-80 Color Computer. I (somehow) had changed it to one of the graphics modes and then set the base address to the start of RAM.
So on the screen you could sort of see the BASIC stack, other important system variables, and even a squashed representation of the text console. So when it was sitting idle you'd see one kind of pattern, and running programs produced other kinds of patterns.
I always thought that a something like this was how the computers on Star Trek worked.
"Computer! Run a level five diagnostic of the starboard nacelles!" bloop bloop bloop...
The foley artists did a pretty terrific job of using sound to differentiate between heavy computation, success, and failure etc. Makes me kinda wish my computer could play a minor third instead of just plopping up a dialog box when things go wrong.
Been pondering something like that for networking.
A while back i read about a guy who had set up his phone so that it would play certain tones when it detected APs while walking around town. This based on their signal strenght, security settings etc.
This got me thinking back to my analog modem days, and how i could tell if i was getting a good connection or not depending on the noise it would make during the handshake.
What i was thinking was setting up a sniffer, and hook that up so certain tones would play based on packets passing by.
I sometimes wonder if modern computing is too reliant on one human sense, vision. More mechanical devices can give us early warnings about developing issues based on sounds and vibrations.
I found at least one old system that did this (although the version I heard related to the old mainframes Edinburgh University had decades ago):
EDSAC II had a speaker to help with debugging and this "feature" was also incorporated into versions of the LEO, the worlds first computer for business applications:
The Radio Shack TRS-80 Model 1 was legendary for the amount of radio interference it caused. I used this at age 7 along with my older brother to add sounds and victory music to pinball games. You could tune the FM radio to a harmonic of the frequency of the processor. Then you constructed loops with short delays to alter the frequency of the sound. You'd hear all kinds of processing garbage during the game loop, but the sounds came out fine.
Edit: I'll bet it's no longer possible to do this on modern CPUs; either the memory busses are inaccessible (SoC) or so highly optimised (DDR4) that it's infeasible to probe them without disrupting the transmission line.
[1] Ciarcia, S. "A Penny Pinching Address State Analyzer". BYTE 3(2), pp. 6--12. February, 1978.
Here's one for Python. http://pythontutor.com/ It shows the variables, and allows you to step forward and backward. Great for explaining programming to new people who haven't grokked computing yet.
I think a deep visual debugging tools are going to be 'built in' in future in much the same way that HTTP primitives were recently with node and string manipulation was with Python 2.
Text probably serves better because code is often too complex to visualize in some cases, and in others to comprehend generated visualized code.
Think about algorithm that switches values by using temporary variable for example. By looking at text, it's pretty simple to construct the flow follow the values traveling from one variable to other. But if you put it in 2D graphical interface, it becomes very problematic and hard to follow. I would imagine it would be easier if there was like a movie where value would move from one box symbolizing variable to other. But that would make it difficult to edit.
Another way would be to visually represent only change, but then it would be same as textual representation, only more redundant.
Actually I can think of a simple way to visualize that.
The debugger actually displays what I call a folded lattice, meaning that execution starts at the top and goes down, so representing what your talking about would simply look like ">" with lines. It would need some representation of data flow, however, which it currently doesn't have.
Thanks for the info, I'd never heard of that IDE before. With its common name it's been impossible to find screenshots so far.
> Although it sounded like a really cool idea, it didn't take off.
That could have been because it was bought by Boreland, who had a history of 'not succeeding' with projects, whose focus was elsewhere, who lost key staff at an important point, and then were bought out and mismanaged from there forward?
porker, try searching for TogetherJ which was the Java specific version of Together. I may have even used it back around 2000 but don't remember much other than the name.
> Seems text is best (maybe because it supports incompatible hierarchies better).
Both text and visual programming languages are simple representations of the structure of your program - what we normally call an AST. Neither is more 'true' than the other, and things in the text that don't match the structure are syntax errors.
Also, if anyone's interested, I need some help porting it to different platforms. If you can swim in the clusterfuck of x86 for a bit to port it to ward that would be awesome, or even getting working with gdb this could be an actual tool.
hey the projects open source, if you can add your language to ward then it might help your language have a unique IDE, It'll have something other (excluding bf) languages don't have.
Shameless self-plug: Me and a friend developed a Java debugger [1] that visualizes (Java) programs with UML class and sequence diagrams [2]. It isn't actively developed anymore, but the demo version [3] (along with Help -> Tutorial) can still be used to give it a try.
It was quite an involved & fun project as we used Java VM Tool Interface directly instead of using JDI and the layout algorithms for the diagrams are quite fancy too :)
All right, I'll be the first one to admit that I don't know what the hell I'm looking at. Would some sort of explanation, or at the very least some source code, be too much to ask?
Its interesting that its dynamic. Idea to think about would be snapshotting dot files for graphviz. Then you can do all kinds of crazy stuff with the graphviz output.
My databases at work snapshot out their schemas to graphviz to create diagrams of all the FK relationships automatically every day, which I find helpful, and more or less inspired this idea.
I would love to have a visual representation of all the possible branches that can be taken in a body of C code, with an easy way to ask the program to tell me what are all the conditions that must be met for this branch to execute.
Yeah that was the idea, I'm posting it around to see if I can get a few folks interested in porting it to different languages. Maintaining everything is hard on a one man teenage team.
The font looks like Terminus. The background transparency effect and hidden scrollbars can be set-up with most terminals, this one is probably urxvt. As for the borderless/undecorated window, that's probably done via the Window Manager. DWM[0] for example doesn't paint window decorations but there's usually a way to set this up in Gnome/Unity/KDE/etc as well.