<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>David Cramer's Blog - Latest Comments</title><link>http://davidcramer.disqus.com/</link><description></description><atom:link href="https://davidcramer.disqus.com/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Wed, 07 Jan 2015 13:50:22 -0000</lastBuildDate><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1776929696</link><description>&lt;p&gt;I look forward to future similar &lt;a href="http://cramer.io" rel="nofollow noopener" target="_blank" title="cramer.io"&gt;cramer.io&lt;/a&gt; announcements. This is awesome.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tyler Hayes</dc:creator><pubDate>Wed, 07 Jan 2015 13:50:22 -0000</pubDate></item><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1774405343</link><description>&lt;p&gt;Much luck to you guys! HNY!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sherwin Techico</dc:creator><pubDate>Tue, 06 Jan 2015 06:37:37 -0000</pubDate></item><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1773698027</link><description>&lt;p&gt;Congrats, Cramer! And Chris! :)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">suki</dc:creator><pubDate>Mon, 05 Jan 2015 18:02:53 -0000</pubDate></item><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1773610549</link><description>&lt;p&gt;This is an awesome news. I've been following Sentry ever since it was release @ Disqus.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeeyoung Kim</dc:creator><pubDate>Mon, 05 Jan 2015 16:55:59 -0000</pubDate></item><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1772884405</link><description>&lt;p&gt;Good luck David, Greetz from &lt;a href="http://GetStream.io" rel="nofollow noopener" target="_blank" title="GetStream.io"&gt;GetStream.io&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thierry Schellenbach</dc:creator><pubDate>Mon, 05 Jan 2015 11:47:44 -0000</pubDate></item><item><title>Re: 2015 and Beyond - David Cramer's Blog</title><link>http://cramer.io/2015/01/05/2015-and-beyond#comment-1772878812</link><description>&lt;p&gt;:clap:&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Chris Jennings</dc:creator><pubDate>Mon, 05 Jan 2015 11:44:11 -0000</pubDate></item><item><title>Re: Bundling 3rd party JS with Python - David Cramer's Blog</title><link>http://cramer.io/2014/12/19/distributing-js-with-python#comment-1754237186</link><description>&lt;p&gt;I actually tried inheriting from build originally and that didn't seem to fire on everything. IIRC the develop command wouldn't fire (but it fired build_py?).&lt;/p&gt;&lt;p&gt;I think realistically the setuptools APIs for builds are just not very well put together.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Cramer</dc:creator><pubDate>Mon, 22 Dec 2014 03:04:54 -0000</pubDate></item><item><title>Re: Bundling 3rd party JS with Python - David Cramer's Blog</title><link>http://cramer.io/2014/12/19/distributing-js-with-python#comment-1751749325</link><description>&lt;p&gt;There's one issue with this: it will make bdist_wheel build incomplete packages. Other commands probably have this issue too.&lt;/p&gt;&lt;p&gt;An alternative is to subclass the `build` command add add your custom `build_static` in the `build.sub_commands` list. Eg:&lt;br&gt;&lt;/p&gt;&lt;pre&gt;from setuptools.command.build import build&lt;br&gt;&lt;br&gt;class BuildWithStatic(build):&lt;br&gt;    sub_commands = build.sub_commands + [('build_static', lambda _: True)]&lt;br&gt;&lt;/pre&gt;&lt;p&gt;&lt;br&gt;With that you don't need to subclass develop, sdist, bdist and whatever else you might need.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ionel Cristian Mărieș</dc:creator><pubDate>Sat, 20 Dec 2014 11:58:19 -0000</pubDate></item><item><title>Re: Mocking Requests with Responses - David Cramer's Blog</title><link>http://cramer.io/2014/05/20/mocking-requests-with-responses#comment-1400761090</link><description>&lt;p&gt;We went a slightly different way and spin up an HTTPServer instance that records requests and can be preloaded with responses.  Having a separate thread running for the test can be error prone.  I'll have to investigate switching out our method for responses.  I'm also interested in checking out changes.  Thanks for putting both of these up on github.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Shawley</dc:creator><pubDate>Fri, 23 May 2014 07:31:38 -0000</pubDate></item><item><title>Re: Mocking Requests with Responses - David Cramer's Blog</title><link>http://cramer.io/2014/05/20/mocking-requests-with-responses#comment-1398071109</link><description>&lt;p&gt;Very nice, would be great to be able to record all outgoing requests; and their actual responses (to build the test suite)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">rosscdh</dc:creator><pubDate>Wed, 21 May 2014 13:47:27 -0000</pubDate></item><item><title>Re: Choosing Angular.js - David Cramer's Blog</title><link>http://cramer.io/2014/05/14/choosing-angular-js#comment-1392369273</link><description>&lt;p&gt;I'm glad that sentry is rewritten in angular and I hope to see updates more often. It's a great tool which helped me &amp;amp; my team a lot.&lt;br&gt;I've also written about an angular rewrite which dramatically increased my team's productivity ( &lt;a href="https://medium.com/web-dev/33d8c0ac11f1" rel="nofollow noopener" target="_blank" title="https://medium.com/web-dev/33d8c0ac11f1"&gt;https://medium.com/web-dev/...&lt;/a&gt; ). Angular is powerful at catching errors and was thinking to write about how we integrated angular's $exceptionHandler with raven.js (given that the stack trace in minified js files can often be useless, but user events are not). I'd also like to hear how others did it.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alexandru Bardas</dc:creator><pubDate>Sun, 18 May 2014 19:19:51 -0000</pubDate></item><item><title>Re: Choosing Angular.js - David Cramer's Blog</title><link>http://cramer.io/2014/05/14/choosing-angular-js#comment-1387447363</link><description>&lt;p&gt;We didn't have any existing Angular code, which is important. Ember had a lot of prescribed things and it was pretty rough to break out of that loop.&lt;/p&gt;&lt;p&gt;Outside of that, the dirty checking in reality isn't as bad as it might seem.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Cramer</dc:creator><pubDate>Thu, 15 May 2014 12:39:13 -0000</pubDate></item><item><title>Re: Choosing Angular.js - David Cramer's Blog</title><link>http://cramer.io/2014/05/14/choosing-angular-js#comment-1387446598</link><description>&lt;p&gt;Thanks for share your experience using AngularJs Framework and why was the better choice. I'm using it in my applications and the results are awesome. Very modular, testable and scalable. Talking about dirty-checks exists a decision for update for javascript Object.observe in new version and update directives for webcomponents. Have a presentation about the future of angularjs (&lt;a href="https://docs.google.com/presentation/d/1Gv-dvU-yy6WY7SiNJ9QRo9XayPS6N2jtgWezdRpoI04/present#slide=id.g108668b30_00)" rel="nofollow noopener" target="_blank" title="https://docs.google.com/presentation/d/1Gv-dvU-yy6WY7SiNJ9QRo9XayPS6N2jtgWezdRpoI04/present#slide=id.g108668b30_00)"&gt;https://docs.google.com/pre...&lt;/a&gt;, but your can minimize this using modules like bindonce (but is not a better than by default in framework).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wilson Mendes</dc:creator><pubDate>Thu, 15 May 2014 12:38:42 -0000</pubDate></item><item><title>Re: Choosing Angular.js - David Cramer's Blog</title><link>http://cramer.io/2014/05/14/choosing-angular-js#comment-1387176739</link><description>&lt;p&gt;Thanks for sharing your thoughts on this.  It seems your choice of Angular over Ember was due to time constraints and existing code that needed to be integrated.  Were there any other technical reasons?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dustin Farris</dc:creator><pubDate>Thu, 15 May 2014 10:08:45 -0000</pubDate></item><item><title>Re: Choosing Angular.js - David Cramer's Blog</title><link>http://cramer.io/2014/05/14/choosing-angular-js#comment-1386501270</link><description>&lt;p&gt;"I have a fairly strong opinion on, well, almost everything." - Belongs on a business card or more fitting...a tattoo on your lower back.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mat Mullen</dc:creator><pubDate>Thu, 15 May 2014 01:31:47 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382720197</link><description>&lt;p&gt;Nice article ! It will be featured in our next @RedisWeekly &lt;a href="http://redisweekly.com" rel="nofollow noopener" target="_blank" title="http://redisweekly.com"&gt;http://redisweekly.com&lt;/a&gt; !&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Redsmin {Redis GUI}</dc:creator><pubDate>Tue, 13 May 2014 08:46:06 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382663227</link><description>&lt;p&gt;Rather than use Redis as a lock, we instead use the atomic list operation RPOPLPUSH to allow clients to claim tasks: &lt;a href="http://www.emergent-design.co.uk/blog/2014/04/15/if-memory-serves/#processing_tasks" rel="nofollow noopener" target="_blank" title="http://www.emergent-design.co.uk/blog/2014/04/15/if-memory-serves/#processing_tasks"&gt;http://www.emergent-design....&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Dan Parnham</dc:creator><pubDate>Tue, 13 May 2014 07:48:15 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382480409</link><description>&lt;p&gt;I've worked around that by verifying a job still retains a lock before writing data to the DB. That worked well when jobs took ~5-10 seconds of idempotent CPU bound work (processing photos and video) before a few quick writes to the db. Lua would certainly be a better option for shorter locks though.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Michael Dwan</dc:creator><pubDate>Tue, 13 May 2014 03:43:11 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382464250</link><description>&lt;p&gt;If you are looking for serious lock system then choosing Redis itself is wrong option . May be you can use WAIT command and achieve it, which implies you are choosing consistency over availability.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Giridhar Kannan</dc:creator><pubDate>Tue, 13 May 2014 03:19:09 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382449811</link><description>&lt;p&gt;It's definitely a good point. We always faced a big issue with Redis in that a lot of the nice features aren't available with some of the major distros (e.g. 12.04). There's a lot of places we could optimize if we were injecting the Lua scripts (always doing this incr+expire pattern for one).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Cramer</dc:creator><pubDate>Tue, 13 May 2014 02:53:49 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382448591</link><description>&lt;p&gt;Real nice. You might enjoy my hot-redis library which provides a bunch of Python data types backed by Redis, from basic lists and maps (obvious) to different types of locks and queues touched on briefly here.&lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/stephenmcd/hot-redis" rel="nofollow noopener" target="_blank" title="https://github.com/stephenmcd/hot-redis"&gt;https://github.com/stephenm...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">churnnews</dc:creator><pubDate>Tue, 13 May 2014 02:51:37 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382436162</link><description>&lt;p&gt;Definitely. Our use case (I mentioned it above) was to ease stampedes on jobs.&lt;/p&gt;&lt;p&gt;For example, we have a cron worker that will fire off jobs, and as a simple hack around distributing the state of that worker we can just fire off jobs from several nodes and attempt to prevent a task from executing at the same time (to prevent wasted effort). In this case you very easily up the expire to a reasonable maximum expected duration of your task.&lt;/p&gt;&lt;p&gt;That said, you could reasonably treat the lock as a counter, and only discard it when the value is 0 or empty.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Cramer</dc:creator><pubDate>Tue, 13 May 2014 02:29:50 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382435022</link><description>&lt;p&gt;FWIW, I have attempted to use Redis as a locking system before and I ended up using Lua to work around the lack of primitives in Redis. As a matter of fact, I am pretty sure the Redis documentation points out the pitfalls of using SETNX as a locking mechanism.&lt;/p&gt;&lt;p&gt;Here is what I ended up doing:&lt;br&gt;&lt;a href="https://github.com/ryandotsmith/redisync/blob/master/mutex.go" rel="nofollow noopener" target="_blank" title="https://github.com/ryandotsmith/redisync/blob/master/mutex.go"&gt;https://github.com/ryandots...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ryan Smith</dc:creator><pubDate>Tue, 13 May 2014 02:27:51 -0000</pubDate></item><item><title>Re: Scaling SQL with Redis - David Cramer's Blog</title><link>http://cramer.io/2014/05/12/scaling-sql-with-redis#comment-1382434004</link><description>&lt;p&gt;Are you OK with the race conditions in your locking algorithm? Please correct me if I am wrong, but what about a situation like this:&lt;/p&gt;&lt;p&gt;x acquires lock at t0&lt;br&gt;x works job at t1&lt;br&gt;x's lock expires at t9&lt;br&gt;y acquires lock at t10&lt;br&gt;x finishes job at t11&lt;br&gt;x deletes lock at t12&lt;br&gt;z acquires lock at t13&lt;br&gt;y &amp;amp; z are both working at t14&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ryan Smith</dc:creator><pubDate>Tue, 13 May 2014 02:26:07 -0000</pubDate></item><item><title>Re: On Pull Requests - David Cramer's Blog</title><link>http://cramer.io/2014/05/03/on-pull-requests#comment-1378935895</link><description>&lt;p&gt;Feature flag always&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Cramer</dc:creator><pubDate>Sun, 11 May 2014 01:05:08 -0000</pubDate></item></channel></rss>