Racket’s new package manager is great. It debuted with Racket 5.3.5. Although officially still in beta, it was already good enough to use for real projects. Racket developers wanted people to use it for real projects, to get the experience needed to make it even better.
Over many months, the Git
HEAD version of Racket — what would become Racket 6 — gradually introduced a few new and changed features for package management.
However, you might not want to use the newer features, yet. Not if you want your package to be usable by people still using Racket 5.3.5 or 5.3.6 — or usable by other packages that wish to support such people.
Fortunately, the older features are still supported in Racket 6, and it’s not very difficult or inconvenient to use them. You just need to know what they are.
Whew. About 2 weeks and 86 commits later, I have a branch I’m almost ready to merge to master: a completely redesigned markdown parser using Parsack.
At RacketCon when I gave my short talk about Frog, I had a slide:
“How hard can it be to…”
— Me, too often.
I haven’t posted here in awhile because I’ve been busy with a variety of things in September, including an interview for IEEE Computer magazine and a talk about Frog at RacketCon. And I’m writing this in Japan.
A C programmer preparing to use pointers
Someone1 in my Google+ circles posted about Understanding and Using C Pointers, a fairly recent (May, 2013) book by Richard Reese.
When I learned Racket, one of the first things I wanted to try was doing HTTP requests. And Racket’s
net/url module is great.
Racket was the first real Lisp/Scheme family language I ever learned. As a result I was focused on building blocks like ports, and assuming I would need to open and close them directly all the time. At that early stage, I also didn’t really appreciate the value of higher-order functions. So I overlooked the value of
call/input-url. I sometimes see other folks do the same, and wanted to write this short blog post.
Robert Scoble’s “Google, the freaky line and why Moto X is a game-changer” describes the significance of its always-on voice recognition. Under the heading, “the joy of context”:
Moto X is just one in a string of products and services that will bring radical new functionality to users. Examples? Google Now, Google Glass, and the new Moto X phone that keeps the microphone open full-time. The Xbox One, coming this winter, will have a 3D sensor on it so sensitive it can see how fast your heart is beating just by watching your skin.
These new contextual, sensor-based features are game changers and I’m hearing Google has a raft of other product announcements lined up that will turn on even more freaky features. Why? Because the more Google can get you to communicate with your phone, the more context it can slurp up.
The more sensors it can turn on, or put on you, the more it can learn about your intent and your context. Today your phone doesn’t really know that you’re walking, running, skiing, shopping, driving, or biking, but in the future, Google will know that and will be able to build wild new kinds of systems that can serve you when doing each of those things.
Naturally people have a variety of reactions for different reasons. You may find it yawningly predictable, or alarmingly freaky, or something in between. You might not mind Google slurping your data because you gave consent, but be creeped out by NSA contractors wrapping their lips around it uninvited.
But at bottom what’s the motivation behind this push for “context” and “intent”?
In my experience, the way to become a better programmer is to:
- write lots of code
- skim lots of reading material, and
- defer answers until you have questions.
To learn why you should skim this post, please read it carefully.
Travis CI is a continuous integration service for open source projects that has nice integration with GitHub.
Whenever you push a commit to GitHub, a build/test can launch. Notification of the result comes via a variety of methods. Also there’s a “badge” to show the build status, which you can link to in your
Jay McCarthy posted about a macro to do a C-style
case, where clauses fall through to the next unless you use a
break. His post is a great look at Racket macrology. Jay’s implementation is elegant. If you haven’t yet, go read it.
You’ve committed felonies.
Perhaps as many as three per day.
No one is innocent:
If someone tracked you for a year are you confident that they would find no evidence of a crime? Remember, under the common law, mens rea, criminal intent, was a standard requirement for criminal prosecution but today that is typically no longer the case especially under federal criminal law.
Faced with the evidence of an non-intentional crime, most prosecutors, of course, would use their discretion and not threaten imprisonment. Evidence and discretion, however, are precisely the point. Today, no one is innocent and thus our freedom is maintained only by the high cost of evidence and the prosecutor’s discretion.