Home | Random | Downloads | About | Hikes | 7,198,935,352 | Search | Feed

Book reviews for October 2014

The Martian by Andy Weir

The Martian by Andy Weir

5/5

Outstanding thriller about a man left behind on a Mars mission. Almost all of the tension is sucked out by geeky humor but the leftovers are more than enough. The movie version will probably switch the geek out and install Sandra Bullock.

 

[more]

Personal (Jack Reacher, #19) by Lee Child

Personal (Jack Reacher, #19) by Lee Child

4/5

If you're a Reacher fan this is a solid installment, by the numbers. If not then don't start here.

 

Nine for Exchange email on Android

Nine for Exchange email on Android

I have been super frustrated with the stock email client on Android which seems to crash about 50% of the time when I reply to ActiveSync / Exchange email.

Last week I discovered Nine which handles both Exchange and GMail if you're an apps for business user. It handles email, calendar and tasks beautifully and can present a combined mailbox from several accounts. The app is nicely designed and so far hasn't crashed or hung for me which has reduced the amount of daily swearing I aim at my phone considerably.

If you need to access Exchange on Android I can't recommend Nine highly enough.

Fermi Suicide

Fermi Suicide

One family of solutions to the Fermi Paradox is that civilizations die out before they communicate - natural disaster, nuclear war, etc. This sort of calamity seems plausible some of the time but it would need to happen all of the time. What if any sufficiently advanced society inevitably discovers irrefutable proof that free will is an illusion and just gives up?

Depressing. I prefer this.

Spoiler Alert

R2D2 at The Presidio

Looks like Episode 7 is going to be weird...

Farallones

Farallones

Sunset behind the Farallon Islands, off the coast of San Francisco.

(previously)

Book reviews for September 2014

Whiskey Tango Foxtrot by David Shafer

Whiskey Tango Foxtrot by David Shafer

4/5

Interesting thriller. Very different start in Myanmar which was super promising. Bond like villainy and a trans-human resistance then ensue.

 

[more]

Life After Life by Kate Atkinson

Life After Life by Kate Atkinson

4/5

It's a living the same life over and over again type of story, a literary groundhog day. Very well done.

 

Leaving Chrome

Leaving Chrome

My Chromebook was stolen over the weekend. The good news is that I didn't lose anything given the cloud only nature of the device. The bad news was that I didn't really want to get a new one.

I loved the cost and the boot speed and being able to do nearly everything I needed to with a browser-in-a-box.

But the nearly was a deal breaker. I sometimes need to VPN and the Chromebook wouldn't. It just wasn't compatible with our flavor of VPN and I didn't want to buy another Chromebook on the off chance that Google would eventually fix this. I also have to use Skype (I'd rather not) and this isn't really possible on the Chromebook either. Imo.im was good while it lasted. IM+ is horrible.

I've abandoned the Chrome dream and picked up a Surface Pro 3.

(previously, previously, previously)

Google PageSpeed Insights hates Google Analytics

Google PageSpeed Insights hates Google Analytics

I so want to get to 100% on Google PageSpeed Insights but I'm getting dinged for loading Google Analytics!

Cisco's insane securedoc HTML attachment

Cisco's insane securedoc HTML attachment

I last got one of these in 2010 and assumed it must have died by now, but no, otherwise sensible organisations are still training their customers to fall victim to phishing attacks by asking them to open dodgy email attachments.

The product in question is Cisco Registered Envelope and it deals with the lack of security in email by sending you an encrypted HTML file. Opening this file sends you off to register on some website and then runs a Java app to decrypt the message. This is insane. The HTML attachment in insane and the Java applet is insane.

The latest email I got in this format was an appointment reminder from UCSF. I'm sure there is some HIPPA requirement that they can't just send medical information in a plain text email. But they could send an email that lets you know you should login to your account to see the appointment. It's not like the securedoc.html method is magic, you still have to create an account on a website to use it so it buys you literally nothing.

UCSF, shame on you. Look after your patients digital health as well as their physical health. Out of self interest if nothing else, nobody can pay you if their bank accounts have been emptied after falling victim to a real phishing attack.

Cisco, shame on you. This product is so wrong headed it's impossible to believe that you're doing anything right.

​(previously)

Crushing PNGs in .NET

Crushing PNGs in .NET

I'm working on page speed and Google PageSpeed Insights is telling me that my PNGs are just way too large. Sadly .NET does not provide any way to optimize PNG images so there is no easy fix - just unmanaged libraries and command line tools.

I have an allergy to manual processes so I've lashed up some code to automatically find and optimize PNGs in my App_Data folder using PNGCRUSH. I can call CrushAllImages() to fix up everything or CrushImage() when I need to fix up a specific PNG. Code below:

public static void CrushAllImages()
{
    try
    {
        string appDataRoot = HostingEnvironment.MapPath("~/App_Data");
        if (appDataRoot == null)
        {
            return;
        }

        DirectoryInfo directoryInfo = new DirectoryInfo(appDataRoot);
        FileInfo[] pngs = directoryInfo.GetFiles("*.png", SearchOption.AllDirectories);
        foreach (FileInfo png in pngs)
        {
            CrushImage(png.FullName);
        }
    }
    catch (Exception ex)
    {
        //...
    }
}

public static void CrushImage(string fullPath)
{
    if (string.IsNullOrEmpty(fullPath))
    {
        return;
    }

    try
    {
        string markerPath = Path.ChangeExtension(fullPath, ".cng");
        if (File.Exists(markerPath))
        {
            return;
        }

        string crushExe = HostingEnvironment.MapPath("~/App_Data/pngcrush_1_7_77_w32.exe");

        ProcessStartInfo psi = new ProcessStartInfo(crushExe, string.Format(CultureInfo.InvariantCulture, "\"{0}\" \"{1}\"", fullPath, markerPath));
        psi.UseShellExecute = false;
        psi.CreateNoWindow = true;
        psi.LoadUserProfile = false;
        psi.WorkingDirectory = HostingEnvironment.MapPath("~/App_Data");

        Process p = Process.Start(psi);
        if (p == null)
        {
            throw new InvalidOperationException("No Process!");
        }
        p.WaitForExit();

        if (File.Exists(markerPath))
        {
            if (p.ExitCode == 0)
            {
                File.Copy(markerPath, fullPath, true);
                File.WriteAllText(markerPath, "Processed");
            }
            else
            {
                SiteLog.Log.Add(LogSeverity.Error, "CrushImage Failed (non-0 exit code) for " + fullPath);
                File.Delete(markerPath);
            }
        }
    }
    catch (Exception ex)
    {
       // ...
    }
}

Next Page

I Thought He Came With You
Robert Ellison's blog.

Like I Thought He Came With You on Facebook