<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>My name is Derek Perez, and I do the computer.</description><title>Perezium</title><generator>Tumblr (3.0; @perezium)</generator><link>http://blog.derekperez.com/</link><item><title>Generally speaking, this is how I would sum up my first trip to...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/G8CeP15EAS8?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Generally speaking, this is how I would sum up my first trip to Japan. Certainly won’t be the last.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/47774635797</link><guid>http://blog.derekperez.com/post/47774635797</guid><pubDate>Fri, 12 Apr 2013 04:35:21 -0700</pubDate></item><item><title>Setting up Tunnelr to work with dd-wrt using openVPN</title><description>&lt;p&gt;Before we begin, make sure that you have purchased a router that supports the dd-wrt firmware AND that that firmware version also supports openVPN, they don’t all necessarily do, so do some checking at &lt;a href="http://www.myopenrouter.com" target="_blank"&gt;&lt;a href="http://www.myopenrouter.com" target="_blank"&gt;http://www.myopenrouter.com&lt;/a&gt;&lt;/a&gt;. I purchased the &lt;a href="http://www.myopenrouter.com/download/43858/DD-WRT-for-WNDR4500v1/" target="_blank"&gt;Netgear n900 WNDR4500 which supported dd-wrt and openVPN as of Feb 26, 2013&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;lastly, make sure your router supports JFFS — the Journaling Flash File System. Check the dd-wrt wiki ahead of time.&lt;/p&gt;
&lt;p&gt;I’ll assume you have flashed your router and have access to the dd-wrt admin panel for your router, if you haven’t, check the link above for instructions. I’ll also assume you have an account at &lt;a href="http://www.tunnelr.com" target="_blank"&gt;Tunnelr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;h2&gt;Configuring JFFS&lt;/h2&gt;
&lt;p&gt;Once in the admin panel, visit the &lt;strong&gt;Administration&lt;/strong&gt; tab. Scroll down to JFFS2 Support and select &lt;strong&gt;Enable&lt;/strong&gt;, then press the &lt;strong&gt;Apply Changes&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://f.cl.ly/items/1g2T152Z3N033J1m0B0a/Screen%20Shot%202013-03-06%20at%203.00.00%20PM.png"/&gt;&lt;/p&gt;
&lt;p&gt;Once this is done, set Clean JFFS2 to &lt;strong&gt;Enable&lt;/strong&gt;, and press &lt;strong&gt;Apply Changes&lt;/strong&gt; once again. Once you’re done with this, reboot the router.&lt;/p&gt;
&lt;h2&gt;Configuring SSH&lt;/h2&gt;
&lt;p&gt;SSH is required to copy your VPN configuration and access certificates, so we’ll need to enable this to continue. To Enable SSH, select the &lt;strong&gt;Services&lt;/strong&gt; tab, and look for the &lt;strong&gt;Secure Shell&lt;/strong&gt; section. We’ll want to make sure that SSHd is set to &lt;strong&gt;Enable&lt;/strong&gt;, and lastly set Password Login to &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://f.cl.ly/items/3H2Y3Y1R3U213k3G1n3C/Screen%20Shot%202013-03-06%20at%203.03.45%20PM.png"/&gt;&lt;/p&gt;
&lt;p&gt;press &lt;strong&gt;Apply Changes&lt;/strong&gt; when everything is configured properly. This will allow us to use ssh with the admin password we defined earlier for our dd-wrt install. We&amp;#8217;ll want to leave this running so that the openvpn process can stay active as a daemon, when we&amp;#8217;re done. You can disable the Password Login setting, if you want to secure it.&lt;/p&gt;
&lt;h2&gt;Connecting via SSH&lt;/h2&gt;
&lt;p&gt;Next, we’ll need to log into our router using the SSH access we just set up. the ssh username to login with is &lt;strong&gt;root&lt;/strong&gt; and the password should be whatever you set your router admin password to.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://f.cl.ly/items/2Y1g3A2m0a0O0W3Q1g2g/Screen%20Shot%202013-03-06%20at%203.10.40%20PM.png"/&gt;&lt;/p&gt;
&lt;p&gt;If you see something like the picture above, you’re in! Congrats. Now we need to go make sure JFFS is setup properly.&lt;/p&gt;
&lt;h2&gt;Configuring Tunnelr&lt;/h2&gt;
&lt;p&gt;lets cd into /jffs and make a folder named tunnelr, using the following command:&lt;/p&gt;
&lt;pre&gt;cd /jffs; mkdir tunnelr&lt;/pre&gt;
&lt;p&gt;We’ll want to make sure that returned no errors, if you get a message about the folder being a “read only” file system, you messed up somewhere, go check the notes above. If that worked, we’re now going to want to copy over our configuration files from our tunnelr account.&lt;/p&gt;
&lt;p&gt;Make sure you downloaded them from your tunnelr admin panel. check their help page to figure out how thats done, if you’re unclear.&lt;/p&gt;
&lt;h3&gt;copy over the files&lt;/h3&gt;
&lt;p&gt;First, we need to copy over the &lt;strong&gt;*&lt;em&gt;-tunnelr.ovpn&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;*&lt;em&gt;-tunnelr.crt&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;*-tunnelr.ca, &lt;/strong&gt;and&lt;strong&gt; *-tunnelr.key&lt;/strong&gt; files.&lt;/p&gt;
&lt;p&gt;I did this by just copy/pasting them into empty vi buffers, but you can get them in however you like, just make sure that they are &lt;strong&gt;in tact&lt;/strong&gt; and include the entire body of text that they should.&lt;/p&gt;
&lt;h3&gt;create an auth.txt file&lt;/h3&gt;
&lt;p&gt;So that we can have the router login with our tunnelr account, we’ll need to write a special text file that holds our account username and password. we’ll call this file &lt;strong&gt;auth.txt&lt;/strong&gt; and store it right along with the certs and .ovpn files. The file should have your username on line 1, and your password on line 2:&lt;/p&gt;
&lt;pre&gt;mrperson
myincrediblysafepassword
&lt;/pre&gt;
&lt;h3&gt;tweak the .opvn configuration file&lt;/h3&gt;
&lt;p&gt;What we need to do next is adjust the .ovpn file slightly so that it knows where to look for our certificate information &lt;em&gt;and&lt;/em&gt; our username/password. Notice the &lt;strong&gt;ca&lt;/strong&gt;, &lt;strong&gt;cert&lt;/strong&gt;, and &lt;strong&gt;key&lt;/strong&gt; entries, we’ll need to prepend each entry with &lt;strong&gt;/jffs/tunnelr&lt;/strong&gt;. An example of that might be this:&lt;/p&gt;
&lt;pre&gt;ca /jffs/tunnelr/nyc-tunnelr.ca
cert /jffs/tunnelr/nyc-tunnelr.crt
key /jffs/tunnelr/nyc-tunnelr.key
&lt;/pre&gt;
&lt;p&gt;Lastly, we need to specify where we stored our credentials so that the router will auto-login for us, make sure to replace the line &lt;code&gt;auth-user-pass&lt;/code&gt; with the following:&lt;/p&gt;
&lt;pre&gt;auth-user-pass /jffs/tunnelr/auth.txt&lt;/pre&gt;
&lt;p&gt;We’re all configured! Lets test our settings.&lt;/p&gt;
&lt;h2&gt;Testing Our Configuration&lt;/h2&gt;
&lt;p&gt;We can verify that all our configuration is working as we expect by running the openvpn command manually via SSH:&lt;/p&gt;
&lt;pre&gt;openvpn --config /jffs/tunnelr/nyc-tunnelr.ovpn
&lt;/pre&gt;
&lt;p&gt;Obviously, you should replace the configuration file name to match whatever yours is called. If it works you should see no errors and a bunch of ‘RWRWRWRWRWRWRWRWW…’ thats considered a good sign :)&lt;/p&gt;
&lt;p&gt;to make it run in the background as a daemon, add &lt;code&gt;--daemon&lt;/code&gt; to your command. You can verify that openvpn is running at any time by SSHing in and checking the process table:&lt;/p&gt;
&lt;pre&gt;ps | grep openvpn
&lt;/pre&gt;
&lt;h2&gt;Setting Up Auto-Login&lt;/h2&gt;
&lt;p&gt;If we head back to the &lt;strong&gt;Administration&lt;/strong&gt; tab on dd-wrt, we can configure the router to make sure and start OpenVPN every time we reboot the router. Once in the &lt;strong&gt;Administration&lt;/strong&gt; tab, select the &lt;strong&gt;Commands&lt;/strong&gt; sub-tab, and type in the following command:&lt;/p&gt;
&lt;pre&gt;openvpn --config /jffs/tunnelr/nyc-tunnelr.ovpn --daemon
&lt;/pre&gt;
&lt;p&gt;Again, replace the config with your proper filename. Notice the —daemon, this makes sure that openvpn is always running in the background on the router.&lt;/p&gt;
&lt;p&gt;Once you’ve typed all that in press the &lt;strong&gt;Save Startup&lt;/strong&gt; button, followed by the &lt;strong&gt;Run Commands&lt;/strong&gt; button.&lt;/p&gt;
&lt;h2&gt;Thats it!&lt;/h2&gt;
&lt;p&gt;Verify that your network is routing to your expected visit a service like &lt;a href="http://www.jsonip.com" target="_blank"&gt;&lt;a href="http://www.jsonip.com" target="_blank"&gt;http://www.jsonip.com&lt;/a&gt;&lt;/a&gt; and assert that it matches your tunnelr account.&lt;/p&gt;
&lt;p&gt;If you found this tutorial useful, please consider making a bitcoin donation: &lt;strong&gt;1fVERkoAUoa4rWMUuSsywyttxRJKMVaWn&lt;/strong&gt;&lt;/p&gt;</description><link>http://blog.derekperez.com/post/44741116419</link><guid>http://blog.derekperez.com/post/44741116419</guid><pubDate>Wed, 06 Mar 2013 15:45:00 -0800</pubDate><category>dd-wrt</category><category>openvpn</category><category>tutorial</category><category>tunnelr</category></item><item><title>Video</title><description>&lt;iframe src="http://player.vimeo.com/video/5324878" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://blog.derekperez.com/post/44525600147</link><guid>http://blog.derekperez.com/post/44525600147</guid><pubDate>Sun, 03 Mar 2013 22:05:37 -0800</pubDate></item><item><title>David Oglivy: We Sell or Else.</title><description>&lt;iframe width="400" height="299" src="http://www.youtube.com/embed/Br2KSsaTzUc?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/David_Ogilvy_(businessman)" target="_blank"&gt;David Oglivy:&lt;/a&gt; We Sell or Else.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/43294400764</link><guid>http://blog.derekperez.com/post/43294400764</guid><pubDate>Sat, 16 Feb 2013 22:53:53 -0800</pubDate></item><item><title>Learning how to use this new lens. Scenes from around my house.</title><description>&lt;img src="http://24.media.tumblr.com/37c320a981c5d25cc8118defbaab219a/tumblr_mhb2328OnR1qzmp2so1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/d51eb1c56e778dd0a326297cf6154d3f/tumblr_mhb2328OnR1qzmp2so2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/b45aee7ece7f69b0f44ae7b72cb98319/tumblr_mhb2328OnR1qzmp2so3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/02961e8845305ec8f9b9a56608e37eb2/tumblr_mhb2328OnR1qzmp2so4_r1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;Learning how to use this new lens. Scenes from around my house.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/41645132678</link><guid>http://blog.derekperez.com/post/41645132678</guid><pubDate>Sun, 27 Jan 2013 14:21:00 -0800</pubDate><category>photos</category></item><item><title>I bought a new lens today. 50mm f/1.2. Canon.</title><description>&lt;img src="http://25.media.tumblr.com/ef1548c9f059071944d27dabdc48002c/tumblr_mh9m4eJJNK1qzmp2so4_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/bfadecad315449ebc292905920fdac10/tumblr_mh9m4eJJNK1qzmp2so1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/ec0673ca1a265a033bebcaa9743df138/tumblr_mh9m4eJJNK1qzmp2so3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/8286bfd9000ff98f707732b3d02c5745/tumblr_mh9m4eJJNK1qzmp2so2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/937b8a51761f8e0be69e1d1e5956e44e/tumblr_mh9m4eJJNK1qzmp2so5_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;I bought a new lens today. 50mm f/1.2. Canon.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/41577915768</link><guid>http://blog.derekperez.com/post/41577915768</guid><pubDate>Sat, 26 Jan 2013 19:38:38 -0800</pubDate></item><item><title>Currently my favorite game. Love the aesthetic, the gameplay,...</title><description>&lt;img src="http://24.media.tumblr.com/822205a136a022bd237d80e4795f1053/tumblr_mh7lduc4wj1qzmp2so1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Currently my favorite game. Love the aesthetic, the gameplay, and the soundtrack. 100% amazing.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/41484006086</link><guid>http://blog.derekperez.com/post/41484006086</guid><pubDate>Fri, 25 Jan 2013 17:27:30 -0800</pubDate><category>inspiration</category></item><item><title>Teach Protocols, Not Languages.</title><description>&lt;p&gt;&lt;a href="http://armstrongonsoftware.blogspot.com/" target="_blank"&gt;Joe Armstrong&lt;/a&gt; is one of my computer science heros. &lt;a href="http://erlang.org/pipermail/erlang-questions/2013-January/071949.html" target="_blank"&gt;He wrote this this morning&lt;/a&gt; and I wanted to make sure I had a copy of it, for posterity.&lt;/p&gt;

