<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sam Symons</title>
    <link>https://samsymons.com/</link>
    <description>Recent content on Sam Symons</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Thu, 17 Aug 2017 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://samsymons.com/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Math Notes: Ray-Plane Intersection</title>
      <link>https://samsymons.com/blog/math-notes-ray-plane-intersection/</link>
      <pubDate>Thu, 17 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/math-notes-ray-plane-intersection/</guid>
      <description>&lt;p&gt;As part of working on ray tracing recently, I spent some time brushing up on how to calculate intersections between rays and different types of 3D objects. In preparation for blogging about actually &lt;em&gt;creating&lt;/em&gt; a ray tracer, I thought it would be nice to spend some time covering some of the math.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Detecting Simulator Builds in Swift</title>
      <link>https://samsymons.com/blog/detecting-simulator-builds-in-swift/</link>
      <pubDate>Fri, 11 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/detecting-simulator-builds-in-swift/</guid>
      <description>&lt;p&gt;When developing a Swift app, you will occasionally find yourself wanting to include a piece of code only if you&amp;rsquo;re running in the simulator. Perhaps you want to run some alternative code paths (like not calling Metal APIs, which aren&amp;rsquo;t available in the simulator), or avoid attempting to register for push notifications. There are a few ways in which to do this, and the techniques are different depending on whether you&amp;rsquo;re writing Swift or Objective-C.&lt;/p&gt;

&lt;p&gt;This difference often catches people out who have come from Objective-C and are used to using all of the familiar C macros. Let&amp;rsquo;s cover the right approach for each language.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Understanding Objective-C Modules</title>
      <link>https://samsymons.com/blog/understanding-objective-c-modules/</link>
      <pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/understanding-objective-c-modules/</guid>
      <description>&lt;p&gt;A few years back, the idea of Objective-C modules was introduced to LLVM. They were developed as a solution to the problems associated with the traditional &lt;code&gt;#include&lt;/code&gt; and &lt;code&gt;#import&lt;/code&gt; mechanisms.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Better String Enums in Swift</title>
      <link>https://samsymons.com/blog/better-string-enums-in-swift/</link>
      <pubDate>Sat, 20 May 2017 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/better-string-enums-in-swift/</guid>
      <description>&lt;p&gt;Swift has a number of great features for improving the way it imports Objective-C code. With &lt;code&gt;NS_SWIFT_NAME&lt;/code&gt; you can customize the name of functions imported into Swift, and nullability annotations let you work closer with Swift&amp;rsquo;s optional system. These features are very useful and pretty well known, but one feature I don&amp;rsquo;t see talked about as often is &lt;code&gt;NS_STRING_ENUM&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Crafting Interpreters</title>
      <link>https://samsymons.com/blog/crafting-interpreters/</link>
      <pubDate>Wed, 22 Feb 2017 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/crafting-interpreters/</guid>
      <description>This is a fantastic guide on the ins and outs of building an interpreter. It&amp;rsquo;s still in its early stages, but what&amp;rsquo;s already there is great.</description>
    </item>
    
    <item>
      <title>Notes for Coursera Machine Learning, Week 1</title>
      <link>https://samsymons.com/blog/coursera-machine-learning-week-1/</link>
      <pubDate>Tue, 16 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/coursera-machine-learning-week-1/</guid>
      <description>&lt;p&gt;Some time ago, I started &lt;a href=&#34;https://www.coursera.org/learn/machine-learning&#34;&gt;Andrew Ng&amp;rsquo;s Machine Learning course on Coursera&lt;/a&gt;. I loved every bit of it, but I only got halfway through before I started a new job and it ended up falling by the wayside.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Bayes&#39; Theorem</title>
      <link>https://samsymons.com/blog/bayes-theorem/</link>
      <pubDate>Wed, 10 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/bayes-theorem/</guid>
      <description>&lt;p&gt;One of the most useful and interesting theorems in statistics is &lt;a href=&#34;https://en.wikipedia.org/wiki/Bayes%27_theorem&#34;&gt;Bayes&amp;rsquo; Theorem&lt;/a&gt;. I like it a lot because it can be used to solve interesting problems with very little effort — it boils down to one equation! I wanted to go over it and try to provide some intuition into how it works, and then why you would want to use it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Rendering Math with KaTeX</title>
      <link>https://samsymons.com/blog/rendering-math-with-katex/</link>
      <pubDate>Sat, 06 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/rendering-math-with-katex/</guid>
      <description>&lt;p&gt;The other day, I was looking into how easy it is to render LaTeX via a Markdown document. &lt;a href=&#34;https://www.w3.org/Math/&#34;&gt;MathML&lt;/a&gt; isn&amp;rsquo;t yet widespread enough to use reliably, so instead I started looking at some of the third-party libraries available. I had looked at &lt;a href=&#34;https://github.com/Khan/KaTeX&#34;&gt;KaTeX from Khan Academy&lt;/a&gt; a few times in the past, and was happy to find that it was exactly what I wanted.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Writing High Performance Swift Code</title>
      <link>https://samsymons.com/blog/writing-high-performance-swift-code/</link>
      <pubDate>Thu, 28 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/writing-high-performance-swift-code/</guid>
      <description>Great collection of tips for improving Swift&amp;rsquo;s performance.</description>
    </item>
    
    <item>
      <title>Exploring Swift, Part 2: Installing Custom Toolchains</title>
      <link>https://samsymons.com/blog/exploring-swift-part-2-installing-custom-toolchains/</link>
      <pubDate>Mon, 18 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/exploring-swift-part-2-installing-custom-toolchains/</guid>
      <description>As you’re making changes to Swift, you’ll want to test them out by using your new version of the compiler and writing some programs with it. The most convention way to do this is to provide the system with a new version of Swift to use.
