Credits for 3rd Party Components
Querki probably wouldn't have been possible even as recently as three years ago. The fact that this could get built by a mostly one-man team is largely due to the growth of the open-source world, and the many increasingly-mature projects available. We hope that, as Querki gets larger and more stable itself, we'll eventually be able to give back to the community. In the meantime, here are the third-party systems we've made use of, all of which are worth checking out.
QText -- the wikitext language that Querki Text properties use -- is loosely based on
Markdown, from
Daring Fireball.
That's really a spec from my perspective, though. The actual code that we started with was the Actuarius package from Christoph Henkelmann, a lovely and well-optimized implementation of Markdown for Scala.
QText has long since forked off from Actuarius -- we're not going to be maintaining Markdown compatibility, and have diverged in some details. But I am very thankful for this great starting point to build upon.
Akka is the "special sauce" of the Typesafe Stack. By taking the lessons of the Erlang language (used for decades to produce scalable, fault-tolerant software in the phone industry), and adapting them to Scala, they are producing what is probably the single best way to build serious cloud-based systems today.
Some tools are so intuitive and useful that you don't even notice them, but you'd certainly notice if they weren't there. Autosize is one of those: it's a simple little drop-in for jQuery that makes big text-entry boxes (like the ones you see all over Querki when you are editing) silently resize themselves if you type more than will fit.
I just love this particular gadget: its philosophy, like Querki's, is that this functionality should Just Work. IMO, any website should seriously consider dropping it in, if auto-resizing of text makes sense in your application.
A small client/server RPC library from Li Haoyi. This deals with the marshaling, unmarshaling, and routing of requests; you then combine it with a serialization library (in our case upickle) and transport to get requests from A to B and back again. Autowire is at the heart of how Querki's client and server talk to each other.
Querki's Date type needed a good UI. I contemplated going with a polyfill over HTML5's date-input type, but support for the native type is spotty and I didn't love any of the polyfills. So we chose to instead go with this library, which provides a very nice calendar UI for choosing dates.
A great collection of open-source fonts. Querki itself uses one or two of them, mainly as spinners, and we make them available to users to use in their own Things.
git is the current best-in-class source-code management tool. I have used a lot of SCM tools over the years (SCCS, CVS, Perforce, Clearcase, Subversion, and a bunch of homebrew ones); git is probably the one that makes most sense for most projects, especially open-source ones like Querki. Not trivial to learn if you are used to the other tools, but that's mostly because it throws out their assumptions and rethinks the problem in some clever ways.
Increasingly the main code repository of the open-source world, GitHub got there because it is just plain friendly and easy to use. Nearly all of Querki is open-source and
hosted on GitHub -- feel free to poke around!
Glyphicons aren't precisely free, but they're worth a mention. This is a big set of terribly useful, clear icons for online use. I originally started using them because many of them are packaged with Bootstrap; after a while, I decided to buy Querki a full license, since even the "Pro" version is still quite inexpensive, and gives you hundreds of clean, powerful icons.
Some sites have their own designers, producing custom icons with their own distinctive look and feel; Querki might do that someday. But if you're like me, and don't have that level of artistic talent, this is a fine, affordable way to get many commonly-used icons quickly and easily.
imgscalr is a nicely easy-to-use pure-Java library for shrinking the size of images. We use it to reduce the size of photos you import into Querki, which helps keep our costs down and speeds up your page loads by a factor of about a zillion.
Joda-time isn't quite a standard, but most folks reckon that it is the best library for managing dates and times in the JVM. As of this writing, Querki uses it a bit internally; eventually, we hope to expose the full power of Joda-time to the QL language, so that you can do everything you want to dates and times.
In order to make use of Joda-time, we use the
nscala-time wrapper around it. This is a straightforward but useful project, that makes Joda-time easy to use from Scala code.
jQuery is one of the most central libraries of the modern Web -- the de facto standard for building UI components. We use jQuery heavily, and make some use of the related project
jQuery UI.
jQuery File Upload is a remarkably full-featured component for uploading files from the browser to the server. We are currently using it for photo uploads, and are just using a fraction of its power, but even these basics greatly reduce the time it takes to upload pictures.
One of Querki's most useful and powerful features is the Tag Set. The nice UI for that is built on top of Manifest, a powerful and flexible gadget that makes it easy to manage lists of tags. (Along with the closely-related tool
Marco Polo, which makes it easy to build autocomplete.)
The Moment.js library is pretty much the be-all and end-all of handling dates in Javascript, with all the parsing, calculation and formatting goodness you could want. Actually puts most server-side date libraries to shame.
Everything is easier when it's wrapped in Scala, and easier yet when somebody else deals with the wrapping. This is a convenient wrapper around the immensely-useful Moment.js library, to make it easy to use from Scala.
Play! pulls Scala and Akka together inside an easy-to-use web framework. Querki is built entirely on top of Play, which gives us easy scalability for the front end, and embeds the Akka middleware right into those servers.
A beautifully full-featured jQuery plugin for displaying and inputting "star ratings", with a zillion options. I feared I was going to have to write this one myself, and was delighted to find one out there that already had everything I could hope for.
Completely geeky little detail, but this plugin lets your code know about all that stuff in your build.sbt file. This is how Querki knows which version it is -- and lets the client know when it's out of date relative to the server.
My pick for the best current general-purpose programming language out there. Powerful, expressive, and concise, with all the bells and whistles needed to program efficiently. I generally find that I program in Scala twice as fast as in anything else.
This is a set of macros, which wrap around Scala's Future and Promise types, and make asynchronous programming a bit easier, by making it look more like conventional programming. Basically, it provides you with a different way to compose and manage Futures.
A Scala-to-Javascript compiler, by now getting pretty robust. Querki's second-generation UI is built in Scala.js, which lets us use much more modern tools and techniques, develop faster, and do better debugging and testing. One of the cooler projects currently in the Scala stack.
Li Haoyi's library for functional reactive programming in Scala, allowing data changes to propagate around a complex network.
As of this writing, we are experimenting with using Scala.rx in the Querki Client. It may become the basis for how we propagate changes within the Client.
Li Haoyi's implementation of a simple but radical idea: if you are writing a Scala program, instead of defining your HTML as strings, define it as actual Scala objects and then render it. This allows you to get the usual strong typing and solid error-checking of a real programming language, while still writing something that is still clearly going to become HTML. Rocket-fast, and allows you to render to strings, or directly to DOM objects if you are in Scala.js, making it a good alternative to jQuery.
As of this writing, the Querki client does everything with Scalatags, and the server is migrating in that direction. My expectation is that, in the long run, more or less all of our HTML will be generated this way. It requires a bit of brain readjustment to stop expecting all those angle brackets, but once you get the idea, it is much easier to build complex pages and part this way.
This is a lovely bit of hackery (a self-described "duck punch") for a huge weakness in jQuery UI, which is that it doesn't handle touchscreen events. TouchPunch translates touch events into pseudo mouse events, with the result that they Just Work.
We use it specifically for Lists: these need drag and drop to manage their order, so they didn't work on tablets naturally. But TouchPunch fixes that right up: it's a tad slow, but you can drag-and-drop to rearrange Lists as you expect.
Bootstrap is probably Twitter's best contribution to the open-source world: an easy-to-use collection of visual components that lets even those of us who aren't exactly skilled visual designers produce nice-looking stuff. The fact that Querki doesn't completely make your eyes bleed is mostly thanks to Bootstrap. (As is the fact that Querki mostly Just Works on your phone -- Bootstrap-based sites adapt nicely to the smaller screen.)
We wound up not using it since we moved to Scala.js instead of raw JavaScript, but an honorable mention has to be given to Underscore. Underscore enhances Javascript with lots of functional-programming goodness that modern programmers expect, and makes for much more elegant and readable code. If you must work in JavaScript, I highly recommend it.
Pronounced "micro-Pickle", this is a tight little serialization library by Li Haoyi. Not the most powerful in the world, but it requires no reflection, and therefore works fine in Scala.js. As a result, this is a good option for message passing between client and server.
That's it for now, but I encourage folks to check back now and then. We like to use the best underpinnings in Querki, so this list is likely to continue to accumulate great tools that you should play with.