Skip navigation.

Software Development

Correcting The Future

Cantor's Theory Visualized

Cantor's theory is one of the most misunderstood theories of all times. It's what happens when one does not understand what they are doing. By that, I mean that Cantor thought he was comparing real numbers and natural numbers when he was doing no such thing. Instead, he was comparing two different bases. Only problem is that he did not realize that enumerations also have a base. For this reason, the process of creating a diagonal is flawed.

One thing to remember when you create a diagonal is that both axis must be the same. If they are not, then you are skewing the results. Cantor completely disregards any notion or attempt to keep both axis the same. The x axis is base 2 (or another base). However, what base is the y axis? Most people don't even bother to think of this. In fact, they reject it because they do not want to think about it.

Read more...

Mandelbrot

I was busy with other projects and really wanted to quench my thirst for programming due to withdrawal symptoms. I needed something quick, but fun. So Mandelbrot it was. I think the last time I programmed a Mandelbrot set was way back in my University days when computers available there went from 8088 to Pentiums and video cards went from CGA to SVGA. The very first Mandelbrot set I did at University was in CGA with a monochrome monitor in a computer lab for first year students. (edit: I should add that I wrote this in Modula-2, awful language that it is.) These machines were ancient. I also wrote a program to compute Julia sets. Most people had no clue that these machine could do graphics at all. The reaction from others in the computer room was quite entertaining because normally, the ambiance in there is somewhat like the movie Das Boot. Tons of people in a large, but confined space. So when someone did something to change the monotony of working on assignments, it was often very motivating since people wanted to know how it worked. Oh yeah, back then, it was direct access to the video card. No fancy API's.

Read more...

Handwaving, Lawyer Speak and Avoidance

Handwaving, Lawyer Speak and avoidance are three of my favourite techniques that I see used by people who don't understand a particular topic (mostly when I go on other sites, but occasionally here as well). Perhaps I should qualify that. It's not people that don't understand the topic, but rather people who do not want to understand. Most often, these people simply repeat what they've been taught, what they've seen or what they've read. In a conversation, you don't need these people to be present. They can simply give the reference and be gone.

Handwaving is when you state something that you think is obvious, but never think of producing any explanation. Begging the question is a form of this, but handwaving doesn't even try to set up an argument. It's only the first part of begging the question.

Lawyer Speak takes the top spot for deceitful tactics. It's really effective against someone who has never encountered it before. And even then, if you haven't recognized it, you will continue to be fooled by it. The technique involves argument X, but then you state argument X again but about topic Y. Topic Y seems like it's related to X on the surface. But it is in fact completely irrelevant to the situation. Ad hominem attacks are a form of this, but Lawyer Speak is never direct. In fact, the subtlety of it is what makes Lawyer Speak so effective.

An example of Lawyer Speak is someone trying to convince you language A is just as good as language B since they are equivalent. Sounds good on the surface, but equivalence has nothing to do with what language is better.

Read more...

Cantor's Theorem (Updated)

Here is another theory that is commonly accepted, but is completely bogus. In the first part of this article, I only want to dispute the theory. The second half of this article deals with mapping natural numbers to real numbers. I'm playing devil's advocate in the second part because I actually believe that Cantor's conclusion is correct, but not the theory that he uses in trying to get there. Unfortunately, I must reject the conclusion as well for the time being.

As a quick recap, Cantor's theory says that you can't count to N2 by using N entries and N digits. So no matter how many digits you use (say X digits), you can always create a new (X+1)th number not already listed (by using the opposite of the digits in the diagonal). This is supposed to mean that the list of entries with infinite digits can never be put into a list because if you try to do so, you can create a new entry not found in said list. IOW, the number of entries will always be larger than the number of digits.

BOGUS!

Read more...

Halting Problem: Composability and Compositionality

While this article deals with the Halting Problem, there is a critical property of programming and computing that has been overlooked called compositionality. Composability is a well known concept. In programming, it involves the rules for combining different things together such as functions, objects, modules, etc. But compositionality deals with the relationship between data items and the meaning of the overall program. If we're dealing with the behaviour of programs, specifically if they halt or not, then we're talking about compositionality. Compositionality has very specific rules and guidelines that you can follow to determine the behaviour of programs. More than that, you can often tell if a program is valid (all required computations have the necessary inputs). Many programs can be executed, but it doesn't mean they are valid. Most people think that all composable programs are automatically valid. This is not so. Compositionality has a few things to say about this topic. Those details are the purpose of this article.

