Tuesday 24 August 2010

An Open Book

I'm not sure this is the right thing to do. I don't know what is. Here are my journal and technical design notes:

At least it should help save some blog time. It's quite a lot to absorb, but dig in, let me know what you think, ask questions.

Monday 21 June 2010

Details and Features

I've expanded a bit on the higher-level goals, now I'll describe how I see it working and some of the features it must have.
The core of it will be a system of virtual circuit elements, or virtual components, connected together via their virtual I/O pins. There will be fundamental component types (that get implemented in code) and composite components built up from these fundamentals (and indeed other composite components). (Aside: The word virtual which applies to most of these concepts, since they mimic real-world electronic circuits, will get a bit tiresome quickly so it will be assumed henceforth.) Input and output to/from the computer running the system will just be implemented as a set of components and wired up as signal sources and sinks. These circuits will run on one or more connected computers, with interconnections abstracted away as much as possible, allowing seamless wiring across machines. It will be edited via the network connection from an editor running on another computer. This editor will employ sophisticated visualisation techniques to make navigation around complex circuits and systems easy, providing rapid editing, tweaking, and viewing of the circuits as they are running.

The hosting service must be able to run on a variety of hardware from old salvaged 386's up to modern high end multiprocessor machines. This is important as I want to be able to utilise the cheapest and simplest hardware to solve a given problem, or conversely just use whatever is to hand to solve the simplest problem.

The overall systems you would be able to create with this tool could be as large as spanning many dedicated machines across a network or the Internet to just a single background task on a single machine. Being able to distribute work and scale systems as easily as dragging a circuit from one box to another and have it all just work is vital for supporting high bandwidth compute bound processing systems (e.g. computer vision) as well as physically distributed systems (e.g. large plant control or multi site monitoring).

Some of the other features I envisage are as follows:
* Libraries of common components.
* Multicore wires (simplifies connection diagrams).
* Wiring conduits (control inter-process/network communications priorities).
* Buses (higher level distribution and aggregation points).
* Diagnostics components (editor only control and monitoring).
* Arrayed connections (for lists and collections of signals).
* Arrayed components (for iteration on a collection of signals).
* Control wiring (signals, think: pass by value).
* Process wiring (objects, think: pass by reference).
* ...

I will go into more detail on these at random in future posts.

Wednesday 28 April 2010

What's it all about?

Ok, so, enough preamble, what is this all about you ask?

For a long time I've dreamed of having a way to make the creation of electro-mechanical, electronic, electrical and purely software devices easier by replacing all the custom control electronics with a computer. This is a fairly obvious approach, nothing new there you say, but I am after something more powerful, I want to be able to construct the controlling software with the same methods and techniques used when creating the physical parts. Designing, inventing, and creating a physical system or machine is a process of experimentation, testing, iterating, and trial-and-error. It involves wiring up motors, switches, lights, sensors, modules, relays, solenoids, valves, and more to IO ports of a computer or microcontroller, fiddling with wiring, tweaking controls, watching the effects, plugging them together in a way you have never before to create something new. I want the same process for the software that runs them. I want to be able to drag virtual components and circuits around the screen, plugging them together this way and that, tweaking values and watching the results, a fully interactive control system working with the hardware, all in real-time. I have so many projects that could work like this, so many things I want to experiment with, so many ideas, so much that could be done with a system like this, that it has become a project to preceed all other projects. Every time I think of a new idea it rapidly degenerates into 'how much easier this would be if my control system idea existed', and then to 'there's no point investing any time in hard wiring/coding my idea when I could be working on this general solution that will benefit all projects so much...'.

And so, we have my project, a technology I am calling Virtual Information Circuitry Engineering, or V.I.C.E. for short. I'll expand on what it entails next.

Monday 12 April 2010

The longest journal starts with a single word

Welcome to my journal. I hope for this to become a place for me to record, reason, and reflect on thoughts and ideas for an ongoing project of mine. I'd like to have a go at describing, divulging and developing these ideas somewhat to see if it helps build them into a working project, or at least help maintain some forward momentum.
I've always admired great scientists and inventors for the doggedness with which they maintain their notes, but it's something I've never been able to do for very long. I've kept a small journal before for this project, and it did help, but eventually petered out. It took the form of a cross between rambling, lists of ideas, and conversations with myself. This sounds to me like perfect blog material so I thought I'd give it a go.
I'm not sure how public this really needs to be, or if I need any external feedback at all. I think just being able to talk things through with myself will be invaluable, and moments of re-reading my words may give me that external perspective. If people do read this, and are interested, then maybe that will help spur me on to put more work into the project and ultimately fulfil my ambition.
I'll talk about the nature of the project in my next post.
Wish me luck.