<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Samuel Kaufman</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/samuel_kaufman/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.perl.org/users/samuel_kaufman/atom.xml" />
    <id>tag:blogs.perl.org,2009-11-03:/users/samuel_kaufman//600</id>
    <updated>2012-09-24T17:00:29Z</updated>
    <subtitle>A blog about the Perl programming language</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>[ Hiring ] Socialflow.com, onsite perl web developers</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/samuel_kaufman/2012/09/-hiring-socialflowcom-onsite-perl-web-developers.html" />
    <id>tag:blogs.perl.org,2012:/users/samuel_kaufman//600.3877</id>

    <published>2012-09-24T16:42:29Z</published>
    <updated>2012-09-24T17:00:29Z</updated>

    <summary>SocialFlow is a leading social media marketing company offering businesses and brands a solutions-based approach to connecting paid, owned and earned social media strategies. /about 2012 has been a great year for us, thanks to the hard work and collaboration...</summary>
    <author>
        <name>Samuel Kaufman</name>
        <uri>http://www.samuelkaufman.com</uri>
    </author>
    
    <category term="career" label="career" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jobs" label="jobs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webdev" label="webdev" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/samuel_kaufman/">
        <![CDATA[<p><a href="http://socialflow.com" target="_blank">SocialFlow</a> is a leading social media marketing company offering businesses and brands a solutions-based approach to connecting paid, owned and earned social media strategies. <br />
<a href="http://www.socialflow.com/company/about" target="_blank">/about</a></p>

<p>2012 has been a great year for us, thanks to the hard work and collaboration of incredibly smart people on the development as well as the business side.</p>

<p><a href="http://techcrunch.com/2012/02/07/socialflow-opens-the-floodgates/" target="_blank">We launched socialflow.com in February</a> , and have built up an unbelievable list of clients ( Pepsi, The Economist, National Geographic, The Washington Post to name a few ) who use and love the product.</p>

<p>We’ve got a whole bunch of stuff geared up for 2013 and we need some good developers to help us build it.</p>

<p>This position is for someone who enjoys solving real problems for real clients across a wide spectrum of web development, from schema design to client side mobile browser optimization.</p>

<p>We're about 70% a perl shop, 30% python.</p>

<p>Some of the many open source projects we use:<br />
perl: Catalyst, DBIx::Class, Moose, App::Cmd, Dist::ZIlla<br />
python: cherrypy, fabric, pycassa, thrift, psycopg2</p>

<p>Here's a chunk of the tech stack our dev team has worked with over the past year: Redis, Postgres, Cassandra, Nginx, ec2</p>

<h4>How to Apply</h4> Send a resume ( cover letter if you have one ) to jobs-at-socialflow.com.

<h4>Helpful things to include</h4>
<ul>
<li>Code samples or links to your version control repo (git preferred)
<li>Links to your website or blog if you have one you’d like to share
<li>Projects/websites you’ve worked on recently and what you enjoyed about them
</ul>
Salary: 80k+ commensurate with exp.

<p></p>

<p><a href="http://adage.com/article/digital/twitter-certified-products-badges-12-ecosystem-firms/236926/" target="_blank">Relevant</a> <a href="http://gigaom.com/2012/09/06/socialflow-debuts-crescendo-an-attention-buying-platform/"  target="_blank">press</a> ( there’s much more to be found on <a href="https://news.google.com/?q=socialflow" target="_blank">google</a>. )</p>]]>
        
    </content>
</entry>

