Web Browsing and Privacy

So as a follow-up to my change in attitude towards Google, I’m taking a greater interest my privacy in general. There’s a news on the Net these days of growing support for “Do Not Track” headers. I use Safari by default, and I was pleased to see that the latest versions have implemented it.

To turn it on, you need to have the “Develop” menu active in Safari (Safari → Preferences → Advanced → Show Develop menu in menu bar). The you merely need to select: Develop → Send Do Not Track HTTP Header.

I also took the time to add a couple of extensions to Safari while I was at it. Ghostery (Safari → Safari Extensions → Security) can detect and block the breadcrumbs websites use to track your usage. Finally, Incognito blocks Google, Twitter and Facebook tracking.

Blue laser pointers


When did blue laser pointers get so cheap? Right now you can get a blue laser pointer from Amazon for less than $8 (link).

I’m not sure these are legit, but the one I have (from Yugster) looks the same and works OK. It has a pretty wide beam compared to my green pointer, but it’s still very cool. Oddly, the blue pointer is the only one that seems to excite the glow-in-the-dark stars on the kids’ ceiling.

Does anyone know why some of these pointers are selling for $150 (link), and others are selling for much less?

PS: I should also note that this thing is much more powerful than its <5mW rating. It’s probably closer to 30mW. It’s definitely not a toy, and I’m pretty sure I shouldn’t let the girls play with it.

Knot.org server migration started

The main website migration has started. So far I’ve moved DNS and the main www.knot.org page to the new server. I’m going to start moving blogs as I am able. If you have a blog on knot.org, please be sure to contact me to make sure your site makes the migration.

Node.js

Just started looking at node.js, and I have to admit I think it looks really useful. So far it seems lightweight and pretty powerful with less mental baggage than some other languages I’ve seen lately.

Anyone have a recommendation for a (canonical) project I should implement to get my feet wet?

Evil is as Evil Does

(logo from Scroogled and TechRepublic’s GeekEnd)
Google’s slogan used to be “Don’t be evil.”, but whether by accident or design Google’s new privacy policy — really a “you have no privacy” policy — is evil. Giving Google information had been acceptable, because they did not aggregate all of the bits of knowledge we entrusted them with into a single profile.

On March 1, 2012 that all ends. Google is modifying their policies to allow them to use every scintilla of information they have on their users for their own purposes. Let’s be clear, Google isn’t promising to make our lives better, they’re promising to make more money. You might not call that “Evil”, but it sure is not “Good”.

So I just went through Google Dashboard, and scrubbed everything I could. I don’t use Android (and won’t start now), so nothing lost there. I changed every privacy setting, cleared histories, removed profile information, etc. You won’t find me on Google+ or Orkut any longer. I’ve removed deleted contacts, profile pictures, and personal information from every product I could stand to give up. Unless a Google product makes my life significantly better, it’s history. I’m somewhat surprised at how much information Google has lying around about me.

Primarily, I have kept Search (with history turned off), Gmail, Google Reader, and Google Groups. I’ve pared down which groups I belong to, and tried to obliterate any identifying information from the profiles. Finally, I’ve logged out of my Google account, and will only log in for specific purposes. Gmail I mostly handle using dedicated mail clients, so that’s partitioned from my web surfing. Reader and Groups are the two products that will leak information about me, but I’m committed to minimizing my use of Reader going forward. Sadly, I don’t know of a way to really ditch Groups since I don’t control the selection of that product, and I really want to stay in touch with the communities that do use it.

Am I being paranoid — probably. But I’d like to try to hang onto the appearance of privacy a bit longer. Besides, if any rogue player manages to obtain Google’s data, I’d rather be safe(r) than sorry. I hear Google has decided to implement these changes to compete more effectively with the growing Facebook juggernaut. Good for them, but in my case, they’ve just lost some of my viewership and become less central to my Internet life.

PS: It’s worth noting that I’m not much of a Facebook user, but I’m likely to take this opportunity to pare back my profile information there as well.

Electronics fun for the Whole Family

I’ve been struggling with how to help our 11-year old develop her attention to detail and critical thinking skills. I spent some time trying to interest her in programming, but it didn’t take. Anyway, I think I’m too close to that topic, and I don’t know that I’m the best person to teach programming to a kid. On the other hand, I have wanted to get back into electronics for a while, and I think it could make for a good geek/geekling activity.

Like any good pack-rat I still have my old Radio Shack electronics kit, which I dutifully handed down to my daughter:


Science Fair Exploring Electronics Lab - 200 Projects
Science Fair Exploring Electronics Lab - 200 Projects

A quick trip to Radio Shack, netted me a newer version to mess with for myself:


Radio Shack Electronics Learning Lab
Radio Shack Electronics Learning Lab

I should point out that the older set is still available, even though Radio Shack no longer carries them. I prefer that set for kids, since it includes lots of fun projects, but only limited explanations of how the projects work. The newer kit comes with manuals by the famous Forest M. Mims III, but the experiments are a bit more limited in scope, but are somewhat better explained. The newer kit is absolutely a great buy for geeks 16 and older, but might have more limited appeal to those younger.

