Friday, September 28, 2012

On SylverMyst Technologies


It was almost 2 years ago that I added the little footnote at the bottom of my blog: "A Sylvermyst Technologies production." Around the time I began this blog, I got tired of forms that asked for an organisation (they're rare, but they exist_, so I just created one.

I can't even remember what the forms were for. I guess I was supposed to put the name of my university, but I really couldn't see why they'd need that. I actually started with the clich├ęd "[surname] Technologies", but a very quick Google search ended that idea very quickly. I changed it a bit, and "SilverMist Technologies" was born.

Long-time readers of my blog will remember that in early 2011, I moved my blog over to it's cutrrent domain - alphasheep.co.za - and learned a very important lesson: All of the best domain names are already taken. I decided to buy one before it was too late. There's nothing worse than someone who buys a domain name and then just sits on it without putting anything up, so I used my limited knowledge of html and threw together and a very simple webpage with a link to this blog, and a nice (in my opinion) logo in GIMP.

As I mentioned in my previous post, I started making plans to release some of my better software (I had to sift through the 50 or so half finished programs I still had for ones that I'd actually managed to finished). Overall, I put together 7 of them which I felt could have some use or entertainment value. The number of finished programs plummeted to zero around the time I my university workload really picked up, and has never recovered. Incidentally, that's around the same time I started this blog.

I had to go digging in a cupboard for a long lost copy of Delphi 7. Funnily enough, I stopped developing in Delphi four years ago, around the time I formatted the computer and found that the disc had mysteriously disappeared. Unfortunately, I still couldn't find the disc. All I really needed to do was add a license bit into the about box of each programs and re-build them, so I made another plan (*wink wink*). Funnily enough, I couldn't get Delphi working on my Windows 7 partition without doing a bit of fiddling, but it worked perfectly under Wine on my Linux partition. Oh, how times have changed.

Incidentally, thanks to an ancient backup disc my brother had made, I also found the little artificial life program that I mentioned in a post when this blog was only a week old. Thanks to a major bug in Turbo Pascal, it doesn't run on anything with a processor faster than 200MHz. On my computer at the time (a 300MHz Celeron), I found that a pretty decent workaround was to make sure the processor was kept busy enough that it seemed slower. The easiest way of doing that was to play some music in the background (which is something I always do while programming anyway). When I tried it on a computer with a couple GHz, that no longer worked so well. I was a little worried that I'd never get it working on my current computer with it's four cores providing eight processing threads, but somehow DosBox doesn't suffer from the problem at all.

Anyway, the need to build a new website from scratch motivated me to learn a little PHP, and so I've pieced together a very small, simple website. Go have a look at everything I've done at sylvermyst.com, and check out a couple of the programs I've written at sylvermyst.com/software. Let me know what you think, and of any improvements I could make.

If you enjoyed this post, then don't forget to like, tweet, +1, or upvote on reddit. If you have any questions, comments or complaints, post them using the form below.
. . . . . . . . . . . . . . . . . . . . . . . .



Friday, September 7, 2012

On Open Source and the Way People See the World


I'm not going to lie. The thing that got me into open source software was the price.

And let's face it - that's a pretty big reason why many people go the FOSS (Free and Open Source Software) route. They download the software, and never contribute, and never donate. I have seen more than one programmer get so frustrated with their users' attitudes that they just abandon the project. Partly, they're right. It's true that too many users like that would be bad for the open source community. But in a lot of ways, they're wrong.

Fortunately, many programmers don't see the community like that. Many of them see the community as a group of excited and enthusiastic hobbyists who love the idea that you don't need a huge corporate budget to come up with quality software. You just need a small group of people who are willing to contribute consistently, who are passionate about problem solving.

I've been programming as a hobby for about 12 years now, mainly because I've always found it kind of fun. I had the privilege of lecturing a programming course to a class of just under 200 second year university students earlier this year, and it opened my eyes considerably - both to the way I view programming, and to the way most other people view it.

What I learned about the students was both pretty disappointing and pretty encouraging, but I'll get to that in a moment. First, I'll share what I learned about the way I view programming. Not surprisingly, I see it more or less the the same way a stamp collector views collecting stamps, or a musician views playing music. It passes the time, and I simply enjoy time passed programming more than I would have enjoyed that time if I had passed it by doing something else. Problem solving comes naturally to me, and overcoming a challenge gives me a unique feeling of accomplishment that you can't get any other way.

When I was in third year student, we had to plot several charts and graphs for our Aircraft Design course. Naturally, being engineering students, most of us were pretty comfortable with a computer, and the majority of the class would plot the graphs in MS Excel, rather than draw them by hand. Our lecturer warned us that one particular graph we needed to be able to plot was incredible difficult to plot on a computer, pointing out that even companies like Lockheed were still plotting them by hand as late as the mid eighties (computers were better at plotting back then than you might think). Naturally, I took it as a challenge. I rearranged all of the equations, looking back at their derivations, and in a single sitting, I wrote a roughly 250 line Matlab script that calculated all of the curves and plotted the graph, complete with labels. The following day, I set about making the script customisable - adding options to turn features on or off. On the third day, I made the whole thing more user friendly - adding separate files for options and parameters, and added plenty of comments explaining how the code worked. Feeling proud of myself, I printed a few charts for half a dozen or so aircraft, and took a selection to show my lecturer. He was impressed, and showed the rest of the class. I was pretty embarrassed about it, and just sat there in the corner, blushing quietly.

Much later in the year, a week or two before our massive design projects were due, someone in my class wanted to know if he could buy my program. Before then, I'd never even considered the possibility that I'd ever sell a piece of software. I thought very carefully about it, and that evening, I hid an obscure line in the code that would print my name in the bottom right corner of the chart, and handed him the entire source code. Later that week, someone else asked me about it, and I emailed them the source code as well. I thought nothing more of it. A year later, another class mate approached me. He had my program, and wanted to know if it was OK to use it to plot charts for his final year project. I said yes, as long as he gave me credit. I thought that would be the end of it.

I have been approached every year since. This year, a student who was almost certainly still in high school by the time I had a bachelor's degree asked me if they could get a copy of the program. It made me realise something fairly important about FOSS. People don't program because they want to make a useful piece of software. They program because they enjoy it, and its the pride that stems from that enjoyment that ensures a high standard of work. And that is exactly what is written in the GNU manifesto.

(On a side note: You probably were not aware that I recently started making plans to release some of the software I've programmed during my life (including the S.E.P chart script (because its just a script, not a program, whatever students want to call it) mentioned in this post). It's not available yet (I need to make some minor changes to the source code before I release it under CPAL or GPL... whichever I decide to use), but you can still see descriptions for some of them.)

That brings me to the way my students see programming. An encouragingly large number (at least 10% of the class) seemed passionate about programming. One student, in fact, told me I'd inspired him to change career paths from Nuclear Engineering to becoming a programmer. That's probably the most flattering thing I've ever heard, even though I think it's most likely the thrill of solving a difficult problem that got him, and not my lecturing. Whatever it was, hopefully I managed to convince him not to change career paths.

The attitudes of the rest of the class scared me a little, and I think its partly because that seems to be the way the rest of the world views programming. Its much the same as what Benjamin Zander says about listening to classical music. It's something most people would enjoy doing if they just sat down and gave it a chance. But they immediately assume that they won't enjoy it. Most worrying, however, is that many of them get too caught up in trying to actually learn certain programs. Not just algorithms, mind you. It's actually quite helpful to have a repository of algorithms to draw from, but there are some things which are merely programming exercises that hardly anyone would ever need to know outside of a classroom. Things like a function to invert a matrix (in practice, the smart thing to do would be to download a matrix math library, with only one exception - that is, if the matrix math library is what you are trying to program). It seems that the students dislike problem solving to such an extent that they will take any measures possible to actually avoid it altogether.

To me, a generic problem solving ability is the most important skill anyone can ever have. Life is just a series of problems, and the better you are at solving those problems, the better you will do at life. If solving challenging problems brings you enjoyment, then you are automatically set to enjoy life. It really is that simple. I think I'm going to have to emphasise that to the next class I teach.

(Another side note: I was going to write a bit about my gradual shift towards using only FOSS, but I got a bit sidetracked. That will have to come in another post.)

If you enjoyed this post, then don't forget to like, tweet, +1, or upvote on reddit. If you have any questions, comments or complaints, post them using the form below.
. . . . . . . . . . . . . . . . . . . . . . . .