<entry>
    <title>Painless Memcached Configuration With Catalyst &amp; DBIx::Class</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/samuel_kaufman/2010/11/painless-memcached-configuration-with-catalyst-dbixclass.html" />
    <id>tag:blogs.perl.org,2010:/users/samuel_kaufman//600.1191</id>

    <published>2010-11-20T16:13:10Z</published>
    <updated>2010-11-20T22:35:44Z</updated>

    <summary><![CDATA[This tutorial will show you how to: Easily add resultset level caching to your Catalyst::Model::DBIC::Schema calls. Move your Catalyst::Plugin::Session into memcached. Have a convenient $ctx-&gt;cache method available for anything else you might want to cache. Dependencies: Memcached: Cache::Memcached Cache::Memcached::GetParserXS Catalyst...]]></summary>
    <author>
        <name>Samuel Kaufman</name>
        <uri>http://www.samuelkaufman.com</uri>
    </author>
    
    <category term="catalyst" label="catalyst" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cpan" label="cpan" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dbic" label="dbic" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dbixclass" label="DBIx::Class" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ironman" label="ironman" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="memcached" label="memcached" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/samuel_kaufman/">
        <![CDATA[This tutorial will show you how to:
<ul>
    <li>Easily add resultset level caching to your <a href="http://search.cpan.org/perldoc?Catalyst%3A%3AModel%3A%3ADBIC%3A%3ASchema">Catalyst::Model::DBIC::Schema</a> calls.</li>
    <li>Move your <a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3ASession">Catalyst::Plugin::Session</a> into memcached.</li>
    <li>Have a convenient $ctx-&gt;cache method available for anything else you might want to cache.</li>
</ul>
<strong>Dependencies:</strong><br/>
Memcached:
<ul>
<li><a href="http://search.cpan.org/perldoc?Cache%3A%3AMemcached">Cache::Memcached</a></li>
<li><a href="http://search.cpan.org/perldoc?Cache%3A%3AMemcached%3A%3AGetParserXS">Cache::Memcached::GetParserXS</a></li>
</ul>
Catalyst Plugins:
<ul>
<li><a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3AConfigLoader">Catalyst::Plugin::ConfigLoader</a></li>
<li><a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3ASession">Catalyst::Plugin::Session</a></li>
<li><a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3ACache">Catalyst::Plugin::Cache</a></li>
<li><a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3ASession%3A%3AStore%3A%3ACache">Catalyst::Plugin::Session::Store::Cache</a></li>
</ul>
DBIx::Class:
<ul>
<li><a href="http://search.cpan.org/perldoc?DBIx%3A%3AClass%3A%3ACursor%3A%3ACached">DBIx::Class::Cursor::Cached</a></li>
</ul>

<p>So dump all those in your Makefile.PL and you're halfway there.</p>
<p>First we edit your Catalyst app's base package. Open up your version of MyApp.pm and add:</p>
<p>
<pre>

    use Cache::Memcached::GetParserXS;
    use Cache::Memcached;

</pre>
</p>
<p>This will tell Cache::Memcached to use the XS Parser.</p>
<p>
Now, in the section where you load your plugins, add the new ones in:
<pre>
    use Catalyst qw/
        ConfigLoader
        Session
        Cache
        Session::Store::Cache
    /;
</pre>
</p>
<br/>
</p>

<p>Now, configure Catalyst::Plugin::Cache. Here's an example for etc/myapp_local.pl:</p>
<br/>
<pre>
    #!/usr/bin/env perl
    use strict;
    use warnings;
    return {
        'Plugin::Cache' =&gt; {
            backend =&gt; {
                namespace =&gt;  'myapp:',
                class =&gt;  'Cache::Memcached',
                servers =&gt; [ 'dev:11211' ]
            }
        }
    };
</pre>
<br/>
<p>Note, I didn't use a .pl config just for kicks. Notice how the 'servers' param takes an ArrayRef value. I tried and failed in expressing that in our Apache Conf style config, before realizing that ConfigLoader is just as happy to grab your .pl config alongside your regular config and merge them for you. Sometimes a cop-out is better than a hack.</p> 
<br/>
<p>Now we configure our model. In our apache style conf it would look like this:</p>
<pre>

    &lt;Model::MyAppDB&gt;
        schema_class    MyApp::Schema
        &lt;connect_info&gt;
            (your connect_info)
            cursor_class DBIx::Class::Cursor::Cached
            traits Caching
        &lt;/connect_info&gt;
    &lt;/Model::MyAppDB&gt;

</pre>

<p>Pat yourself on the back, you should be done (unless something went horribly wrong).</p>
<p>
<pre>

    my @sweet_loot = $ctx-&gt;model("MyAppDB::Loot")
      -&gt;search({ sweet =&gt; 1 },{ cache_for =&gt; 300 })->all;

</pre>
<p>That $rs is now cached for 300 seconds. Look at <a href="http://search.cpan.org/perldoc?DBIx%3A%3AClass%3A%3ACursor%3A%3ACached">DBIx::Class::Cursor::Cached</a> for further explanation.

<pre>

    my $cache = $ctx-&gt;cache;
    $cache-&gt;set('turtles',{ ilike =&gt; 'turtles' },600);
    my $do_i_like_turtles = $cache-&gt;get('turtles');

</pre>
<p>That's cached for 600 seconds. See <a href="http://search.cpan.org/perldoc?Catalyst%3A%3APlugin%3A%3ACache">Catalyst::Plugin::Cache</a> for the docs.</p>
]]>
        
    </content>
</entry>

</feed>