So far she’s built a couple different projects/games from the old kit, including the Quick Draw II game that provided quite a bit of entertainment for the entire household. Hopefully, this is the start of a beautiful friendship…

My (long) note to the creator of Sierra

I’ve spent the evening trading e-mail with the creator of Sierra. Please forgive the lack of context, but I’m posting my last reply, since I think it sums up my thoughts on the language well.

Ok, I’ll shift my focus from Sierra as implemented to your stated higher level goals for the purposes of trying to illuminate my points.

As background I skimmed EWD340, not having read it in 20 years, and a couple of Milner’s papers contemporary to the IFIP paper since I don’t have a copy of that handy at the moment. You weren’t specific on Dr. Hoare’s work, but I’m relatively familiar with a large portion of it.

I think it’s somewhat disingenuous to talk of a real-time bug checker, since the vast majority of bugs that are hard to find belong to the second class of programming faults described by EWD, those that there is no proof of mechanical recognition. Indeed, even though his specific example ( loop completion, now a subset of fixed point determination) is a much better understood problem, it is not deterministically possible to predict the outcome (the halting problem). Nor are you correct in your assertion that one has to wait until compile-time for existing languages to find bugs. Static analysis can and has been integrated into IDEs (Kleidermacher; 10.1109/THS.2008.4534479).

I can’t address the specific 1986 paper from Milner, but as a general situation, it appears that he was interested in formal abstractions of what code does as opposed to natural language programming per se. Since the problem of natural language programming is itself a composition of natural language processing (an open problem) and automatic proof building (also an open problem), I going to assume that you intend to approach the problem of correct code from the perspective of formal abstraction. In that case, it’s pointless to talk about the Algol derivative languages since much more modern pure languages are at our disposal. Haskell (which implements Hindley-Milner type inference) would be a much better launching point, but I think many of the problems you seek to solve are non-issues in Haskell. The difficulty of programming in Haskell stems from the need to express human thought as a formalism.

This leads to your interest in cutting C in half. Haskell accomplishes this by removing much of the overhead of Algol derived languages, but the result isn’t human readable.

Fibbonacci in Haskell:
fib n = fibs (0,1) !! n
where fibs (a,b) = a : fibs (b,a+b)

This is neither easy to read, nor immediately intuitive (though admittedly it would be hard to have a significant logic bug in this code).

Sierra as it exists today isn’t a level above existing code since it doesn’t significantly vary from C. That example I sent earlier is neither terser or more readable than the equivalent C code. Nor does much in your existing specification show progress towards more intelligible code. While I understand that this represents a first step, it is essentially a step *backwards*. “var” was implemented and discarded by Wirth in Pascal. Operator overloading (+ as addition and concatenate) was tried and discarded in C++. “y@myPixel” is neither better nor worse than myPixel.y, but having both is confusing and neither implies that y is a property of MyPixel.

Many languages have obviated the need for C pointers and direct memory management (see Java, Haskell, etc). In fact, it is possible to have a reasonable garbage collector for C (Boehm, Spertus, WG21/N2310=07-0170). Nor is verboseness particularly a problem (EWD said as much in ’72), human communication is terribly verbose with low S/N and lots of redundancy to make up for it. Nor do I think there is a compelling case that interactivity can improve the situation.

You speak of “higher up” than “traditional languages”, but the truth is that you still seem to be generating a 3GL language without even addressing the existence of domain-specific and constraint based languages (4GL and 5GL respectively). Indeed most new language development seems to be integrating 3-5GL into comprehensive systems. Frameworks like Hadoop have us programming across large-scale distributed systems, They’ve abstracted away the idea of a single execution thread or even a single computer, and they hide the network/memory/latency issues in ways that I don’t think you’ve even considered.

I just saw a blurb about “Julia” (http://julialang.org/), which appears to be an attempt to be most things to most programmers. I don’t know anything beyond the press release, but frankly they at least are hitting all the right notes.

And I think this is the fundamental problem with your pitch for Sierra (here and during the last 3 years). Your approach and materials seem to have ignored the last 25 years of programming language research and development. Whether the end product is compelling or not is impossible to judge because what I can see of it today doesn’t seem well informed. I took the time to read some of the trials and tribulations you seem to have suffered in trying to bring Sierra to market, and while I feel for your struggle, I wonder if you ever had competent technical advice. Your existing demo tackles the problem from the wrong level. You’re taking a bottom-up approach to developing Sierra (which is appropriate), but there doesn’t seem to be a top-down roadmap for the language. I have asserted that you seem to have moved backward from C, and without seeing where you’re going I have no way of assessing otherwise. General assertions that there are higher-level, fuzzy logic components in the future have the ring of SHRDLU (Winograd, MIT AI Technical Report 235, February 1971). It’s 40 years later, and I don’t think we’ve made much progress with that project either.

So maybe that’s my advice to you. Get a roadmap together. Let’s see a architecture overview for Sierra. Let investors (Kickstarter and VC) know that you’re aware of what has been tried, and have concrete ways to do better. At this point, it’s not about the code, it’s about the path.