Bayesian Penalty/Boost Function

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 $f(E)$ is the original scoring function, and $w(E)$ serves as the penalty/boost function. Usually, it is…
Original post: Bayesian Penalty/Boost Function
Source: Kifi

Getting things done with Grand Central Dispatch (GCD)

Getting things done with Grand Central Dispatch (GCD) If you have ever written some Objective-C you have probably came across some code using GCD.GCD, or libdispatch, is a library from Apple that makes it easy to write performant multithreading code, without having to worry about how threads are being used between CPU cores. Combined with the block syntax, GCD offers…
Original post: Getting things done with Grand Central Dispatch (GCD)
Source: Kifi

Introducing a Reactive Lock for Scala

TL;DR: At Kifi we try to follow reactive patterns as much as possible. Over the last two years we’ve come to appreciate the strengths of the pattern, but also run into some weaknesses. This post and the accompanying open source library is about two particular issues we’ve found not to be well addressed by existing libraries or language features: Concurrency Control, i.e.…
Original post: Introducing a Reactive Lock for Scala
Source: Kifi

Run Play dev mode from the console

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 be an issue for configuration reasons (if there is differences in behavior, configuration, or logic between development and…
Original post: Run Play dev mode from the console
Source: Kifi

Location Macro – a useful Scala macro

It is sometimes very useful to know the locations where a particular method is called. Of course your IDE tells you all of the locations in your source code. However, when investigating runtime issues, such as performance bottlenecks in production, logging is a simple yet powerful tool. How do we know the location of the method invocation? One way is…
Original post: Location Macro – a useful Scala macro
Source: Kifi

Reactive LDA Library

In this post, we introduce a parallel LDA (Latent Dirichlet Allocation) library. It’s available on Github. The library is written in Scala with Akka actors (hence the name Reactive). The underlying algorithm is based on vanilla Gibbs sampling. We will show that this approach scales much better than training LDA with collapsed Gibbs sampler, due to the easiness of parallelism.…
Original post: Reactive LDA Library
Source: Kifi

Dynamic sizing content in Keep cards

For our latest design of, we’ve moved to a graphical, content-centric view for keeps. Each keep appears as a card that contains the title, description, primary image, and metadata about the keep itself. We wanted to design an experience where the user could quickly digest the content of the keep, so wanted to optimize the card presentation as much…
Original post: Dynamic sizing content in Keep cards
Source: Kifi

A Spotlight Effect for Interactive Guides in HTML

For decades, video game designers have built tutorials or getting-started guides into their games to help new players ramp up quickly. Nowadays it’s common to see helpful overlays introducing me to a user interface when I try a new app on my phone or sign up for a new service online. The best guides or tutorials allow me to actually…
Original post: A Spotlight Effect for Interactive Guides in HTML
Source: Kifi

Typesafe case study on Kifi

We were happy to participate in a case study that Typesafe wrote on Kifi. Specifically, they were interested in how we used the Typesafe Platform to build the reactive and scalable platform that powers Kifi. The service’s unique approach to search is based on users easily tagging and keeping anything found online – articles, videos, pictures, email – allowing these…
Original post: Typesafe case study on Kifi
Source: Kifi