Category: Computers and stuff

| 0 Comments

desktop-ubuntu-14.04-LTS.png

I've been staring at this screen all day, it was supposed to be my day off. Trying to learn new stuff is really addictive sometimes. Especially when it's cold and raining outside, and I cannot play any golf.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

After I updated to Ubuntu 14.04 LTS, url links in other applications stopped working. Well, when I clicked on the links my google chrome browser would fire up properly, but it would stay stuck at the homepage and not be redirected to the link that I clicked on.

This was irritating me for days and I just could not figure out what was going wrong. I uninstalled and re-installed google chrome a number of times, removed the hidden ~/.config/google-chrome directory, on and on.

Just about the moment I was ready to give up completely and go back to firefox, I had an unexpected insight. The simple solution is just to do the following:

rm ~/.local/share/applications/google-chrome.desktop

Probably something went wrong with the ubuntu upgrade whereby this file got leftover and wasn't deleted properly.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Suppose you try to upload a file and keep getting server errors thrown in your face. Have a look in the apache error log and see if you can find a line looking something like this:

mod_fcgid: HTTP request length 136872 (so far) exceeds MaxRequestLen 131072

If that is the case, then you are in luck. To fix it, look for the apache configuration file called /etc/httpd/conf.d/fcgid.conf and edit it. All you need to do is add the following line at the end of the file.

FcgidMaxRequestLen 2147483648

These are the details for Centos 6, but for other operating systems it should be something very similar.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

When I first got my new Thinkpad T431s up and running, I was all excited about having such a blazingly fast machine at my fingertips.

However, when I started using VirtualBox, I was disappointed how sluggish it ran when trying to install virtual machines. Initially I thought it had to do with SSD, and to no avail I tried various system setting tweaks to improve performance.

There are also a number of settings in VirtualBox that you can play around with, like different chipsets (PIIX3 was the older default option whereas ICH9 supports the more modern machines) and enabling I/O APIC (required for 64-bit guest operating systems, and if you want to use more than one virtual CPU in a virtual machine), but none of that helped either.

This morning I had a flash of insight. Perhaps virtualization isn't enabled in the BIOS, let's go and have a look. On boot I hit the Enter-key, paged my way to the security section and lo-and-behold the VT-d feature was turned off. I quickly enabled it, saved my changes and booted.

Installed CentOS 6.5 within ten minutes, and now it's running like a charm.

virtualbox-centos65.png


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

ubuntu-on-thinkpad-t431s.png

Here's proof that I got Ubuntu 13.10 installed and running on my new Thinkpad T431s.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

I decided to give the Computer Networks | Coursera online course another go. This is an excellent course anyone can take for free. Last year I tried and made it through about half way, but due to time constraints was unable to complete it. I already know a lot about network technology and the Internet, but a refresher course like this will give me a broader overview and provide insights to the latest changes.

computer-networks.png


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

After nearly six years, I've finally decided to renew my life by purchasing a new laptop. Portable 14-inch, 8GB, 256GB SSD SATA3, i7-CPU. After I ordered it, I happened to come across a number of negative reviews, mostly complaining about the screen (anti-glare) and so-called lousy resolution (1600x900), terrible touchpad (5-finger), etc. The problem nowadays is that everything is being compared to the state-of-the-art ultrabooks which are way too expensive for me. Many people say that it doesn't look sexy and it still has an old-fashioned vga connector (shame on them). The smaller screens may have higher resolution and better contrast for browsing the web. I need a slightly larger screen so that I can read comfortably if for instance I want to sit downstairs. When in my study room I can hook it up anyway to my fancy 23-inch high-resolution screen so such a shortcoming doesn't matter. Besides, I prefer a solid and dependable machine that will last. For me it's more than sexy enough.

lenovo-thinkpad-t431s.jpg
Lenovo ThinkPad T431s


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Ordered my Nwazet Pi Camera Box from the ModMyPi shopping site which arrived a couple of days ago.

The assembly was a bit complicated but thanks to the online instructions I was able to snap all of the pieces together. It comes with a fancy fish-eye lens. Couldn't get the wifi to work yet though. Here's what it looks like so far.

raspi-camera.png

