Archive for August, 2008

How things are changing

August 31st, 2008 | Category: Uncategorized

I was just watching the Signs movie, by M. Night Shymalan. There is a point where crop circles appear all over the world simultaneously.

There is some discussion on this, on all these people being “in on it together.” Which of course, is being taken as preposterous.

Things are changing, because now… people could do that. Someone sufficiently motivated can develop a group, and get thousands, even millions “in on it”, within weeks, months. Thanks to the extraordinarily low cost of groups, of getting the message out, it is ridiculously easy.

Thats how much things are changing, because of the Internet. A very recent movie, is being invalidated. That is amazing.

3 comments

What is Computer Science?

August 26th, 2008 | Category: computer science,programming

There is a great debate going on over at the compsci.ca blog, in the comments, about just what is, or isn’t computer science.

I provided a pretty good response, but I thought I’d go into a bit more depth.

Trying to define what CS is, is just like trying to define what Mathematics is. Math gives us the tools to deal with relatively simplistic problems, like algebra, calculus, etc. These tools have allowed us to make enormous strides, in economics, statistics, physics, chemistry, biology, and so on. The presence, and usefulness of Math is undeniable in every field of Science.

Math is an asbtract field, dealing with numbers and logic at their very basic. Working with these, we have made some fantastic tools, but several fields are beginning to see the limitation of the equation.(Hmm, that rhymes.)

What Computer Science is, is the study of solving problems. It is not logic, nor math, nor boolean algebra. It is not linear optimization, database design, or programming. It is a superset, of all those concepts, though being derived from those basics, the sum really is more than the whole.

Thanks to CS, we have the most basic unit of problem solving, the algorithm. As we examine different kinds of algorithms, we create the tools to use and apply those algorithms. To me, this is much like the basic unit of math, the equation. Everything else we have in CS are really just an extension on algorithms. If you’ve studied high level CS, you will have seen that the problems being solved… are extremely abstracted.

The reason for this abstraction is simple. It builds our CS vocabulary and toolbox, giving us tools for screwing screws and hammering nails. Instead of needing a specific hammer for a specific kind of nail, we have an abstraction, that lets us deal in general with all kinds of nails.

Let me tell you a story. I worked for a week, in the cyber cafe for a congress of oceanographers and meteorologists. I had to help them upload their presentations, and in the process, I got to see the latest and greatest of oceanography and meteorology. And here’s the thing: they’re beginning to use tools and concepts that were developed in CS 30 years ago! I asked several scientists on this matter, and they admitted that the equation as a tool doesn’t work for the complexity they deal with, and the algorithm works very well.

We, in CS, are developing the tools and vocabulary needed to describe complex situations and balances. We are learning how to solve problems. We are… at the same point that the grecians were with numbers and mathematics. CS is more than Science or Math, though it contains elements from both. CS is itself a completely new field, and until we recognize that, we’ll be held back.

Oh, and Programming is simply the actual usage of these tools, much like accountacy, algebra, physics are all applications of Math.

3 comments

Interesting design concepts

August 24th, 2008 | Category: Uncategorized

I’ve been taking a look at the enlightenment system. Its more than just a window manager, and more than a desktop. And I have to admit, there are some extremely brilliant ideas and innovations contained in e17.

The biggest one, I feel, is a state-aware Canvas widget. They call the canvas Evas, which I’ll use for the rest of the post. What I mean by state-aware, is that Evas keeps track of the state of the objects on it, including if they’ve been clicked, what size, etc.

Instead of having to keep a reference to everything you’ve put on the screen, and managing memory because of it, Evas takes care of all that for you; with much more efficient routines as well.

As well, all you have to do is tell Evas to adjust the state of the widget at (x, y), and Evas takes care of this intelligently.

Even better, is that it works on any xserver, wether it is OpenGL, the full X.org, or a mini xserver.

An excellent example of how this works would be on the enlightenment window manager. When you switch the virtual desktop, the visual effect only changes what has changed, instead of the entire screen. I have different backgrounds for each of the four virtual desktops, and they all have a white background. So, when I change desktop, the vertical swipe only changes what is different between the two desktops. Its a beautiful visual effect, which is hard to believe it is done with so little use of the cpu power. And yes, as far as I know, it is software rendered.

What this means is that coupled with the powerful gui system(which can be completely defined without writing a single line of code), to manage a gui for an application, you write the interface, you write the callbacks… and never need to touch a single line of window management code. You can focus on the application. Thats awesome.

The enlightenment apps as well have great effects… which again don’t need hw acceleration. When you hit alt+tab to switch apps, the mouse moves automatically to the center of that app. As well, if you use the scroll button on your mouse over the titlebar of an enlightenment app, the app actually scrolls up, and minimizes to just the title bar floating there.

