Category Archives: free software

The growing trend toward compiled languages

When I first learned programming in the mid 90s, everyone told me to learn Java, since it would be the wave of the future. Java imposes a performance penalty compared to traditional compiled languages like C, C++, Fortran and Pascal, because its code is translated into bytecode that runs in a virtual machine. The feeling at the time was that the extra processing and memory required to run the Java virtual machine would make little difference in the long run since computers were forever getting faster and more powerful. A few more iterations of Moore’s Law would obviate the need for compiled languages, since the difference in speed would soon be imperceptible to most humans.

Java was considered the best language, because it was designed to “write once, run anywhere,” which seemed wise considering how the world was moving from minicomputers with terminals to networked personal computers (PCs). When I first arrived at university, the entire campus ran on VAX terminals, although some students brought their own PCs to use in their dorm rooms. By the time I graduated 4 years later, almost the entire campus had switched to networked PCs. I had a job staffing the college computer lab and I fondly recall the excitement on campus when PCs replaced the monochrome VAX terminals with their pea green screens. There was a raging debate at the time whether PCs should use an operating system from Microsoft or Apple. My friends in the computer lab predicted with all the confidence of sages that Java was the future since it could be used to create desktop applications that would run in Windows 95, Mac OS 7 or even Solaris. Everyone knew at the time that desktop applications running on PCs was the future of computing and we all wanted our software to be able to escape the clutches of Microsoft, who was the geek’s great Satan.
Continue reading

A preliminary review of the Rust programming language

The Mozilla Foundation has been developing an exciting new programming language named Rust, that is designed to be a low-level language capable of matching the performance of C/C++, but with the safety of Java, the concurrency of Go, and many of the modern features of high-level languages like Erlang, Haskell, and OCaml. After reading the documentation and playing with bits of the language, I find myself struggling with some of the concepts of the language. Continue reading

A dark view of technology

For the last couple weeks, I have been investigating how the design of mobile electronic devices has changed over the last decade and how those changes are harming the environment. The whole electronics industry is now copying Apple’s designs, which means that planned obsolescence has become the norm in the industry. For example,  53% of the 2016 smartphones models listed on the web site do not have replaceable batteries, so they are designed to be thrown away after approximately 2 years of use, when the batteries loose their capacity to hold a charge.
The average smartphone weighs roughly 150 grams and its fabrication emits roughly 100 kgs of carbon dioxide equivalent (CO2-e). Therefore, we can guesstimate that the fabrication of the 1.52 billion smartphones that IDC predicts will be produced in the year 2016 will emit roughly 150 megatons of CO2-e and they will become 225,000 tonnes of toxic e-waste when they are thrown away.
In order to do a better calculation, I need numbers about how the design of mobile devices has changed over time. To that end, I wrote a PHP script to download all the specs from about every laptop and tablet model produced since 2006. After spending 6 hours perfecting my script, I set it to start downloading overnight. (Internet in Bolivia is extremely slow during the day.) This morning when I checked the status of my script, I discovered that the server at had detected my little game and is now blocking all my requests, returning 403 (forbidden) status codes. I wonder if my script to download all the cell phone models from will hit the same roadblock.
I miss the good old days on the internet when nobody worried about DoS attacks and the internet was a free and open place. Today, the internet is such a paranoid place. Every server is configured to assume that you are a bad actor. Today, if a ping doesn’t work, you don’t know if it is because the server is down or because the ping service has simply been turned off to eliminate another attack vector. After my VPS was hacked several years ago, I became paranoid as well. I now turn off every port and service on my VPS running the web site which is not absolutely necessary.
The internet in general is becoming a darker place in my opinion. More and more of it is cut off in places like Facebook, where the formats are proprietary and the sites are designed to suck up our personal information to monetize it. The dream of the internet becoming an information superhighway that enlightens the world has been perverted into the nightmare of misinformation silos and a massive surveillance operation. I used to believe that converting to free and open source software would liberate humanity, but now that the whole planet is using open source Android and accessing web sites running on Linux, I see that running software with a free license means little if it is employed as means to collect and exploit our personal information and colonize our minds.

Is it necessary to know math to be a good programmer?

Most universities require math as a prerequisite in order to take a class in computer science. Many people never take a class on programming, because they dislike math. I have often wondered if math is truly necessary to be a good computer programmer, since many people never try programming because they are told that it is like math. Most working programmers, however, will tell you that they rarely if ever use math while on the job.

Knowing math certainly helps you understand programming better, but it isn’t necessary for the majority of programmers on a daily basis. You need it if you are doing analysis of algorithms and trying to figure out whether one search algorithm is better than another. You might need it to decide whether to use a linked list, a b-tree or a binary tree to store your data. However, very few programmers today need to do that sort of low-level programming. 99% of programmers let databases handle data storage and searching. Continue reading

Installing Debian Linux on the Thinkpad T450s

I just finished installing Debian Linux (Jessie 8.5) on my Thinkpad T450s and wanted to share my experience so it will benefit others.

Here are the specs for my machine:

  • Thinkpad T450s (20BX001PUS)
  • Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
  • Samsung K4B8G1646B-MYK0 4GB DDR3 1.35V 1600MHz RAM
    (I added an additional Crucial 8GB RAM stick)
  • Seagate ST500LM021-1KJ152 500GB 6GB/s 7mm SATA harddrive
  • SanDisk U110 16GB M.2 SATA 22x42mm caching SSD
  • Innolux N140FGE-EA2 TN 1600×900 matte screen
    (I replaced this with a InnoLux N140HCE-EAA IPS 1920×1080 matte screen)
  • Intel 7265 Wireless (WiFi and Bluetooth)
  • Realtek RTS5227 PCI Express Card Reader
  • Chicony webcam
  • Validity Sensors VFS5011 fingerprint reader (ID: 138a:0017)

Continue reading

Installing CyanogenMod 13 on a Moto X Pure Edition smartphone

I decided to take the plunge and install CyanogenMod 13 on my Motorola Moto X Pure Edition when I saw that it had now been added to the list of officially supported devices on the CyanogenMod website.

I followed the instructions to first install atb and fastboot on my PC. Since I use Debian 8 (Jessie), this part was easy:

# apt-get install android-tools-adb android-tools-fastboot

Then, I went to the Settings > About Phone on my Moto X and tapped the Build number 7 times in a row to make the Developer options visible.
Continue reading

My experiences attending to the “community” in an open source company

I recently returned to managing the forum for an open source web application which is used to create custom processes. I have worked on and off for the company that develops this application since 2009, but I have been away from the forum for the last 3 years. Being confronted with the questions and demands of the community on a daily basis gives me a different perspective from most of the other people working in our company.

It is both a burden and a joy to be inundated with technical questions every day. When I login, I see a dozen new posts, all demanding my attention. Most people who post have a gnawing problem they want resolved or a burning question that they have spent the last 20 minutes searching for an answer in our wiki. I take a bit of professional pride in the fact that I often answer the questions on the forum which nobody else can handle, including the people in the support department. After years of answering questions and documenting the software, I have gained a profound understanding of how the application works.

Continue reading