Cassandra at Github: integration

John Nunemaker on implementation of Analytics at Github using Cassandra: The collector became a Rails app with one purpose - to receive events and queue them in Kestrel, which I used on Gauges. The processor pulled from the queue and stored the raw data in Cassandra. The other component of processing (Hadoop) then iterated the raw data on intervals and turned it into aggregated “indexes”. The reporter became a Rails app with one purpose as well, to receive API requests from github....

September 29, 2014 · 1 min · anvyst

WHMCS API: heritage of whmcs-ruby gem

Joshua Priddle did a great job back in DotBlock accomplishing Ruby binding for WHMCS API. Unfortunately, last signs of activity were 3 years ago. It’s a pity, as gem is great, and works like charm, but it became massively outdated, and piled with pull requests no one merged in the master branch for ages. The code was published by MIT license on 2011, thus whmcs-api gem will be its descendant, which I’ll try to keep updated as much as possible....

April 3, 2014 · 1 min · anvyst

Punycode domains: why?!

Honestly, I couldn’t get the idea of non-latin alphabet used in domain names. Especially when the standards were passed, and Registrars started offering cyrillic, arabic domain names, but web browsers still were preferring to output it as a punycode mess. A pretty simple cyrillic domain like ‘президент.рф’ (stands for president.rf) becomes ‘xn–d1abbgf6aiiy.xn–p1ai’. Not all the browsers still keep cyrillic domains in the address bars, so you’d see some punycode mess in there....

March 19, 2014 · 1 min · anvyst

Ruby Sinatra in less than 999B of code

%w.rack tilt date INT TERM..map{|l|trap(l){$r.stop}rescue require l};$u=Date;$z=($u.new.year + 145).abs;puts "== Almost Sinatra/No Version has taken the stage on #$z for development with backup from Webrick" $n=Module.new{extend Rack;a,D,S,q=Rack::Builder.new,Object.method(:define_method),/@@ *([^\n]+)\n(((?!@@)[^\n]*\n)*)/m %w[get post put delete].map{|m|D.(m){|u,&b|a.map(u){run->(e){[200,{"Content-Type"=>"text/html"},[a.instance_eval(&b)]]}}}} Tilt.mappings.map{|k,v|D.(k){|n,*o|$t||=(h=$u._jisx0301("hash, please");File.read(caller[0][/^[^:]+/]).scan(S){|a,b|h[a]=b};h);v[0].new(*o){n=="#{n}"?n:$t[n.to_s]}.render(a,o[0].try(:[],:locals)||{})}} %w[set enable disable configure helpers use register].map{|m|D.(m){|*_,&b|b.try :[]}};END{Rack::Handler.get("webrick").run(a,Port:$z){|s|$r=s}} %w[params session].map{|m|D.(m){q.send m}};a.use Rack::Session::Cookie;a.use Rack::Lock;D.(:before){|&b|a.use Rack::Config,&b};before{|e|q=Rack::Request.new e;q.params.dup.map{|k,v|params[k.to_sym]=v}}} That’s a wow! That’s what I call a minimal Web Framework. Full description of the code can be found here.

December 20, 2013 · 1 min · anvyst