Some of the projects in the Swift ecosystem (like the package manager) may even require that you have a more recent version than that which Xcode provides.</description>
    </item>
    
    <item>
      <title>Creating Siri Extensions With SiriKit</title>
      <link>https://samsymons.com/blog/creating-siri-extensions-with-sirikit/</link>
      <pubDate>Mon, 20 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/creating-siri-extensions-with-sirikit/</guid>
      <description>With the introduction of iOS 10 at WWDC 2016, Siri has finally been opened up to developers, in the form of SiriKit. It comes with support for a fixed set of app categories for now, ranging from messaging and phone calls to payments and booking rides.
Siri is an extremely complicated product, having to manage many languages and process words correctly, so I wanted to see how easy it is to add support for it to an app.</description>
    </item>
    
    <item>
      <title>Linting Changed Files With SwiftLint</title>
      <link>https://samsymons.com/blog/linting-changed-files-with-swiftlint/</link>
      <pubDate>Sun, 19 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/linting-changed-files-with-swiftlint/</guid>
      <description>SwiftLint is an incredible tool for identifying style issues with Swift codebases, and highlighting them right in Xcode. It’s great for saving time during code reviews, letting reviewers to worry about important issues.
The problem is trying to integrate SwiftLint into an existing codebase which has been worked on by dozens of authors – adding SwiftLint into a work project gave us over 20,000 warnings. It’s fantastic that SwiftLint caught these, but this drowns out issues which may be really important.</description>
    </item>
    
    <item>
      <title>Exploring Swift, Part 1: Getting Started</title>
      <link>https://samsymons.com/blog/exploring-swift-part-1-getting-started/</link>
      <pubDate>Tue, 14 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/exploring-swift-part-1-getting-started/</guid>
      <description>With the open source release of Swift in December last year, developers everywhere have been able to delve into the code behind the language and help improve it for everybody else. They’ve been able to help track down bugs in the current releases, and also help plan out future iterations.
This has been fantastic for those of us who work with Swift daily, and it would be great to be able to help contribute to the language as well.</description>
    </item>
    
    <item>
      <title>Writing an OS in Rust</title>
      <link>https://samsymons.com/blog/writing-an-os-in-rust/</link>
      <pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/writing-an-os-in-rust/</guid>
      <description>Fantastic series from Philipp Oppermann on building an operating system from scratch using assembly and Rust.</description>
    </item>
    
    <item>
      <title>No More GitHub Streaks</title>
      <link>https://samsymons.com/blog/no-more-github-streaks/</link>
      <pubDate>Mon, 30 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/no-more-github-streaks/</guid>
      <description>As part of this update, code streaks are no longer featured on your contribution graph. The simplified interface focuses on the work you&amp;rsquo;re doing rather than the duration of your activity.
 Great change. 👍</description>
    </item>
    
    <item>
      <title>Deliberate Practice</title>
      <link>https://samsymons.com/blog/deliberate-practice/</link>
      <pubDate>Sun, 29 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/deliberate-practice/</guid>
      <description>Peak: Secrets from the New Science of Expertise is a book studying deliberate practice, the act of pushing yourself to learn more about a subject while constantly reviewing your progress and applying feedback.
