<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Disqus - Latest Comments for dams</title><link>http://disqus.com/by/dams/</link><description></description><atom:link href="http://disqus.com/dams/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Sat, 14 May 2016 17:15:25 -0000</lastBuildDate><item><title>Re: Creating a supervision tree for Elixir GenEvent behavior</title><link>http://pedroassumpcao.ghost.io/creating-a-supervision-tree-for-elixir-genevent-behavior/#comment-2676043212</link><description>&lt;p&gt;Question: why use two layers of supervisors when one would be good enough? Is it because you assume your application will do other stuff and by default you want to isolate the genevent and friends ?&lt;/p&gt;&lt;p&gt;Thanks for the nice post&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Sat, 14 May 2016 17:15:25 -0000</pubDate></item><item><title>Re: Using Riak as Events Storage - Part 1</title><link>http://blog.booking.com/using-riak-as-events-storage-part1.html#comment-2555220256</link><description>&lt;p&gt;About number or MR jobs concern: I've demonstrated this in part 3 of this series, available here: &lt;a href="http://blog.booking.com/using-riak-as-events-storage-part3.html" rel="nofollow noopener" target="_blank" title="http://blog.booking.com/using-riak-as-events-storage-part3.html"&gt;http://blog.booking.com/usi...&lt;/a&gt; but in a nutshell: yes you're right :) This is while we have implemented a different approach, in part 4 (to be released soon).&lt;/p&gt;&lt;p&gt;About Hadoop: we are already using Hadoop for batch processing on data older than 6 hours basically, using Hive. However it's nowhere near the performance and freshness of what we get with Riak, which is expected. Hadoop is for long term storage and slow/big queries, Riak for medium (10 days) term storage with extremely high throughput and very low latency while being very robust, and for simple queries.&lt;/p&gt;&lt;p&gt;About Spark and Kafka: we are using Spark to do analysis. Events are transported there using Kafka, but the source is Riak. At some point, if we reimplement the frontend layer with Kafka, we'll be able to bypass Riak and stream to Spark directly, but again the gain in term of lag reduction won't be that big and doesn't bring any business value for now. We thought about using Spark on top of Riak (there is a connector) but we want isolation of contents, so we currently use Spark on top of Hadoop but we might have it running on top of Cassandra for instance at some point. In any case we don't use Hadoop as the source.&lt;/p&gt;&lt;p&gt;About disk based architecture: Riak can use various backend (at the same time), among them bitcask, leveldb, but also a memory backend. So you can have fresh data in memory backend with small TTL and also in disk backend for longer storage. But even without doing that, when using the bitcask backend, fresh data will be in your in memory FS cache, which is quite fast. I don't think the disk-based backend is a speed bottleneck for Riak's MR.&lt;/p&gt;&lt;p&gt;The problem of having only Spark on top of Hadoop is that if you need to do some ad-hoc processing, you're forced to use Spark, we need more flexibility/hackability. Also, it's great for working on realtime data (Spark) and very old data (Hadoop), but it's not good at working with semi-fresh data. For instance it's going to be an issue to reprocess data from 2 hours (or 3 days) ago in a streaming way with high performance. Or at least to my knowledge :)&lt;/p&gt;&lt;p&gt;Riak gives us this robust fault tolerance realtime + medium-term storage with very high performance (throughput+latency) for any kind of extraction and processing job (not only realtime preconfigured analysis).&lt;/p&gt;&lt;p&gt;I hope that makes sense.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Sun, 06 Mar 2016 18:23:25 -0000</pubDate></item><item><title>Re: Using Riak as Events Storage - Part 1</title><link>http://blog.booking.com/using-riak-as-events-storage-part1.html#comment-2548222672</link><description>&lt;p&gt;Indeed, I think we are on the same track here. It needs to be said that we tried kafka as a candidate for our centralized storage, and indeed it didn't do very well. However as you said it's a good candidate as a replacement of our frontend aggregation layer, allowing to stream events to on-the-flow data processing before pouring data into Riak. In theory it brings some benefits and ease of use.&lt;/p&gt;&lt;p&gt;However our current frontend layer is working fine for now and scales properly.  And the lag between the time an event is produced and it's available in the central storage (Riak) is very small. At least small enough for our usage.  We are very pragmatic, so the frontend layer will be replaced when it needs to be, not before :)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Wed, 02 Mar 2016 16:37:34 -0000</pubDate></item><item><title>Re: Exception::Stringy - Modern exceptions for legacy code</title><link>http://damien.krotkine.com/2015/02/10/exception-stringy.html#comment-2429482197</link><description>&lt;p&gt;OMG It looks like you didn't read the blog post properly :)&lt;/p&gt;&lt;p&gt;I'm not enforcing the use of Try::Tiny, as I give the alternative of using eval. I personally stopped using Try::Tiny 3 years ago now.&lt;/p&gt;&lt;p&gt;Your example actually illustrates my message : you can't assume that your exception will be an object, you have to take care of "other exception objects and strings", so it's a mess.&lt;/p&gt;&lt;p&gt;For instance, have a look at this code, that throws a nice Exception::Class object, with fields. It ends up as a flat string at the end, because a stupid sig handler added a timestamp. And you lost the field value&lt;/p&gt;&lt;p&gt;use Data::Dumper;&lt;br&gt;$SIG{__DIE__} = sub { die time() . " " . $_[0] };&lt;br&gt;use Exception::Class (&lt;br&gt;  'MyException' =&amp;gt; { fields =&amp;gt; [ 'field1' ] },&lt;br&gt;);&lt;/p&gt;&lt;p&gt;eval { MyException-&amp;gt;throw(field1 =&amp;gt; 4, message =&amp;gt; "plop") };&lt;br&gt;if (my $e = MyException-&amp;gt;caught) {&lt;br&gt;  say $e-&amp;gt;field1;&lt;br&gt;} elsif ($e = Exception::Class-&amp;gt;caught) {&lt;br&gt;  print Dumper($e);&lt;br&gt;  say "it's a string, I can't get the value of field1";&lt;br&gt;}&lt;/p&gt;&lt;p&gt;There are few other ways to get this kind of results. Exception::Stringy is a pragmatic way of making sure your exceptions don't degrade.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Mon, 28 Dec 2015 16:19:31 -0000</pubDate></item><item><title>Re: Using Riak as Events Storage - Part 1</title><link>http://blog.booking.com/using-riak-as-events-storage-part1.html#comment-2399177868</link><description>&lt;p&gt;In reality we have more than the 3 example event streams. But yes we store the raw data in Riak. We then make use of the raw data to perform a lot of different tasks and exports. One of them is to store a subset of the raw data (mainly error messages) in Elasticsearch. Elasticsearch wouldn't be able to store all the data we have in Riak and provide the same level of fault tolerance and versatility. Another solution would be to use Riak Search (it's similar to elasticsearchn using distributed solr), but because we wanted isolation, we needed a separate cluster, and we already had Elasticsearch experience and infrastructure.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 08 Dec 2015 02:26:48 -0000</pubDate></item><item><title>Re: Using Riak as Events Storage - Part 2</title><link>http://blog.booking.com/using-riak-as-events-storage-part2.html#comment-2387720969</link><description>&lt;p&gt;1) we could have used a different buckets layout. using events:DC1 epochs:DC2 would totally work, except that each time we add a new DC, a bit more work needs to be done rather than having "epochs" as bucket. It's a balance between doing the book-keeping inside generic buckets, or having buckets more specifics but additional administrative overhead. At the end of the day it's not a big difference.&lt;/p&gt;&lt;p&gt;2) Good question :) I used statistics about historical data and I assume a certain compression ratio to go unders 500K. Currently we have a 50% ratio, so I chunk before compression at around 1M and make sure the result is &amp;lt; 500K. If not, I iterate and chunk a bit more. Not very interesting wrt this article, just a bit of plumbing&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 01 Dec 2015 16:00:23 -0000</pubDate></item><item><title>Re: Using Riak as Events Storage - Part 1</title><link>http://blog.booking.com/using-riak-as-events-storage-part1.html#comment-2317982271</link><description>&lt;p&gt;In addition to Ivan's comment, after testing it we concluded that it was not ideal in a position where a lot of clients would fetch data from it. Kafka seemed more appropriate as a way to transfer data to a small number of endpoints. So in theory Kafka would be a good replacement for what we have called the aggregators layer, pouring data into a couple of storage points (Riak). However in this case Kafka would work with individual events, and it's not clear if it could aggregate events into blobs at the same time. But definitely something to investigate at some point.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 20 Oct 2015 17:27:43 -0000</pubDate></item><item><title>Re: Perl Benchmark Serializer: JSON vs Sereal vs Data::MessagePack vs CBOR</title><link>http://blog.celogeek.com/201401/519/perl-benchmark-jsonxs-vs-sereal-vs-datamessagepack/#comment-1919084434</link><description>&lt;p&gt;For information, the Erlang implementation is now done, encoding and decoding. It's very fast, the core is in C and then bound to Erlang. It's in master on github: &lt;a href="https://github.com/Sereal/Sereal/tree/master/Erlang/Sereal" rel="nofollow noopener" target="_blank" title="https://github.com/Sereal/Sereal/tree/master/Erlang/Sereal"&gt;https://github.com/Sereal/S...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Fri, 20 Mar 2015 20:24:23 -0000</pubDate></item><item><title>Re: Keeping Perl Classy</title><link>http://rose.github.io/posts/keeping-Perl-classy/#comment-1791267887</link><description>&lt;p&gt;my eyes are indeed bleeding now&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 13 Jan 2015 18:21:54 -0000</pubDate></item><item><title>Re: DateTime duration in seconds</title><link>http://damien.krotkine.com/2011/05/25/datetime-duration-in-seconds.html#comment-1396322976</link><description>&lt;p&gt;as its name suggests, delta_ms returns a duration expressed in minutes and seconds. Which is useless if you want duration in seconds, as you can't convert minutes (that can be 60, 61 or 62 secs long) in seconds. Read the doc again...&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 20 May 2014 17:53:55 -0000</pubDate></item><item><title>Re: Perl Benchmark Serializer: JSON vs Sereal vs Data::MessagePack vs CBOR</title><link>http://blog.celogeek.com/201401/519/perl-benchmark-jsonxs-vs-sereal-vs-datamessagepack/#comment-1218775422</link><description>&lt;p&gt;At some point it was on my todo list, but meh...&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Mon, 27 Jan 2014 10:24:33 -0000</pubDate></item><item><title>Re: Perl Benchmark Serializer: JSON vs Sereal vs Data::MessagePack vs CBOR</title><link>http://blog.celogeek.com/201401/519/perl-benchmark-jsonxs-vs-sereal-vs-datamessagepack/#comment-1218659245</link><description>&lt;p&gt;I think that Steffen meant: "use your real data in the benchmark you posted", not "switch library in your real life system" :) Otherwise you are comparing tomatoes with potatoes.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Mon, 27 Jan 2014 08:32:40 -0000</pubDate></item><item><title>Re: Perl Benchmark Serializer: JSON vs Sereal vs Data::MessagePack vs CBOR</title><link>http://blog.celogeek.com/201401/519/perl-benchmark-jsonxs-vs-sereal-vs-datamessagepack/#comment-1218657411</link><description>&lt;p&gt;I used the lua implementation of Sereal, when working at the same company as Celogeek, tackling the same issue :) the lua implementation is robust enough so that it works fine with any data structure, but doesn't work very well with Perl specific things. Which is good enough for most usage imho. I used it in a specific case where I needed to add elements to an existing serealized ArrayRef in Redis. It worked, but it was faster to use Redis to concatenate a new sereal object containing the additional elements, thus not using lua. Then on retrieving, using deserealization from offset, and merging the results in one ArrayRef. That solution was basically beating any others I could come of with.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Mon, 27 Jan 2014 08:30:21 -0000</pubDate></item><item><title>Re: protect a screen session with a password</title><link>http://damien.krotkine.com/2011/09/01/protect-a-screen-session-with-a-password.html#comment-1205520646</link><description>&lt;p&gt;Well, read the disclaimer in the post. In any case even with the encrypted string, all root can do is brute-force it, to find *a* password that matches, not necessarily *your* password.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Fri, 17 Jan 2014 04:12:08 -0000</pubDate></item><item><title>Re: Perl Benchmark Cache with Expires and Max Size</title><link>https://blog.celogeek.com/201401/426/perl-benchmark-cache-with-expires-and-max-size/#comment-1184401588</link><description>&lt;p&gt;code is available &lt;a href="https://metacpan.org/source/HAARG/CHI-0.58/etc/bench/bench.pl" rel="nofollow noopener" target="_blank" title="https://metacpan.org/source/HAARG/CHI-0.58/etc/bench/bench.pl"&gt;https://metacpan.org/source...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Thu, 02 Jan 2014 12:33:42 -0000</pubDate></item><item><title>Re: Perl Benchmark Cache with Expires and Max Size</title><link>https://blog.celogeek.com/201401/426/perl-benchmark-cache-with-expires-and-max-size/#comment-1184046912</link><description>&lt;p&gt;or &lt;a href="https://metacpan.org/pod/CHI::Benchmarks" rel="nofollow noopener" target="_blank" title="https://metacpan.org/pod/CHI::Benchmarks"&gt;https://metacpan.org/pod/CH...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Thu, 02 Jan 2014 05:45:01 -0000</pubDate></item><item><title>Re: p5-mop</title><link>http://damien.krotkine.com/2013/09/17/p5-mop.html#comment-1048297856</link><description>&lt;p&gt;Hm, there were a typo in the article. I meant to say, "most Perl developers (I think) implement *function exporting* by inheriting from Exporter". So they'll do "use base qw(Exporter) instead of doing "use Exporter qw(import);". Which won't work.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 17 Sep 2013 15:07:59 -0000</pubDate></item><item><title>Re: p5-mop</title><link>http://damien.krotkine.com/2013/09/17/p5-mop.html#comment-1047839092</link><description>&lt;p&gt;Yes, good point, but I wanted to git instructions that would work with older versions. cpanm is really awesome. New features from the last development version are really great&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 17 Sep 2013 08:08:54 -0000</pubDate></item><item><title>Re: p5-mop</title><link>http://damien.krotkine.com/2013/09/17/p5-mop.html#comment-1047752506</link><description>&lt;p&gt;This post is also on &lt;a href="http://blogs.perl.org" rel="nofollow noopener" target="_blank" title="blogs.perl.org"&gt;blogs.perl.org&lt;/a&gt;, with more comments. See &lt;a href="http://blogs.perl.org/users/damien_dams_krotkine/2013/09/p5-mop.html" rel="nofollow noopener" target="_blank" title="http://blogs.perl.org/users/damien_dams_krotkine/2013/09/p5-mop.html"&gt;http://blogs.perl.org/users...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 17 Sep 2013 06:12:19 -0000</pubDate></item><item><title>Re: p5-mop: a gentle introduction</title><link>http://damien.krotkine.com/2013/09/16/p5-mop-a-gentle-introduction.html#comment-1047337960</link><description>&lt;p&gt;So, for those of you who are wondering why this page is almost empty: I'm having a hell lot of troubles getting GitHub Pages to generate it properly. It seems to be currently stuck in an infinite loop of bad rendering mania. I double checked everything, following the docs and the "what if everything fails" help page, but no luck. Currently waiting for GitHub support to come back to me, I'll update this page asap, sorry for the inconvenience.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Mon, 16 Sep 2013 20:03:07 -0000</pubDate></item><item><title>Re: Perl Moderne, a new Perl book</title><link>http://damien.krotkine.com/all/perl/2011/02/16/perl-moderne-a-new-perl-book.html#comment-931852034</link><description>&lt;p&gt;The web site has been moved, we'll rebuild it somewhere else soon. Thanks for letting me know&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Sat, 15 Jun 2013 17:22:51 -0000</pubDate></item><item><title>Re: Stop Talking About Perl</title><link>http://plainblackguy.tumblr.com/post/52942569365#comment-931772921</link><description>&lt;p&gt;"Actions beat words every single time". Except in poetry !&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Sat, 15 Jun 2013 15:14:54 -0000</pubDate></item><item><title>Re: New And Improved: Bloomd::Client</title><link>http://damien.krotkine.com/2013/06/13/new-and-improved-bloomdclient.html#comment-931771518</link><description>&lt;p&gt;Yeah, I tried these two modules. Bloom::Faster worked well for me (despite what the negative review says). However, bloomd implements a bloomd *server*. So to be able to compare, you should build up a server running Bloom::Faster.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Sat, 15 Jun 2013 15:13:19 -0000</pubDate></item><item><title>Re: Hacking Thy Fearful Symmetry - My Pro-Tips for YAPC First-Comers</title><link>http://techblog.babyl.ca/entry/yapc-tips#comment-913688947</link><description>&lt;p&gt;You forgot the most important one: find BooK or one of the french Cabal member, and make sure you know when and where the "evil green stuff" party takes place. And be there.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Thu, 30 May 2013 07:32:39 -0000</pubDate></item><item><title>Re: MooX::LvalueAttribute - Lvalue accessors in Moo</title><link>http://damien.krotkine.com/2013/02/11/lvalue-accessors-in-moo.html#comment-796307867</link><description>&lt;p&gt;Thanks ! fixed&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dams</dc:creator><pubDate>Tue, 12 Feb 2013 02:53:25 -0000</pubDate></item></channel></rss>