<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Tristan Rice</title><link>https://fn.lc/post/</link><description>Recent content in Posts on Tristan Rice</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 21 Jul 2026 00:00:00 -0700</lastBuildDate><atom:link href="https://fn.lc/post/index.xml" rel="self" type="application/rss+xml"/><item><title>rdma4py: Do We Need Transfer Engines for PyTorch and RDMA?</title><link>https://fn.lc/post/rdma4py/</link><pubDate>Tue, 21 Jul 2026 00:00:00 -0700</pubDate><guid>https://fn.lc/post/rdma4py/</guid><description>&lt;p>&lt;em>Originally published on the &lt;a href="https://docs.pytorch.org/devlogs/distributed/2026-07-21-rdma4py/">PyTorch Developer Log&lt;/a>.&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>TL;DR&lt;/strong> - Python can drive GPUDirect RDMA at line rate without a large
transfer-engine abstraction. &lt;code>rdma4py&lt;/code> provides lightweight, backend-specific
bindings for ibverbs, AWS EFA, and NVMe-oF, reaching about 400 gbps in our
benchmarks while preserving direct access to the underlying APIs.&lt;/p>&lt;/blockquote>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Recently, quite a few different &amp;ldquo;transfer engines&amp;rdquo; have been developed for fast
weight synchronization between machines using RDMA-capable transports and
libraries such as NVLink, ibverbs, EFA, NVMe-oF, and SPDK. These include projects
such as &lt;a href="https://github.com/kvcache-ai/Mooncake">Mooncake&lt;/a>,
&lt;a href="https://github.com/ai-dynamo/nixl">NIXL&lt;/a>, and
&lt;a href="https://github.com/meta-pytorch/torchcomms/tree/main/comms/uniflow">Uniflow&lt;/a>.
As with any large project and abstraction, these projects make trade-offs around
specific use cases that might not be optimal for yours.&lt;/p></description></item><item><title>Python First Comms for Researchers</title><link>https://fn.lc/post/python-first-comms/</link><pubDate>Thu, 14 May 2026 00:00:00 -0700</pubDate><guid>https://fn.lc/post/python-first-comms/</guid><description>&lt;p>&lt;em>Originally published on the &lt;a href="https://docs.pytorch.org/devlogs/distributed/2026-05-14-python-first-comms/">PyTorch Developer Log&lt;/a>.&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>TL;DR&lt;/strong> – Modifying the C++ comms layer is a big barrier when researchers want to prototype new collective features. We&amp;rsquo;ve added Python bindings to torchcomms (&lt;a href="https://github.com/meta-pytorch/torchcomms/pull/2080">#2080&lt;/a>) and built two pure-Python backend prototypes — one wrapping NVIDIA&amp;rsquo;s new &lt;code>nccl4py&lt;/code> bindings (&lt;a href="https://github.com/meta-pytorch/torchcomms/pull/2515">#2515&lt;/a>) and one built on &lt;code>SymmetricMemory&lt;/code> + Triton (&lt;a href="https://github.com/meta-pytorch/torchcomms/pull/2521">#2521&lt;/a>) — both passing the core torchcomms integration test suite. Since they plug into &lt;code>torch.distributed&lt;/code>, researchers can fork, tweak, and mix them with existing projects like TorchTitan without touching C++.&lt;/p></description></item><item><title>torchcomms: a modern PyTorch communications API</title><link>https://fn.lc/post/torchcomms/</link><pubDate>Wed, 22 Oct 2025 00:00:00 -0700</pubDate><guid>https://fn.lc/post/torchcomms/</guid><description>&lt;p>&lt;em>Originally published on the &lt;a href="https://pytorch.org/blog/torchcomms/">PyTorch Blog&lt;/a>.&lt;/em>&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Torchcomms is a new experimental, lightweight communication API intended for use with PyTorch Distributed (PTD). In addition to the core API, we are open-sourcing NCCLX, a new backend we developed to scale to over 100,000 GPUs.&lt;/p>
&lt;p>With our first release of torchcomms, we’re delivering the foundational APIs and backends required for large-scale model training in PyTorch. This initial release focuses on core communication primitives that enable reliable and performant distributed training at scale. Over the next year, we’ll continue to mature the offering—introducing features that make it easier to prototype new collectives, scale seamlessly with built-in fault tolerance, and optimize device-centric communication patterns. Our roadmap is focused on empowering researchers and developers to move faster, test new ideas at scale, and build the next generation of large-scale AI systems.&lt;/p></description></item><item><title>Fault Tolerant Llama: training with 2000 synthetic failures every ~15 seconds and no checkpoints on Crusoe L40S</title><link>https://fn.lc/post/fault-tolerant-llama/</link><pubDate>Fri, 20 Jun 2025 00:00:00 -0700</pubDate><guid>https://fn.lc/post/fault-tolerant-llama/</guid><description>&lt;p>&lt;em>Originally published on the &lt;a href="https://pytorch.org/blog/fault-tolerant-llama-training-with-2000-synthetic-failures-every-15-seconds-and-no-checkpoints-on-crusoe-l40s/">PyTorch Blog&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Collaborators: Less Wright, Howard Huang, Chien-Chin Huang, Crusoe: Martin Cala, Ethan Petersen&lt;/p>
&lt;p>tl;dr: we used &lt;a href="https://github.com/pytorch/torchft">torchft&lt;/a> and &lt;a href="https://github.com/pytorch/torchtitan">torchtitan&lt;/a> to train a model in a real-world environment with extreme synthetic failure rates to prove reliability and correctness of fault tolerant training&lt;/p>
&lt;p>&lt;img src="../fault-tolerant-llama/unnamed.png" alt="">&lt;/p>
&lt;p>&lt;em>Training loss across 1200 failures with no checkpoints.&lt;/em>&lt;/p>
&lt;p>&lt;em>NOTE: Each small spike is a non-participating worker recovering which affects the metrics but not the model&lt;/em>&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>We want to demonstrate torchft in worst case scenarios by running a training job with the most extreme failure rates possible.&lt;/p></description></item><item><title>torchdrive: Open Source + Nuscenes Support</title><link>https://fn.lc/post/torchdrive/</link><pubDate>Fri, 06 Oct 2023 21:01:23 -0700</pubDate><guid>https://fn.lc/post/torchdrive/</guid><description>&lt;p>Over the past 9 months, I&amp;rsquo;ve been rewriting my models from the ground up and
open sourcing them on GitHub. The code is now &lt;a href="https://github.com/d4l3k/torchdrive/tree/main">fully public and available for
anyone to use and modify&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/d4l3k/torchdrive">&lt;img src="../torchdrive/torchdrive.svg" alt="torchdrive">&lt;/a>&lt;/p>
&lt;p>The majority of the code is a
&lt;a href="https://github.com/d4l3k/torchdrive/blob/main/LICENSE">BSD-3-Clause license&lt;/a>
which matches other open source projects such as PyTorch. There are a few pieces
with modules borrowed from other projects.&lt;/p>
&lt;p>&lt;em>This is a follow up to
&lt;a href="https://fn.lc/post/3d-detr/">3D Dynamic Objects&lt;/a>
and is part of a series where I try to train models to perform common self
driving tasks from scratch.&lt;/em>&lt;/p></description></item><item><title>3D Dynamic Objects - DIY Self Driving Part 5</title><link>https://fn.lc/post/3d-detr/</link><pubDate>Sat, 21 Jan 2023 13:51:43 -0800</pubDate><guid>https://fn.lc/post/3d-detr/</guid><description>&lt;p>&lt;em>This is a follow up to
&lt;a href="https://fn.lc/post/semantic/">3D Semantic Segmentation&lt;/a>
and is part of a series where I try to train models to perform common self
driving tasks from scratch.&lt;/em>&lt;/p>
&lt;p>I decided to switch areas of focus for this new model. Previously I had been
working entirely with dense models which output dense representations about the
world such as the voxel occupancy grids and the BEV semantic maps for lane lines
and drivable space.&lt;/p></description></item><item><title>3D Semantic Segmentation - DIY Self Driving Part 4</title><link>https://fn.lc/post/semantic/</link><pubDate>Tue, 08 Nov 2022 20:28:04 -0800</pubDate><guid>https://fn.lc/post/semantic/</guid><description>&lt;p>&lt;em>This is a follow up to
&lt;a href="https://fn.lc/post/voxel-sfm/">Voxel from Multicam&lt;/a>
and is part of a series where I try to train models to perform common self
driving tasks from scratch.&lt;/em>&lt;/p>
&lt;p>I&amp;rsquo;ve previously put together occupancy models for self driving but that&amp;rsquo;s only
one specific perception task.&lt;/p>
&lt;p>Another common driving task is semantic segmentation. Semantic segmentation
takes in the image and for every pixel predicts a specific class. This can be
used to tell things like walls apart from cars or classify different types of
lane lines and curbs on a road.&lt;/p></description></item><item><title>Voxel from Multicam - DIY Self Driving Part 3</title><link>https://fn.lc/post/voxel-sfm/</link><pubDate>Sun, 12 Jun 2022 14:37:27 -0700</pubDate><guid>https://fn.lc/post/voxel-sfm/</guid><description>&lt;p>&lt;em>This is a follow up to
&lt;a href="https://fn.lc/post/monocular-improvements/">Monocular Depth Improvements&lt;/a>
and is part of a series where I try to train models to perform common self
driving tasks from scratch.&lt;/em>&lt;/p>
&lt;h3 id="background">Background&lt;/h3>
&lt;p>I spent a couple of months optimizing single camera (monocular) depth models before
realizing that maybe there&amp;rsquo;s a better way. One of the biggest improvements I
made to the monocular models was adding a 3D geometric constraint to enforce
that the model didn&amp;rsquo;t predict depths below the ground.&lt;/p></description></item><item><title>Monocular Depth Improvements - DIY Self Driving Part 2</title><link>https://fn.lc/post/monocular-improvements/</link><pubDate>Sun, 12 Jun 2022 14:20:04 -0700</pubDate><guid>https://fn.lc/post/monocular-improvements/</guid><description>&lt;p>&lt;em>This is a follow up to &lt;a href="https://fn.lc/post/diy-self-driving/">DIY Self Driving&lt;/a>.&lt;/em>&lt;/p>
&lt;p>In the past few months I&amp;rsquo;ve been iterating on my previous work on creating self
driving models. The main goals were initially:&lt;/p>
&lt;ol>
&lt;li>train depth models for each camera&lt;/li>
&lt;li>generate joint point clouds from the multiple cameras&lt;/li>
&lt;li>use the fused outputs to create a high quality reconstruction that I can use
to label things like lane lines&lt;/li>
&lt;/ol>
&lt;p>This post lists all the various problems I ran into and some of the mitigations
I applied for those issues.&lt;/p></description></item><item><title>DIY Self Driving - A Holiday Side Project</title><link>https://fn.lc/post/diy-self-driving/</link><pubDate>Mon, 10 Jan 2022 20:23:09 -0800</pubDate><guid>https://fn.lc/post/diy-self-driving/</guid><description>&lt;p>&lt;em>This work was done in collaboration with green, Sherman and Sid.&lt;/em>&lt;/p>
&lt;p>During the holidays I decided to take some time and try to make my own self driving machine learning models as part of a pipe dream to have an open source self driving car. I hacked this together over the course of about 2 weeks in between holiday activities.&lt;/p>
&lt;blockquote>
&lt;p>Disclaimer 1: I’m a software engineer on PyTorch but this work was done on my own time and not part of my normal duties.&lt;/p></description></item><item><title>Hacking my Tesla Model 3 - Software Modes</title><link>https://fn.lc/post/tesla-model-3-modes/</link><pubDate>Tue, 26 May 2020 20:34:09 -0700</pubDate><guid>https://fn.lc/post/tesla-model-3-modes/</guid><description>&lt;p>&lt;em>This is a follow up to &lt;a href="../post/tesla-model-3-services/">Hacking my Tesla Model 3 - Internal API&lt;/a>.&lt;/em>&lt;/p>
&lt;p>As part of reverse engineering the Tesla Model 3 internals, I&amp;rsquo;ve been running a
subset of the CID car services to see how they work.&lt;/p>
&lt;p>The car computers are using Intel Atom based processors so it&amp;rsquo;s easy to setup a
chroot to launch the services.&lt;/p>
&lt;p>I&amp;rsquo;ve written two helper scripts to set up the car environment:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="../tesla-model-3-modes/chroot.sh">chroot.sh&lt;/a> - runs a command in the Tesla
chroot environment.&lt;/li>
&lt;li>&lt;a href="../tesla-model-3-modes/start_car.sh">start_car.sh&lt;/a> - runs the main vehicle
services: escalator, ecall_client, sim_service, carserver,
vehicle.
Other services can be launched via &lt;code>./chroot.sh /usr/tesla/UI/RunQtCar &amp;lt;service&amp;gt;&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>These scripts assume a CID image is extracted at &lt;code>squashfs-root/&lt;/code>.&lt;/p></description></item><item><title>Hacking my Tesla Model 3 - Internal API</title><link>https://fn.lc/post/tesla-model-3-services/</link><pubDate>Tue, 26 May 2020 07:34:34 -0700</pubDate><guid>https://fn.lc/post/tesla-model-3-services/</guid><description>&lt;p>&lt;em>This is a follow up to &lt;a href="../post/tesla-model-3/">Hacking my Tesla Model 3 - Security Overview&lt;/a>.&lt;/em>&lt;/p>
&lt;p>This is a technical description of all the internal services I&amp;rsquo;ve found and
notes about how they work.&lt;/p>
&lt;p>All of these services described are normally unaccessible due to seceth and
firewall rules.&lt;/p>
&lt;h2 id="hosts">Hosts&lt;/h2>
&lt;pre tabindex="0">&lt;code>192.168.90.100 cid ice
192.168.90.100 ic
192.168.90.102 gw
192.168.90.103 ap ape
192.168.90.104 lb
192.168.90.105 ap-b ape-b
192.168.90.30 tuner
192.168.90.60 modem
&lt;/code>&lt;/pre>&lt;p>Tuner isn&amp;rsquo;t present on newer Model 3s as the AM/FM radio has been removed. I&amp;rsquo;m
not sure what lb is.&lt;/p></description></item><item><title>Hacking my Tesla Model 3 - Security Overview</title><link>https://fn.lc/post/tesla-model-3/</link><pubDate>Tue, 12 May 2020 23:12:03 -0700</pubDate><guid>https://fn.lc/post/tesla-model-3/</guid><description>&lt;p>&lt;em>See the follow up at &lt;a href="../post/tesla-model-3-services/">Hacking my Tesla Model 3 - Internal API&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I recently got a Tesla Model 3 and since I&amp;rsquo;m a huge nerd I&amp;rsquo;ve been spending a
lot of time poking at the systems and trying to reverse engineer/figure out how
to root my car.&lt;/p>
&lt;p>I work on Machine Learning infrastructure so I&amp;rsquo;d love to be able to take a deep
look at how autopilot/FSD works under the hood and what it can actually do
beyond what limited information the UI shows. I know some people have managed to
get a copy of this.&lt;/p></description></item><item><title>Cracking Dropbike: Data Breach and Free Bike Rides</title><link>https://fn.lc/post/dropbike/</link><pubDate>Wed, 19 Sep 2018 16:24:45 -0700</pubDate><guid>https://fn.lc/post/dropbike/</guid><description>&lt;p>&lt;em>Edit 2018-09-20T15:42-07:00: &lt;a href="https://www.dropmobility.com/press/2018/9/20/customer-service-data-vulnerability-intercom-fixed">Dropbike&amp;rsquo;s response to these issues&lt;/a>&lt;/em>&lt;/p>
&lt;p>&lt;em>Edit 2018-09-19T19:38-07:00: Updated support comments to more accurately
reflect their response.&lt;/em>&lt;/p>
&lt;p>&lt;em>Note: These issues were responsible disclosed and have since been fixed. This
is my understanding of the issues to the best of my knowledge.&lt;/em>&lt;/p>
&lt;p>To give you a little bit of background, &lt;a href="https://www.dropbike.co/">Dropbike&lt;/a> is
a new bike sharing service that just launched at the University of British
Columbia as one of their first locations. They&amp;rsquo;re only about a year old and
based out of Toronto. The service is pretty simple, they have a bunch of bikes
with a cell connection and bluetooth low energy locks spread out all over
campus. You can use their app to find nearby bikes and unlock them. Overall, it
seems like a neat convenient service and I was super excited to have them on
campus.&lt;/p></description></item><item><title>Running Untrusted Code in a Secure Docker Container from Scratch</title><link>https://fn.lc/post/docker-scratch/</link><pubDate>Thu, 10 May 2018 16:18:25 -0700</pubDate><guid>https://fn.lc/post/docker-scratch/</guid><description>&lt;p>As part of &lt;a href="https://luk.ai/">Luk.ai&lt;/a> we need to be able to run Tensorflow within
a secure environment since a running Tensorflow model can do pretty much
anything it wants to the host system.&lt;/p>
&lt;p>For ease of deployment, we&amp;rsquo;d also like to be able to use Docker since it
provides nice sandboxing support and ability to limit resources used by the
container. We&amp;rsquo;d also like for the container to not be able to do anything other
than run models. Thus, we needed a completely stripped down container with no
permissions set. It&amp;rsquo;s also pretty nice if it&amp;rsquo;s as small as possible.&lt;/p></description></item><item><title>nwHacks Machine Learning</title><link>https://fn.lc/post/nwhacks-ml/</link><pubDate>Sat, 08 Jul 2017 00:34:19 -0700</pubDate><guid>https://fn.lc/post/nwhacks-ml/</guid><description>&lt;p>I&amp;rsquo;ve been doing a bunch of work during my internship with Machine Learning
models so I figured I take a crack at applying them to some of my personal
projects. Just for fun I wanted to see what would happen if I tried to train a
model on the registration, check-in and submission data for nwHacks.&lt;/p>
&lt;p>I decided to use &lt;a href="https://github.com/xlvector/hector">Hector&lt;/a>, a suite of
algorithms completely written in Go since that&amp;rsquo;s what most of the nwHacks
tooling is written in. Took a few hours to write a pipeline that would read in
the nwHacks registration data from Firebase and output it into a format that
Hector supports.&lt;/p></description></item><item><title>UBC Food Safety</title><link>https://fn.lc/post/ubc-food/</link><pubDate>Fri, 21 Apr 2017 20:20:58 -0700</pubDate><guid>https://fn.lc/post/ubc-food/</guid><description>&lt;p>A couple of my friends got food poisoning eating at places in the village in the
past month or so. I decided to do some digging and find out which places have
the best food safety records. To my horror, pretty much every place has food
safety violations on campus.&lt;/p></description></item><item><title>nwHacks 2017 Tech Stack</title><link>https://fn.lc/post/nwhacks/</link><pubDate>Fri, 17 Mar 2017 19:19:15 -0700</pubDate><guid>https://fn.lc/post/nwhacks/</guid><description>&lt;p>With &lt;a href="https://www.nwhacks.io">nwHacks 2017&lt;/a> coming up this weekend I figured it
would be a good time to do a writeup of the tech stack and all the different
components that are used to make the hackathon a success. This covers all of the
different components of the stack and what technologies were used.&lt;/p></description></item><item><title>Shadow Hunters: Roll Probabilities</title><link>https://fn.lc/post/shadow-hunters/</link><pubDate>Tue, 08 Nov 2016 02:45:00 +0000</pubDate><guid>https://fn.lc/post/shadow-hunters/</guid><description>&lt;p>This contains a list of all the probabilities you might be interested in when
playing the &lt;a href="https://en.wikipedia.org/wiki/Shadow_Hunters">Shadow Hunters board
game&lt;/a>.&lt;/p></description></item><item><title>Hugo: Multiple List Views and Grids</title><link>https://fn.lc/post/hugo-multiple-lists/</link><pubDate>Thu, 03 Nov 2016 20:11:16 +0000</pubDate><guid>https://fn.lc/post/hugo-multiple-lists/</guid><description>&lt;p>&lt;amp-img src="../images/career-fair-59_small.jpg" width="1024" height="681" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>Yesterday, I decided to take a shot at rewriting the &lt;a href="https://ubctcf.com/">University of British
Columbia&amp;rsquo;s Technical Career Fair&lt;/a> (UBC TCF) website in Hugo. The TCF
is one of the many events
that the &lt;a href="https://ubccsss.org">UBC Computer Science Student Society&lt;/a> puts on every
year and there&amp;rsquo;s been a day-of website for a number of years to allow companies to
find their booths and students to find out about the companies.&lt;/p>
&lt;p>The old site was written in a combination of Django and Python and had a small
admin interface. Nothing about it really required to to be dynamic, other than
the interface for adding new companies. I figured it&amp;rsquo;d be way simpler to just
have every company be represented as a &amp;ldquo;post&amp;rdquo; in Hugo.&lt;/p></description></item><item><title>Test Of Features</title><link>https://fn.lc/post/test/</link><pubDate>Wed, 02 Nov 2016 02:13:04 +0000</pubDate><guid>https://fn.lc/post/test/</guid><description>&lt;a href="../apocalyptic-sf-small.jpg">
&lt;amp-img src="../apocalyptic-sf-small.jpg"
 height="1440"
 width="1920"
 layout="responsive">