Many of the examples in the book are of activities that can be easily quantified; playing chess or memorizing numbers, for example. You can graph your progress from day to day, allowing you to spot weaknesses and improve those areas.</description>
    </item>
    
    <item>
      <title>It&#39;s Just Bits</title>
      <link>https://samsymons.com/blog/its-just-bits/</link>
      <pubDate>Mon, 18 Apr 2016 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/its-just-bits/</guid>
      <description>It&amp;rsquo;s just bits, why call through a bunch of code that can make his system less stable if understanding the bits isn&amp;rsquo;t actually that hard?
 Thinking of complex algorithms and protocols as “just bits” helps me to understand them every single time.</description>
    </item>
    
    <item>
      <title>Reverse Engineering Challenges</title>
      <link>https://samsymons.com/blog/reverse-engineering-challenges/</link>
      <pubDate>Sun, 15 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/reverse-engineering-challenges/</guid>
      <description>This collection of programming challenges looks like a great way to spend some free time. There are a ton of different interesting pieces of code to dig into.</description>
    </item>
    
    <item>
      <title>corecrypto</title>
      <link>https://samsymons.com/blog/corecrypto/</link>
      <pubDate>Sun, 01 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/corecrypto/</guid>
      <description>I was excited to see Apple release the source code of their corecrypto library the other day. It provides implementations of many of the low level crypto primitives used in their other frameworks, like CommonCrypto. Sadly, it’s not truly open source as the license prevents you from using it elsewhere, but being able to audit the code is a step in the right direction.</description>
    </item>
    
    <item>
      <title>Eliminating Roundtrips with Preconnect</title>
      <link>https://samsymons.com/blog/eliminating-roundtrips-with-preconnect/</link>
      <pubDate>Wed, 09 Sep 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/eliminating-roundtrips-with-preconnect/</guid>
      <description>Ilya Grigorik from the web performance team at Google had a great write-up of the upcoming preconnect feature in Chrome and Firefox a few weeks ago.
This is the kind of thing which I really love to see implemented in browsers: small, subtle features which yield nice performance boosts.</description>
    </item>
    
    <item>
      <title>BetterCap</title>
      <link>https://samsymons.com/blog/bettercap/</link>
      <pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/bettercap/</guid>
      <description>Whenever I play with MITM attacks against my devices on the local network, it always feels like I’m just putting together pieces of Lego until I find a combination of software that does what I want.
BetterCap has pretty much put an end to this problem – earlier I ran a MITM attack again my iPhone, modifying HTTP traffic in about a dozen lines of code.</description>
    </item>
    
    <item>
      <title>How Traceroute Works</title>
      <link>https://samsymons.com/blog/how-traceroute-works/</link>
      <pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/how-traceroute-works/</guid>
      <description>After taking Stanford&amp;rsquo;s introductory networking course earlier this year, I decided it would be fun exercise to put some of that knowledge into practice and go about recreating traceroute in Rust. Traceroute is a neat little program; it ties together a bunch of networking protocols in a relatively simple way, making for a good test of a language&amp;rsquo;s networking APIs.
A Brief Overview of Network Protocols If you&amp;rsquo;ve done any basic network programming in the past, you&amp;rsquo;re likely familiar with the IP protocol, along with its partners, TCP and UDP.</description>
    </item>
    
    <item>
      <title>Reverse Engineering With Radare2, Part 1</title>
      <link>https://samsymons.com/blog/reverse-engineering-with-radare2-part-1/</link>
      <pubDate>Sun, 05 Jul 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/reverse-engineering-with-radare2-part-1/</guid>
      <description>A couple of weeks back, the folks at RPISEC posted the lecture slides and lab contents of their Modern Binary Exploitation course, held earlier this year. The course is designed to take somebody with basic C skills and have them work their way through a series of reverse engineering challenges of increasing difficulty.
