Intelligence by any other name

We created muscle, with engines. And we created brains, with electronics. But the brains we created only offered guidance to the engines. They lacked the ability to understand. And they also lacked creativity.

Artificial intelligence? Wrong term! Superficial intelligence, that’s what I call it! Neural net? Neuronic net? Moronic net, as far as I am concerned!

Albeit the brilliance of the back propagation algorithm, neural nets just perform elaborate curve fitting. They do not learn. They adapt. They conform. Like old-school-teachers, we think learning and conforming are the same thing. They are not. Learning is believing. Adapting and conforming, well, that’s what machines do.

We say we create intelligence, but instead we create Turing machines. Turing was able to discover and denote what can be computed, not what can be created.

Let me tell you, Dorothea: You are a long way from creating any intelligence, artificial or otherwise.

Posted in Management

Why most IT projects fail

A project might fail for lots of reasons. The same reasons apply to IT projects. But there are also extra reasons as to why an IT project might fail.

To undertake an IT project, you need two things: infrastructure and experience.

Some IT project managers do not know and cannot begin to imagine the extent of the infrastructure (people and technology) they are going to need in order to do a particular IT project.

Thankfully, nowadays, cloud makes this part easier.

As I mentioned, there is also the component of experience. Some IT project managers and their teams do not have the necessary experience. The tragic thing is that, frequently, they do not realize this fact.

Indeed, they undertake a new project and chances are they have never done anything like this before. Because, if they had, they wouldn’t need to undertake it. They would already have it completed and waiting to be sold.

The problem with the lack of experience is that the IT team ends up doing research and development instead of being productive.

And the problem with research and development is that there is no way of knowing one of the most important attributes (project management wise) for each task: the time it needs to be done.

And with no knowledge of the time each task needs to be completed, project management tends to be a moot point, at least with the project management techniques humanity has devised so far.

The issue of the lack of knowledge concerning the time each task needs is also addressed in my book titled “An Original Look at Ordinary Life”.

Posted in Management

Classifying books according to the number of characters they portray

I recently viewed a great infographic: “15 books with more characters than you can keep track of” that was about books that portray a lot of characters (in relation to the number of pages each book has).

This made me think that we can classify books according to the number of characters they portray (always in relation to how long each book is). The same goes for movies and TV series.

Well, the number of characters is indeed an important attribute of a book/movie/TV series, just as its length, its genre, etc.

There are stories that intertwine their characters in a clever way and so can create a “rich” plot. There are other stories that keep introducing more characters haphazardly, in order to just reach the necessary length, without advancing the plot.

So, having a lot of characters does not mean that a story will be a good one. You can have a good story with a few characters or with a lot of characters. And you can have a bad story with a few characters or with a lot of characters.

The point of my blog post is now going to be revealed. I am here to state that it generally shows more skill if you can create a good story with a few characters (as opposed to a lot of characters).

To create a good story using fewer characters generally requires more skill from the author.

If the author uses a lot of characters, then it is easier to create a rich plot and intertwined relations. It is more difficult to do that with fewer characters.

So, between two stories that more or less share the same other attributes, I would consider that the story with the fewer characters to be better.

A story with fewer characters does not overwhelm the reader’s mind with people details. Instead it lets the reader focus more on the plot and on the meaning of the story.

Posted in Management

How I learn PowerShell and how I use it

Practice makes perfect. So, when I perform an action in Windows, I try to learn how to do the same action using PowerShell.

This is helpful for two reasons. The first reason is that, by using PowerShell, I can automate the action. The second reason is that there are times when only PowerShell is available. For example, Server Core and Nano Sever have no GUI.

Now, when I write “action”, I mean just about anything, like, for example, getting information from the system or setting system settings.

PowerShell can inform us about and perform changes to the file system, the registry, the CIM/WMI repository, the network, the Internet, the installed (server and client) applications, the services, processes and threads, the various logs, and all sorts of system-specific and application-specific settings.

I get ideas from any action I perform and any program I execute.

For example, I use Process Explorer a lot. Whatever actions I can use Process Explorer for, I also try to perform using PowerShell. This way, I may be able to administer a system even when I do not have a GUI or my favorite GUI administrative tools.

Process Explorer lists the running processes. I can do that with PowerShell as follows:



Get-WMIObject win32_process | select name, handle
# (here "handle" is the process handle)

Process Explorer lists the threads each process spawns. I can do that with PowerShell as follows:

Get-WMIObject win32_thread | select processhandle, handle
# (here "handle" is the thread handle.)

Process Explorer lists the modules that have been loaded by a process. I can do that with PowerShell as follows:

Get-WMIObject CIM_ProcessExecutable | select Dependent, Antecedent

For a specific process, we can also use:

Get-Process -name <process name> -module


Get-Process -id <process id> -module
# (here "process id" is the process handle)

It is not that I can or want to compete with Process Explorer, it is just that Process Explorer gives me a lot of ideas when it comes to administration.

For any actions that you perform using a GUI, you must ask yourself whether you can perform the same actions without a GUI. If you can, then you are able to automate your work (and to keep track of your work) and you are able to administer your systems using PowerShell should the need arise.

Posted in Administration

Visualize numeric data from your Windows OS

When I published my blog post titled “Visualize the Services Graph of your Windows OS“, I wanted to create another blog post, supplementary to it. The purpose of the “Visualize the Services Graph of your Windows OS” blog post was to show that you can (and should) visualize data from your Windows OS. The data depicted in that blog post were not numeric in nature. So, imagine how becoming it is for me to create another blog post that advocates the visualization of any numerical data from your Windows OS. If you can visualize non numerical data, then imagine how becoming it is to visualize numerical data. Only some relevant programs allow you to visualize non numerical data, but all relevant programs and techniques allow you to visualize numerical data.