There are so many nice little touches and effects, and I’m using the enlightenment theme that is conservative!

The whole development enviroment seems quite interesting, and I’ll will try making an app in it.

Comments are off for this post

Art of Programming

August 21st, 2008 | Category: creation,design,design patterns,programming

I just recently finished reading a book, no, rather, a comic, by Scott McCloud, called Understanding Comics: The Invisible Art. It was a fantastic read, very illuminating in many aspects. A lot of things I didn’t understand about art in general are finally beginning to be less murky.

One of the most striking concepts was the six stages of art. And it resonated. I realized that those six stages correspond as well to the development and progress of a programmer.

In his comic, the six stages are as follows: Idea/Purpose, Form, Idiom, Structure, Craft, Surface.

The Six Steps of Art

The Six Steps of Art

Let’s start at the top: Surface.

Surface applies to the most basic of programming. Simple statements, flow control, basic functions. Every programmer begins their growth at this stage. They learn how basic math works, properties, etc. They learn how to order statements, if conditionals, and loop guards.

Next is Craft.

Craft is where they take the basics, the Surface, and begin constructing bigger things. Functions, classes, basic data structures. Here, they learn how to construct a complex piece of smaller simpler pieces, but they are only just barely beginning to learn why and how it works that way. Any data structures they build are based off of basic data structures, and they don’t yet understand deeply the fundamental ideas of efficiency, logic, and computability. The good programmer also begins to learn about source control, using their tools, building, and deploying their work.

Structure is next in their growth path.

Here, they begin to learn how to organize their complex pieces into a working piece. How to access and parse text files, basic database interactions. They’ll do things the slow, wrong way, but its necessary to reach the stage of development. Here, they begin to worry about efficiency, the right way of doing things. Object Oriented programming starts to make sense as a conceptual model(which is all it really is). The now competent programmer is capable of learning other basic conceptual models.

Idiom is the biggest part of the growth.

Here, they begin to learn about Design Patterns, and begin to apply them. They apply them at every stage, from the basic Surface, to the overall Structure of the program. They also begin to learn about the ideas and concepts behind data protocols, to use them where needed. This is when programmers become cynical about Silver Bullets. This is when they finally realize there is no substitute for skill, experience, and effort. Many programmers do extremely well staying at this stage. However, to become a top-notch programmer, one needs to see and explore the limits of programming.

That is where Form comes in. Programmers at this stage explore the efficacy of Design Patterns, breaking them where and when needed, even developing their own versions. They begin to develop solid ideas about how API’s should work, about what is computable, about efficiency, and about Logic. These are the programmers that take already established tools and concepts, and bring us exciting new ones. Notable examples are: Bittorrent, Linux, and the Mouse. They looked at what was being done, and brought something new, and world-changing to the world of computing.

The final, highest level of development is Ideas/Purpose. This is where programming Gods like Knuth and Stallman rest. This is where Computer Scientists do their heady, ivory tower research that is oh-so-important to the world at large. This is where concepts of algorithms, data structures, efficiency, and logic are explored in their abstract. This is where Computer Science is rooted, and where the birth of the computer industry started. This is where Boole developed his ideas of Boolean logic, where Cray designed his supercomputers, and the very basis of all digital electronics.

Now, this is the normal path most programmers take in their growth. Even though, in College and University, we’re taught the ideas and purpose of programming from almost the start… when we don’t have the basic building blocks of understanding of logic and program construction.

As my friend Khumba just said: “You can’t play Protoss until you’ve played a few games with Terran.” You need to understand the basic building blocks of logic, statements and flow-control and the experience with those to understand the higher level concepts of functions, routines, threads, classes, modules, executables, algorithms.

The thing is though, we can start at any stage we like, from Ideas/Purpose, to the Idioms of programming. But the greatest, best programmers amongst us will explore all of these stages in depth, learning what they need from it to improve themselves and their art. Because thats what Programming is. It is an art, and we are the artists, working with the pure stuffs of thought. We translate the abstract to binary logic, to 1′s and 0′s, and for that… we are artists.

If you disagree, or agree, let me know. Theres a handy comment box right down there.

2 comments

Usability is important.

August 08th, 2008 | Category: Open-source,design,openmoko

No, seriously, it really is. It doesn’t matter how cool the subsystem is, how efficiently you can pack megaquads of data into a byte. What really does matter is how a user interacts with a system. I have a lesson here, to be shared, and I don’t really care if anyone listens.

A bit of backstory: I just recently bought one of these, the Neo Freerunner. I was intrigued by the hardware capabilities, as well as the absurdly low price for a phone with that much hardware.