I also managed to take my first snapshot. Slightly blurry and distorted but a historical photograph nonetheless.

first-raspberrypi-image.png

A couple days later. Figured out how to get the wifi working by installing the wicd-curses utility.

$ sudo apt-get install wicd-curses
$ sudo wicd-curses

Just follow the instructions, choose the correct SSID and then connect to it.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

A most disturbing Vim anti-pattern is using the good old arrow keys to navigate around the page. I've been told that this is a terrible habit which makes me more inefficient. I do not like wasting time and being inefficient, so I read up a bit on the subject and decided to add the following lines to my .vimrc configuration file. Say good-bye to arrow keys my friend.

noremap <Up> <NOP>
noremap <Down> <NOP>
noremap <Left> <NOP>
noremap <Right> <NOP>

At first I felt very crippled, but after awhile believe it or not I started to get used to it. Bad habits are hard to break, but if you hang in there you can do it. j,j,l,k,k,k,h,k,j ...

Even using the default vim navigation keys h,j,k,l gets boring after awhile. This is the slow poke way to move like a snail across the editing surface. There are even speedier and thus better ways to accomplish such a feat. If you don't know what they are look it up yourself (:help word).

So in order to end the pain of all pains I extended vim nops to include the following lines as well:

noremap h <NOP>
noremap j <NOP>
noremap k <NOP>
noremap l <NOP>

Slowly but surely I'm on my way to becoming a true blue vim guru, and it feels pretty good. You're never too old to learn new tricks, and if by doing so you become more productive so much the better I'd say.

Alright then, let me help you along by giving you a slight hint. The w, b, e, ge commands allow us to move forward or backward to the start or end of a word. The W, B, E, gE commands are also something you should check into. Much quicker jumping around that's for sure.

You might also want to have a look at Habit breaking, habit making and then install the Hard Mode Vim Plugin like I did.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Now that I have a bit more time on my hands, I decided to get crazy about the ruby programming language. I've always wanted to learn more about this intriguing language as well as the ruby on rails web framework.

crazy-about-ruby.png

As if all that reading material is not enough, I've also been following a couple of online courses, namely:

I also purchased RubyMine which is an advanced IDE to make me even more productive, though it is a bit sluggish but should be alright once I buy a new laptop.

I'm never too old for learning new and interesting stuff.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Learning the ML programming language is a lot of fun. This is my first in-depth initiation into the exciting world of functional programming. Here's something to whet your appetite, an elegant function for appending two lists of any type:

fun append e =
    case e of
        ([],ys) => ys
      | (x::xs,ys) => x :: append(xs,ys)

Here we are passing the function append an expression e, and if the pattern matches empty string plus string we stop, otherwise we prepend the first element to the tail appended to the list.

I am following the online Coursera training by the University of Washington called Programming Languages given by Dan Grossman.

Great stuff to keep my aging brain cells oiled and running efficiently.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

I thought it'd be fun to strip down and reconfigure my Raspberry Pi in order to turn it into a mighty mini-webserver.

My starting point is the default Raspian Wheezy download and the setup as explained on the website page Installing Operating System Images on Linux. Run the raspi-config command and do the following:

[Note: you can skip this section with the newer operating system images made available where by default ssh is enabled for pi/raspberrypi and boot to desktop disabled]

  • Enable SSH
  • Disable boot to desktop
  • Use all of the SD Card (in my case 32GB)
  • Rename the hostname
  • Reduce the GPU memory to 16MB

Once you have followed the setup instructions, ssh pi@raspberrypi to get there. Here raspberrypi should be replaced by the IP address, for example 192.168.2.101 in my case. You can then run the command dpkg -l in order to see what is installed, followed by apt-get purge in order to strip out the extra stuff you no longer need.

Since this is a streamlined webserver, there is no need for any of the GUI desktop stuff. I also want to remove Python, sound-related (alsa) stuff, samba and other junk. Therefore, run sudo su - and fire off the following commands:

$ apt-get update
$ apt-get purge xserver* ^x11 samba* ^libx ^lx samba* libsmbclient python* desktop-file-utils nano tsconf xkb-data console-setup penguinpuzzle omxplayer gtk* libgtk* alsa* -y
$ apt-get autoremove -y
$ apt-get upgrade -y
$ apt-get clean

