<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Works on Jorge Israel Peña</title>
    <link>https://www.jip.dev/work/</link>
    <description>Recent content in Works on Jorge Israel Peña</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 08 Nov 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://www.jip.dev/work/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Rust</title>
      <link>https://www.jip.dev/work/rust/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/rust/</guid>
      <description>Rust is a modern systems programming language that emphasizes memory safety and safe concurrency.
I was an early Rust adopter since a little before 2014, back when Rust was in a constant state of flux, as the language hadn&amp;rsquo;t been finalized for the first stable release.
At a minimum I was very active in adapting Rust ecosystem packages to the latest syntax and semantics incurred by RFCs which I read voraciously.</description>
    </item>
    
    <item>
      <title>Minio</title>
      <link>https://www.jip.dev/work/minio/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/minio/</guid>
      <description>Minio is a Kubernetes Native Object Storage system. One of its features is that it can provide an S3-compatible interface on top of HDFS.
After a company merger, Minio was used to establish an S3-interface bridge so that engineers on integrating teams could access data on legacy HDFS. However, its use was hamstrung by excruciatingly slow directory listings for reasons which eluded everyone for months. For very large directories of +1,500 files, it was prohibitively slow.</description>
    </item>
    
    <item>
      <title>Hoedown</title>
      <link>https://www.jip.dev/work/hoedown/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/hoedown/</guid>
      <description>Hoedown is a C library for processing and rendering Markdown as HTML. It also provides an API for hooking into the Markdown parsing.
Early on Rust lacked a fully-featured Markdown library and I needed one for the static site generator I was writing (diecast), so I wrote idiomatic bindings to hoedown for Rust, and in so doing, I exposed a few previously unknown edge cases in the C library through different combinations of feature flags.</description>
    </item>
    
    <item>
      <title>AWS CDK</title>
      <link>https://www.jip.dev/work/cdk/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/cdk/</guid>
      <description>AWS Cloud Development Kit (CDK) is an Infrastructure-as-Code (IaC) system developed by Amazon Web Services that builds on top of CloudFormation.
See the PRs here.
Docker Ignore Features CDK had a built-in support for processing .dockerignore files for its Docker Image asset handling, but instead of processing it according to .dockerignore&amp;rsquo;s own rules, it processed them using the minimatch library which aims to provide fnmatch(3) pattern matching behavior. This led to certain behaviors commonly found in .</description>
    </item>
    
    <item>
      <title>WP-reCAPTCHA</title>
      <link>https://www.jip.dev/work/wp-recaptcha/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/wp-recaptcha/</guid>
      <description>Back in 2007 I found out about reCAPTCHA, a project started at Carnegie Mellon University in part by the original creator of the CAPTCHA. I&amp;rsquo;d bet by now most people have used and are familiar with reCAPTCHA. CAPTCHAs generally consist of random letters and numbers to test if someone was a human or an automated program (usually with intent to spam). reCAPTCHA&amp;rsquo;s innovation was to use actual words, words that had failed automatic digitizing when scanning mass amounts of books and using Optical Character Recognition software.</description>
    </item>
    
    <item>
      <title>Vim-Pandoc-Syntax</title>
      <link>https://www.jip.dev/work/vim-pandoc-syntax/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/vim-pandoc-syntax/</guid>
      <description>Embedded Codeblock Highlighting, Various Features &amp;amp; Fixes I contributed a variety of features to the vim-pandoc-syntax plugin, a plugin that provides Pandoc-flavored markdown syntax highlighting and concealment to vim. Concealments in vim are a relatively new feature which allow a different in-editor appearance for certain patterns. For example, the underscores that are used to italicize text can be concealed to decrease clutter.