This seemed like a great opportunity to fire up Radare2 and put it to work. This series of posts will work through each of the lecture challenges and labs, with a focus on solving them using Radare2 (and a little help from gdb and friends along the way).</description>
    </item>
    
    <item>
      <title>A Reverse Engineering Reading List</title>
      <link>https://samsymons.com/blog/a-reverse-engineering-reading-list/</link>
      <pubDate>Wed, 13 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/a-reverse-engineering-reading-list/</guid>
      <description>One of my hobbies is taking apart binaries and figuring out how they work. It is really satisfying to take a program and break it apart, before reassembling the pieces in a way that you understand. There are so many resources for picking up this stuff that it seemed like a crime to not collect it in one place.
Warming Up If you&amp;rsquo;re just getting into reverse engineering, there are a number of concepts you&amp;rsquo;ll need to get your head around.</description>
    </item>
    
    <item>
      <title>Linux Insides</title>
      <link>https://samsymons.com/blog/linux-insides/</link>
      <pubDate>Sun, 03 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/linux-insides/</guid>
      <description>This has been doing the rounds for a few weeks now, but it&amp;rsquo;s very much worth checking out. I&amp;rsquo;ve been looking for a good overview of the Linux kernel for a while – this is it.</description>
    </item>
    
    <item>
      <title>Inspecting Binaries with Hexdump</title>
      <link>https://samsymons.com/blog/inspecting-binaries-with-hexdump/</link>
      <pubDate>Mon, 20 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/inspecting-binaries-with-hexdump/</guid>
      <description>Lately I&amp;rsquo;ve been working on an 8080 emulator in Swift. The process of having to take a binary apart and figure out which byte is associated with which instruction has gotten me interested in programs and how they work under the hood.
Instead of doing some private research and calling it a day, I wanted to try and put things together into one place.
What Are Binaries? A binary is nothing more than an executable chunk of data arranged in a certain way.</description>
    </item>
    
    <item>
      <title>Introduction to Nmap</title>
      <link>https://samsymons.com/blog/introduction-to-nmap/</link>
      <pubDate>Sun, 19 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/introduction-to-nmap/</guid>
      <description>Nmap is one of my favorite tools. It gives you an easy way to discover the machines available on a network, and determine the services that each one is running. However, networks are complicated – this is reflected in the sheer number of options which Nmap provides (running nmap with no arguments outputs over 110 lines of available flags).
Basics The simplest way to use Nmap is to give it an address to scan.</description>
    </item>
    
    <item>
      <title>Software Security Course Review</title>
      <link>https://samsymons.com/blog/software-security-course-review/</link>
      <pubDate>Mon, 13 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/software-security-course-review/</guid>
      <description>As a follow up to the crypto course from earlier this year, I enrolled in the software security course from the University of Maryland for something a bit more hands-on.
I wanted to write up a short review of the course here, especially since I haven&amp;rsquo;t seen many (any?) other security courses like this offered on Coursera.
Overview The syllabus is what you would expect in a security course:</description>
    </item>
    
    <item>
      <title>Low-Level Software Security</title>
      <link>https://samsymons.com/blog/low-level-software-security/</link>
      <pubDate>Sun, 15 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/low-level-software-security/</guid>
      <description>This video was posted in the IRC channel for the Coursera Software Security course the other day. It covers all of the usual attacks beautifully (and I think I&amp;rsquo;m finally getting my head around return-oriented programming).</description>
    </item>
    
    <item>
      <title>NASM Tutorial</title>
      <link>https://samsymons.com/blog/nasm-tutorial/</link>
      <pubDate>Sun, 15 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/nasm-tutorial/</guid>
      <description>A simple (and understandable) intro to writing Assembly with NASM. I spent a solid amount of time with this article this morning – it&amp;rsquo;s great.</description>
    </item>
    
    <item>
      <title>Exploit Exercises Protostar Guide, Part 1</title>
      <link>https://samsymons.com/blog/exploit-exercises-protostar-guide-part-1/</link>
      <pubDate>Sat, 07 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/exploit-exercises-protostar-guide-part-1/</guid>
      <description>In order to better understand the material from the Software Security course on Coursera, I decided to take a stab at the challenges on Exploit Exercises.