I chose the lightweight nginx as my preferred webserver:

$ apt-get install nginx

Since I will no longer be needing the extra memory for the GUI, I can free up the memory by editing the file /boot/config.txt and ensuring that the following line is present:

gpu_mem = 16

No need to keep the pi user around anymore since I have created a new user to do all of the heavy stuff. You'll probably want to use a different name suiting your needs, but I'll use this as an example. From now on replace the word kiffin with your own.

$ sudo adduser kiffin

Now the tricky part. As the user pi edit the sudoers file by running the command sudo visudo. At the bottom of the file you'll see something like this:

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL

Replace the user pi with kiffin and save the file. Enter exit twice to return to your terminal, and then access the server again using the command ssh kiffin@raspberrypi.

Now you can run sudo su - and get rid of the pi user like this:

$ deluser pi
$ rm -rf /home/pi

Since I'm also an avid user of GNU Screen, I installed it as well:

$ sudo apt-get install screen

Now it's time to create a simple webpage by going to the document index directory and creating an index.html file to suit your needs.

$ cd /usr/share/nginx/www
$ cat index.html
<head>
<title>KiffinWeb</title>
</head>
<body bgcolor="white" text="black">
<center>
<h1>Welcome to KiffinWeb!</h1>
<img src="raspberrypi.png"/>
<p>
This is an <a href="http://nginx.org/en/">nginx</a> web server running on a <a href="http://www.raspberrypi.org/">Raspberry Pi</a> mini-computer.
</p>
<p>
<a href="http://www.kiffingish.com/2013/09/raspberry-pi-webserver.html">Make one yourself</a>
</p>
<p>
Brought to you by <a href="http://www.kiffingish.com/">Kiffin Gish</a>.
</p>
</center>
</body>
</html>

Once you've got everything setup to your heart's delight, it's probably a good idea to make a backup of this image just in case. For example, when the electricity fails causing the SD Card to become corrupted.

Shutdown the raspberry pi (sudo shutdown now), wait one minute, take out the SD Card and put it in your laptop. I then run the following command to copy the image to a local backup file:

$ sudo dd bs=4M count=800 if=/dev/mmcblk0 of=/home/kiffin/raspberrypi-kiffinweb-20140925.img

Take the SD Card out and insert it back in the device and connect it to the power supply. Make some last changes in the configuration:

  • Use all of the SD Card (in my case 32GB)
  • Rename the hostname
  • Reduce the GPU memory to 16MB (already done above)
$ sudo rasp-config

Once everything has been finalized, I reboot with shutdown -r now and ssh kiffin@raspberrypi to my webserver again. Here's how much additional space I've created:

kiffin@raspberrypi:~# df -H
Filesystem      Size  Used Avail Use% Mounted on
rootfs           32G  751M   30G   3% /
/dev/root        32G  751M   30G   3% /
devtmpfs        247M     0  247M   0% /dev
tmpfs            51M  234k   51M   1% /run
tmpfs           5.3M     0  5.3M   0% /run/lock
tmpfs           102M     0  102M   0% /run/shm
/dev/mmcblk0p1   59M   19M   40M  33% /boot

Of course, in order to make the web server accessible from the outside world, you will have to use NAT by configuring the router to forward HTTP (port 80) and SSH (port 22) to transfer these requests to the IP-address of the Raspberry Pi server.

Here's proof that it really works:


www.kiffinweb.com

For convenience, everything is setup downstairs in the electricity cupboard.

raspberrypi-meterkast.png raspberrypi-meterkast-closeup.png

The Raspberry Pi is connected to the KPN Experia Modem with the blue Ethernet cable and the power supply is the black cord going up over the fuse box to the socket.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Raspberry-pi-1.png Raspberry-pi-2.png

I was so very pleased to receive my new techie toy in the mail today. Brings out that little boy feeling in me, yet another fun present. The Raspberry Pi is a credit-card sized computer which costs less than thirty euros, and it's a lot of fun to play around with.

These are the only components required to make a good start:

  • RASPBERRY PI, MODEL B, 512MB
  • SDCARD 8GB
  • POWER SUPPLY, RASPBERRY 5V, 1A
  • HDMI TO DVI CABLE 2M
  • WIRELESS KEYBOARD & MOUSE