I started out by fixing the italic pattern, which would previously get tripped up by intra-word underscores such as in ALL_BUILD.</description>
    </item>
    
    <item>
      <title>Syncplay</title>
      <link>https://www.jip.dev/work/syncplay/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/syncplay/</guid>
      <description>One of my most used programs is a little program called syncplay which works with different media players&amp;mdash;I use MPC-HC on Windows and mpv on Linux&amp;mdash;and makes it easy to watch movies and shows with others, automatically synchronized, so that regardless of whether someone pauses, seeks, etc., everyone else&amp;rsquo;s position will be synchronized. This allows me to watch movies and shows regularly with distant friends and family.
I contributed features to the synchronization algorithm and made Syncplay packageable on Linux, then created ArchLinux AUR packages for them.</description>
    </item>
    
    <item>
      <title>Rtorrent</title>
      <link>https://www.jip.dev/work/rtorrent/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/rtorrent/</guid>
      <description>Fix Unportable Signal Disposition Establishment on Solaris The rtorrent project makes use of signals for certain kinds of inter-thread communication. Certain users on Solaris reported that rtorrent crashed as soon as signal SIGUSR1 was delivered. Being an avid reader of the POSIX standards I was curious and felt that I might know what was wrong, figuring that correctly identifying and solving the problem would be a huge testament to the POSIX standards considering I had never used Solaris.</description>
    </item>
    
    <item>
      <title>Pulse Visualizer</title>
      <link>https://www.jip.dev/work/pulse-visualizer/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/pulse-visualizer/</guid>
      <description>This was my first Haskell application, aside from exercise solutions to Haskell books. During my final semester of college in 2012, I wanted to do some Independent Study to round out full-time student status. A professor agreed to mentor me in two different independent studies: digital signal processing and Haskell. At first I had intended on treating them separately with the goal of writing a music visualizer for iTunes for the DSP study and perhaps a web application for the Haskell study.</description>
    </item>
    
    <item>
      <title>Node-Xmlrpc</title>
      <link>https://www.jip.dev/work/node-xmlrpc/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/node-xmlrpc/</guid>
      <description>I contributed a series of features to node-xmlrpc because I needed them in one of my projects at the time. node-xmlrpc is a package for node.js which provides an interface for XML-RPC communication.
I added i8 datatype support (8-byte integers, i.e. 64-bit integers) because the application I was interfacing with always used that datatype when responding with integers, regardless of whether or not it was necessary. I added buffer datatype support (Base64 encoded data) just a volunteer contribution, though I had no need for it.</description>
    </item>
    
    <item>
      <title>MyPod</title>
      <link>https://www.jip.dev/work/mypod/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/mypod/</guid>
      <description>MyPod was an iPod music browser and retriever.
This was my first C# application which I wrote back in 2006-2007. I created it in response to an instance in which I wanted to back-up some of the music I had transferred to my iPod. The application understood the file structure of the iPod as it was back then, which consisted of several nested directories each storing about four audio files with seemingly randomly generated names.</description>
    </item>
    
    <item>
      <title>Musicaster</title>
      <link>https://www.jip.dev/work/musicaster/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/musicaster/</guid>
      <description>Musicaster: Homemade last.fm This was an application I wrote back in 2006-2007 which was a combination of client-side C# and server-side PHP. The application was basically similar to last.fm, in which a client-side application scans popular media players for the currently playing song and then transmits the information to a server-side endpoint for aggregation. The client-side C# application was written with modularity in mind, so that one would simply implement an interface, generate a DLL, and place it in the same directory as the executable to add support for more players.</description>
    </item>
    
    <item>
      <title>MPC-HC</title>
      <link>https://www.jip.dev/work/mpc-hc/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/mpc-hc/</guid>
      <description>Fix Web UI Seeking I was interested in modifying MPC-HC to allow people to watch things in sync with each other, i.e. pause when someone pauses, seek when someone seeks, etc. I pulled the source from github and began looking for a good way to implement this functionality. I found the source for the web UI component of MPC-HC, which essentially provides an interface for which a web UI can be developed to control MPC-HC.</description>
    </item>
    
    <item>
      <title>Libtorrent</title>
      <link>https://www.jip.dev/work/libtorrent/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/libtorrent/</guid>
      <description>Fix I/O Multiplexing Error on Solaris libtorrent is the Bit Torrent library used in rtorrent, developed by the same person. After fixing the signal disposition establishment bug in hopes of fixing rtorrent issue #51 which rendered rtorrent unusable on Solaris derivatives, three months later someone confirmed that it had fixed one of their problems. However, rtorrent was now crashing with the message &amp;ldquo;Listener port received error event.&amp;rdquo; I tracked this message down to libtorrent.</description>
    </item>
    
    <item>
      <title>Levee</title>
      <link>https://www.jip.dev/work/levee/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/levee/</guid>
      <description>Levee is a web interface for rtorrent. The back-end is written in Clojure using a combination of http-kit and compojure, while the front-end is written in ClojureScript using Om, which itself is built on top of Facebook&amp;rsquo;s React.
