At Skydeck we believe that your phone records are your data, and that you should be able to take your data anywhere. That’s why we announced a set of APIs for accessing your data before we’d finished building our own service. Today we’re happy to announce the first three applications built using Skydeck’s APIs.
The first is from FreshBooks, the number one online invoicing service. Many of FreshBooks’ customers are consultants, designers, lawyers or other professionals who bill by the hour, and FreshBooks provides them with lots of tools for tracking their time. But it’s very hard to keep track of your cell phone calls, especially when you are away from your desk. When the team at FreshBooks read about Skydeck’s APIs, they realized that they could help their customers track and recapture all that time automatically. You can find the FreshBooks/Skydeck mashup here. (more…)
At Skydeck we use ONC RPC to communicate between parts of our server infrastructure. ONC RPC is an old, simple, reliable remote procedure call protocol. It fits well with OCaml since it deals in values and functions, rather than objects and methods, and it has a good implementation in Ocamlnet. However, since all of our ONC RPC clients and servers are written in OCaml, it is a little annoying to have to write interfaces using the somewhat clumsy ONC RPC specification language. It’s nice to be able to stay in the OCaml type system from end to end. (more…)
The Skydeck API had only been out a few days when someone began a Ruby binding for it. We’re thrilled that there’s been so much interest already, and look forward to some great applications built against our API.
Of course, we like OCaml here, so we are pleased to announce the release of an OCaml binding to the API. You can find it on our developer downloads page.
As part of our API design we decided to use OAuth, so you can allow applications to access your data without giving away your Skydeck username and password. We are also pleased to announce the release of ooauth, an OCaml implementation of OAuth.
Ooauth implements both the consumer and service provider parts of OAuth (we use it in our server and in the API binding above), so you can use it to implement your own API or to consume the many APIs that use OAuth, such as the Google Data APIs. It is also available on the developer downloads page.
Today we’re announcing three new features that we’re really excited about.
The Network Tab
For most people, the best thing about Skydeck is the way we re-organize your address book around the people that are most important to you (and the people you’ve been neglecting). You could have a thousand names in your address book, but Skydeck knows who belongs at the top of your list.
We call it your true social network: your most important personal and professional relationships. But it’s just the ‘first degree’. Who are their most important connections?
The next BayFP meeting is Wednesday, March 12th. Something a little different this time (although with some connections to Burak Emir’s talk last month about pattern matching in Scala); I’ll be speaking about Twelf. (more…)
This joint paper with Robby Findler introduces blame — from contracts — to a type system with casts. The authors then show that any failure of a cast from a dynamically-typed term to a well-typed context must be blamed on the dynamically typed term (they call this positive blame). Similarly, any cast from a more-precisely-typed term to a less-precisely-typed context must be blamed on the less-precisely-typed context (negative blame). Thus, the title of the talk: well-typed programs can’t be blamed.
The paper concludes with the observation that programming languages with libraries, development tools, user communities and other network effects often get adopted faster regardless of technical superiority. The authors propose that integrating dynamic and static typing into a single language may form a better basis for comparing the strengths and weaknesses of each.
This talk is not just for type theorists and functional programming enthusiasts; many professional programmers work with both static and dynamic types every day. As the authors point out, Visual Basic already supports both static and dynamic typing, and similar integration is planned for Perl 6 and Javascript. One way or another, if you program for a living then you’re probably already switching between the designs, although usually not within a single language.
Several of us from Skydeck will be there on Wednesday and we’d love to see you there. The talk is free, even though it’s being held in the same hotel as the ACM conference. Speaking of the conference, drop us a line if you’ll be in San Francisco for it. Some of us will be attending affiliated events earlier in the week.
Following up on our earlier patch, here is a patch to show backtraces in the OCaml top level and for dynamically-loaded code (this patch subsumes the previous one). This feature is often requested on the OCaml mailing list, and we have found it very useful in development to get a quick idea of where something is breaking.
If you’re in the San Francisco Bay Area on Wednesday and you have an interest in functional programming languages, come join us at the Bay Area Functional Programmers meeting. David Pollak will be giving a talk on Lift at 7:30pm at the Carnegie Institute on the Stanford campus. Last month’s talk on HAppS was excellent — we’ve integrated a couple of ideas from it into our system at Skydeck. Several of us from Skydeck will be there, so we hope you can make it too.
It can be hard to go back to a conventional language once you’ve enjoyed the freedoms of typed functional programming. That’s why, when we needed to write some Javascript at Skydeck, our first inclination was to find some way around it. Javascript is not such a terrible language—it has higher-order functions at least—but we missed the safety of static type inference and OCaml’s expressive features like variant types and pattern matching. So instead of writing Javascript, we wrote ocamljs, a back end to the OCaml compiler that generates Javascript.
One annoyance of OCaml (compared to Java or most any of the scripting languages) is that it does not automatically print a stack trace when your program throws an exception. To get one you have to compile with -g to include debugging information in the executable, and launch the runtime with -b so that it captures a stack trace on an exception. By default the runtime doesn’t spend time capturing the stack trace; this reflects a design choice to make exceptions very lightweight. Because exceptions are cheap it is good OCaml style to use them freely as a control-flow mechanism, while in most other languages such use is discouraged—exceptions are meant to be used only for error handling.
Once you’ve -g and -b‘d your way to a stack trace you can only get it printed to standard error, and then only if it reaches the top level. This is usually fine for a batch program, but for a long-running program like a web server it is a severe restriction. So we’ve written a small patch to the OCaml runtime that lets you get the stack trace as a string so you can show it in a web page, log it, etc. You can also turn the capturing of backtraces on and off inside the program so you incur the cost only when you need it.