Category Archives: Technology

Dealing with a c-state bug

Computers that run Linux (especially newer kernel versions) on Intel Bay Trail family processors are sometimes affected by a c-state bug. It manifests as a random and total freeze of the system. Screen content remains unchanged, but the machine becomes completely unresponsive. I have encountered this on units that run Intel Celeron N2920, but other members of the Bay Trail family can also be affected. Also, the page linked to above suggests that the bug exists in kernel versions 3.16-4.2, but I have encountered it on Ubuntu 16.04 (kernel version 4.4) and Ubuntu 16.10 (kernel version 4.8), so this bug, as far as I can see, is still extant.

The freeze happens when the processor receives an instruction to enter an unsupported sleep state. The workaround, therefore, is to tell the kernel to stop giving those instructions to the processor. This is accomplished by editing the grub configuration file.

Open the grub configuration file for editing as root using your favorite editor. For example, assuming you’re using nano and are not logged in as root, you can type this into the terminal:

sudo nano /etc/default/grub

When the file opens, find the line that starts with GRUB_CMDLINE_LINUX_DEFAULT and change it to include intel_idle.max_cstate=1. Typically, after you’re done editing, the line would look like this:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=1"

The values quiet and splash are usually set by default and should be left in place.

Save the file (Ctrl+o, then Enter), exit (Ctrl+x), and apply the update:

sudo update-grub

Finally, restart the system.

Managing Windows product keys

Windows includes a little-known utility named slmgr (which presumably stands for Software License ManaGeR) that allows the administrator to install and uninstall Windows product keys (may be useful when upgrading). Both installation and uninstallation have to be done from the command line running as Administrator.

Uninstallation is done in two steps. First, the administrator needs to display values associated with the currently installed key:

slmgr /dlv

When this command is complete, Windows shows a message box showing a series of values associated with the currently installed product key, including Activation ID. The Activation ID (a series of numbers, letters, and dashes) is used in the second step:

slmgr /upk [Activation ID goes here]

If everything went well, Windows will show a message box saying Uninstalled product key successfully.

Product key installation is a simpler single-step procedure:


The Xs, of course, represent the product key. If everything went well, Windows displays a message box saying Installed product key XXXXX-XXXXX-XXXXX-XXXXX-XXXXX successfully.

To display values returned by slmgr in the console, rather than in a message box, or save them into a text file, use cscript. For example:

cscript slmgr.vbs /dlv
cscript slmgr.vbs /dlv > C:\Users\Public\licinfo.txt

The first command will display output in the console, the second, save it into the specified text file.

Predictors of hard drive failure

From the ever so helpful people at Backblaze:

For the last few years we’ve used the following five SMART stats as a means of helping determine if a drive is going to fail.

Attribute Description
SMART 5 Reallocated Sectors Count
SMART 187 Reported Uncorrectable Errors
SMART 188 Command Timeout
SMART 197 Current Pending Sector Count
SMART 198 Uncorrectable Sector Count

When the RAW value for one of these five attributes is greater than zero, we have a reason to investigate. We also monitor RAID array status, Backblaze Vault array status and other Backblaze internal logs to identify potential drive problems. These tools generally only report exceptions, so on any given day the number of investigations is manageable even though we have nearly 70,000 drives.

GPS and relativity

In order for GPS to work correctly, the software must explicitly take into account both special relativity and general relativity.

Adjustment for special relativity is needed because satellites fly around the Earth at approximately 8 km/s, which by itself results in time aboard a satellite flowing about 7 microseconds per day slower compared to time on Earth.

Adjustment for general relativity is due to the fact that GPS satellites orbit at a distance from Earth, where its gravitational pull is somewhat weaker compared to that on the Earth’s surface. This (again, by itself) leads to time aboard a satellite flowing approximately 45 microseconds per day faster compared to time at the sea level.

(Source: public lecture by Barry Barish at the Fermilab)

Getting Yahoo! Finance data into Excel

Here’s a little VBA snippet that allows to retrieve Yahoo! Finance data into an Excel spreadsheet.


