There are a number of pernicious trends in the tech industry that need to be opposed. Over the last decade there has been a massive shift toward planned obsolescence, ever since Apple introduced the iPhone in June 2007 and the Macbook Air in January 2008 with sealed cases, non-replaceable batteries, RAM and SSD soldered on the motherboard and a lack of expansion slots.
Apple’s designs have been widely copied by the consumer electronics industry, so that it has become much harder to fix and upgrade electronics. Most ultrabooks, Chromebooks and 2-in-1 convertibles being sold today have copied Apple’s Macbook and no longer have replaceable batteries. Even brands such as Lenovo’s Thinkpad and Dell’s Latitude which are marketed for their fixability and ease of maintenance are now offering models such as the Thinkpad T470s and Latitude E5450 without removable batteries. Continue reading
I have been the maintainer of the ProcessMaker forum since June 2009, which has generally been an enjoyable experience, but lately we have been inundated with spam. I usually don’t mind deleting the occasional spam from the forum. In fact, I find it very interesting the tricks that the spammers use to fool me into thinking they are legitimate posters. Usually they are very subtle, so it doesn’t particularly bother me if a couple posts of spam slip through undetected.
The usual trick is to post something that looks like a legitimate post the first time. The more skilled spammers use a script to analyze the previous posts on the forum and construct a new post which merges the previous content. It often comes out as gibberish, but some of these scripts can actually generate something that appears to make sense. After the first post has passed the censors, then they sneak in a link in the second or third post.
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.
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
Steven Vaughan-Nichols at ZD Net calls LibreOffice “the best desktop office suite,” which surprised me because I have always considered it a rather kludgy clone of MS Office. I have been using some variant of this office suite since SUN first open sourced it as OpenOffice.org in 2000, because it was the only decent office software in Linux. For years I used Go-OO which was a version of OpenOffice.org with some enhancements for better compatibility with Microsoft Office, because it was the version I found in Ubuntu and Debian. I followed the debates led by Novell’s Micheal Meeks over the governance of OpenOffice.org. When Oracle bought SUN, Meeks led a community of developers to fork OpenOffice.org to form LibreOffice, I switched again because it was found in the repositories of my favorite Linux distros.
After 15 years of using OpenOffice.org/Go-OO/LibreOffice, I still consider it to be a rather crude office suite. It works, but I certainly have never considered it “the best” as Vaughan-Nichols dubs it. When I survey the other office suites, I find OpenOffice/LibreOffice to be better than the other office suites in many areas, but worse in others. What is surprising is the fact that that when I weigh up all the pros and cons of the different suites, I come to the same conclusion as Vaughan-Nichols that LibreOffice is the best for me, but it certainly has room for improvement.
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