<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    <title>Planet Erlang</title>
    <link>http://www.planeterlang.org/en/planet/planet</link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:creator>Planet Erlang</dc:creator>
    <dc:rights>Copyright 2013</dc:rights>
    <dc:date>2013-06-13T19:00:06+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.expressionengine.com/" />
    

    <item>
      <title>Erlang Track at Devcon Tel Aviv &#45;&amp;nbsp; 20 June</title>
      <link>http://www.planeterlang.org/en/planet/article/Erlang_Track_at_Devcon_Tel_Aviv_-_20_June_/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Erlang_Track_at_Devcon_Tel_Aviv_-_20_June_/</guid>
      <author></author>
      <description><![CDATA[<p>Devcon Tel Aviv will take place on 20 June in the OzenBar club and features four Erlang talks.
</p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-06-13T19:00:06+00:00</dc:date>
    </item>

    <item>
      <title>Tips for Writing Functional Programming Tutorials</title>
      <link>http://www.planeterlang.org/en/planet/article/Tips_for_Writing_Functional_Programming_Tutorials/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Tips_for_Writing_Functional_Programming_Tutorials/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>With the growing interest in a functional programming style, there are more tutorials and blog entries on the subject, and that&#8217;s wonderful. For anyone so inclined to write their own, let me pass along a few quick tips.<br />
<br></br><br></br><b>Decide if you&#8217;re writing a tutorial about functional programming or a specific language.</b> If you&#8217;re covering the feature set of Haskell, from the type system to laziness to monads, then you&#8217;re writing about Haskell. If you show how to explore interesting problems and the executable parts of your tutorial happen to be written in Haskell, then you&#8217;re writing about functional programming. See the difference?<br />
<br></br><br></br><b>Let types explain themselves.</b> The whole point of type inference is that it&#8217;s behind the scenes and automatic, helping you write more correct code with less bookkeeping. Don&#8217;t negate that benefit by talking about the type system explicitly. Let it be silently assimilated while working through interesting examples and exercises that have nothing to do with types.<br />
<br></br><br></br><b>Don&#8217;t talk about currying.</b> There&#8217;s a fascinating theoretical journey from a small set of expressions&#8212;the lambda calculus&#8212;to a more useful language. With just the barest of concepts you can do seemingly crazy things like recursion without named functions and using single-argument functions to mimic functions that take multiple arguments (a.k.a. currying). Don&#8217;t get so swept up in that theory that you forget the obvious: in any programming language ever invented, there&#8217;s <i>already</i> a way to easily define functions of multiple arguments. That you can build this up from more primitive features is not useful or impressive to non-theoreticians.<br />
<br></br><br></br><b>Make sure you&#8217;ve got meaningful examples.</b> If you have functions named <code>foo</code> or <code>bar</code>, then that&#8217;s a warning sign right there. If you&#8217;re demonstrating factorials or the Fibonacci sequence without a reason for calculating them (and there are reasons, such as permutations), then choose something else. There are curious and approachable problems <i>everywhere</i>. It&#8217;s easy to write a <code>dog_years</code> function based on the incorrect assumption that one human year equals seven dog years. There&#8217;s a more accurate computation where the first two years of a dog&#8217;s life are 10.5 human years each, then each year after that maps to four human years. That&#8217;s a perfect beginner-level problem.<br />
<br></br><br></br>(If you liked this, you might enjoy <a href="http://prog21.dadgum.com/138.html">You, Too, Can Be on the Cutting Edge of Functional Programming Research</a>.)
</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2013-06-11T08:00:00+00:00</dc:date>
    </item>

    <item>
      <title>Getting Comfortable with the Softer Side of Development</title>
      <link>http://www.planeterlang.org/en/planet/article/Getting_Comfortable_with_the_Softer_Side_of_Development/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Getting_Comfortable_with_the_Softer_Side_of_Development/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>When I was in college, I took an upper-level course called &#8220;Operating Systems.&#8221; It was decidedly hardcore: preemptive multitasking and synchronization, task scheduling, resource management, deadlock avoidance, and so on. These were the dark, difficult secrets that few people had experience with. Writing one&#8217;s own operating system was the pinnacle of geeky computer science aspirations.<br />
<br></br><br></br>The most interesting thing about that course, in retrospect, is what wasn&#8217;t taught: anything about how someone would actually <i>use</i> an operating system. I don&#8217;t mean flighty topics like flat vs. skeuomorphic design, but instead drop way down to something as fundamental as how to start an application or even how you&#8217;d know which applications are available to choose from. Those were below the radar of the computer science definition of &#8220;operating system.&#8221; And not just for the course, either. Soft, user experience topics were nowhere to be found in the entire curriculum.<br />
<br></br><br></br>At this point, I expect there are some reactions to the previous two paragraphs brewing:
</p><blockquote><p>&#8220;You&#8217;re confusing computer science and human-computer interaction! They&#8217;re two different subjects!&#8221;<br />
<br></br><br></br>&#8220;Of <i>course</i> you wouldn&#8217;t talk about those things in an operating systems course! It&#8217;s about the lowest-level building blocks of an OS, not about user interfaces.&#8221;<br />
<br></br><br></br>&#8220;I don&#8217;t <i>care</i> about that non-technical stuff! Some designer-type can do that. I&#8217;m doing the engineering work.&#8221;
</p></blockquote><p>There&#8217;s some truth in each of these&#8212;and the third is simply a personal choice&#8212;but all it takes is reading a review of OS X or Windows where hundreds of words are devoted to incremental adjustments to the Start menu and dock to realize those fluffy details aren&#8217;t so fluffy after all. They matter. If you want to build great software, you have to accept that people will dismiss your application because of an awkward UI or font readability issues, possibly switching to a more pleasing alternative that was put together by someone with much less coding skill than you.<br />
<br></br><br></br>So how do you nudge yourself in that direction without having to earn a second degree in a softer, designery field? <br />
<br></br><br></br><b>Learn basic graphic design.</b> Not so much how to draw things or create your own artistic images (I&#8217;m hopeless in that regard), but how to use whitespace, how fonts work together, what a good color scheme looks like. Find web pages and book covers that you like and deconstruct them. Take the scary step of starting with a blank page and arranging colors and fonts and text boxes on it. Hands-on experimentation is the only way to get better at this.<br />
<br></br><br></br><b>Read up on data visualization.</b> Anything by Edward Tufte is a good place to start. <br />
<br></br><br></br><b>Foster a minimalist aesthetic.</b> If you&#8217;re striving for minimalism, then you&#8217;re giving just as much thought to what to leave out as what to include, and you need to make hard choices. That level of thought and focus is only going to make your application better. You can go too far with minimalism, but a quick glance around the modern software world shows that this isn&#8217;t a major worry.<br />
<br></br><br></br><b>Don&#8217;t build something a certain way simply because &#8220;that&#8217;s how it&#8217;s always been done.&#8221;</b> There&#8217;s strong programmer impulse to clone, to implement what you&#8217;ve already seen. That can result in long eras of misguidedly stagnant <a href="http://prog21.dadgum.com/69.html">IDEs</a> or <a href="http://prog21.dadgum.com/107.html">calculator apps</a>, because developers have lost sight of the original problem and are simply rehashing what they&#8217;re familiar with.<br />
<br></br><br></br><b>Optimize for things that directly affect users.</b> Speed and memory are abstract in most cases. Would you even notice if an iPhone app used 10 megabytes instead of 20? Documentation size and tutorial length are more concrete, as are the number of steps it takes to complete common tasks.
</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2013-06-05T08:00:00+00:00</dc:date>
    </item>

    <item>
      <title>Universal Makefile for Erlang Projects That Use Rebar</title>
      <link>http://www.planeterlang.org/en/planet/article/Universal_Makefile_for_Erlang_Projects_That_Use_Rebar/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Universal_Makefile_for_Erlang_Projects_That_Use_Rebar/</guid>
      <author>Eric B Merritt</author>
      <description><![CDATA[<p>A
</p> 
]]>
</description>
      <dc:subject>Blogs, Erlware</dc:subject>
      <dc:date>2013-06-04T16:41:53+00:00</dc:date>
    </item>

    <item>
      <title>Erlang Solutions enters partnership with leading training provider Marakana</title>
      <link>http://www.planeterlang.org/en/planet/article/Erlang_Solutions_enters_partnership_with_leading_training_provider_Marakana/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Erlang_Solutions_enters_partnership_with_leading_training_provider_Marakana/</guid>
      <author></author>
      <description><![CDATA[<p>The partnership aims to provide Erlang training courses for corporates looking to train their employees and individuals interested in learning Erlang.
</p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-05-30T21:01:47+00:00</dc:date>
    </item>

    <item>
      <title>Flickr&#8217;s Redesign is a Series of Evolutionary Changes</title>
      <link>http://www.planeterlang.org/en/planet/article/Flickrs_Redesign_is_a_Series_of_Evolutionary_Changes/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Flickrs_Redesign_is_a_Series_of_Evolutionary_Changes/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>After years of teetering on the brink of relevance, <a href="http://flickr.com">Flickr</a> is back in the limelight thanks in part to a more modern appearance. But here&#8217;s something that may not be so obvious: it wasn&#8217;t a sudden reworking of Flickr. It&#8217;s been evolving through a series of smaller improvements over the course of fifteen months.<br />
<br></br><br></br>In February 2012, photo thumbnails presented as grid of small squares floating in a sea of whitespace were replaced with the <a href="http://blog.flickr.net/en/2012/03/22/your-favorites-page-now-with-justified-view/">justified view</a>: images cropped to varying widths and packed into aesthetically pleasing rows in the browser window. Initially this was only for the favorites page, but a few months later it was applied to the amalgamation of recent photos from your contacts, then to the photos in topic-oriented groups.<br />
<br></br><br></br>In December 2012, the iOS Flickr app was replaced with a completely rewritten, better designed version. It sounds drastic, rewriting an app, but it&#8217;s only a client for interacting with the Flickr database. The core of Flickr remained the same.<br />
<br></br><br></br>Around the same time, the justified view spread to the Explore (top recent photos) page.<br />
<br></br><br></br>When the May 2013 redesign hit, most of the pieces were already in place. Sure, there was some visual design work involved, but if you look closely one of the most striking changes is that the justified view is now used for individual photostreams.<br />
<br></br><br></br>I love stories like this, because it&#8217;s my favorite way to develop: given an existing, working application, pick one thing to improve. Not a full rewrite. Not a Perl 6 level of manic redesign. Not a laundry list of changes. One thing. The lessons learned from that one improvement may lead to further ideas to try which will lead to still further ideas. Meanwhile you&#8217;re dealing with an exponentially simpler problem than architecting an entire lineage of such theoretical improvements all at once.<br />
<br></br><br></br>(If you liked this, you might enjoy <a href="http://prog21.dadgum.com/72.html">What Do People Like?</a>)
</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2013-05-27T08:00:00+00:00</dc:date>
    </item>

    <item>
      <title>MongooseIM 1.2. has been released</title>
      <link>http://www.planeterlang.org/en/planet/article/MongooseIM_1.2._has_been_released/</link>
      <guid>http://www.planeterlang.org/en/planet/article/MongooseIM_1.2._has_been_released/</guid>
      <author></author>
      <description><![CDATA[<p>MongooseIM 1.2. is a new version of MongooseIM 1.1. - a robust, reliable XMPP server capable of running on big clusters. It is now available to be downloaded.
</p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-05-23T19:00:33+00:00</dc:date>
    </item>

    <item>
      <title>Golang and C++ Developer at Triggit (Full&#45;time)</title>
      <link>http://www.planeterlang.org/en/planet/article/Golang_and_C_Developer_at_Triggit_Full-time/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Golang_and_C_Developer_at_Triggit_Full-time/</guid>
      <author></author>
      <description><![CDATA[<p>What you&#039;ll do all day: </p>

<ul>
<li>Help grow the Triggit ad serving
platform which currently handles
hundreds of thousands of requests per
seconds. Almost all requests require
complex decision making with large
sets of sparse data and must be
returned within tens of milliseconds</li>
<li>Work on our next generation
infrastructure components in Golang</li>
<li>Knowledge of a modern scripting
language like Python or Ruby</li>
<li>Work with infrastructure components
(ZeroMQ, Postgres, Cassandra)</li>
<li>Contribute business logic to big data
projects</li>
<li>Work with a dynamic team on a variety
of projects and new product features</li>
</ul>

<p>Requirements:</p>

<ul>
<li>Experience programming in Golang either for fun or through producing production code. </li>
<li>Must be open to learning new<br />
programming languages (polyglot<br />
programmer or desire to become one)</li>
<li>3-5 professional work experience</li>
<li>Elegant programming style and ability
to be an individual contributor</li>
<li>Very solid understanding of RDBMS (we
use Postgres), SQL, and database
normalization.</li>
<li>Strong Unix fundamentals and thorough
understanding of HTTP and all its
intricacies.</li>
<li>A detail-oriented approach to
development and an interest in
developing new skills</li>
<li>Able to work in our San Francisco HQ</li>
</ul>

<p>Either apply here or feel free to email Joanne(at)triggit.com with your resume and any past projects/open source stuff that you feel is a good representation of your work.</p>
<p>Get information on <a href="http://functionaljobs.com/jobs/147-golang-and-c-developer-at-triggit">how to apply</a> for this position.</p> 
]]>
</description>
      <dc:subject>Jobs</dc:subject>
      <dc:date>2013-05-21T04:31:27+00:00</dc:date>
    </item>

    <item>
      <title>Robert Virding teaches OTP Express Course on  10&#45;13 June 2013</title>
      <link>http://www.planeterlang.org/en/planet/article/Robert_Virding_teaches_OTP_Express_Course_on_10-13_June_2013/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Robert_Virding_teaches_OTP_Express_Course_on_10-13_June_2013/</guid>
      <author></author>
      <description><![CDATA[<p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">As a co-inventor of Erlang, Robert Virding is probably one of the best persons in the world to teach you all you need to know about Behaviours. It&#8217;s a bit like getting piano lessons from Bach.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">So we&#8217;re extremly thrilled to announce that this year Robert Virding will be teaching this year&#8217;s OTP Express course starting on 10 June. What will you learn?</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">&bull; Use existing Design Patterns supported by Erlang and OTP.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">&bull; Apply Generic Behaviours, Finite State Machines and Event handler Patterns.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">&bull; Use the Supervisor and Application Behaviours Patterns.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">&bull; Write your own Design Patterns.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">&bull; Structure large Erlang based systems.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">Hurry up and register here</div>
<p>As a co-inventor of Erlang, <a href="/conference/ErlangUserConference2013/speakers/RobertVirding">Robert Virding</a> is probably one of the best persons in the world to teach you all you need to know about Behaviours. It&#8217;s a bit like getting piano lessons from Bach.</p>
<p>So we&#8217;re extremly thrilled to announce that this year Robert Virding will be teaching this year&#8217;s <a href="/conference/ErlangUserConference2013/university/OTPExpress">OTP Express</a> course starting on 10 June. What will you learn?</p>
<p>&bull; Use existing Design Patterns supported by Erlang and OTP.</p>
<p>&bull; Apply Generic Behaviours, Finite State Machines and Event handler Patterns.</p>
<p>&bull; Use the Supervisor and Application Behaviours Patterns.</p>
<p>&bull; Write your own Design Patterns.</p>
<p>&bull; Structure large Erlang based systems.</p>
<p>To register for the course, go <a href="/conference/ErlangUserConference2013/register">here</a></p>
</p>
<p><span style="color: #1c1812; font-family: Tahoma; font-size: 12px;"><span style="color: #1c1812; font-family: Tahoma; font-size: 12px;"><br /></span></span></p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-05-20T13:32:02+00:00</dc:date>
    </item>

    <item>
      <title>Stumbling Into the Cold Expanse of Real Programming</title>
      <link>http://www.planeterlang.org/en/planet/article/Stumbling_Into_the_Cold_Expanse_of_Real_Programming/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Stumbling_Into_the_Cold_Expanse_of_Real_Programming/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>This is going to look like I&#8217;m wallowing in <a href="http://prog21.dadgum.com/102.html">nostalgia</a>, but that&#8217;s not my intent. Or maybe it is. I started writing this without a final destination in mind. It begins with a question:<br />
<br></br><br></br>How did fast action games exist at all on 8-bit systems?<br />
<br></br><br></br>Those were the days of processors living below the 2 MHz threshold, with each instruction run to completion before even considering the next. No floating point math. Barely any integer math, come to think of it: no multiplication or division and sums of more than 255 required two additions.<br />
<br></br><br></br>But that kind of lively statistic slinging doesn&#8217;t tell the whole story or else there wouldn&#8217;t have been so many animated games running&#8212;usually at sixty frames-per-second&#8212;on what appears to be incapable hardware. I can&#8217;t speak to all the systems that were available, but I can talk about the Atari 800 I learned to program on.<br />
<br></br><br></br>Most games didn&#8217;t use memory-intensive bitmaps, but a gridded character mode. The graphics processor converted each byte to a character glyph as the display was scanned out. By default these glyphs looked like ASCII characters, but you could change them to whatever you wanted, so the display could be mazes or platforms or a landscape, and with multiple colors per character, too. Modify one of the character definitions and all the references to it would be drawn differently next frame, no CPU work involved.<br />
<br></br><br></br>Each row of characters could be pixel-shifted horizontally or vertically via two memory-mapped hardware registers, so you could smoothly scroll through levels without moving any data.<br />
<br></br><br></br>Sprites, which were admittedly only a single color each, were merged with the tiled background as the video chip scanned out the frame. Nothing was ever drawn to a buffer, so nothing needed to be erased. The compositing happened as the image was sent to the monitor. A sprite could be moved by poking values in position registers.<br />
<br></br><br></br>The on-the-fly compositing also checked for overlap between sprites and background pixels, setting bits to indicate collisions. There was no need for even simple rectangle intersection tests in code, given pixel-perfect collision detection at the video processing level.<br />
<br></br><br></br>What I never realized when working with all of these wonderful capabilities, was that to a large extent I was merely scripting the hardware. The one sound and two video processors were doing the heavy lifting: flashing colors, drawing characters, positioning sprites, and reporting collisions. It was more than visuals and audio; I didn&#8217;t even think about where random numbers came from. Well, that&#8217;s not true: I know they came from reading memory location 53770 (it was a pseudo-random number generator that updated every cycle).<br />
<br></br><br></br>When I moved to newer systems I found I wasn&#8217;t nearly the hotshot game coder I thought I was. I had taken for granted all the work that the dedicated hardware handled, allowing me to experiment with game design ideas.<br />
<br></br><br></br>On a pre-Windows PC of the early 1990s, I had to write my own sprite-drawing routines. Real ones, involving actual drawing and erasing. Clipping at the screen edges? There&#8217;s something I never thought about. The Atari hardware silently took care of that. But before I could draw anything, I had to figure out what data format to use and how to preprocess source images into that format. I couldn&#8217;t start a tone playing with two register settings; I had to write arcane sound mixing routines.<br />
<br></br><br></br>I had wandered out of the comfortable realm where I could design games in my head and make them play out on a TV at my parents&#8217; house and stumbled into the cold expanse of real programming.<br />
<br></br><br></br>(If you liked this, you might enjoy <a href="http://prog21.dadgum.com/45.html">A Personal History of Compilation Speed</a>.)
</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2013-05-19T08:00:00+00:00</dc:date>
    </item>

    <item>
      <title>Erlang User of the Year 2013: Nominate your favourite until 17 May!</title>
      <link>http://www.planeterlang.org/en/planet/article/Erlang_User_of_the_Year_2013_Nominate_your_favourite_until_17_May/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Erlang_User_of_the_Year_2013_Nominate_your_favourite_until_17_May/</guid>
      <author></author>
      <description><![CDATA[<p><span style="font-size: small;">As every year, at EUC 2013 the Erlang community will reward one Erlang user whose contribution to the development of the Erlang language has been outstanding. You are invited to submit your proposed names with a short motivation until 17 May&nbsp;<a href="https://docs.google.com/forms/d/1vc9PhhNDMxGXUKLtL6OeHbPndajG35EBF27mNpbzHVA/viewform"><strong>here</strong></a>.<br style="font-family: monospace; font-size: medium;" /><br style="font-family: monospace; font-size: medium;" />Nominations will be analised by a panel headed by Bjarne D&auml;cker and composed of five&nbsp;members: Joe Armstrong, Robert Virding, Kenneth Lundin - head of the Ericsson Erlang/OTP team, Dave Smith - winner of the 2011 award &nbsp;and Fred Hebert - winner of the 2012 award.&nbsp;</span></p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-05-14T13:00:39+00:00</dc:date>
    </item>

    <item>
      <title>Test Engineer at Klarna (Full&#45;time)</title>
      <link>http://www.planeterlang.org/en/planet/article/Test_Engineer_at_Klarna_Full-time/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Test_Engineer_at_Klarna_Full-time/</guid>
      <author></author>
      <description><![CDATA[<p><strong>For us QA</strong> should be part of the entire development process, from concept to execution. We believe in agile methodologies and believe that to be able to build largescale, world class systems we need to focus on the users, their needs and how we can make sure that we deliver what they want. Now we are looking for Test Engineers that share our view on how to do QA in product development. As a Test Engineer, you will be part of creating a world class agile software development organisation where QA is at the center. We are not there today, but that is of course just another challenge.</p>

<p><strong>As a Test Engineer</strong> you are part of an agile development team that consists of around 5-8 members. You work closely to the developers and will develop the ways you work with testing within your team. The developers do unit tests and you will mostly focus on white-box testing but also some black-box testing. The test Engineer also creates tools and test frameworks when needed to be used inside the team.</p>

<p><strong>We believe</strong> that you should automate what can be automated. This means that your mission is to implement test cases, automate tests and make sure we deliver in accordance to our high demands. Since we are forming our future test organisation it is a great opportunity to help setting up and develop our ways of testing. Make your ideas be part of our overall plan. </p>

<p><strong>Requirements:</strong></p>

<ul>
<li>Degree in Computer science or similar degree with focus on programming</li>
<li>3+ Years of experience in testing in medium- or largescale software development</li>
<li>Experience of agile software development (TDD / Scrum / Kanban)</li>
<li>Broad skills in programming (preferably functional programming such as Erlang, Lisp, Scala, Scheme, F#, Haskell etc)</li>
<li>Great skills in automation and scripting (Perl, Bash, Python etc)</li>
<li>Broad experience in white-box testing frameworks such as xUnit</li>
</ul>

<p><strong>Preferred skills:</strong></p>

<ul>
<li>ISTQB-certificate (or ISEB, CSTE)</li>
<li>Experience of BDD, Behaviour-driven Development, or ATDD, Acceptance Test Driven Development</li>
<li>Experience in different higher level testing frameworks (Selenium, Cucumber etc)</li>
</ul>

<p><strong>We offer you</strong> an international working environment filled with smart and ambitious colleagues. As an employee at one of Sweden&rsquo;s fastest growing companies, you will play an important role in taking Klarna to the next level. You won&rsquo;t work for Klarna, you&rsquo;ll work with Klarna.‬</p>

<p><strong>For questions</strong> please contact Philip Andr&eacute;n at <span class="spam-protect"><span class="user">philip [dot] andren</span> [at] <span class="host">klarna [dot] com</span></span> or +46 (0) 76-526 00 70. We recommend you to apply as soon as possible, selection and interviews are held continuously.&nbsp; </p>

<p><strong>Location</strong>
Stockholm, Sweden</p>
<p>Get information on <a href="http://functionaljobs.com/jobs/146-test-engineer-at-klarna">how to apply</a> for this position.</p> 
]]>
</description>
      <dc:subject>Jobs</dc:subject>
      <dc:date>2013-05-14T10:10:39+00:00</dc:date>
    </item>

    <item>
      <title>Senior Developer &#45; Erlang at Klarna (Full&#45;time)</title>
      <link>http://www.planeterlang.org/en/planet/article/Senior_Developer_-_Erlang_at_Klarna_Full-time2/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Senior_Developer_-_Erlang_at_Klarna_Full-time2/</guid>
      <author></author>
      <description><![CDATA[<p><strong>Klarna is</strong> one of the biggest Erlang shops in the world. Not many businesses use Erlang in the scale that we do and over the years we have become really good at pushing this programming language to new levels. In our Engineering division we have around 100 Erlang developers whose combined knowledge stretches from the foundation of the Erlang Run-time System to high level architecture. By combining Erlang, RIAK, RabbitMQ we are building a multi-node, no-master system that can handle our exponential growth.</p>

<p><strong>Your job</strong> as a senior developer is to take part in the entire development process, from gathering requirements to delivery. The challenge is to provide solutions that scale. The team members have a high technical level and are expected to work independently within the team to solve complex problems, from analyzing the problem to designing, planning and implementing the solutions. </p>

<p><strong>We strive</strong> to always select an appropriate tool for solving the particular problem at hand. In order to achieve this we aim to have a diverse palette of skills in every team. Thus, it is not vital that you have previous experience with the specific tools that we are already using, because in our eyes, a great developer will always be a great developer.</p>

<p><strong>Required Qualifications</strong></p>

<ul>
<li>10 years of development experience with a proven track record of high quality software development </li>
<li>MSc in Computer Science or equivalent</li>
<li>Experience from agile methodologies (Scrum, Kanban etc) </li>
<li>Knowledge in many different domains and programming
paradigms </li>
<li>Deep understanding of algorithms, data structures and complexity up to and beyond programming language implementation and semantics </li>
<li>Value and know the power of testing and TDD</li>
</ul>

<p><strong>You&#8230;</strong></p>

<ul>
<li>value learning and solving problems together with your team mates.</li>
<li>know the power of automation and avoid repeated manual work.</li>
<li>know the value of and practice reviews relentlessly.</li>
<li>write code only when necessary.</li>
<li>have a rubber duck.</li>
</ul>

<p><strong>If you have</strong> any question please email or call Philip Andr&eacute;n at: <span class="spam-protect"><span class="user">philip [dot] andren</span> [at] <span class="host">klarna [dot] com</span></span> or +46 765 26 00 70. </p>

<p><strong>Location</strong>
Stockholm, Sweden</p>
<p>Get information on <a href="http://functionaljobs.com/jobs/145-senior-developer-erlang-at-klarna">how to apply</a> for this position.</p> 
]]>
</description>
      <dc:subject>Jobs</dc:subject>
      <dc:date>2013-05-13T18:10:41+00:00</dc:date>
    </item>

    <item>
      <title>A Short Quiz About Language Design</title>
      <link>http://www.planeterlang.org/en/planet/article/A_Short_Quiz_About_Language_Design/</link>
      <guid>http://www.planeterlang.org/en/planet/article/A_Short_Quiz_About_Language_Design/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>Suppose you&#8217;re designing a programming language. What syntax would you use for a string constant? This isn&#8217;t a trick; it&#8217;s as simple as that. If you want to print <code>Hello World</code> then how do you specify a basic string like that in your language?<br />
<br></br><br></br>I&#8217;ll give you a moment to think about it.<br />
<br></br><br></br>The obvious solution is to use quotes: <code>&#8220;Hello World&#8221;</code>. After all, that&#8217;s how it works in English, so it&#8217;s easy to explain to new students of your language. But then someone is going to ask &#8220;What if I want to put a quotation mark <i>inside</i> a string? That&#8217;s a legitimate question, because it&#8217;s easy to imagine displaying a string like:
</p><pre>"April 2013" could not be found.
</pre><p>There are a couple of options to fix this. Some form of escape character is one, so an embedded quote is preceded by, say, a backslash. That works, but now you&#8217;ve got to explain a second concept in order to explain strings. Another option is to allow both single and double quotes. If your string contains single quotes, enclose it in double quotes, and vice-versa. A hand goes up, and someone asks about how to enter this string:
</p><pre>"April 2013" can't be found.
</pre><p>Ugh. Now you have two kinds of string delimiters, and you still need escapes. You need to explain these special cases up front, because they&#8217;re so easy to hit.<br />
<br></br><br></br>What if instead falling back on the unwritten rule of using single and double quotes, strings were demarcated by something less traditional? Something that&#8217;s not common in Latin-derived languages? I&#8217;ll suggest a vertical bar:
</p><pre>|"April 2013" can't be found.|
</pre><p>That may be uncomfortable at first glance, but give it a moment. Sure, a vertical bar will end up in a string at some point&#8212;regular expressions with alternation come to mind&#8212;but the exceptional cases are no longer blatant and nagging, and you could get through a beginning class without even mentioning them.<br />
<br></br><br></br>(If you liked this, you might enjoy <a href="http://prog21.dadgum.com/73.html">Explaining Functional Programming to Eight-Year-Olds</a>.)
</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2013-05-11T08:00:00+00:00</dc:date>
    </item>

    <item>
      <title>Implementation of &#8220;Don&#8217;t Lose Your ets Tables&#8221;</title>
      <link>http://www.planeterlang.org/en/planet/article/Implementation_of_Dont_Lose_Your_ets_Tables/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Implementation_of_Dont_Lose_Your_ets_Tables/</guid>
      <author>steve</author>
      <description><![CDATA[<p>A couple years ago I wrote about <a rel="nofollow">how to avoid losing your <code>ets</code> tables</a> if the Erlang processes that own those tables crash. The original post resulted from accidentally losing an <a rel="nofollow" target="_blank" href="http://www.erlang.org/doc/man/ets.html"><code>ets</code> table</a> full of video subscriber data during a debug session on a live customer production site. Oops.</p>
<p>If you&#8217;re looking for some code that implements what that post describes, look no further than <a rel="nofollow" target="_blank" href="https://github.com/DeadZen">DeadZen</a>&#8216;s <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive"><code>etsgive</code></a> repository. DeadZen is a very experienced Erlang developer, so it&#8217;s no surprise that his example code is straightforward and clean.</p>
<p>Just as described in my post, DeadZen&#8217;s <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_sup.erl">supervisor code</a> starts two workers, one that manages the table and one that uses it. The <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl">table manager</a> process takes the following steps:</p>
<ol>
<li><a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L53">traps exits</a></li>
<li><a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L87">links to the table user worker process</a> (the supervisor starts the table user worker first)</li>
<li><a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L88">creates the <code>ets</code> table</a></li>
<li><a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L90">sets itself as the table heir process</a></li>
<li><a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L91">gives ownership of the table away to the table user worker process</a></li>
</ol>
<p>The <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_srv.erl">table user worker process</a> first <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_srv.erl#L115">handles the transfer message</a> resulting from the manager giving it ownership of the table. Once it becomes the owner, it can handle a call to <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_srv.erl#L93">increment a counter in the table</a> and a <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_srv.erl#L98">call to check the table contents</a>. It can also <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_srv.erl#L90">handle a call to die</a>, which you would issue interactively from an Erlang shell to exercise the code. This causes the worker process to die, which means the table manager regains ownership of the table because it&#8217;s the table&#8217;s heir. The table manager then <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L118">waits for the supervisor to start a a new table user worker process</a>, and once it&#8217;s up and running, the <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L114">manager links to it</a> and then <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive/blob/master/src/etsgive_mgr.erl#L115">transfers table ownership to it</a>.</p>
<p>This written description might be difficult to work through, but fear not, <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive#example-session">DeadZen also supplies an example Erlang shell session showing how it all works</a>. Clone his <a rel="nofollow" target="_blank" href="https://github.com/DeadZen/etsgive">repository</a> and try it out for yourself!</p> 
]]>
</description>
      <dc:subject>Blogs, Steve Vinoski</dc:subject>
      <dc:date>2013-05-09T05:00:44+00:00</dc:date>
    </item>

    <item>
      <title>Dynamo Sure Works Hard</title>
      <link>http://www.planeterlang.org/en/planet/article/Dynamo_Sure_Works_Hard/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Dynamo_Sure_Works_Hard/</guid>
      <author>Damien Katz</author>
      <description><![CDATA[<p>We tend to think of working hard as a good thing. We value a strong work ethic and determination is the face of adversity. But if you are working harder than you should to get the same results, then it&#8217;s not a virtue, it&#8217;s a waste of time and energy. If it&#8217;s your business systems that are working harder than they should, it&#8217;s a waste of your IT budget.</p>

<p>Dynamo based systems work too hard. SimpleDB/DynamoDB, Riak, Cassandra and Voldemort are all based, at least in part, on the design first described publicly in the <a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf">Amazon Dynamo Paper</a>. It has some very interesting concepts, but ultimately fails to provide a good balance of reliability, performance and cost. It&#8217;s pretty neat in that each transaction allows you dial in the levels of redundancy and consistency to trade off performance and efficiency. It can be pretty fast and efficient if you don&#8217;t need any consistency, but ultimately the more consistency you want the more have to pay for it via a lot of extra work.</p>

<p><b>Network Partitions are Rare, Server Failures are Not</b></p>

<blockquote><div><p>... it is well known that when dealing with the possibility of network failures, strong consistency and high data availability cannot be achieved simultaneously. As such systems and applications need to be aware which properties can be achieved under which conditions.
</p><p>
For systems prone to server and network failures, availability can be increased by using optimistic replication techniques, where changes are allowed to propagate to replicas in the background, and concurrent, disconnected work is tolerated. The challenge with this approach is that it can lead to conflicting changes which must be detected and resolved. This process of conflict resolution introduces two problems: when to resolve them and who resolves them. Dynamo is designed to be an eventually consistent data store; that is all  updates reach all replicas eventually.
<p>
- Amazon Dynamo Paper </div></blockquote>

<p>The Dynamo system is a design that treats the probability of a network switch failure as having the same probability of machine failure, and pays the cost with every single read. This is madness. Expensive madness.</p>

<p>Within a datacenter, the Mean Time To Failure (MTTF) for a network switch is one to two orders of magnitude higher than servers, depending on the quality of the switch. This is according to data from Google about datacenter server failures, and the publish numbers of the MTBF of Cisco switches (There is a subtle difference between MTBF and MTTF, but for our purposes we can treat them the same)</p>

<p>It is claimed that when W + R > N you can get consistency. But it&#8217;s not true, because without distributed ACID transactions, it&#8217;s never possible to achieve W > 1 atomically.</p>

<p>Consider W=3, R=1 and N=3. If a network failure or more likely a client/app tier failure (hardware, OS or process crash) happens during the writing of data, it&#8217;s possible for only replica A to receive the write, with a lag until the cluster notices and syncs up. Then another client with R = 1 can do two consecutive reads, getting newer data first from a node A, and older data next from node B for the same key. But you don&#8217;t even need a failure or crash, once the first write occurs there is always a lag for the next server(s) to receive the write. It&#8217;s possible for a fast client to do the same read 2 times again, getting a newer version from one server, then an older version from another.</p>

<p>What is true is that if R > N / 2, then you get consistency where it&#8217;s not possible to read in a newer value, then a subsequent read get&#8217;s an older value.</p>

<p>For the vast majority of applications, it&#8217;s okay for a failure leading to temporary unavailability. Amazon believes it&#8217;s shopping cart is so important to capture writes it&#8217;s worth the cost of quorum reads, or inconsistency. Perhaps. But the problems and costs multiply. If you are doing extra reads to achieve high consistency, then you are putting extra load on each machine, requiring extra server hardware and extra networking infrastructure to provide the same baseline performance. All of this can increase the frequency of a component failure and increases operational costs (hardware, power, rack space and the personnel to maintain it all).</p>

<p><b>A Better Way?</b></p>

<p>What if a document had 1 master and N replicas to write to, but only a single master to read from? Clients know based on the document key and topology map which machine serves as the master. That would make the reads far cheaper and faster. All reads and writes for a document go to the same master, with writes replicated to replicas (which also serve as masters for other documents, each machine is both a master and replica).</p>

<p>But, you might ask, how do I achieve strong consistency if the master goes down or becomes unresponsive?</p>

<p>If when that happens, the cluster also notices the machine is unresponsive or too slow and removes it out of the cluster and fails over to a new master. Then the client tries again and has a successful read.</p>

<p>But, you might ask, what if the client asks the wrong server for a read?</p>

<p>If all machines in the cluster know their role and only one machine in the cluster can be a document master at any time, and the cluster manager (a regular server node elected by Paxos consensus) makes sure to remove the old master, and then assign the new master, and then tell the client about the new topology. Then the client updates it&#8217;s topology map, and retries at the new master.</p>

<p>But, you might ask, what if the topology has changed again, and the client again asks to read from the wrong server?</p>

<p>Then this wrong server will let the client know. The client will reload the topology maps, and re-request from the right server. If the right master server isn&#8217;t really right any more because of another topology change, it will reload and retry again. It will do this as many times as necessary, but typically it happens only once.</p>

<p>But, you might ask, what if there is a network partition, and the client is on the wrong (minor) side of the partition, and reads from a master server that doesn&#8217;t know it&#8217;s not a master server anymore?</p>

<p>Then it gets a stale read. But only for a little while, until the server itself realizes it&#8217;s no longer in heartbeat contact with the majority of the cluster. And partitions like this are the among the rarest form a cluster failure. It will require a network failure, and for the client to be on the wrong side of the partition.</p>

<p>But, you might ask, what if there is a network partition, and the client is on the wrong (smaller) side of the partition, and WRITES to a server that doesn&#8217;t know it&#8217;s not a master server anymore?</p>

<p>Then the write is lost. But if the client wanted true multi-node durability, then the write wouldn&#8217;t have succeeded (the client would timeout waiting for replicas(s) to receive the update) and the client wouldn&#8217;t unknowingly lose data.</p>

<p>What I&#8217;m describing is the <a href="http://couchbase.com">Couchbase</a> clustering system.</p>

<p><b>Let&#8217;s Run Some Numbers</b></p>

<p>Given the MTTF of a server, how much hardware and how quickly must the cluster failover to a new master and still meet our SLAs requirements vs a Dynamo based system?</p>

<p>Let&#8217;s start with some assumptions:</p>

<p>We want to achieve 4000 transactions/sec with 3 node replication factor. Our load mix is 75% reads/25% writes.</p>

<p>We want to have some consistency, so that we don&#8217;t read newer values, then older values, so for Dynamo:<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;<code>R = 2, W = 2, N = 3</code><br />
 <br />
But for Couchbase:<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;<code>R = 1, W = 1, N = 3</code></p>

<p>This means for a Dynamo style cluster, the load will be:<br />
Read transactions/sec: 9000 reads (reads spread over 3 nodes)<br />
Write transactions/sec: 3000 writes (writes spread over 3 nodes)</p>

<p>This means for a Couchbase style cluster, the load will be:<br />
Read transactions/sec: 3000 reads (each document read only on 1 master node, but all document masters evenly spread across 3 nodes)<br />
Write transaction/sec: 3000 writes (writes spread over 3 nodes)</p>

<p>Let&#8217;s assume both systems are equally as reliable at the machine level. Google&#8217;s research indicates in their datacenter each server has a MTTF of 3141 hrs or 2.7 failures per year. Google also reports a rack failure (usually power supply) of 10.2 years, roughly 30x a reliable as a server, so we&#8217;ll ignore that to make the analysis simpler. (This is from Googles paper studying server failures <a href="http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/pubs/archive/36737.pdf">here</a>)</p>

<p>The MTBF of Cisco network switch is published at 54,229 hrs on the low end, to 1,023,027 hrs on the high end. For our purposes, we&#8217;ll ignore switch failures, since the failures affects availability and consistency of both system about the same, and it&#8217;s 1 to 2 orders of magnitude rarer than a server failure. (This is from a Cisco product spreadsheet <a href="https://supportforums.cisco.com/servlet/JiveServlet/downloadBody/10498-102-2-23736/SBBU Switch features HW_com.xls">here</a>)</p>

<p>Assume we want to meet a latency SLA 99.9% of the time (the actual latency SLA threshold number doesn&#8217;t matter here).</p>

<p>On Dynamo, that means each node can fail SLA the 1.837% of the time. Because it queries 3 nodes, but only uses the values from the first 2 nodes and the chances of SLA failure are the same across nodes, the formula is different (only two must meet the SLA):</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>0.0001 = (3 − 2 * P) * P ^ 2</code></p>

<p>or:</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>P = 0.001837</code></p>

<p>On Couchbase, if a master node fails, it must recognize it and fail it out. Given Google&#8217;s MTTF failure above and it can fail out a node in 30 secs, and let&#8217;s say it will take 4.5 minutes for it warm up the RAM cache, given 2.7 failures/year with 5 minutes of downtime for each before a failover completes, then queries will fail 0.00095% of time due to node failure.</p>

<p>For Couchbase meet the same SLA:</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>0.0001 = P(SlaFail) + P(NodeFail) - (P(SlaFail) * P(NodeFail))</code></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>0.0001 = P(SlaFail) + 0.0000095 - (P(SlaFail) * 0.0000095)</code></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<code>0.0001 ~= 0.00009 + 0.0000095 - (0.00009 * 0.0000095)</code></p>

<p>Note: Some things I&#8217;m omitting from the analysis are when a Dynamo node fails the lower latency requirement from meeting the SLA for 2 nodes vs. 3 (it would drop from 1.837% to ~0.05%), and also the increased work on the remaining servers when a Couchbase server fails. Both are only temporary and go away when a new server is added back and initialized in the cluster, and shouldn&#8217;t change the numbers significantly. Also there is the time to add in a new node and rebalance load on it. At Couchbase we work very hard to make that as fast and efficient as possible. I&#8217;ll assume Dynamo systems do the same, that the cost is the same and omit it, though I think we are the leaders in rebalance performance.</p>

<p>With this analysis, a Couchbase node can only fail it&#8217;s SLA 0.9% of the requests, and a Dynamo node can fail it 1.837%. Sounds good for Dynamo, but it must do for 2X the throughput per node on 3x the data, and with 2x the total network traffic. And for very low latency response times (our customers often want sub-millisecond latency) typically meeting the SLA means a DBMS must a large amount of relevant data and metadata in RAM, because there is a huge cost for random disk fetches on latency. With disk fetches 2 orders of magnitude slower on SSDs (100x), and 4 orders of magnitude slower on HDDs (10000x) the disk accesses pile up faster without much more RAM, so do the latencies.</p>

<p>So each Dynamo node can fail it&#8217;s SLA at a higher rate is very small win when it will still need to keep nearly 3X the working set ready in memory because each node will be serving 3x the data at all times for read requests (it can fail it&#8217;s SLA slightly more often, so it&#8217;s actually about 2.97x the necessary RAM), and will use 2x the network capacity.</p>

<p>Damn Dynamo, you sure do work hard!</p>

<p>Now Couchbase isn&#8217;t perfect either, far from it. Follow me on twitter <a href="http://twitter.com/damienkatz">@damienkatz</a>. I&#8217;ll be posting more about the Couchbase shortcomings and capabilities, and technical roadmap soon.</p> 
]]>
</description>
      <dc:subject>Blogs, Damien Katz</dc:subject>
      <dc:date>2013-05-03T19:06:48+00:00</dc:date>
    </item>

    <item>
      <title>&amp;quot;OpenFlow &#45; Bringing new levels of network control&amp;quot; webinar by Stu Bailey and Steve Robert</title>
      <link>http://www.planeterlang.org/en/planet/article/OpenFlow_-_Bringing_new_levels_of_network_control_webinar_by_Stu_Bailey_and/</link>
      <guid>http://www.planeterlang.org/en/planet/article/OpenFlow_-_Bringing_new_levels_of_network_control_webinar_by_Stu_Bailey_and/</guid>
      <author></author>
      <description><![CDATA[<p>Erlang Solutions invites you to join Stuart Bailey - CTO and Founder of Infoblox and Steve Roberts from Erlang Solutions for an insightful discussion about how you can solve your networking challenges using OpenFlow.
</p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-05-02T11:00:33+00:00</dc:date>
    </item>

    <item>
      <title>Senior Erlang Developer at SumUp Limited (Full&#45;time)</title>
      <link>http://www.planeterlang.org/en/planet/article/Senior_Erlang_Developer_at_SumUp_Limited_Full-time/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Senior_Erlang_Developer_at_SumUp_Limited_Full-time/</guid>
      <author></author>
      <description><![CDATA[<p><strong>About the Company</strong></p>

<p>Headquartered in Dublin and Berlin, SumUp is a dynamic and innovative start-up company developing cutting-edge mobile payment solutions. With a global workforce of over 130 young, energetic and dedicated staff, our product is set to revolutionalise the world of payment services. </p>

<p>The company offers an application and card reader that can turn any tablet or smart phone into a credit card terminal, which gives small merchants the ability to accept card payments as well as replace their expensive cash registers. SumUp enjoys impressive global reach that is ever expanding. We are currently operating in Ireland, UK, Germany, Austria, Italy, Spain, the Netherlands, France, Belgium and Portugal. </p>

<p>We are looking for vibrant, practical and resourceful future employees to join our great company.</p>

<p><strong>The Role</strong></p>

<ul>
<li>Develop quality solutions and features for the SumUp product in a timely manner.</li>
<li>Support SumUp production services and components.</li>
<li>Collaborate with team members in highly agile scrum teams to design, develop, test and deploy software projects.</li>
<li>Work to troubleshoot, analyse and code fixes for reported software issues.</li>
<li>Plan and size coding, testing and deployment tasks.</li>
<li>Bring an open-minded opinion about technology and processes to all technological discussions within the team; and be flexible in all team dealings.</li>
<li>Communicate and collaborate with colleagues outside of the Software Department to deliver value for Sumup.</li>
<li>Focus at all times on delivering the best user experience possible to SumUp customers and internal users.</li>
<li>Represent SumUp in a professional manner at external software community meetups.</li>
</ul>

<p><strong>IT Skill Set Required</strong></p>

<p><em>Essential</em></p>

<ul>
<li>5+ years programming experience in a product development environment.</li>
<li>Practical Erlang development experience &amp; good working knowledge Erlang-based libraries.</li>
<li>Experience in developing fault-tolerant distributed systems.</li>
<li>Experience with scaling systems to large numbers of concurrent users.</li>
<li>Flexibility and open-mindedness in using tools, technologies and new ideas.</li>
<li>Strong communication skills; capable of working closely and smoothly with team members to deliver business goals. Team cooperation is essential.</li>
<li>Commonsense and pragmatism in developing new features with a strong focus on delivering business value.</li>
</ul>

<p><em>Desirable</em></p>

<ul>
<li>Knowledge of other programming languages (Ruby Python, Objective-C, C++, etc.) a plus.</li>
<li>Familiarity with the mobile payments industry is desirable. Knowledge of EMV2 and PCI standards is a MAJOR plus.</li>
<li>A good working knowledge of SQL - it doesn&rsquo;t matter what flavour.</li>
<li>Some experience with NoSQL-type systems (Riak, MongoDB, &hellip;)</li>
<li>A good working knowledge of Linux/Unix (we use OS X for development)</li>
<li>A broad knowledge and interest in other technologies (e.g. JSON, Web servers, networking, etc.)</li>
<li>Experience in working in a team of developers in a flexible, agile environment.</li>
<li>An interest in open-source technologies &ndash; willingness to collaborate in team hackathons.</li>
<li>Experience in working in a startup environment would be an advantage.</li>
</ul>

<p><strong>General Skills profile</strong></p>

<ul>
<li>Excellent communication skills: ability to communicate clearly and concisely, both verbally and in writing.</li>
<li>Team working/interaction with others: strong team player and ability to interact with colleagues at all levels.</li>
<li>Accuracy: methodical and detail conscious with high standards of accuracy.</li>
<li>Strong analysis and problem solving ability: gather information and probe for facts. Weigh up options and produce practical and workable solutions within the overall defined architecture solution.</li>
<li>Planning and organisation: strong time management and organisational skills, ability to prioritise own tasks.</li>
<li>Good time management and ability to work to tight deadlines.</li>
<li>Target Driven to remain focused on goals even when under pressure and maintain effective work despite challenges.</li>
<li>Flexibility and openness to change: ability to react and adapt to changing priorities.</li>
<li>Enthusiastic, dedicated and willing to learn.</li>
<li>Conscientious with a &ldquo;can do&rdquo; attitude and proactive work ethic.</li>
</ul>
<p>Get information on <a href="http://functionaljobs.com/jobs/138-senior-erlang-developer-at-sumup-limited">how to apply</a> for this position.</p> 
]]>
</description>
      <dc:subject>Jobs</dc:subject>
      <dc:date>2013-05-01T16:01:15+00:00</dc:date>
    </item>

    <item>
      <title>The Erlang User Conference 2013: Building Massively Scalable Fault&#45;tolerant Systems</title>
      <link>http://www.planeterlang.org/en/planet/article/The_Erlang_User_Conference_2013_Building_Massively_Scalable_Fault-tolerant_/</link>
      <guid>http://www.planeterlang.org/en/planet/article/The_Erlang_User_Conference_2013_Building_Massively_Scalable_Fault-tolerant_/</guid>
      <author></author>
      <description><![CDATA[<p>Between the 13th and the 14th of June, the Erlang User Conference in Stockholm will be the best place in Europe to discuss computing hot-topics such as Multi-core, Big Data, Cloud, Embedded, NoSQL and the future of the Web.
</p> 
]]>
</description>
      <dc:subject>Companies, Erlang Solutions</dc:subject>
      <dc:date>2013-04-30T11:00:08+00:00</dc:date>
    </item>

    <item>
      <title>Erlang Engineer working w/ billions of daily, real&#45;time auctions at AdRoll (Full&#45;time)</title>
      <link>http://www.planeterlang.org/en/planet/article/Erlang_Engineer_working_w_billions_of_daily_real-time_auctions_at_AdRoll_Fu/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Erlang_Engineer_working_w_billions_of_daily_real-time_auctions_at_AdRoll_Fu/</guid>
      <author></author>
      <description><![CDATA[<p>About Us:</p>

<p>AdRoll is an already profitable startup based in SOMA. We&rsquo;re backed by some of the savviest investors in the space, including Peter Thiel, Accel Partners, and Foundation Capital.</p>

<p>We were just named the #1 fastest growing in CA by Inc.</p>

<p>Team up with a colorful, but tight-knit engineering squad of a dozen. Code alongside our group which includes the youngest engineer ever at Microsoft (our CEO), a former World Champion of Street Fighter, the president of Python Italy, and more!</p>

<p>We run the retargeting platform with the largest customer base and swim in the complex, yet exciting new world of real-time advertising.</p>

<p>Our technology is continually pushing the boundaries. We run a global infrastructure that handles millions of requests, participates in billions of real-time auctions, crunches big data in real-time while serving thousands of happy advertisers.</p>

<p>About You:</p>

<p>Do you dream of writing code that will be seen by nearly everyone you know? Do you yearn to build a 100% cloud-deployed infrastructure that deftly scales to billions of daily requests and is capable of self-healing when trouble strikes? Join us in making this vision a reality.</p>

<p>For this key position, you must write solid code, understand complex systems, competently evaluate scalability trade-offs (eg, disk vs cpu vs memory), and quickly troubleshoot issues. You learn fast and are excited to dig into the latest technologies. Our stack includes Python, Erlang, RabbitMQ, PostgreSQL, HBase, Hadoop, Redis and our own open-sourced solutions.</p>

<p>More than anything, you do your best work when you have lots of freedom and can take ownership of your projects from concept to finish.</p>
<p>Get information on <a href="http://functionaljobs.com/jobs/135-erlang-engineer-working-w-billions-of-daily-real-time-auctions-at-adroll">how to apply</a> for this position.</p> 
]]>
</description>
      <dc:subject>Jobs</dc:subject>
      <dc:date>2013-04-27T00:31:21+00:00</dc:date>
    </item>

	
    </channel>
</rss>