&lt;pre&gt;
Old timer here ...

When I learnt programming (1967) ,
I could choose between FORTRAN and (it was rumoured, Algol)
but nobody knew anything about Algol so it was FORTRAN.

The turn round time for a program was three weeks

    week 1 - write code on paper forms - send to computer center to be turned into punched cards
    week 2 - review punched cards, if ok send to machine
    week 3 - results

The compiler helpfully stopped at the first syntax error which got you back
to week 1 -
so if you had say ten errors in your program it would take 30 weeks to get
it running.

This is a pretty good environment - teaches you not to make mistakes and to
think first.

By about 1970 I was at university and turn round times were down to 4 hours
and you could punch your own cards - it was still FORTRAN

By 1974 I got access to a computer -- a honywell DDP516 - with a colossal
32 KB memory.
So the 474 pass FORTRAN compiler could compile a hundred line program in
less than a week
(or so ...)

Things improved - I went to CERN and used the CRAY1 this could compile 100K
lines of
FORTRAN in 1 picosecond (ie about a zillion times slower than my mobile
phone today)

Still Fortran.

In 1974 (ish) I got to play with a DEC10 - Now I could write FORTRAN,
Basic, assembler
and it had time-sharing (wow) turn round times of seconds. If I'd been In
the USA I'd be Bill Gates,
but this was Edinburgh.