=yfQuote(ticker, date, field), where

  • ticker (required) is ticker symbol used by Yahoo! Finance. Examples: MSFT, ^GSPC, VXX.
  • date (optional) is the date for which quotes are sought. If omitted, the most recent available historical quote is retrieved. Example: DATE(2014, 10, 11).
  • field (optional) is the data field requested. If omitted, close price is returned. Allowed values: 1 (open price), 2 (high price), 3 (low price), 4 (сlose price), 5 (volume), and 6 (adjusted close price).
Public Function yfQuote(strTicker As String, _
    Optional dtDate As Variant, _
    Optional intField As Variant)

    ' dtDate is optional. If omitted, use today. 
    ' If value is not a date, throw an error.

    If IsMissing(dtDate) Then
        dtDate = Date
        If Not (IsDate(dtDate)) Then
            yfQuote = CVErr(xlErrNum)
        End If
    End If
    ' intField is optional. 
    ' If omitted, use 4 to retrieve closing price.

    If IsMissing(intField) Then
        intField = 4
        If Not (IsNumeric(intField)) _
               Or (intField > 6) _ 
               Or (intField < 0) Then
            yfQuote = CVErr(xlErrNum)
        End If
    End If
    Dim dtStartDate As Date
    Dim strURL As String 
    Dim strCSV As String 
    Dim strRows() As String 
    Dim strColumns() As String
    Dim dblResult As Double
    dtStartDate = dtDate - 7
    ' Compose the request URL with start date and end date

    strURL = "" & _ 
      strTicker & _
      "&a=" & Month(dtStartDate) - 1 & _
      "&b=" & Day(dtStartDate) & _
      "&c=" & Year(dtStartDate) & _
      "&d=" & Month(dtDate) - 1 & _
      "&e=" & Day(dtDate) & _
      "&f=" & Year(dtDate) & _
    Set objHTTP = CreateObject("MSXML2.XMLHTTP")
    objHTTP.Open "GET", strURL, False
    strCSV = objHTTP.responseText
    ' The most recent price information is in the second row; 
    ' the first row is the table headings.
    ' Order of fields:
    ' 0 -- Date
    ' 1 -- Open
    ' 2 -- High
    ' 3 -- Low
    ' 4 -- Close
    ' 5 -- Volume
    ' 6 -- Adj Close

    ' split the CSV into rows
    strRows() = Split(strCSV, Chr(10)) 

    ' split the most recent row into columns
    strColumns = Split(strRows(1), ",") 

    dblResult = strColumns(intField)
    yfQuote = dblResult
    Set objHTTP = Nothing

End Function


  1. Yahoo! Finance doesn’t allow retrieval of historical prices for currencies, so this function wouldn’t work with currency tickers such as USDEUR=X.
  2. With some additional fiddling, the function could be persuaded to accept 0 to return the date for which quotes are retrieved. This could be useful when retrieving the most recent quote. As is, this wouldn’t work because of dblResult = strColumns(intField) (double value is expected, but a string is returned; there would have to be a conversion of that string into a date value)…

Digital FX solo

German animator Kaleb Lechowski recently released a short, but very well made, computer-generated sci-fi film.  According to the author, the six-and-a-half-minute film took seven months to make, including two months spent on writing the script.  The entire film crew consisted of three people: voice actor David Masterson, sound engineer Hartmut Zelle, and Kaleb himself, who did everything else.

It appears that the mythical man-month just took on a new meaning: one minute of computer-generated screen time…

Disabling Java

From Infoworld:

Step 1: Find out which version of Java you’re running. The easy way to do this is through the Java Control Panel — if you can find it. Start by bringing up the Windows Control Panel (in Windows XP and Windows 7, choose Start, Control Panel; in Windows 8, right-click in the lower-left corner of the screen and choose Control Panel). If you see a Java icon, click on it. If you don’t see a Java icon (or link), in the upper-right corner, type Java. If you then see a Java icon, click on it.