So far it has been an amazing way to really cement the concepts from the course, so I decided to document my progress here for anybody else interested in making their way through the levels.
I&amp;rsquo;ve been running through these challenges by setting up the downloadable ISOs from the Exploit Exercises downloads page in VirtualBox, then sshing in so I don&amp;rsquo;t have to deal with VirtualBox as much.</description>
    </item>
    
    <item>
      <title>Seeing Circles, Sines, And Signals</title>
      <link>https://samsymons.com/blog/seeing-circles-sines-and-signals/</link>
      <pubDate>Wed, 04 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/seeing-circles-sines-and-signals/</guid>
      <description>This looks like a fantastic companion guide to help out with learning how DSP works. Check out those animations!</description>
    </item>
    
    <item>
      <title>Dan Boneh&#39;s Crypto Course</title>
      <link>https://samsymons.com/blog/dan-boneh-crypto/</link>
      <pubDate>Sun, 01 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/dan-boneh-crypto/</guid>
      <description>Inspired by Ole Begemann&amp;rsquo;s review of the Programming Languages course, I wanted to write about my experience with Dan Boneh&amp;rsquo;s Cryptography course on Coursera.
Overview The course assumes you have no cryptographic background; at the beginning it covers the history of cryptography, basic ciphers like the Caesar and Vigenère cipher, and a review of the probability used to assess crypto algorithms. Even if you&amp;rsquo;ve never even used a crypto library before, you&amp;rsquo;d be just fine here.</description>
    </item>
    
    <item>
      <title>Disabling GCC&#39;s Overflow Protection on OS X</title>
      <link>https://samsymons.com/blog/disable-gcc-overflow-protection/</link>
      <pubDate>Sun, 01 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/disable-gcc-overflow-protection/</guid>
      <description>Earlier, I was playing with some code from Jon Erickson&amp;rsquo;s book which exploited stack overflow bugs, on an older Linux system. When it came time to bring that code over to OS X though, the overflow protection would kill the process before it got a chance to do anything nasty.
Here&amp;rsquo;s the incantation required to disable it:
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -g -o overflow overflow.c  Before:
› ./overflow 1234567890 [BEFORE] second_buffer is at 0x7fff52d22868 and contains &#39;two&#39; [BEFORE] first_buffer is at 0x7fff52d22870 and contains &#39;one&#39; [BEFORE] value is at 0x7fff52d22854 and contains 5 (0x00000005) Copying 10 bytes into second_buffer zsh: abort .</description>
    </item>
    
    <item>
      <title>Introduction to find</title>
      <link>https://samsymons.com/blog/introduction-to-find/</link>
      <pubDate>Tue, 17 Feb 2015 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/introduction-to-find/</guid>
      <description>Of the various Unix utilities I use semi-regularly, find is the one that has me reaching for its documentation the most often. Every time I do, it&amp;rsquo;s a reminder of how powerful it can be, if you can just remember how to use it.
This article goes over how to use find beyond just searching for files by name, mostly just so that I have something to refer back to when I inevitably forget how to use it again.</description>
    </item>
    
    <item>
      <title>Matasano/Square CTF</title>
      <link>https://samsymons.com/blog/matasano-square-ctf/</link>
      <pubDate>Sun, 19 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/matasano-square-ctf/</guid>
      <description>A fantastic new Capture The Flag contest from the security guys at Matasano, in conjunction with Square. This is a great playground for exploit development, and the tutorial is a lot of fun.
You can read the introduction blog post on the Matasano blog for more.</description>
    </item>
    
    <item>
      <title>RedditKit 1.0</title>
      <link>https://samsymons.com/blog/redditkit/</link>
      <pubDate>Mon, 11 Nov 2013 00:00:00 +0000</pubDate>
      
      <guid>https://samsymons.com/blog/redditkit/</guid>
      <description>reddit has always had a massive nerd audience. /r/programming has a subscriber base of nearly half a million, and there are countless other subreddits dedicated to the art of software development.
Despite the interest from developers, there has never been a lot of activity around reddit&amp;rsquo;s API (for those who don&amp;rsquo;t know Python, at least), especially not compared to the likes of Twitter and Facebook.
I&amp;rsquo;m thrilled to be able to finally show off RedditKit, a pair of libraries for communicating with the reddit API, available in Ruby and Objective-C.</description>
    </item>
    
  </channel>
</rss>