However, I’ve since discovered that in many aspects the phone is useless. I can understand that its only for expert users, so consider this a bug report, of problems I’ve encountered no matter how intelligent or “expert” I am.

The phone itself is 100% unmodified hardware, and shipped with the default image, Openmoko 2007.2.

That software, though kludgy, slow, and occasionally frustrating, actually did what it was supposed to. I could type anything I wanted, with effort, use a backspace key, dial phone numbers.

There were some very annoying bugs, for example, the point where I was trying to add an email to a friend’s contact list. Normally, in any other kind of display, the area I’m typing into would scroll up, so I could see what I was typing. Not so here. I had to contend with guessing if I had hit the right buttons. Very annoying, and I quickly gave up.

Another bug, and I do consider these bugs, is the wifi and gps lacked a decent gui to configure them out of the box. The phone comes with specific hardware, it should have applications that can use them. Again, I know, for expert users, but I wanted a phone with wifi so I could browse the internet. If I need to log in with my laptop via ssh to the phone, then why not just surf with my laptop!

Now, I’ve been playing with the Om2008.8 release, came out today. Of course, I expected an official release to, you know, have basic issues solved. As of the time that I write this, there are 13 issues. THIRTEEN! Just hours after the “official” release. I could understand if these were rare or serious bugs, with video or weird interactions. But no, what we see are basic issues with the GSM portion! There are severe bugs in the phone part of the software… yes, this phone really is for expert users.

Usability is incredibly, incredibly important. I can’t stress this enough. The user does not know, nor care, about how free the code is, nor how awesome it is. They care that it works, and does really cool things. Basic usability needs to be addressed, if not by FIC, then by the community. They have steps. Some. Use cases to be filled out.

I’ve been following the Linux Haters blog, and its a lot of fun. I don’t have pretensions that one is better, or more superior. Its a great window into usability, and community matters, something everyone involved in OSS should be working on. Here’s a few guidelines if you’re going to make a touchscreen app:

  • If what you want to show is bigger than the screen, then by all means, scroll. BUT. And this is a major but. You need to somehow inform the user there is more content. Here’s a sample: the default keyboard app in the latest upgrade. It shows just the lower case letters, nothing else. If I had not read online, I would not have known you could “flick” the keyboard to get at more keys.
  • Be tolerant of mistakes. Always, Always, ALWAYS have an available backspace key for keyboards. This is more for the OS makers than the app, but it is still critically important.
  • If you invent a brand-new interface or way of interaction, you should offer tutorials. Sony Ericsson phones when they are first turned on, offer new users a complete tour of how to use each app, and button. This is phenomenal in terms of making people happy. It shows you cared to make something like that, and that you want them to be able to use the app.
  • Responsiveness. I can’t stress this enough. When your app is doing something, there should be some thing showing that its working away. Especially when booting up. My phone’s screen turns off at arbitrary times during bootup. This is unacceptable, as then it looks like it didn’t boot up.
  • This is directed at the Openmoko devs themselves: a Notes application, please! You’ve given us a smartphone, with wifi, gps, an sd card… let us make notes. Arbitrary notes. About anything. Free of context, or context can be added. I don’t care if I can install one, one should be included by default.

Now, another consideration with something like this, to help usability, is at the very least, write documentation. Do you have any idea how awesome I would think this phone was, if I had a manual on how to fucking use the applications that came with this phone? Of course, the fact I need a manual on these apps just demonstrates how utterly unintuitive they are. Even if its assumed people can figure it out, we have an amazing resource to do this, thousands of interested individuals, with time, and the phone, able to modify a wiki. Provide information on how to USE these applications. Full, and in-depth, showing that if you flick the keyboard… you get other keys! OMG! Amazing… how am I supposed to know that, without delving into a mailing list?

Now, while I do really like the hardware, and I’m all for defending rights and freedoms, I also want usable programs. 90% of the time, they are completely usable, and excellent, and the only fault is me. Apache for one is humonguosly documented, and all faults for screwing things up lays totally with me. Abiword is another excellent program. I just use it for typing. I don’t need typography, or colors, or any shit like that. Open Office is simply too bulky for my simple needs, and doesn’t read Excel files properly.

Now, just a small warning, anyone that posts saying, “It works for me.” their comment is deleted immediately, no other reason needed. Any freetards yelling at me about criticizing their beliefs or whatever, deleted as well. If you have something to say, be calm and reasonable about it. Provide evidence, technical, screenshots, advice, whatever. I want to hear debate and discussion, but there can be no discussing with a Freetard. I use what works best for me, and for your information, I am currently using Ubuntu 8.04, on both my desktop and my laptop, with absolutely no hardware issues.

Comments are off for this post