How to build a cross-platform Android WebRTC video and voice chat application with Java and JavaScript that works on both web and mobile.
13 Oct 2015
Relational algebra nicely describes the various operations that we know in SQL as well from a more abstract, formal perspective. One of the most common relational JOIN operations is the “equi-join” or SQL INNER JOIN. The above example “equi-joins” the ACTOR, FILM_ACTOR, and FILM tables from the Sakila database, in order to produce a new … Continue reading Semi Join…
Adrian Colyer wrote a great summary of a recent paper by Peter Bailis et al. In the paper the database researchers examine open source Rails applications and observe that the applications apply constraints - foreign key references, uniqueness constraints - in a way that's not very performant or correct. I was pretty surprised to read […]
11 Oct 2015
In course of the DevOpsDays 2015 in Berlin, Small Improvements is going to host a Docker meetup with John Willis of Docker Inc on October 26th! John’s presentation covers the current state of the DevOps movement as presented by one of the original “Core Organizers” of the movement. The presentation will look at some of the taxonomies that have been…
9 Oct 2015
Java EE ships with its own persistence API: JPA. JPA is most powerful when you want to map your RDBMS entities (tables / relations) to Java entities (classes), mostly following a 1:1 mapping strategy. The idea behind this is that often, business logic isn’t really set-oriented as relational algebra or SQL, but record-oriented, meaning that … Continue reading A Beginner’s…
We all know that the empty struct consumes no storage, right ? Here is a curious case where this turns out to not be true. This is a story about trying to speed up the Go compiler. Since Go 1.5 we’ve had the great concurrent GC, which reduces the cost of garbage collection, but no […]
This week we'll take a look at one of the most popular photo manipulations: adding a vignette to draw attention to the center of an image.
8 Oct 2015
Do you want to know real quick what kind of indexes there are on any given table in your Oracle schema? Nothing simpler than that. Just run the following query: The above query is ran against the Sakila database. Just replace the “FILM_ACTOR” table by your table and you’re all set. The result looks like: … Continue reading How to…
6 Oct 2015
When people talk about SQL JOIN, they often use Venn Diagrams to illustrate inclusion and exclusion of the two joined sets: While these Venn diagrams are certainly useful to understand (and remember) SQL JOIN syntax, they’re not entirely accurate, because SQL JOIN is a special type of a cartesian product, the CROSS JOIN. In a … Continue reading You Probably…
Congratulations, you have a lot of code!"Congratulations, you have a lot of code!" Remedying Android’s method limit - Part 2
SoundcloudIn part one we described how running into Android’s method limit may leave you unable to build, and offered strategies you can employ to make your app fit into a single DEX file. In this part we share an alternative option: using multiple DEX files.
5 Oct 2015
How to collect pressure data on a sensor running on Arduino, and stream those readings to a live-updating, real-time gauge chart dashboard.
How do you make 3D-glasses-like graphics in the browser? We'll look at how blend modes work together to create this effect.
4 Oct 2015
Typical server utilization is between 10% and 50%. Google has demonstrated 90% utilization without impacting latency SLAs. Xkcd estimated that Google owns 2 million machines. If you estimate an amortized total cost of $4k per machine per year, that's $8 billion per year. With numbers like that, even small improvements have a large impact, and this isn't a small improvement.…
2 Oct 2015
I went to a meetup recently where a talk was given by Cara Marie of the NCC Group. She talked about decompression bombs and the various compression algorithms that can create these malicious artifacts. You might be familiar with Russ Cox’s post Zip Files All The Way Down, which goes over self-reproducing zip files. However most programs will not decompress…
Usually when you think of a VPN, you think of accessing an office network from somewhere outside the office. A reverse VPN is for exposing things from your home network into the public. Why? Well for one, you shouldn’t want to expose your home network to the world. There are a lot of risks in doing that. A reverse VPN…
The first post in a series on creating custom image effects in CSS. We'll take a look at the vintage washout effect.
1 Oct 2015
PubNub and speakfree are working together to provide a communication platform for aid organizations and refugees during the global crisis.
We are happy to announce version 3.0.0 of our SoundCloud JavaScript SDK. The new SDK improves stream security and content uploading…
30 Sept 2015
How to build an iOS heart rate monitor that streams heart rate data in real time to a real-time dashboard from the iOS smartphone app.
Exciting times are ahead for Java/SQL developers. SQL is strong and popular as ever. It is the right language for relational databases just as much as for Big Data storage systems. Just this week, Pivotal has announced their open sourcing HAWQ and MADlib as a part of their Hadoop Native SQL strategy. At Data Geekery, … Continue reading Let’s Meet…
Every once in awhile, you hear a story like “there was a case of a 1-Gbps NIC card on a machine that suddenly was transmitting only at 1 Kbps, which then caused a chain reaction upstream in such a way that the performance of the entire workload of a 100-node cluster was crawling at a snail's pace, effectively making the…
29 Sept 2015
Introducing mongo-uri-builder, a Node.js module to easily create mongodb connection strings using objects
Luciano MamminoThe mongo-uri-builder Node.js package easily generates MongoDB connection strings from configuration objects, supporting features like authentication, replicas, and options. It integrates well with config for managing different environments.
Our company bootstrapped from one developer (me) into a team of 12 developers. The transition was not always easy: More people means more dev power, but also more communication and alignment needs. When we reached a team size of 10 in July, we decided to split them team into 3 fairly independent subteams. Last month […]
This is just a quick overview of how I did it in antibody’s homepage.
One of the beefs (and there aren’t many) that I have with CSS is that it has a very weak opinion about style encapsulation. That opinion is basically “well, name your classes well” or else bad things happen. Know this: I come from C++, land of rules and disappointed compilers; this hand waviness drives me crazy. This matters because now…
26 Sept 2015
There's a distressing feeling in the Node.js community that apps without up-to-date dependencies are somehow not as good, or stable, as apps that always keep their dependencies up to date. So we see things like greenkeeper.io and badges that show whether the project's dependencies are up to date (and, implicitly, shame anyone whose dependencies aren't […]
25 Sept 2015
In September, Mozilla release engineering started experiencing high pending counts on our test pools, notably Windows, but also Linux (and consequently Android). High pending counts mean that there are thousands of jobs queued to run on the machines that are busy running other jobs. The time developers have to wait for their test results is longer than ideal. Usually, pending…
24 Sept 2015
Recently I’ve seen several interesting conversations about ad blocking, and I wanted to remind people about a great offering called Google Contributor. With Google Contributor, you contribute a certain amount of money each month. That subscription means that you see fewer ads on the web, and you support the sites that you visit with your […]
We’re very happy to announce a guest post by Marco Behler, who has been blogging about jOOQ in the past. Marco started out in programming (reverse-engineering, actually) and now mainly programmes on the JVM in his day-to-day work. He also always had a sweet tooth for strategy and marketing. Marco Behler GmbH is the result … Continue reading It is…
I gave a little intro on Docker and talked about when to use it or not.
23 Sept 2015
How to collect and stream IoT sensor data in real time to a real-time spline chart on an HTML dashboard with Johnny-Five, Arduino, and PubNub.
To try and avoid having interview candidate start every interview with the same "tell me your background" boilerplate, we get every interviewer in the room with the candidate at the beginning of the interview for a few minutes, so everyone can introduce themselves and the candidate can walk through their background. Recently we had a […]
22 Sept 2015
Using the Johnny-Five framework to create real-time hardware-to-hardware communication between a button and LED.
In last week’s article, you learned a short process that solves most encoding problems. But there’s one encoding problem that’s much harder to solve. I know you’ve seen it. (Or maybe you’ve seen it?) It’s when a curly quote turns into ’, or an em-dash turns into —. It’ll make you think you’ve gone crazy. It should just work! You…
21 Sept 2015
There’s a well-understood phenomenon in machine learning called overfitting. The idea is best shown by a graph: overfitting Let me explain. The vertical axis represents the error of a hypothesis. The horizontal axis represents the complexity of the hypothesis. The blue curve represents the error of a machine learning algorithm’s output on its training data, and the red curve represents…
Congratulations, you have a lot of code!"Congratulations, you have a lot of code!" Remedying Android’s method limit - Part 1
SoundcloudAt SoundCloud we have been building for the Android platform since 2010. Much has changed since then: the team has grown, the list of features has grown, and our audience has grown. Today, eight engineers are working full time on the official SoundCloud app, across various areas, with contributions pouring in from other parts of the organization. Due to the…
17 Sept 2015
Mario Fusco’s popular tweet impressively shows what the main difference between imperative and functional approaches to similar algorithms really is: Imperative vs. Functional – Separation of Concerns pic.twitter.com/G2cC6iBkDJ — Mario Fusco 🇪🇺 (@mariofusco) March 1, 2015 Both algorithms do the same thing, they’re probably equally fast and reasonable. Yet, one of the algorithms is much … Continue reading Comparing Imperative…
16 Sept 2015
How to collect, store, and retrieve IoT sensor data in real time, updating and syncing data across the application when it restarts.
You only really think about a string’s encoding when it breaks. When you check your exception tracker and see Encoding::InvalidByteSequenceError: "\xFE" on UTF-8 staring you in the face. Or maybe “they’re” starts showing up as “they’re”. So, when you have a bad encoding, how do you figure out what broke? And how can you fix it? What is an encoding?…
15 Sept 2015
How to build a real-time buddy list (ie. friend's list) for chat applications using advanced channel groups, Presence, and PubNub Stream Controller.
I’m seeing people do this all the time. They want to hammer a date or timestamp constant into their SQL query, and the only function they know is the TO_DATE() or TO_TIMESTAMP() date parsing function: As observed in this Stack Overflow question, for instance: Date parsing is important only if your date input is really … Continue reading Don’t Format…
14 Sept 2015
A tutorial was published on how to build a simple Slack bot in Node.js that tells Chuck Norris jokes, for some amusing fun. The bot is open source and available on GitHub and NPM.
“configure: error: libpthread not found!” while configuring ActiveMQ CPP 3.8 and 3.9 on CentOS 6.7
SchakkoThe ./configure script of activemq-cpp for 3.8.x and 3.9 failed with the error configure: error: libpthread not found!” when running on CentOS 6.7. Stupidly i had forgotten to install the gcc-c++ package. “yum install gcc-c++” fixed everything. The error notification is although mentioned in the ActiveMQ FAQ. Stupid me. The post “configure: error: libpthread not found!” while configuring ActiveMQ CPP…
12 Sept 2015
Okay so this is part 2.5 in my series of posts combining my two favorite things, Docker & Tor. If you are just starting here, to catch you up, the first post was “How to Route all Traffic through a Tor Docker container”. The second was on “Running a Tor relay with Docker”. I thought it only made sense to…
11 Sept 2015
Have you been passively learning the material in these articles or have you been actively practicing it? I hope you’ve been actively practicing it. I really do :) Remember what Confucius said? “I hear and I forget.” “I see and I remember.” “I do and I understand.” In the previous article you learned how to parse (recognize) and interpret arithmetic…
Increased Bandwidth Consumption and Cost All over the Internet Due to a Chrome 45 Regression
Ofer ZeligChrome 45 Regression Bug: MP3 audio seek stopped working It’s been about 10 days since Chrome 45 (45.0.2454.85) was released and I really don’t know how come no one has noticed such a substantial bug, influencing millions of users of The post Increased Bandwidth Consumption and Cost All over the Internet Due to a Chrome 45 Regression appeared first on…
10 Sept 2015
During the last months we periodically experienced performance problems with our storage system. Investigating the cause for the slow performance was problematic as we did not have direct shell access and could only rely on crippled information from the web GUI. Yesterday my collagues migrated the storage system from the […] The post Slow RAID performance with our new Linux…
Collect acceleration readings from an accelerometer and stream the data in real time to a live-updating, real-time dashboard with Intel Galileo.
9 Sept 2015
In a previous post, I wrote about the choice of paradigms that Swift presents for it’s target audience. I also gave my opinion on how people with different backgrounds might see and approach the Functional Programming paradigm. In this post I want to share how I started to take advantage of FP with Swift for the practical domain of iOS…
How to get started with PubNub on the IBM Bluemix cloud development platform.
I’ve stumbled upon an interesting Stack Overflow question by user “mip”. The question was: I’m looking for a way of generating an alphabetic sequence: A, B, C, ..., Z, AA, AB, AC, ..., ZZ. This can be quickly recognised as the headings of an Excel spreadsheet, which does precisely that: . So far, none of … Continue reading How to…
Yesterday’s New York Times carried a story entitled “Apple and other tech companies tangle with U.S. over data access“. It’s a vague headline that manages to obscure the real thrust of the story, which is that according to reporters at the Times, Apple has not been forced to backdoor their popular encrypted iMessage system. This flies in … Continue reading…
8 Sept 2015
This blog post provides a beginner's guide to managing versioning and deployment of static websites using Git for version control, Flightplan.js for automated deployment, and Nginx for serving. It outlines a simple yet complete workflow for implementing continuous delivery and rollbacks.
How to build a more efficient real-time application to decrease history API calls by using an inbound channel pattern for pub/sub messaging.
When you run into a strange, seemingly unsolvable bug, improving your logging can be the best step you can take. Great logging is the easiest way to detect and fix entire classes of bugs. When you log enough information, you can see how your data changes during a request. You can track the calls you make to other services, and…
7 Sept 2015
In this post we’ll implement Reed-Solomon error-correcting codes and use them to play with codes. In our last post we defined Reed-Solomon codes rigorously, but in this post we’ll focus on intuition and code. As usual the code and data used in this post is available on this blog’s Github page. The main intuition behind Reed-Solomon codes (and basically all…
6 Sept 2015
The Shyp API currently runs on top of the Sails JS framework. It's an extremely popular framework - the project has over 11,000 stars on Github, and it's one of the top 100 most popular projects on the site. However, we've had a very poor experience with it, and with Waterline, the ORM that runs […]
4 Sept 2015
Every year Bazaarvoice R&D throws BVIO, an internal technical conference followed by a two-day hackathon. These conferences are an opportunity for us to focus on unlocking the power of our network, data, APIs, and platforms as well as have some fun in the process. We invite keynote speakers from within BV, from companies who use […]
This is a short post to describe my recommended method for building Go on the Raspberry Pi. This method has been tested on the Raspberry Pi 2 Model B (900Mhz, 1Gb ram) and the older Raspberry Pi 1 Model B+ (700Mhz, 512Mb ram). This method will build Go 1.5 into you home directory, $HOME/go. As […]
2 Sept 2015
How to stream location data to build real-time location tracking maps using JavaScript, EON real-time dashboard framework, and the Mapbox API.
Last week, my daughter started Kindergarten. I’m very happy for her, especially because she’s going to an awesome public school. As someone who didn’t grow up in the US, I heard a lot of stories about the American school system but one thing I didn’t know is that kids start so early. My daughter starts at 8:10am! We had to…
In the previous posts we created a minimal Multiboot kernel and switched to Long Mode. Now we can finally switch to Rust code. Rust is a high-level language without runtime. It allows us to not link the standard library and write bare metal code. Unfortunately the setup is not quite hassle-free yet. This blog post tries to set up Rust…
1 Sept 2015
This article is also available in Korean, thanks to Soonsang Hong! Scopes are a great way to grab the right objects out of your database: app/models/review.rb class Review < ActiveRecord::Base scope :most_recent, -> (limit) { order("created_at desc").limit(limit) } end You’d use the scope like this: app/models/homepage_controller.rb @recent_reviews = Review.most_recent(5) Calling that scope, though, looks exactly like calling a class method…
31 Aug 2015
It’s a very exciting time to be an iOS or Mac developer. The platform moves very fast and we got a new toy (language) to play with: Swift. It’s the perfect time to reevaluate, learn and evolve as a programmer, because you will be forced to adopt this new language (yes, I think Swift is the future, 100%). I want…
Okay! You had an idea for how to improve the project, the maintainers indicated they'd approve it, you checked out a new branch, made some changes, and you are ready to submit it for review. Here are some tips for submitting a changeset that's more likely to pass through code review quickly, and make it […]
I try to avoid making predictions1. It's a no-win proposition: if you're right, hindsight bias makes it look like you're pointing out the obvious. And most predictions are wrong. Every once in a while when someone does a review of predictions from pundits, they're almost always wrong at least as much as you'd expect from random chance, and then hindsight…
27 Aug 2015
How to build a WebRTC live stream for video enabling a user to broadcast video from one-to-many using the WebRTC API. It's DIY Periscope and Meerkat!
26 Aug 2015
Much of the ORM criticism of the last decade missed the point, being inaccurate. By the end of this article, we will conclude with the following: There is no significant difference between the relational (data) model and object oriented models How to come to this conclusion? Read on! How we came to believe in this … Continue reading There is…
OSCON: Where open source meets commerce and connections bloom.
25 Aug 2015
Our test suite has been failing maybe 2% of the time with a pretty opaque error message. I thought the database logs would have more information about the failure so I figured out how to turn them on with Circle. Add the following to the database section of your circle.yml: database: override: - sudo sed […]
In this tutorial, we'll show you how to build a fully-featured WebRTC group video chat application with features like mute, pause, and caller
How to get up-and-running with a simple WebRTC video and voice chat app in 20 lines of JavaScript, enabling two users to video chat in a web browser.
In the previous post we created a minimal multiboot kernel. It just prints OK and hangs. The goal is to extend it and call 64-bit Rust code. But the CPU is currently in protected mode and allows only 32-bit instructions and up to 4GiB memory. So we need to set up Paging and switch to the 64-bit long mode first.…
24 Aug 2015
In diesem Blog-Eintrag will ich meine Erkenntnisse schildern, die ich während meines Tinnitus gesammelt habe. For the non-german-readers of this blog: This blog post deals with the experiences I made during my tinnitus. Zur Vorgeschichte Am Dienstag vor genau zwei Wochen wachte ich im frühen Morgen von einem hohen Fiepen […] The post Wie ich einen HNO-Arzt in Wolfsburg suchte…
From HTTP2, Flexbox, CSS Filters, and ES6, the Internet we know today is built on hacks. Lets explore some of those hacks and solutions.
23 Aug 2015
This post is part two of what will be a three part series. If you missed it part one was How to Route Traffic through a Tor Docker container. I figured it was important, if you are going to be a tor user, to document how you can help the Tor community by hosting a Tor relay. And guess what?…
22 Aug 2015
Now that Go 1.5 is out, lots of gophers are excited to try the much improved cross compilation support. For some background on the changes to the cross compilation story you can read my previous post, or Rakyll’s excellent follow up piece. I’ll assume that you are using the binary version of Go 1.5, as distributed from […]
20 Aug 2015
Yesterday my last post on the series ‘Let’s build Freehand Drawing for iOS’ has been published at Badoo Tech blog. It’s been a very good experience for me, and of course I recommend you visit the tutorials if you are interested. I divided the tutorials in 3 parts: Part 1: Introduces the feature and a naive implementation Part 2: Adds…
Our recent article “NULL is Not The Billion Dollar Mistake. A Counter-Rant” got us a lot of reads, controversial comments, and a 50/50 upvote / downvote ratio pretty much everywhere a blog post can be posted and voted on. This was expected. Objectively, NULL is just a “special” value that has been implemented in a … Continue reading Divided we…
I love reading postmortems. They're educational, but unlike most educational docs, they tell an entertaining story. I've spent a decent chunk of time reading postmortems at both Google and Microsoft. I haven't done any kind of formal analysis on the most common causes of bad failures (yet), but there are a handful of postmortem patterns that I keep seeing over…
19 Aug 2015
How to use Leap Motion, Raspberry Pi, and PubNub to create remote motion-controlled servos enabling the control of a physical object in real time.
For the longest time I had this alias in my .bashrc alias gb='go install -v' as an homage to John Asmuth’s gb tool which I was very fond of way back before we had the go tool. Once gb was written, I had to remove that alias and live in a world where I used […]
18 Aug 2015
In this tutorial, we'll cover how to receive real-time vehicle data from the Automatic API & display them on a map in real time using the Mapbox API.
Welcome to the jOOQ Tuesdays series. In this series, we’ll publish an article on the third Tuesday every other month where we interview someone we find exciting in our industry from a jOOQ perspective. This includes people who work with SQL, Java, Open Source, and a variety of other related topics. We have the pleasure … Continue reading jOOQ Tuesdays:…
Hi there. This is the last post in the series of a local AOSP gerrit server setup. In this post, We’ll finalize the configuration of Gerrit, add new branches for development and see how to maintain the setup. In the last post, we’ve finished creating the project in Gerrit. When we develop locally, we should […]
This post explains how to create a minimal x86 operating system kernel using the Multiboot standard. In fact, it will just boot and print OK to the screen. In subsequent blog posts we will extend it using the Rust programming language. I tried to explain everything in detail and to keep the code as simple as possible. If you have…
17 Aug 2015
How to publish and stream vehicle data and events in real time from the Automatic adapter via PubNub to a web interface.
16 Aug 2015
Yesterday the New York Times and ProPublica posted a lengthy investigation based on leaked NSA documents, outlining the extensive surveillance collaboration between AT&T and the U.S. government. This surveillance includes gems such as AT&T’s assistance in tapping the main fiber connection supporting the United Nations, and that’s only the start. The usual Internet suspects are arguing … Continue reading The…
15 Aug 2015
The RASpec Impreza is a 2002 Subaru WRX “bugeye” chassis purchased in 2011 and fully restored from 2013 to 2015. The car was built by DENT Sport Garage and German Performance Service in Massachusetts. I built the RASpec Impreza as a cross-campaign race car capable of competing in time attack, time trial, hillclimb and wheel-to-wheel racing series up and down…
14 Aug 2015
I was recently lucky enough to get to attend my first SIGGRAPH conference this year. While I didn’t attend any talks, I did spend some time in the expo. Here is a collection of some of the neat things I saw at SIGGRAPH 2015. Sorry it’s not more collected; I didn’t have the intention of writing a blog post until…
13 Aug 2015
Functional programming allows for quasi-declarative programming in a general purpose language. By using powerful fluent APIs like Java 8’s Stream API, or jOOλ’s sequential Stream extension Seq or more sophisticated libraries like vavr or functionaljava, we can express data transformation algorithms in an extremely concise way. Compare Mario Fusco’s imperative and functional version of the … Continue reading Common SQL…
12 Aug 2015
I woke up this morning and I thought to myself: “Why do we find it so difficult to learn a new skill?” I don’t think it’s just because of the hard work. I think that one of the reasons might be that we spend a lot of time and hard work acquiring knowledge by reading and watching and not enough…
Introduction Suppose we wish to model a process described by a differential equation and initial condition But we wish to do this in the presence of noise. It’s not clear how do to this but maybe we can model the process discretely, add noise and somehow take limits. Let be a partition of then we … Continue reading Stochastic Integration
11 Aug 2015
After coding for a while (eek, almost 20 years or so in my case, time flies when you’re having fun), one starts to embrace those habits. Because, you know… Anything that Can Possibly Go Wrong, Does. This is why people embrace “defensive programming”, i.e. paranoid habits that sometimes make total sense, and sometimes are rather … Continue reading Top 10…