Friday, 16 December 2016

What HTTP/2 Means for Ruby Developers

curl with http2

➜  brew install curl --with-nghttp2
curl -I --http2

HTTP/2 200 

server: nginx

Friday, 2 December 2016

Sunday, 27 November 2016


 Create agents that monitor and act on your behalf. Your agents are standing by!

What is Huginn?

Huginn is a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take actions on your behalf. Huginn's Agents create and consume events, propagating them along a directed graph. Think of it as a hackable Yahoo! Pipes plus IFTTT on your own server. You always know who has your data. You do.

Awesome Algorithms


Awesome Algorithms

A curated list of awesome places to learn and/or practice algorithms. Inspired by awesome-awesomeness and all the other awesome Awesome libraries.
If you want to contribute, please read the contribution guidelines.


Websites you should use to learn classic algorithms

Online Courses

Free and High Quality Courses Online


The most highly regarded books to learn algorithms

Github Libraries

Implementations of the most classic algorithms in a wide variety of programming languages

Online Judges

Online Judges to practice what you learned above
  • ACM-ICPC Live Archive - Hundreds of problems from previous ACM-ICPC Regionals and World Finals.
  • AIZU ONLINE JUDGE - Japanese Online Judge.
  • CodeChef - More problems and monthly online contests.
  • Codeforces - The only programming contests Web 2.0 platform
  • CodeMarshal - Real world contests online!
  • CodeWars - A website that houses support to solve algorithms in many languages in varying difficulty.
  • CoderByte - A decent website with algorithm challenges from beginner to advanced levels. Supports most of the popular languages like C++, python, javascript, ruby.
  • HackerEarth - Practice alogrithmic problems & challenges and participate in hiring challenges.
  • HackerRank - Featured algorithm and functional programming online judges
  • Infoarena - Romanian Online Judge. 1500+ algorithmic problems
  • LavidaOnlineJudge - Korean Online Judge(Half English). 1300+ problems.
  • Learneroo Algorithms Tutorials - Learn and practice algorithms by solving challenges online.
  • LeetCode - Learn algorithms and prepare for interviews.
  • PKU JudgeOnline - Chinese Online Judge.
  • ProjectEuler - Mathematical problems that can be solved using algorithms (or just a pencil, depends on how much you already know).
  • Rosalind - A platform for learning bioinformatics and programming through problem solving.
  • - Online Judge and contest host with a lot of algorithmic problems in the archive to practice.
  • Snakify - An introductory Python course with 100+ algorithmic problems and a step-by-step debugger (from Russia).
  • SPOJ - More problems.
  • TopCoder - Lots of problems and real world/money worthy problems in Graphic Design, Data Science and Development.
  • Toph - Sport programming platform for online contests. It also has a growing problem archive.
  • URI - Brazilian Online Judge. Not so much problems, but it's growing and it has online contests.
  • UVA - Hundreds of problems (from previous ACM-ICPC Regionals, World Finals and others).


Some tools that can help you in the learning of algorithms


And for the sake of copyleft, here's our license:
Creative Commons License

Which are the 10 algorithms every computer science student must implement at least once in life?

Coming from an intensive programming contest background, having read Introduction to Algorithms, etc., but then moving on to doing real-life projects, I find that some of the more interesting and powerful algorithms in a problem solving setting find little use in the industry.

I'm thus going to present algorithms that carry over to engineering, not just research and TopCoder. Another goal was for these algorithms to be useful and widely applicable hammers in their own right, not just as an idea. The benefits of most "algorithms" will be hard to explain them to someone who has not yet been introduced to them, but I tried my best of giving a hint for their role.

  1. Naive Bayes. Classification is a natural first step to machine learning and the Naive Bayes classifier combines that with the trending concept of Bayesian inference. Despite its simplicity, can address key problems like spam classification.
  2. Map-Reduce. A simple and visual way of leveraging multiple computers to solve a single task. More on its different uses here: MapReduce Patterns, Algorithms, and Use Cases.
  3. Hill Climbing. Introduces optimization over a non-exhaustible domain and leads to a whole array of powerful methods like gradient-descent, simulated annealing. Optimization allows us to do decision making, it's important.
  4. Binary search. Introduces logarithmic complexity and how the structure of data can change complexity characteristics of operations.
  5. Exponentiation (powers) by halving. Great example of a recursive attack. You would be surprised how many problems can be described as exponentiation (for an associative operation) of something: a number, a matrix and more. Again it's magical that associativity of an operation allows you to turn a linear factor into a logarithmic one.
  6. Floyd-Warshall. Graphs as matrices, shortest paths, negative cycles, dynamic programming in five lines of code.
  7. Inductive inference. Inductive inference. This idea on how to find programs that do certain things without having a human write them I believe is the key to the future of AI and simulating and understanding the human mind.
  8. Markov Chain Monte Carlo. Approximate integral, expected value computation based on a conditional specification of the probability distribution. This gives us a general way of doing data analysis.
  9. Shor's algorithm. Non-trvial example of a quantum algorithm that shows a significant complexity improvement. Reveals how quantum computing works.
  10. PageRank. How to iteratively solve for tightly related variables to extract metrics on graphs.

Traveling Salesman Problem, four algorithms

Saturday, 19 November 2016