It consists of a clean, responsive UI with support for drag-and-drop file uploads, WebSockets for up-to-date information, and a simple locking system to facilitate a multi-user environment.
Torrent metadata pertaining to Levee is stored in the torrent itself, thereby avoiding the need to maintain consistency between rtorrent and a separate database.</description>
    </item>
    
    <item>
      <title>Learning From Data</title>
      <link>https://www.jip.dev/work/learning-from-data/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/learning-from-data/</guid>
      <description>The code for the homework assignments for the Cal Tech CS 1156x class offered on edX.org. The class was about Machine Learning, focusing on the theory. My class notes are also available. I decided to do the assignments in Python to gain some experience with NumPy, which is quickly becoming the industry choice for scientific computing. I had experience with R, but I preferred to use a &amp;ldquo;real&amp;rdquo; language.
I created a simple testing mechanism to automate testing of the experiments that were developed, allowing me to do something like:</description>
    </item>
    
    <item>
      <title>Instagib Project</title>
      <link>https://www.jip.dev/work/instagib-project/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/instagib-project/</guid>
      <description>For the longest time, my favorite competitive game was a particular kind of instagib mod for the Jedi Outcast (JO) and Jedi Academy (JA, the sequel) games called disruption instagib. I mainly played this on Jedi Outcast which was the older one of the two, because the server I preferred to play on in Jedi Academy shut down but one still existed in Jedi Outcast (somehow). Given that this was a pretty niche mod in a pretty old game (considering Jedi Academy had already been released), I wished to somehow make it available to more people.</description>
    </item>
    
    <item>
      <title>Haxr</title>
      <link>https://www.jip.dev/work/haxr/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/haxr/</guid>
      <description>HaXR is the main (only?) available package for performing XML-RPC in Haskell. It supports type conversions via typeclasses as with other serialization packages such as Aeson, which can also be automated via Template Haskell. I contributed i8-type support to the package.</description>
    </item>
    
    <item>
      <title>Hakyll Site</title>
      <link>https://www.jip.dev/work/hakyll-site/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/hakyll-site/</guid>
      <description>I wouldn&amp;rsquo;t include my website as a project if it weren&amp;rsquo;t for the fact that I have heavily modified it. I&amp;rsquo;ve written about many of these modifications and customizations. Some of the features I&amp;rsquo;ve implemented as Pandoc abstract syntax tree transformers and others as Hakyll custom compilers.
Pandoc AST transformers I&amp;rsquo;ve written include blockquote beautification, automatic abbreviation substitution, Pygments codeblock highlighting, and table of contents generation (with pure CSS nested section numbering).</description>
    </item>
    
    <item>
      <title>Hakyll</title>
      <link>https://www.jip.dev/work/hakyll/</link>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jip.dev/work/hakyll/</guid>
      <description>Sub-Second Granularity Hakyll has a watch mode where it watches files and re-compiles them when they&amp;rsquo;re modified. It does this by checking the file&amp;rsquo;s modified time and storing it for comparison on the next iteration. When the new major-release version 7.8 of GHC was released, a bug was observed in Hakyll where whenever any file was modified, the whole site was recompiled instead of just the file that was modified.</description>
    </item>
    
  </channel>
</rss>