In 1976 I got a job programming a NORD10 in FORTRAN/Assembler and it was
really fast
turn round times of seconds.

In 1980 ish I was still programming in FORTRAN - I forget the name of the
machine
all files were in one directory, no full-screen editor, no revision control
system,
I wrote about 150K lines of FORTRAN for it.

1985 I joined Ericsson - wow a VAX11/750 - new languages to learn. Bye bye
FORTRAN

I learnt (with various degrees of proficiency) Lisp, Prolog, awk, bash,
smalltalk, TCL,
and became proficient in Prolog (aggghhh - the beauty ....)

I also played with just about any language I could get my hands on (ML,
forth, ...)

Then I (1986) got into my Erlang Phase (I couldn't really learn Erlang,
'cos it didn't exist,
so I invented it) - it was really an outgrowth of Prolog+Smalltalk with a
bit of error recovery
concurrency and distribution throw in.

Then I learnt (badly) C - But Mike Williams said my C was crap and looked
like Fortran so he
binned my C ... (why use malloc and free and pointers anyway ...)

I saw C++ coming and read the book - or at least tried to read the book -
there's a dent
in the wall behind my piano, where the book hit the wall - Improvements to
C should make things
easier not more complicated, I thought.

Time passed.

I tried Java (not impressed, ok it's better than C++, but oh so verbose, I
used to get
programmers "white fingers" when programming FORTRAN you have to write
hundreds of lines
to do the smallest thing - Java seemed similar - so verbose) - I also
(later) tried
Python (ok), Ruby (ok), Lua(better), Javascript(I like :-)