Here are some references:


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

There are a number of rituals in life that can be conducted in order to cut the symbolic ties with the past. These rituals are always painful, but at the same time they are very necessary in order to move on in life. By nature, I am one who postpones the inevitable as long as possible, especially when it comes to distancing myself from my past. I remain very attached to the way things were, can get pretty sentimental about the most trivial memories, collect useless memorabilia and hate to throw anything away for fear of who knows what. Discarding items is so definite, and once they are thrown away, there's no way ever to get them back again.

Take for instance my computers and stuff. Believe it or not, I have saved every single computer, laptop, mouse, keyboard, router, hub, floppy disc, monitor, printer, scanner, cable, video card, hard disk, on and on. I still have my very first computer which is more than twenty years old. A state-of-the-art 386 PC and I was the first one in my neighborhood to have one. I also kept my very first laptop. A heavy bulk of a Toshiba shaped like an over-sized brick. All that hardware and cables have been collecting dust in dark corners, turning yellow and rotting away for ages, waiting to be let go. If only I would ever give them the chance.

So this morning I went through all my drawers, closets, boxes, and grabbed every piece of hardware and cable I could find. I carried those poor souls downstairs, filled the trunk of my car, the back and front seats. I went to the dump on the other side of town, and with tears in my eyes I tossed all those fine memories into the dumpster, watching them crash and splinter. There I was thanklessly discarding those wonderful pieces of technology which have meant so much to me. Thanks very much for being part of my life, good bye and see you later.

The big cleanup action took a little less than two hours. I've freed up so much extra room I do not know what to do with it all. Empty spaces waiting to be filled up again with the new fangled objects of my future. Like some kind of catharsis, I feel liked I've been relieved from a tremendous burden weighing me down. It's time to move on in life, stop getting dragged down by the past, face forward and reach out. Here we go again.

[This is my 2000th blog entry]


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Here's an interesting quote I came across this evening while reading the introduction of the online course Building a Modern Computer From First Principles:

It turns out that this strategy works well thanks to a special gift unique to humans: our ability to create and use abstractions. The notion of abstraction, central to many arts and sciences, is normally taken to be a mental expression that seeks to separate in thought, and capture in some concise manner, the essence of some entity. In computer science, we take the notion of abstraction very concretely, defining it to be a statement of "what the entity does" and ignoring the details of "how it does it." This functional description must capture all that needs to be known in order to use the entity's services, and nothing more. All the work, cleverness, information, and drama that went into the entity's implementation are concealed from the client who is supposed to use it, since they are simply irrelevant. The articulation, use, and implementation of such abstractions are the bread and butter of our professional practice: Every hardware and software developer is routinely defining abstractions (also called "interfaces") and then implementing them, or asking other people to implement them. The abstractions are often built layer upon layer, resulting in higher and higher levels of capabilities.

The site contains all the software tools and project materials necessary to build a general-purpose computer system from the ground up, so check it out if you dare to take up this amazing challenge.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments
  • Eliminate waste: Spend time only on what adds real customer value.
  • Amplify learning: When you have tough problems, increase feedback.
  • Decide as late as possible: Keep your options open as long as practical, but no longer.
  • Deliver as fast as possible: Deliver value to customers as soon as they ask for it.
  • Empower the team: Let people who add value use their full potential.
  • Build integrity in: Don't try to tack on integrity after the fact, build it in.
  • See the whole: Beware of the temptation to optimize parts at the expense of the whole.

Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

I am convinced that the new programming language called Clojure has alot of potential and if successful will fundamentally change the way we think about developing complex applications.

Recently I purchased two books about this amazing programming language, Clojure in Action and The Joy of Clojure, and although I've read about a fourth of each book, I have not had enough time to study it as deeply as I would like to.

Here's a very simple example of how elegantly an otherwise difficult to program algorithm can be expressed in a single code statement:

(reduce + (range 1 1001))

Basically, this one-liner takes a range of numbers and adds them all together giving the total of one through one thousand and one. Show me another programming language which can express this more simpler.