Unfortunately, there’s a bug in at least one of the recent Java installers that keeps the Java icon from being displayed inside Windows Control Panel. If you can’t find the Java icon, go to C:\Program Files (x86)\Java\jre7\bin or C:\Program Files\Java\jre7\bin and double-click on the file called javacpl.exe. One way or another, you should now see the Java Control Panel.

Step 2: Make sure you have Java Version 7 Update 11. In the Java Control Panel, under About, click the About button. The About Java dialog shows you the version number; if you’ve patched Java in the past few months, it’s likely Version 7 Update 9, 10, or 11. (Don’t be surprised if Java says that it’s set to update automatically, but doesn’t. I’ve seen that on several of my machines.) If you don’t have Java 7 Update 11, go to Java’s download site, and install the latest update. You have to restart your browser for the new Java version to kick in. Personally, I also reboot Windows.

Warning: Oracle, bless its pointed little pointy thingies, frequently tries to install additional garbage on your machine when you use its update site. Watch what you click.

Step 3: Decide if you want to turn off Java in all of your browsers. That’s certainly the safest choice, but some people have to use Java in their browsers from time to time. Personally, I don’t disable Java in all of my browsers (more about that in a moment).

Step 4: To turn off the Java Runtime in all of your browsers, from inside the Java Control Panel, click or tap on the Security tab, then deselect the box marked Enable Java Content in the Browser. Click or tap OK, and restart your browsers (or better yet, reboot). From that point on, the Java Runtime should be disabled in all of your browsers, all of the time. To bring Java back, repeat the steps and select the box marked Enable Java Content in the Browser (the setting should, in fact, say “Enable Java Content in All of Your Browsers”).

Step 5: If you don’t want to turn off Java in all of your browsers, choose the one browser you wish to leave Java-enabled. For me, that’s an easy choice: By default, recent versions of Chrome prompt before running Java on a specific page, so I turn off Java in all of my browsers except Chrome. That way I can use any of my browsers for general Internet work without fear of getting Javanicked. If I absolutely have to go to a website that requires Java, I’ll fire up Chrome specifically for that purpose.

Step 6: If you haven’t turned off Java in all of your browsers, turn off Java in each of your selected Java-free browsers. In Internet Explorer 9 or 10, click on the gear icon in the upper-right corner and choose Manage Add-Ons. Scroll down to the bottom, under Oracle America, Inc., select each of the entries in turn; they’ll probably say “Java(tm) Plug-In SSV Helper” or some such. In the lower-right corner click the button marked Disable. Restart IE. At the bottom of the screen, you’ll see a notice that says, “The ‘Java(tm) Plug-In SSV Helper’ add-on from ‘Oracle America, Inc.’ is ready to use.” Click Don’t Enable. If you get a second notice about a Java add-on, click Don’t Enable on it, too. That should permanently disable Java Runtime in IE.

In any recent version of Firefox, click the Firefox tab in the upper-left corner and choose Add-Ons. You should see an add-on for Java(TM) Platform SE 7 U11. Click once on the entry, and click Disable. Restart Firefox.

In Chrome, type chrome://plugins in the address bar and push Enter. You should see an entry that says something like “Java (2 files) – Version:” Click on that entry and click the link that says Disable. Restart Chrome.

Step 7: Test. Make sure the browsers are/aren’t running Java, according to your wishes, by running each of them up against the Java test site. If you go to that site using Google Chrome, there better be a big yellow band at the top of your screen asking permission to run Java just this once.

Selectively disabling Java in your browsers isn’t particularly easy, but it’s a worthwhile step that everyone — absolutely everyone — should undertake. Right now.

Technology vs. economy in a nutshell

Paul Krugman continues to ponder the impact of technology on income distribution.  The takeaway, in my opinion, is here:

Smart machines may make higher GDP possible, but also reduce the demand for people — including smart people. So we could be looking at a society that grows ever richer, but in which all the gains in wealth accrue to whoever owns the robots.

A troubling prospect indeed…