It's actually taken me quite a long time to learn all these languages, and
they didn't
all come at once. I had a good 15 years of FORTRAN - long enough to get
good at it,
10 years of Prolog, 20 years of Erlang etc.

I also had a long time to assimilate the new ideas - the ideas in
programming come pretty slowly
- once every twenty years or so somebody has a really good idea,
programming
today hasn't improved much in the last 20 years - it was mess then and it's
still a mess.

IDE's and revision control systems have just made matters worse - now you
have all the
old versions of the mess as well as the mess itself, and the IDE means you
can't even see the mess.

The best IDE in the world is your BRAIN - it's a zillion times better than
these
clicky things.

What's this got to do with education?

Suppose you're starting off.

You can choose between twenty odd languages (all of them good for one
reason or another)
what took me 40 years to learn, you must try to understand in 2-3 years,
this is just not possible.

What languages should a beginner learn, what languages should a school
teach?

Now we get to the paradox of choice - because there are so many
alternatives it becomes
impossible to choose.

Old timers say "choose the language appropriate to the problem" when you
know 20 odd languages (with varying degrees of proficiency) this is easy to say - but If you know two languages Java and C then this isn't much help.

There are literally problems where the solution in a CLP language is a few lines
and is thousands of lines in C.

What would I recommend learning?

    - C
    - Prolog
    - Erlang (I'm biased)
    - Smalltalk
    - Javascript
    - Hakell / ML /OCaml
    - LISP/Scheme/Clojure

A couple of years should be enough (PER LANGUAGE).

Notice there is no quick fix here - if you want a quick fix go buy "learn
PHP in ten minutes"
and spend the next twenty years googling for "how do I compute the length
of a string"

The crazy think is we still are extremely bad at fitting things together -
still the best
way of fitting things together is the unix pipe

    find ... | grep | uniq | sort | ...

and the *fundamental* reason for this is that components should be separated
by well-defined protocols in a universal intermediate language.

Fitting things together by message passing is the way to go - this is basis
of
OO programming - but done badly in most programming languages.

If ALL applications in the world were interfaced by (say) sockets + lisp S
expressions
and had the semantics of the protocol written down in a formal notation -
then we could
reuse things (more) easily.

Today there is an unhealthy concentration on language and efficiency and
NOT on how things fit together and protocols - teach protocols and not
languages.

And teach ALGORITHMS.

Cheers

/Joe

(The dates in the above are approximate)
&lt;/pre&gt;</description><link>http://blog.derekperez.com/post/41382405844</link><guid>http://blog.derekperez.com/post/41382405844</guid><pubDate>Thu, 24 Jan 2013 13:08:00 -0800</pubDate><category>computer-science</category><category>inspiration</category></item><item><title>Minecraft: The Story of Mojang documentary was fantastic. I...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/SXEdspVDMxw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://redux.com/minecraft-movie" target="_blank"&gt;Minecraft: The Story of Mojang documentary&lt;/a&gt; was fantastic. I highly recommend it to anyone who wants to see behind the scenes of this amazing game and company. This documentary follows the team between 2011-2012.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/38782353587</link><guid>http://blog.derekperez.com/post/38782353587</guid><pubDate>Tue, 25 Dec 2012 01:26:00 -0800</pubDate></item><item><title>this is incredibly beautiful improv composition doing using...</title><description>&lt;iframe src="http://player.vimeo.com/video/50061269" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;this is &lt;a href="http://toplap.org/the-disklavier-sessions/" target="_blank"&gt;incredibly beautiful improv composition&lt;/a&gt; doing using lisp/clojure and a &lt;a href="http://en.wikipedia.org/wiki/Disklavier" target="_blank"&gt;Disklavier&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/35147370139</link><guid>http://blog.derekperez.com/post/35147370139</guid><pubDate>Tue, 06 Nov 2012 13:03:00 -0800</pubDate><category>inspiration</category><category>clojure</category></item><item><title>AT&amp;T Archives: The UNIX Operating System.</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/tc4ROCJYbm0?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;AT&amp;T Archives: The UNIX Operating System.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/34087395587</link><guid>http://blog.derekperez.com/post/34087395587</guid><pubDate>Sun, 21 Oct 2012 23:40:15 -0700</pubDate><category>inspiration</category></item><item><title>Redis and HAProxy Support Added To Riemann Tools</title><description>&lt;p&gt;Over the weekend, I started playing around more with &lt;a href="http://aphyr.github.com/riemann/" target="_blank"&gt;Riemann&lt;/a&gt;, the fantastic distributed monitoring project started by &lt;a href="http://aphyr.com/" target="_blank"&gt;Kyle Kingsbury&lt;/a&gt;. I contributed two pull requests this weekend:&lt;/p&gt;

&lt;h2&gt;&lt;a href="https://github.com/aphyr/riemann-tools/pull/5" target="_blank"&gt;1. Adds Redis monitoring support to riemann-tools&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This probe polls &lt;a href="http://redis.io/commands/info" target="_blank"&gt;the redis INFO command&lt;/a&gt;, and pumps all of the metrics to a Riemann server instance. It allows custom port/host configuration and also has AUTH support.&lt;/p&gt;

&lt;pre&gt;
./bin/riemann-redis --help
Options:
            --host, -h:   Riemann host (default: 127.0.0.1)
            --port, -p:   Riemann port (default: 5555)
        --interval, -i:   Seconds between updates (default: 5)
      --redis-host, -r:   Redis hostname (default: localhost)
      --redis-port, -e:   Redis port (default: 6379)
  --redis-password, -d:   Redis password (default: )
            --help, -l:   Show this message
&lt;/pre&gt;

&lt;h2&gt;&lt;a href="https://github.com/aphyr/riemann-tools/pull/6" target="_blank"&gt;2. Adds HAProxy monitoring to riemann-tools&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This probe assumes that you&amp;#8217;ve setup a &lt;a href="http://serverfault.com/a/198271" target="_blank"&gt;stats endpoint for HAProxy&lt;/a&gt;. If not, you should configure it ahead of time. This probe requires knowledge of the fully qualified path (including auth info if you require it). It also supports SSL based on the protocol you specify.&lt;/p&gt;

&lt;pre&gt;
./bin/riemann-haproxy --help
Options:
       --host, -h:   Riemann host (default: 127.0.0.1)
       --port, -p:   Riemann port (default: 5555)
   --interval, -i:   Seconds between updates (default: 5)
  --stats-url, -s:   Full url to haproxy stats (eg: https://user:password@host.com:9999/stats)
       --help, -e:   Show this message
&lt;/pre&gt;

&lt;h2&gt;One Last Thing!&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m the maintainer of the &lt;a href="https://github.com/perezd/riemann-nodejs-client" target="_blank"&gt;Riemann node.js client&lt;/a&gt;, and last week I upgraded the protocol buffer dependencies to finally support node v0.8.x, so if you&amp;#8217;re using node and want to use Riemann to monitor stuff, &lt;a href="https://npmjs.org/package/riemann" target="_blank"&gt;upgrade to v0.3.0&lt;/a&gt; of my client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; On a roll, I&amp;#8217;ve added &lt;a href="https://github.com/aphyr/riemann-tools/pull/7" target="_blank"&gt;monitoring and stats aggregation for Cloudant.com&lt;/a&gt;. &lt;a href="http://www.cloudant.com" target="_blank"&gt;Cloudant&lt;/a&gt; hosts a dynamodb-style version of &lt;a href="http://www.couchdb.org" target="_blank"&gt;CouchDB&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/34066365566</link><guid>http://blog.derekperez.com/post/34066365566</guid><pubDate>Sun, 21 Oct 2012 17:20:00 -0700</pubDate><category>riemann</category><category>open-source</category></item><item><title>Always impressed by the work/research that Hickey and team are...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/Cym4TZwTCNU?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Always impressed by the work/research that Hickey and team are doing.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/30776700361</link><guid>http://blog.derekperez.com/post/30776700361</guid><pubDate>Sun, 02 Sep 2012 20:54:48 -0700</pubDate><category>open-source</category><category>inspiration</category><category>engineering</category></item><item><title>ANN: Streamable: Simple Streaming Responses for Express</title><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Chunked_transfer_encoding" target="_blank"&gt;HTTP/1.1 chunked encoding&lt;/a&gt; is a really useful feature of the protocol, however, its really disappointing that we cannot interact with it directly via XHR. Instead, we have to wait for the entire request/response cycle to be complete, before we can start interacting with the data thats coming to us over the wire!&lt;/p&gt;

&lt;p&gt;Since we cannot rely on the HTTP protocol alone, we use a hybrid strategy that negotiates initially over HTTP at first, then coordinates chunked data transmission using asynchronous pipelines. Ideally, this is accomplished using &lt;a href="http://en.wikipedia.org/wiki/WebSocket" target="_blank"&gt;WebSockets&lt;/a&gt;, but will feature detect as you would expect, thanks to &lt;a href="http://socket.io" target="_blank"&gt;socket.io&lt;/a&gt;. So rather than reinventing the HTTP protocol over sockets, we couple the two protocols together into a single API.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://perezd.github.com/streamable" target="_blank"&gt;Checkout Streamable on Github&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.derekperez.com/post/30044493027</link><guid>http://blog.derekperez.com/post/30044493027</guid><pubDate>Thu, 23 Aug 2012 11:05:08 -0700</pubDate><category>open-source</category></item><item><title>Steve Jobs, 1995. NeXT.</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/121ofj_l6vM?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Steve Jobs, 1995. NeXT.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/26516000082</link><guid>http://blog.derekperez.com/post/26516000082</guid><pubDate>Wed, 04 Jul 2012 14:44:57 -0700</pubDate></item><item><title>Sean Cribbs - Eventually Consistent Data Structures</title><description>&lt;iframe src="http://player.vimeo.com/video/43903960" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Sean Cribbs - Eventually Consistent Data Structures&lt;/p&gt;</description><link>http://blog.derekperez.com/post/26388167069</link><guid>http://blog.derekperez.com/post/26388167069</guid><pubDate>Mon, 02 Jul 2012 18:37:31 -0700</pubDate><category>engineering</category></item><item><title>ANN: Riemann Client for Node.js</title><description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; If you&amp;#8217;re interested in using Riemann with Node.js, &lt;a href="https://github.com/perezd/riemann-nodejs-client" target="_blank"&gt;I&amp;#8217;ve contributed an open source client library&lt;/a&gt;. The project README should have all the information you need to get started. Feel free to help make this project better!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been following &lt;a href="http://twitter.com/aphyr" target="_blank"&gt;Kyle Kingsbury&amp;#8217;s&lt;/a&gt; recent monitoring project, &lt;a href="http://aphyr.github.com/riemann" target="_blank"&gt;Riemann&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;ve not heard of it, here is the short description from the homepage:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Riemann aggregates events from your servers and applications with a powerful stream processing language. Send an email for every exception raised by your code. Track the latency distribution of your web app. See the top processes on any host, by memory and CPU. Combine statistics from every Riak node in your cluster and forward to Graphite. Send alerts when a key process fails to check in. Know how many users signed up right this second.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kyle also &lt;a href="http://vimeo.com/38377415" target="_blank"&gt;recently gave an excellent talk @ Boundary&lt;/a&gt;, explaining the concepts behind his project. I recommend watching that as well.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/26302605400</link><guid>http://blog.derekperez.com/post/26302605400</guid><pubDate>Sun, 01 Jul 2012 15:27:31 -0700</pubDate><category>open-source</category></item><item><title>Point cloud.</title><description>&lt;iframe src="http://player.vimeo.com/video/42896836" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Point cloud.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/24346490371</link><guid>http://blog.derekperez.com/post/24346490371</guid><pubDate>Sun, 03 Jun 2012 11:49:07 -0700</pubDate></item><item><title>Lock-free Algorithms</title><description>&lt;a href="http://www.infoq.com/presentations/Lock-free-Algorithms"&gt;Lock-free Algorithms&lt;/a&gt;: &lt;p&gt;These guys are doing amazing work in the field of computer science. LMAX team is raising the bar.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/23825671224</link><guid>http://blog.derekperez.com/post/23825671224</guid><pubDate>Sat, 26 May 2012 16:18:58 -0700</pubDate><category>computer-science</category></item><item><title>Learning about Google Go language, its pretty amazing.</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/4iAiS-qv26Q?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Learning about Google Go language, its pretty amazing.&lt;/p&gt;</description><link>http://blog.derekperez.com/post/22721699305</link><guid>http://blog.derekperez.com/post/22721699305</guid><pubDate>Wed, 09 May 2012 10:09:01 -0700</pubDate><category>golang</category></item></channel></rss>