Read more...

Part 1 to K4 of Kryptos Solved!

This post is for reference only.

Read more...

Breaking Vigenère Autokey Cipher

Charles Babbage broke the autokey cipher in secret, and several years later, Kasiski accomplished the same feat in 1863. Looking online, I could not find any substantial descriptions as to how this was done (and there seems to be some confusion as to exactly WHICH variant Kasiski broke). I originally thought that many cryptographic algorithms were complex and difficult to understand. Not so. They are actually very simple.

The Vigenère cipher comes in many different flavours. There are the autokey variants as well as the Quagmire variants. A simple explanation can be found here.

Read more...

Undo

Undo functionality is a known problem that is often very difficult to implement. For Project V, I need to implement this. And I'd rather implement it sooner instead of later.

I figured out there are three ways of doing this.

1. Save the state of the entire Project V network (including the GUI) before each command and store it in a stack.

Advantages: Easy to implement.
Disadvantages: Takes huge amounts of memory and is slow as hell. May not even work if too many undo's are stored.

Read more...

Project V Pre Alpha Release Version 0.0.0.0

I've had a request to see component interface creation, so here it is.

WARNING: This release does nothing. Really!

You may consider this my version of the black triangle.

It just shows Project V component interface creation and deletion. This will change in the near future since an interface is supposed to be global, but using that interface needs an instance (or at least a way to reference each use of that interface). Right now, there is no difference. Then again, I may simply leave instances without a name since only the user needs it (the compiler can already tell the difference). If the user wants to name it, they can. (Thinking out loud here.)

The type editor (left pane) is still disabled because there's a bug in it and I haven't gotten to fixing it yet.

Oh, and this is just the tip of the iceberg. The Project V type system is fully operational as is the compiler. The runtime engine will need some tweaking, but again, this is all code that has no visual counterpart.

Have fun!

Requires DirectX 9.0c (vs 1.1+, ps 1.4+, 32MB+ video RAM)

Project V Install (4MB)
Mirror #1

Project V: How to Visually Build Components

I'm at the point where I want to build networks and component. I have everything figured out how I want it work data-wise and how everything is stored internally. All that is done. Now, I just need to build the damn thing. Only thing is that I'm stuck. I have no idea how this would work visually.

Sure, connecting components and selecting EXISTING components to place in your network is easy. I'm talking about creating a new component interface. How do I add new inputs? How do I ask the user to select the type and enter the instance name? Isn't that a bit tedious?

I have half a mind to enable a command line where you can tell the GUI what to do. I also think having text based definitions for interfaces wouldn't be a bad idea.

type AddInt32 : component
{
inputs:
  Int32 a,b;
outputs:
  Int32 out;
}


The main objective here is to specify the inputs, outputs and interface name. That's it. That's all a component interface is.

Perhaps I can have a button that creates a new, blank, interface would work. It'll display it blank. And then you can click on an icon on the component itself to display the textual definition where you can update it. This would work well for other types as well.

I could also have each component in the component list treeview have a popup where you can insert that component as a new input or output, or to copy its type in the clipboard.

Any ideas? I've been staring at this for two days. I have no clue what would work best. I don't think this kind of thing really works that great in a visual mode. This is one area where everything is telling me stick with what has worked in the past, text.

If I don't come up with anything better, that's what I'm going to implement. Unfortunately, this means my implementing a text editor. Are there any open source editors that aren't GPL (and are similar to BSD license)? I'll take a look and see if I can find one and port it.

Luckily, connections are simple. Simply click and drag. I can't wait to get to that part. But by then, I'll be working on the runtime engine.

Yeah, I'm thinking I'm gonna implement a command line and a textual mode for different aspects. The text editor could also be used to implement scripts. For those that want traditional dataflow (w/ scripts), what scipting language should I use to start off? I need something rather simple where I can add bindings to existing types and variables. I'm thinking I'll build my own scripting language that looks similar to C. I already have my own parser generator. May as well use it. And I can add dataflow operators to the language. Other people can implement their own scripting language later on.
July 2009
S M T W T F S
June 2009August 2009
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31