Very interesting is the fact that this language is based on Lisp which is one of the earliest (functional) programming languages and is many decades old. The pendulum swings back and forth and now it is time to return to our roots. We will have to turn our linear programming mindset inside out in order to move forward.

So with that in mind, it's now time for me to go out for my daily run in the freezing cold and warm up my body and mind by philosophizing about programming computers and the true significance of simulating/stimulating human thought processes.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

While reading an interesting book about producing reliable software releases called Continuous Delivery, I came across the following excellent idea:

"If it hurts, do it more frequently, and bring the pain forward."

If certain tasks of releasing software make it a painful process, for example last minute tests which seem to break the product right before launch, then the idea is to figure out a way to automate all tests and 'release' the latest version after every single change.

How often has this inefficient so-called fact of life just been accepted as part of the deal, when in fact with a little logical thinking it does not have to be so. The extra time and energy spent in improving this might result in a temporary pain increase, but in the end the pain will simply go away.

Deal with the hurt by rubbing some sand in the wound so that after a while it will not hurt any more.

The challenging part is convincing the rest of the organization that this is so.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Here is a list of the most popular Google search strings that people use when finding my website:

cpan update, cpan update all modules, how to crack your tailbone, kiffin gish, cpan update modules, update cpan, ben hogan golf swing, cpan update module, ik zie een poort wijd open staan tekst, cpan update all, kiffin blog, update cpan modules, cracking sacrum, https://svn.madwifi-project.org/madwifi/branches/madwifi-hal-0.10.5.6, update cpan module, updating cpan modules, crack your tailbone, ik zie een poort wijd open staan, kiffingish.com, predisposed to depression, sacrum cracks, update all cpan modules, v4l-utils-0.7.92-test.tar.gz, ben hogan swing, driver asus x59sl, dutch characters, gish mail, gish.com, hogan swing, how to make a speckled stickfish, how to pop your tailbone, how to update cpan, kiffin emanuel, modern perl book, my heart stops missing a beat, perl cpan update, svn co https://svn.madwifi-project.org/madwifi/branches/madwifi-hal-0.10.5.6 cd madwifi-hal-0.10.5.6, update all cpan modules installed, update all installed modules cpan, why do i have the urge to pop my toes.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

I make it a point to visit the local bookstore regularly and rummage through the many new and older books in the computer and mathematics sections.

My work demands that I keep abreast of all of the latest technological advances. The book titles on display are a pretty good indication of which areas I should be concerned with. Not that that it is so much extra work to me, thumbing my way through rows and rows of books just waiting for my magical touch. Actually it's fun and relaxing spending a quiet afternoon searching around in your favorite bookstore.

This afternoon however I was a bit dismayed to discover that almost all of the books on display lying on the new title table were about writing Apps for the iPhone. Most of the remaining books were about writing Apps for other mobile platforms like Android, etc.

What's happening here? Am I missing something? Should I be careful?

There were only five titles about Perl, but that's about the average exposure for most other stuff anyway. Not very long ago Python was the big hit, but now there are very few titles about that either. Java is still going strong but getting depleted as well. The web design section which normally contains books about CSS, HTML5 and Javascript, was filled with mobile design books, again mostly for the iPhone (ouch).

Supposing that I were to look for some information concerning something besides programming mobile applications, then where should I go? I'm sure that Internet is now the best place to look, though it's harder to filter through what's relevant or not.

Now that I even think about it, why buy books about mobile apps anyway? Books are getting old-fashioned, they are bulky and awkward, the contain pages which need to be turned back and forth.

I could just buy some fancy smart phone and use the embedded micro-browser to look for stuff myself. Tons of stuff all over the place. All that meta-information is everywhere and nowhere at the same time. Think about it.

The good old days of finding what you need in bookstores is coming to a swift end, so better prepare yourself and be flexible for change if you want to survive.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Wasted nearly two hours trying to figure out why some simple bash script of mine wasn't working.

#!/bin/sh

HOSTNAME=$(hostname)
echo HOSTNAME=$HOSTNAME

if [ "$HOSTNAME" == "kiffins-laptop" ]; then echo "This is Kiffin's laptop"
elif [ "$HOSTNAME" == "georges-laptop" ]; then echo "This is George's laptop"
else
    echo 'Unknown hostname (exit)'
    exit 1