&lt;/amp-img>
&lt;/a>



&lt;p>I&amp;rsquo;ve been doing a bunch of work on this site. This is a test page for all the
different visual elements.&lt;/p>
&lt;h3 id="block-quote-example">Block Quote Example&lt;/h3>
&lt;blockquote>
&lt;p>Hey there! This is some example text that I needed to add to correctly get
this line to wrap. How do you guys feel about the color blue?&lt;/p>&lt;/blockquote>
&lt;h3 id="syntax-highlighting-example">Syntax Highlighting Example&lt;/h3>
&lt;p>Here&amp;rsquo;s an example &amp;ldquo;Hello World!&amp;rdquo; Go program. I tend to prefer &lt;code>log&lt;/code> over &lt;code>fmt&lt;/code>
when it comes to printing things to the screen.&lt;/p></description></item><item><title>Calendar</title><link>https://fn.lc/calendar/</link><pubDate>Tue, 01 Nov 2016 21:54:17 +0000</pubDate><guid>https://fn.lc/calendar/</guid><description>&lt;p>This is my weekly calendar. I&amp;rsquo;m typically available any time Monday to Friday
9:00 to 17:00 unless listed as busy below.&lt;/p></description></item><item><title>New Site</title><link>https://fn.lc/post/new-site/</link><pubDate>Fri, 14 Oct 2016 19:48:54 +0000</pubDate><guid>https://fn.lc/post/new-site/</guid><description>&lt;p>This is the new site. Pretty bare bones right now.&lt;/p></description></item><item><title>Koans of Jins</title><link>https://fn.lc/post/koans-of-jins/</link><pubDate>Wed, 24 Aug 2016 20:49:48 +0000</pubDate><guid>https://fn.lc/post/koans-of-jins/</guid><description>&lt;ul>&lt;li>“Fixing it is not the battle; finding it is.”&lt;/li>
&lt;li>“It only takes one line to completely break things.”&lt;/li>
&lt;li>“Make love not muffins.”&lt;/li>
&lt;li>“No pineapples.”&lt;/li>
&lt;li>“Taxis are mean.”&lt;/li>
&lt;li>“Better to binge on oranges than […] crack.”&lt;/li>
&lt;li> “I only speak the truth.” &lt;/li>
&lt;li> “Crêpes can’t save you from eternal damnation.” &lt;/li>
&lt;li> “The drain smells like a drain.” &lt;/li>
&lt;/ul></description></item><item><title>Microwave</title><link>https://fn.lc/post/130732661715/</link><pubDate>Thu, 08 Oct 2015 05:24:18 +0000</pubDate><guid>https://fn.lc/post/130732661715/</guid><description>&lt;p>&lt;amp-img src="../images/tumblr_nvvz0iFntB1r7h2fto1_1280.jpg" width="1280" height="960" layout="responsive">&lt;/amp-img>&lt;/p></description></item><item><title>Lightning Storm</title><link>https://fn.lc/post/theres-a-pretty-awesome-lightning-storm-going-on/</link><pubDate>Thu, 13 Aug 2015 05:25:00 +0000</pubDate><guid>https://fn.lc/post/theres-a-pretty-awesome-lightning-storm-going-on/</guid><description>&lt;p>There&amp;rsquo;s a pretty awesome lightning storm going on outside.&lt;/p>
&lt;p>&lt;amp-img src="../images/tumblr_nt09polb8N1r7h2fto2_1280.jpg" width="1280" height="960" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>&lt;amp-img src="../images/tumblr_nt09polb8N1r7h2fto1_1280.jpg" width="1280" height="960" layout="responsive">&lt;/amp-img>&lt;/p></description></item><item><title>New Site</title><link>https://fn.lc/post/new-site/</link><pubDate>Thu, 13 Aug 2015 05:23:37 +0000</pubDate><guid>https://fn.lc/post/new-site/</guid><description>&lt;p>I’ve done a complete rewrite of the site using Polymer. It was pretty
quick to write and has some neat features such as this embedded blog
backed by tumblr. You can see the old blog at &lt;a href="http://blog.fn.lc">http://blog.fn.lc&lt;/a> .&lt;/p>
&lt;p>It also does live fetches of my most popular GitHub projects.&lt;/p>
&lt;p>Both of these are implemented by directly accessing the respective APIs
using iron-ajax.&lt;/p></description></item><item><title>Fic Recommend</title><link>https://fn.lc/post/fic-recommend/</link><pubDate>Tue, 11 Aug 2015 21:20:41 +0000</pubDate><guid>https://fn.lc/post/fic-recommend/</guid><description>&lt;p>&lt;a href="https://fn.lc/ficrecommend/">https://fn.lc/ficrecommend/&lt;/a>&lt;/p>
&lt;p>I launched this today as it’s become fairly polished under my own
personal use.&lt;/p>
&lt;p>The ranking algorithm is pretty simple but actually works fairly well.&lt;/p>
&lt;p>Here’s how it works:&lt;/p>
&lt;ol>
&lt;li>Gets a story in the form of a URL&lt;/li>
&lt;li>Look up all the users who have liked/favorited that story.&lt;/li>
&lt;li>Count all the favorited stories of those users.&lt;/li>
&lt;li>Display the top 50 stories by number of favorites.&lt;/li>
&lt;/ol>
&lt;p>Source Code: &lt;a href="https://github.com/d4l3k/ficrecommend">https://github.com/d4l3k/ficrecommend&lt;/a>&lt;/p></description></item><item><title>messagediff</title><link>https://fn.lc/post/messagediff/</link><pubDate>Tue, 11 Aug 2015 21:15:38 +0000</pubDate><guid>https://fn.lc/post/messagediff/</guid><description>&lt;p>A library for doing diffs of arbitrary Golang structs.&lt;/p>
&lt;p>&lt;a href="https://github.com/d4l3k/messagediff">https://github.com/d4l3k/messagediff&lt;/a>\&lt;/p>
&lt;p>I put this together because I wanted an easy way to display diffs during
testing. It’s fairly similar to an internal library I used during my
internship this summer.&lt;/p>
&lt;p>It’s pretty basic but I’m planning on adding LCS support if I ever get
around to it. It does have support for diffing non-exported fields using
go-spew’s unsafe reflect modifications.&lt;/p></description></item><item><title>i18n-js with sinatra-asset-pipeline</title><link>https://fn.lc/post/i18n-js-with-sinatra-asset-pipeline/</link><pubDate>Thu, 18 Dec 2014 02:16:00 +0000</pubDate><guid>https://fn.lc/post/i18n-js-with-sinatra-asset-pipeline/</guid><description>&lt;p>I just implemented &lt;a href="https://github.com/fnando/i18n-js">i18n-js&lt;/a> support
in WebSync. This came around after realizing my localization support for
the JavaScript front end was lacking.&lt;a href="https://github.com/fnando/i18n-js" title="i18n-js">&lt;br>
&lt;/a>&lt;/p>
&lt;p>The i18n-js library is super useful and integrates directly with
Sprockets and I18n making it as easy as doing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//= require i18n
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//= require i18n/translations
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Some translation
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">I18n&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">t&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;translate-me&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>However it’s designed for use with Rails and thus doesn’t play nicely
with Sinatra and sinatra-asset-pipeline. While it loaded just fine,
Sprockets couldn’t find the i18n javascript files.&lt;/p></description></item><item><title>Crazy Postgres Queries</title><link>https://fn.lc/post/crazy-postgres-queries/</link><pubDate>Tue, 16 Dec 2014 09:14:00 +0000</pubDate><guid>https://fn.lc/post/crazy-postgres-queries/</guid><description>&lt;p>I’ve been working on implementing search for documents. I’m not sure if
I’m every going to implement search for body content, but I thought I
should probably implement it for titles &amp;amp; users.&lt;/p>
&lt;p>It turns out that PostgreSQL has pretty nice full text search support
with lexemes. I’ve been following this article pretty closely:&lt;/p>
&lt;p>&lt;a href="http://blog.lostpropertyhq.com/postgres-full-text-search-is-good-enough/">http://blog.lostpropertyhq.com/postgres-full-text-search-is-good-enough/&lt;/a>&lt;/p>
&lt;p>The only issue I’ve encountered is that it doesn’t do direct text
matching. For example if you have a title ‘Bananas are tasty!’ and you
search for &amp;lsquo;ban’ it won’t match. To work around this I combined full
text search with an non case sensitive pattern match. My query is
getting kind of long, but it seems to work well.&lt;/p></description></item><item><title>How about charts in WebSyn.ca?</title><link>https://fn.lc/post/how-about-charts-in-websynca/</link><pubDate>Sun, 16 Nov 2014 03:36:00 +0000</pubDate><guid>https://fn.lc/post/how-about-charts-in-websynca/</guid><description>&lt;p>I did a bunch of work on &lt;a href="https://websyn.ca">WebSyn.ca&lt;/a> this weekend.
Here’s a list of some things I did:&lt;/p>
&lt;ul>
&lt;li>Make charts persistent&lt;/li>
&lt;li>Make a nicer interface for inserting them&lt;/li>
&lt;li>Adding a bunch of options such as type, titles (main, x, y), legend,
smooth lines&lt;/li>
&lt;li>Chart Types: Line, Bar, Radar, Polar Area, Pie, Doughnut&lt;/li>
&lt;li>Updated require.js&lt;/li>
&lt;li>Make tables.js and charts.js use the require.js copy of WebSync.&lt;/li>
&lt;li>Shift a huge number of dependencies to load from bower (thus making
updating easier).&lt;/li>
&lt;/ul>
&lt;p>I’m sure you’re more interested in the picture than the comments.&lt;/p></description></item><item><title>WebSyn.ca updates! Finally!</title><link>https://fn.lc/post/websynca-updates-finally/</link><pubDate>Sat, 15 Nov 2014 08:56:56 +0000</pubDate><guid>https://fn.lc/post/websynca-updates-finally/</guid><description>&lt;p>I finally got some free time since my midterms are over, and I decided
to work on WebSyn.ca. I fixed a couple of bugs such as fixing file
export.&lt;/p>
&lt;p>I also decided to update the overall visual style and update the format
of the file list page. The previous style was pretty terrible and just
an HTML table. The newer version is pretty much the same thing but looks
a bit more like an actual file manager.&lt;/p></description></item><item><title>WebSyn.ca migration</title><link>https://fn.lc/post/websynca-migration/</link><pubDate>Mon, 14 Jul 2014 02:10:58 +0000</pubDate><guid>https://fn.lc/post/websynca-migration/</guid><description>&lt;p>WebSyn.ca was down for ten minutes while migrating to a new server.
Everything should be working now.&lt;/p></description></item><item><title>Sketchy URL Shortener Traffic Stats</title><link>https://fn.lc/post/heres-some-stats-from-the-sketchy-url-shortener/</link><pubDate>Thu, 26 Jun 2014 05:09:07 +0000</pubDate><guid>https://fn.lc/post/heres-some-stats-from-the-sketchy-url-shortener/</guid><description>&lt;p>&lt;amp-img src="../images/tumblr_n7rfn7vVk81r7h2fto1_1280.jpg" width="720" height="1280" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>Here&amp;rsquo;s some stats from the sketchy URL shortener. I&amp;rsquo;m really surprised it got so much traffic.&lt;/p></description></item><item><title>Hey look! I made a landing page!</title><link>https://fn.lc/post/hey-look-i-made-a-landing-page/</link><pubDate>Wed, 11 Jun 2014 21:54:26 +0000</pubDate><guid>https://fn.lc/post/hey-look-i-made-a-landing-page/</guid><description>&lt;p>&lt;a href="http://fn.lc">http://fn.lc&lt;/a>&lt;/p>
&lt;p>I’m not terribly happy with it. It seems a bit bland and confusing. I’ll
probably add some explanatory text to the top.&lt;/p>
&lt;p>Content aside, the setup is kind of neat. It uses erb, scss, and vim to
render the code into html.&lt;/p>
&lt;p>“vim -f -n code.js +TOhtml +wq +q“&lt;/p>
&lt;p>It’s interesting that you can use vim to modify/export files
programmatically.&lt;br>
I also setup mina for deployment. It makes pushing a new version of the
site as easy as running “mina deploy”. Thank the FSM for deployment
systems.&lt;/p></description></item><item><title>WebSyn.ca Equation Support</title><link>https://fn.lc/post/ive-implemented-basic-eqn-support-in/</link><pubDate>Wed, 14 May 2014 05:20:43 +0000</pubDate><guid>https://fn.lc/post/ive-implemented-basic-eqn-support-in/</guid><description>&lt;p>&lt;amp-img src="../images/tumblr_n5jtijixpI1r7h2fto1_1280.png" width="659" height="216" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>&lt;amp-img src="../images/tumblr_n5jtijixpI1r7h2fto2_1280.png" width="664" height="208" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>I’ve implemented basic &lt;code>=eqn()&lt;/code> support in WebSync. Right now it just executes
some javascript if the text in the cell starts with &lt;code>=&lt;/code>. I’ve also added in one
helper function that returns the value of the cell in the format &lt;code>c(&amp;quot;A1&amp;quot;)&lt;/code>.&lt;/p>
&lt;p>We’ll see how this goes. I’m extremely hesitant to allow people to run
untrusted javascript code on people’s browsers. I might have to add in a
“This document uses untrusted javascript, are you willing to accept any
consequences?” on page load. A lot of the damage the untrusted script
might do is mitigated by the backend. WebSync by default refuses all XHR
requests except to specific endpoints. This should stop all attempts to
damage other documents if they’re using a browser that properly
implements XHR headers (which, as far as I know, is all of them).&lt;/p></description></item><item><title>WebSyn.ca Custom CSS</title><link>https://fn.lc/post/i-just-added-easy-custom-css-on-websync-documents/</link><pubDate>Sat, 03 May 2014 04:38:43 +0000</pubDate><guid>https://fn.lc/post/i-just-added-easy-custom-css-on-websync-documents/</guid><description>&lt;p>&lt;amp-img src="../images/tumblr_n4ze8jJIlB1r7h2fto1_1280.png" height="720" width="1280" layout="responsive">&lt;/amp-img>&lt;/p>
&lt;p>I just added easy custom CSS on WebSync documents. It might not be for the best… However, it works quite well and like everything you can edit the css in one window and preview the changes on the other. :D&lt;/p>
&lt;p>A future update might add some sort of local CSS so you can only
customize things under the .content_well div. Right now you can style
anything on the page.&lt;/p></description></item><item><title>New WebSync styling.</title><link>https://fn.lc/post/new-websync-styling/</link><pubDate>Fri, 18 Apr 2014 05:54:00 +0000</pubDate><guid>https://fn.lc/post/new-websync-styling/</guid><description>&lt;p>&lt;img src="../images/tumblr_n47priZ3CJ1r7h2fto1_1280.png" alt="">&lt;/p></description></item><item><title>Ok, there ...</title><link>https://fn.lc/post/ok-there-was-a-need-for-opensslcleanse-instead/</link><pubDate>Fri, 18 Apr 2014 03:12:21 +0000</pubDate><guid>https://fn.lc/post/ok-there-was-a-need-for-opensslcleanse-instead/</guid><description>&lt;blockquote>
&lt;p>Ok, there was a need for OPENSSL_cleanse() instead of bzero() to
prevent supposedly smart compilers from optimizing memory cleanups
away. Understood.&lt;/p>
&lt;p>Ok, in case of an hypothetically super smart compiler,
OPENSSL_cleanse() had to be convoluted enough for the compiler not to
recognize that this was actually bzero() in disguise. Understood.&lt;/p>
&lt;p>But then why there had been optimized assembler versions of
OPENSSL_cleanse() is beyond me. Did someone not trust the C
obfuscation?&lt;/p></description></item><item><title>First Post</title><link>https://fn.lc/post/first-post/</link><pubDate>Tue, 15 Apr 2014 03:22:07 +0000</pubDate><guid>https://fn.lc/post/first-post/</guid><description>&lt;p>Hi there!&lt;/p></description></item></channel></rss>