Former FXPAL intern Jeremy Kubica’s Computational Fairy Tales is a fresh new entry into the blogosphere that introduces a unusual way to learn computer science: read a series of charming fairy tales. Each post contains a few sentences of introduction to a computer science concept followed by a fairy tale illustrating that concept.
Blog Category: Programming
Tom Simonite of Technology Review interviewed me about the breakthrough in fully homomorphic encryption that I blogged about here. I very much enjoyed talking with him, and was pleased to see that he wrote a good article on the subject: Computing with Secrets, but Keeping them Safe: A cryptographic method could see cloud services work with sensitive data without ever decrypting it. He quotes me a couple of times on the second page of the article and generously gives me the last word.
I’ve been surprised at how little has been written about this breakthrough, little enough that my blog post continues to be among the top 20 hits for a number of related queries. The field is definitely hot, with DARPA recently announcing two related solicitations, DARPA-RA-10-80 and DARPA-BAA-10-81, on PROgramming Computation on EncryptEd Data (PROCEED). The first solicits research proposals for development of new mathematical foundations for efficient computation on encrypted data via fully homomorphic encryption. The second solicitation is broader, with the goal of developing practical methods for computation on encrypted data without decrypting the data and modern programming languages to describe these computations.
This weekend, I came across FindBugs, an interesting application that analyzes Java programs for potential bugs. It was created by William Pugh at the University of Maryland, who is a four-time JavaOne Rock Star. Google, for example, has used his tool for finding problems in their Java code.
FindBugs made plenty of suggestions for some code I’ve been working on, and some of them looked like things that I should fix. I found one thing in particular of interest. I’ve been using the following pattern for the lazy instantiation of singletons:
Here’s a problem that had me puzzled for longer than I care to admit. I have a C# application that periodically makes rather light-weight calls on a web service. To be a good UI citizen, the app makes the calls on a background thread, and the standard .NET HttpWebRequest mechanism is used to make the calls. The thread maintains a single queue of requests, processes one at a time, creating a new HttpWebRequest object for each, and the results are returned to the UI (if necessary) by a callback.
My problem was that intermittently the calls were timing out (I’d set a 10-second timeout on them). Furthermore, when I examined the server logs, the requests were arriving and being processed, but often much later than they were sent, sometimes by as much as a minute. Yet when I attached a sniffer to the client machine, it showed the request packets leaving the machine right when my program was sending them. What on earth was going on?
One of the ongoing debates I have with some of my co-workers are whether web apps are going to take over the majority of applications that users interact with on a daily basis, or whether the future will remain in the hands of internet-enabled desktop apps. I maintain that desktop apps with integrated connectivity are the future. Many of my co-workers place their trust in software that only runs in the cloud.
Instead of talking about lofty research ideas today, how about something more prosaic that lots of us do behind the scenes here — programming. Specifically, a topic I’ve wrestled with recently in my first big project using WPF: How do you productively use object inheritance in your custom user controls?