fi
echo "Success"
exit 0

Looks perfectly valid to me, so how come when I run the damned script I get the following error messages?

HOSTNAME=laptop
[: 11: laptop: unexpected operator
[: 11: laptop: unexpected operator
Unknown hostname (exit)

Need a hint?


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Up until yesterday the Del-, Ins- and Home- keys on the upper right-hand corner were sticking alot, and it's been really bugging me since I purchased this fancy laptop more than a year ago.

Once I even brought it to a so-called expert computer repair shop. I was told that there was nothing to do about it. They even had the gall to suggest that I strike the keys more gently and at an increased perpendicular angle.

All of a sudden I'd had enough. Mustering up enough courage to grab my special screwdrivers, I became a madman, loosened the bottom of my laptop completely, pulled off the front cover, and dislocated the screen.

I looked around, blew some dust away, wiggled this and that. Then when I put the bottom and front covers back in place, I had a whim and reversed the sequence. I began with the left side and tightened the screws in only three-fourths of the way, and then I screwed the right side back tightly in place.

I couldn't believe it, but none of the keys stuck anymore. Now it feels like heaven when I type, and it's almost like I have a brand-new laptop all over again.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

Beware of inadvertent spaces in directory names when using rm -rf, it can kill you without asking first.

I figured I would cleanup some junk piling up in several directories of my laptop: /tmp, /var, etc.

I accidentally hit the space-bar, causing this to appear at the prompt:

$ rm -rf /var /spool/...

And just when that little teenie space caught my attention, it was already too late. There was nothing else I could do but cry. Just for fun (and also hoping for a miracle) I rebooted my laptop, but it choked anyway.

Better be more careful next time.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

I'm not about to claim that I'm some kind of expert on the subject, but I think it's fair to say that I've experienced my fair share of ups and downs over the years which makes me a little bit wiser.

Put simply the questions is how do we avoid failure when designing and implementing complex software products?

This is how I would answer that question.

  • The golden rule of thumb to avoid failure is to figure out early what the biggest risks to success are, and then to keep them in mind every single day. Keep this up until success is achieved.
  • Another key to avoiding failure is to admit openly when things start to go wrong, or better yet when you expect that things might go wrong. Don't hide the truth because you are worried that your boss will get angry or that you will lose face with your team members.
  • If things start to go better than expected, then celebrate it and make it publicly known. You guys have struggled really hard and deserve the recognition for work done well. Go out and have a party, but don't get too drunk because it's bright and early as usual the following day.
  • Feel proud of what you are making and treat it like your baby. Protect and cherish it, nurture it and play with it.
  • Admit defeat if needed and just start all over again. It is much better to restart with new insights than it is to plug along with an ugly product which keeps getting uglier, and finally slowly sink into quicksand.
  • Use sound metrics to measure progress and regularly decide where you, where you are headed, and possible obstacles along the way which will delay progress.
  • Learn from your mistakes, write them down, keep this list with you at all times, and reread it at least twice a day.
  • Finally remain open-minded, honest and embrace change, which will happen whether or not you want it to. Change hurts while it is happening, but afterwards it makes you feel a whole lot better.

One could easily say that the statements above apply to developing successful software products as well as to most challenges in life.


Share this on Facebook Share this on Twitter Share this on Google+
| 3 Comments

In order to retain a well-grounded area of expertise as a so-called software developer, it's not only important to keep abreast of all the latest technologies, but also programming languages in general. The more you know the better.

That is why I make it a habit to learn at least one new programming language every three to five years. That way I can sustain my market value in an ever-changing and competitive market.

This time around Lua is my language of choice, and in order to celebrate my new pursuit of fame and wealth, I purchased the book Programming in Lua.

Here's some sample code. Tables can be used as associative arrays. This functionality allows us to store functions in a class table, ie. with the function name mapped to the function:

A = {}

function A:add(x,y)
  return x+y
end

print( A:add(1,2) )  -- prints 3

That will be a fun book to read during vacation.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments

You want to be notified by email every time that one of your servers reboots, for whatever reason that might be.

The most straight-forward way to accomplish this is by using the cron service. You want to fire up the following command:

$ crontab -e

and then add the following statement all on a single line:

$ crontab -l | grep reboot
@reboot echo "Rebooted, now online!" | Mail -s "`hostname` REBOOT" your@email.com

That's pretty easy now, isn't it?


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments
Hey, it turns out that the del-key on my laptop doesn't stick anymore, and I hadn't even noticed it. Remember that blog entry back in April where I was feeling irked enough that I even had to dedicate a whole entry? I guess that due to lots of usage something or other has loosened up beneath the key, and no matter how hard I try now I cannot get it to stick any more. That's fantastic news, even though it's a bit strange how I hadn't even noticed it.
Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments
I've learned an awful lot about the many ins and outs of managed virtual servers the last few weeks. It's been a fun adventure talking with companies and the experts about the fine art of managed hosting.

There are many advantages to choosing a virtual environment over the more commonly accepted hardware options. It really boils down to a choice between two options:

  1. Make a big one time investment in hardware and write it off over a five year period. Hopefully within that time frame one can use the costs more effectively by maximizing the use of computer resources.
  2. Or rent the computer resources (CPU, memory, storage, etc) on a monthly basis. As time progresses one can easily expand the resource depending on current needs. Costs are kept more under control and growth should be more predictable.
Another interesting topic of discussion which can get hairy and even philosophical at times is the difference between fair use and bundled bandwidth policies for network usage. A couple of people have discussed it with me but I'm still not convinced about one being any better than the other.


Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments
I hate it when my Del-key keeps sticking.

Up near the top right hand corner of my keyboard the keys are a bit less sturdy because the CD bay is directly underneath and leaves little room for a sturdier padding.

This means that when I hit the Del-key, it feels hollower than the other keys and tends to stay stuck in the depressed state, popping up and making this slightly aggravating click after anywhere from a half second to five seconds later.

One might of expected better quality for a laptop this nice.

Share this on Facebook Share this on Twitter Share this on Google+
| 0 Comments
If you own an MSI Wind Notebook like I do, and the next time you fire it up there's no wireless connection available for some reason, don't forget to first make sure that the wireless card is enabled (duh).

Is the little green led second from the left lit? If not then you'll have to hit the Fn+F11 key.

Why waste two hours of your valuable evening searching everywhere and getting frustrated when the solution is right before your nose?

This is already the 3rd time it's happened to me and you'd think that I'd remember by now.

Share this on Facebook Share this on Twitter Share this on Google+

Random entries

Here are some random entries that you might be interested in:

Recent Assets

  • desktop-ubuntu-14.04-LTS.png
  • 265px-Diclofenac.svg.png
  • Minus-one-and-a-half.png
  • 2014-11-30-13.10.29.png
  • aangeboden_door_k.png
  • monument-valley.png
  • Rex-A-Gish-MD-Navy-200x279-rounded.png
  • pia18877_descent_to_the_surface_of_a_comet.gif
  • ember-mvc.png
  • Heren-1-2015.png
  • golf-is-a-science.png
  • names-on-the-wall-2.png

Recent Comments

  • Back from Madeira: The Madeira island travel is one of the most wonde ...
    - travelmadeira
  • Back from Madeira: Great place, wonderful people! And if you need tra ...
    - Miguel
  • Cinnamon girl: Yeps, one of my favorite versions. Reminds me a lo ...
    - Kiffin
  • Cinnamon girl: https://www.youtube.com/watch?feature=player_detai ...
    - marlies.gish
  • Exclusive interview: Sorry to disappoint you, but it turns out that thi ...
    - Kiffin

Golf Handicap

Information

This personal weblog was started way back on July 21, 2001 which means that it is 7-21-2001 old.

So far this blog contains no less than 2131 entries and as many as 1862 comments.

Important events

I started working at Zarafa 1-15-2014 ago.

This blog came into existence 7-21-2001 ago.

Believe it or not but I am 10-11-1957 young.

Thea and I first met 6-14-1980 ago.

I graduated from Stanford 6-5-1979 ago.

Kiffin Rockwell was shot down and killed 9-23-1916 ago.

I began my well-balanced and healthy life style 1-8-2013 ago.

My father passed away 10-20-2000 ago.