tl;dr:Export — https://www.kifi.com/keepmykeepsImport instructions — Refind, Chrome, Firefox
Any service that manages your data has an implicit contract with users: you give us your data and we’ll organize it, but…
TL;DR: https://github.com/kifi/juggle
Last year, we open sourced our Reactive Lock, a lightweight library that we use at Kifi to limit…
Developing a rich browser extension with on-page content poses many challenges. Some obstacles pit extension developers against website devs. Problems such as CSS rule conflicts, overlapping page elements, and…
This blog post deals with optimizations for large numbers of strictly independent database queries.
One of Play!’s primary features is typed routing, which enables you to use strong types from your controllers. Buried in Play’s documentation (to the best of my knowledge, not linked anywhere) is an example of how to use your own types in routes…
This post follows up on the Scala Slick Database Drivers & Type-Safing Session Concurrency post where we discussed the abstraction layer we’re implementing on top of the slick driver and db access. In the post we mention we’re using DatabaseDialect…
The Play! Iteratee framework is very nice for reactively handling data streams. If you haven’t worked with Iteratees yet, think of them as consumers/sinks with a state. For example, in the Chat room example provided with the Play source…
Scala’s REPL is incredibly useful during development. For Play apps, especially in version 2.3 and before, much of the API requires a running application (such as WS, database access, etc). They provide a StaticApplication, but this runs in production mode. This could…
Scoring functions are widely used in our system, e.g. in search engine and recommendation service. In practice, a scoring function may be paired with a penalty/boost function for additional tweaks. Given an entity E to be scored, the final score is of form f(E)w(E), where…