This blog post will gently push you into this direction.

There are some situations where you can obtain and visualize non numeric data from your Windows OS:

  • You can visualize the hierarchical structure of the services, the file system, or the registry.
  • You can visualize the timeline of events, errors, and so on.  For example, you can create a timeline that displays when each application was installed.
  • You can create your own infographics from data from your Windows OS.
  • And so on.

If there exist some situations that pertain to the visualization of non numeric data, there are a lot of situations where you can obtain and visualize numeric data from your Windows OS:

  • You can count the number of messages of each different type in an error log.
  • You can get numeric data from performance counters.
  • You can get numbers of files and file sizes from the file system.
  • You can get similar statistics (like counts of  keys and values) from the registry.
  • You can get numeric data (like memory size or CPU percent usage) from the process (and their corresponding threads) that run in your Windows OS.
  • And so on.

OK. Let us analyze the situation where you obtain and visualize numerical data from your Windows OS running processes. You can use PowerShell to obtain the data. The following script provides two columns of comma (semicolon actually :) ) separated values. The first column lists the name of the process (along with a dash and then the process id, in order to better tell the processes apart). The second column lists the virtual memory (in MB) that the process occupies.

$output = "ProcessName" + ";" + "VirtualMemory(MB)"

$processes = Get-Process

foreach ($process in $processes)
$output = $process.ProcessName + "-" + $process.Id + ";" + ([int]($process.VM/1MB)).ToString()

By redirecting the output of this script to a file, we obtain a csv file that lists the processes and their corresponding virtual memory.  Here is a sample output from a Windows 7 Ultimate (with Service Pack 1) 32-bit OS:


Here are these data depicted using a 2-D column chart in Excel 2007:

Microsoft Excel - output

I also used the free Tableau Desktop Public Edition to create two more visualizations of the same data.  The first is a treemap visualization:

Tableau Public - Treemap

The second is a packed bubbles visualization:

Tableau Public - PackedBubbles

I hope I have whetted your appetite for visualization. The point I am trying to make is that by visualizing the data from your OS, you can gain better insight into its workings.

Posted in Administration

Strange use of NULL in SQL Server and Oracle

I am not going to participate in the debate of whether NULL is good or the billion dollar mistake. At least not now.

All scholars agree that introducing NULL was a mistake, but I tend to be very skeptical about their position.

The reason, I do not necessarily consider NULL to be evil, is that there are two states each variable can be at, uninitialized (or NULL) and initialized (or with a value).

And we should not collapse these two states into one, not always anyway. Collapsing these two states into one makes me uncomfortable, because, this way, we loose information.

But this is a subject which is much more involved than what I presented here, so I should leave it at that, at this present time.

In this blog post, I am going to point to two erroneous implementations of NULL.

SQL Server does the mistake of treating NULL as a value, so you cannot create a unique index in a column that has two or more NULLs.

Oracle does the mistake of equating the NULL string with the empty string.

Let me analyze these two errors, one by one.

Let me start with SQL Server. So SQL Server does not allow you to create a unique index in a column that has two or more NULL values.

Well, you could always create a conditional unique index, by specifying that NULLs are excluded from the index. The only “problem” is that conditional indexes are not as fast as “normal” indexes.

Conceptually, all NULLs are different from one another, so SQL Server should have permitted a unique index in a column with NULL values.

But, SQL Server’s mistake is not that major. You see, to a human and to machine, a bunch of NULL values all are the same thing: initialized values.

And I am not sure what the worth of indexing initialized values would be.

OK, now let me continue with Oracle. Oracle thinks that a string value of NULL is the same as the empty string.

But a NULL string is not the same as an empty string. A NULL string is an uninitialized string. An empty string is the string “”.

Strings inside the machine are usually represented and stored as null-terminated strings, meaning that they are terminated with the null character ‘\0’.

The null character is represented as ‘\0’, where the quotes denote a single character and the backslash denotes that we have a special character instead of the number zero as character, which would be ‘0’.

The null character ‘\0’ is a character with the ASCII value of zero, thus its corresponding ASCII byte is comprised of the following 8 bits: 0000 0000.

In comparison, the character ‘0’ representing the number zero has an ASCII value of 48, thus its corresponding ASCII byte is comprised of the following 8 bits: 0011 0000.

Thus, an empty string is a string that, inside the machine, is represented with the null termination character ‘\0’. And in the real world is represented as “”. And this is not the same as an uninitialized string.

Saying that a NULL string is the same as the empty string, is like saying that a NULL number value is the same as the number zero.

So, saying that a NULL string is the same as the empty string, is like saying that zero is not a number.

Thus, conceptually and otherwise, Oracle’s mistake is a major one.

Posted in SQL Server

Explaining how clever a computer is

When newcomers to computers ask me questions, I usually gather from their questions that they have a misconception concerning a computer’s intelligence.

This is a typical conversation:

Newbie: Blah, blah, blah…

Me: OK. Let me ask you a question. From a scale from zero to ten, how clever do you think a computer is?

Newbie: <Gives a high number, like nine or ten.>

Me: The correct answer is zero. A computer is completely and utterly dumb. It does what is told to by the programs programmers create.

Me (continuing): A computer is like a light switch. If you flip it up, the light will go on. If you flip it down, the light will go off. Think of all this functionality. Yet the light switch is wired that way. It has no notion of what it does and it is completely dumb. It is a circuit. This is also what the computer is, a circuit, albeit more complex and more functional.

Me (continuing): A computer is like a puppet, with a program being its puppeteer.

Posted in Education