<?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 Life Beyond Rails</title><link>https://life.beyondrails.com/posts/</link><description>Recent content in Posts on Life Beyond Rails</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 04 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://life.beyondrails.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker Compose All The Things</title><link>https://life.beyondrails.com/blog/2023/03/04/docker-compose-all-the-things/</link><pubDate>Sat, 04 Mar 2023 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2023/03/04/docker-compose-all-the-things/</guid><description>&lt;p&gt;After getting the GPD Win Max 2 and using it as my everyday machine bothe for work and for personal use, I&amp;rsquo;ve started enforcing the philosophy of not installing any project dependencies locally, and instead leverage containerization technology (mostly via docker). I&amp;rsquo;ve talked about this in &lt;a href="https://life.beyondrails.com/blog/2020/06/15/advantages-of-using-docker-compose-in-your-projects/"&gt;a previous post&lt;/a&gt; and you can probably think of this post as an improvement on top of that.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been successfully using this following pattern both for work projects as well as personal ones, and I thought I&amp;rsquo;d like to share them.&lt;/p&gt;</description></item><item><title>Get Workflow Data From CircleCI</title><link>https://life.beyondrails.com/blog/2022/09/20/get-workflow-data-from-circleci/</link><pubDate>Tue, 20 Sep 2022 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2022/09/20/get-workflow-data-from-circleci/</guid><description>&lt;p&gt;I needed to analyze some data regarding the costs of my client&amp;rsquo;s current CI system, and CircleCI&amp;rsquo;s insights dashboard&amp;ndash;while itself is impressive&amp;ndash;isn&amp;rsquo;t quite up to task.&lt;/p&gt;
&lt;p&gt;Sometimes you just need the plain old &amp;ldquo;spreadsheet analysis technique&amp;rdquo; to make progress.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick ruby script I&amp;rsquo;ve written to get data from all the workflows for a particular project, and write them down into a csv for easy importation into a spreadsheet program.&lt;/p&gt;</description></item><item><title>Installing MySQL client 5.7 in Ubuntu Focal 20.04</title><link>https://life.beyondrails.com/blog/2020/06/24/installing-mysql-client-5.7-in-ubuntu-focal-20.04/</link><pubDate>Wed, 24 Jun 2020 20:37:56 +0800</pubDate><guid>https://life.beyondrails.com/blog/2020/06/24/installing-mysql-client-5.7-in-ubuntu-focal-20.04/</guid><description>&lt;h1 id="tldr"&gt;TLDR;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;download the client from &lt;a href="https://dev.mysql.com/downloads/mysql/"&gt;https://dev.mysql.com/downloads/mysql/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;install dependencies&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install libaio1 libtinfo5
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;install the client&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo dpkg -i mysql-community-client_5.7.30-1ubuntu18.04_amd64.deb
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;check the client version&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ mysql --version
mysql Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using EditLine wrapper
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Advantages of Using Docker Compose in Your Projects</title><link>https://life.beyondrails.com/blog/2020/06/15/advantages-of-using-docker-compose-in-your-projects/</link><pubDate>Mon, 15 Jun 2020 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2020/06/15/advantages-of-using-docker-compose-in-your-projects/</guid><description>&lt;p&gt;It&amp;rsquo;s that time of the year again when I get a larger drive, refresh my operating system, and back up important files.&lt;/p&gt;
&lt;p&gt;Ever since I&amp;rsquo;ve settled on having my &lt;code&gt;home&lt;/code&gt; folder always be on a separated drive, it&amp;rsquo;s been really easy to change operating systems, and even moving to a different (more powerful) computer isn&amp;rsquo;t as much of a chore. If I need to upgrade storage capacity, I just copy everything in my home folder onto the new drive (either by imaging or rsync) and then make sure that when I setup the new OS, that new drive is mounted in &lt;code&gt;/home&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;One thing that&amp;rsquo;s been really convenient for me is the ability to even move database data along with my home folder. This has been largely because I&amp;rsquo;ve been using docker (and docker-compose) more and more on my projects.&lt;/p&gt;</description></item><item><title>The Art of Tracking</title><link>https://life.beyondrails.com/blog/2018/09/04/the-art-of-tracking/</link><pubDate>Tue, 04 Sep 2018 15:22:18 +0800</pubDate><guid>https://life.beyondrails.com/blog/2018/09/04/the-art-of-tracking/</guid><description>&lt;p&gt;When a Pixel isn&amp;rsquo;t a Pixel&lt;/p&gt;
&lt;p&gt;Presented at the KL Ruby Brigade.&lt;/p&gt;</description></item><item><title>Slack Bots in Ruby</title><link>https://life.beyondrails.com/blog/2018/08/07/slack-bots-in-ruby/</link><pubDate>Tue, 07 Aug 2018 15:27:40 +0800</pubDate><guid>https://life.beyondrails.com/blog/2018/08/07/slack-bots-in-ruby/</guid><description>&lt;p&gt;What I learned while building a slack bot in ruby.&lt;/p&gt;
&lt;p&gt;Presented at the KL Ruby Brigade.&lt;/p&gt;</description></item><item><title>Vue on Rails</title><link>https://life.beyondrails.com/blog/2018/01/02/vue-on-rails/</link><pubDate>Tue, 02 Jan 2018 09:16:23 +0800</pubDate><guid>https://life.beyondrails.com/blog/2018/01/02/vue-on-rails/</guid><description>&lt;p&gt;A gentle introduction to modern client-side web frameworks for Rails developers.&lt;/p&gt;
&lt;p&gt;Presented at the KL Ruby Brigade.&lt;/p&gt;</description></item><item><title>Setup Braintree with Rails</title><link>https://life.beyondrails.com/blog/2016/09/28/setup-braintree-with-rails/</link><pubDate>Wed, 28 Sep 2016 09:16:23 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/09/28/setup-braintree-with-rails/</guid><description>&lt;p&gt;Braintree has just recently released &lt;a href="https://www.braintreepayments.com/blog/introducing-a-modernized-braintree-javascript-sdk/"&gt;v3 of their Javascript SDK&lt;/a&gt; offering &lt;a href="https://developers.braintreepayments.com/guides/client-sdk/migration/javascript/v3#why-upgrade-to-v3"&gt;a lot of improvements&lt;/a&gt;. Searching online for tutorials on how to integrate Braintree with Rails tend to show older articles, so I decided to write an updated one :)&lt;/p&gt;</description></item><item><title>Life Beyond Rails: Building Cross Platform Applications</title><link>https://life.beyondrails.com/blog/2016/08/13/life-beyond-rails-building-cross-platform-applications/</link><pubDate>Sat, 13 Aug 2016 15:00:00 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/08/13/life-beyond-rails-building-cross-platform-applications/</guid><description>&lt;p&gt;This is the talk I presented during the first &lt;a href="http://rubyconf.my/"&gt;Ruby Conference in Kuala Lumpur&lt;/a&gt;, Malaysia. It&amp;rsquo;s not a word-for-word transcription, but this is mostly the same material I wrote to prepare for the talk.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://s3-ap-southeast-1.amazonaws.com/hackworkplay-assets/rubyconfkl2016-page-001.resized.jpg" alt="Life Beyond Rails"&gt;&lt;/p&gt;
&lt;p&gt;The secret to creating cross platform apps is something you already know, but probably not doing.&lt;/p&gt;</description></item><item><title>Featured Pattern: Rescue, Log, Rethrow</title><link>https://life.beyondrails.com/blog/2016/07/15/featured-pattern-rescue-log-rethrow/</link><pubDate>Fri, 15 Jul 2016 15:16:02 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/07/15/featured-pattern-rescue-log-rethrow/</guid><description>&lt;p&gt;Whenever you use a method that you know might throw an exception but shouldn&amp;rsquo;t, the rescue-log-rethrow pattern is useful to figure out what happened while preserving the contracts implied in the code.&lt;/p&gt;</description></item><item><title>TDD and the Scientific Method</title><link>https://life.beyondrails.com/blog/2016/06/02/tdd-and-the-scientific-method/</link><pubDate>Thu, 02 Jun 2016 16:57:36 +0300</pubDate><guid>https://life.beyondrails.com/blog/2016/06/02/tdd-and-the-scientific-method/</guid><description>&lt;p&gt;TDD&amp;rsquo;s mantra is the following: Red, Green, Refactor. In other words: write a failing test, write code to make the test fast, and then make the code better (having the test as a safety net).&lt;/p&gt;</description></item><item><title>Featured Refactoring: Extract Method</title><link>https://life.beyondrails.com/blog/2016/04/25/featured-refactoring-extract-method/</link><pubDate>Mon, 25 Apr 2016 13:55:34 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/04/25/featured-refactoring-extract-method/</guid><description>&lt;p&gt;I work with &lt;a href="http://www.mindvalley.com"&gt;really awesome people who do really amazing work&lt;/a&gt;. I came upon this commit recently while I was reviewing a pull request, and I thought I&amp;rsquo;d share them with you.&lt;/p&gt;
&lt;p&gt;Note that some of the information on the diff presented here has been redacted or removed, due to it being proprietary. But the full idea of the refactoring is present.&lt;/p&gt;</description></item><item><title>A Strange Case of Inheritance Behavior</title><link>https://life.beyondrails.com/blog/2016/04/14/a-strange-case-of-inheritance-behavior/</link><pubDate>Thu, 14 Apr 2016 20:27:59 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/04/14/a-strange-case-of-inheritance-behavior/</guid><description>&lt;p&gt;While working some code to work with the Zuora SOAP API, I got bit by a strange case of inheritance behavior. It would seem that this is related to what &lt;code&gt;self&lt;/code&gt; is bound to during the execution of the statement. Here it is, distilled to its essentials:&lt;/p&gt;</description></item><item><title>2016 04 08 Linklog</title><link>https://life.beyondrails.com/blog/2016/04/08/2016-04-08-linklog/</link><pubDate>Fri, 08 Apr 2016 11:44:28 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/04/08/2016-04-08-linklog/</guid><description>&lt;p&gt;Here&amp;rsquo;s this week&amp;rsquo;s linklog:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Producing Documentation for your Rails API&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;The Making of an Expert&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Apprenticeship Patterns&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;So Good They Can&amp;rsquo;t Ignore You&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Architecture: the Lost Years&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Javascript Training at Mindvalley Day 2</title><link>https://life.beyondrails.com/blog/2016/03/18/javascript-training-at-mindvalley-day-2/</link><pubDate>Fri, 18 Mar 2016 15:54:40 +0800</pubDate><guid>https://life.beyondrails.com/blog/2016/03/18/javascript-training-at-mindvalley-day-2/</guid><description>&lt;p&gt;We&amp;rsquo;ve commissioned &lt;a href="http://www.dekatku.com/"&gt;Dekatku&lt;/a&gt; to train some developers here at &lt;a href="http://www.mindvalley.com/"&gt;Mindvalley&lt;/a&gt; on Javascript, and it&amp;rsquo;s been a great experience so far! Today is Day 2 of the the training and we&amp;rsquo;ve covered some really deep topics.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve started &lt;a href="https://www.safaribooksonline.com/library/view/apprenticeship-patterns/9780596806842/ch02s02.html"&gt;wearing my whitebelt&lt;/a&gt; again and I thought I&amp;rsquo;ll put up my thoughts and notes here for future reference.&lt;/p&gt;</description></item><item><title>String Interpolation with Templates Using String#</title><link>https://life.beyondrails.com/blog/2016/02/05/string-interpolation-with-templates-using-string/</link><pubDate>Fri, 05 Feb 2016 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2016/02/05/string-interpolation-with-templates-using-string/</guid><description>&lt;p&gt;I was working on a feature for &lt;a href="https://github.com/parasquid/upcloudify"&gt;upcloudify&lt;/a&gt; that will use Slack notifications instead of email notifications. One of the challenges I faced was how to build-in flexibility for generating messages. I would want that the user be able to provide their own custom notification message, but at the same time be able to provide placeholders for items like the S3 download link.&lt;/p&gt;</description></item><item><title>Opalbox—Run Ruby Code Inside Pages</title><link>https://life.beyondrails.com/blog/2016/01/03/opalboxrun-ruby-code-inside-pages/</link><pubDate>Sun, 03 Jan 2016 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2016/01/03/opalboxrun-ruby-code-inside-pages/</guid><description>&lt;p&gt;&lt;a href="http://opalrb.com/"&gt;Opal&lt;/a&gt; is a Ruby to JavaScript compiler, and &lt;a href="https://github.com/Angelmmiguel/opalbox-jquery"&gt;OpalBox&lt;/a&gt; is a &lt;code&gt;jQuery&lt;/code&gt; plugin to easily create a textarea that can take ruby code and allow it to run.&lt;/p&gt;
&lt;p&gt;I just added OpalBox to this blog and it&amp;rsquo;s been quite interesting. I&amp;rsquo;ve learned how to resize a &lt;code&gt;textarea&lt;/code&gt; based on its content (you need javascript to do that because &lt;code&gt;CSS&lt;/code&gt; just doesn&amp;rsquo;t cut it) and I&amp;rsquo;ve added in a shortcode.&lt;/p&gt;
&lt;h3 id="update"&gt;update:&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/Angelmmiguel/opalbox-jquery"&gt;Angelmmiguel&lt;/a&gt; (the author of opalbox) has just released &lt;a href="https://github.com/Angelmmiguel/opalbox-jquery/issues/1"&gt;0.1.0 that fixes the issue&lt;/a&gt; :)&lt;/p&gt;</description></item><item><title>Exploring Query Objects</title><link>https://life.beyondrails.com/blog/2015/12/18/exploring-query-objects/</link><pubDate>Fri, 18 Dec 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/12/18/exploring-query-objects/</guid><description>&lt;p&gt;A &lt;a href="http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/"&gt;CodeClimate Article&lt;/a&gt; gave a number of ways to decompose fat ActiveRecord models, and one of them was: &lt;strong&gt;Extract Query Objects&lt;/strong&gt;. I&amp;rsquo;ve been trying to explore and get myself familiar with a good standard of how to implement Query Objects, and here is my take.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll be trying out a new format in these articles. I&amp;rsquo;ll be using something of a Q/A style similar to &lt;a href="https://en.wikipedia.org/wiki/Socratic_questioning"&gt;Socratic Questioning&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Using Hash Fetch</title><link>https://life.beyondrails.com/blog/2015/12/11/using-hash-fetch/</link><pubDate>Fri, 11 Dec 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/12/11/using-hash-fetch/</guid><description>&lt;p&gt;I fat-finger my code &lt;strong&gt;a lot&lt;/strong&gt; and produce a lot of typos. I do test driven development so it&amp;rsquo;s not as bad, but what&amp;rsquo;s annoying is when I typo a hash key and the test blows up with a failure due to a &lt;code&gt;nil&lt;/code&gt; &amp;ndash; resulting in a very confusing error message.&lt;/p&gt;</description></item><item><title>ActiveRecord and Forty Two</title><link>https://life.beyondrails.com/blog/2015/12/06/activerecord-and-forty-two/</link><pubDate>Sun, 06 Dec 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/12/06/activerecord-and-forty-two/</guid><description>&lt;p&gt;I was making a gem to have Google Spreadsheets as the backing store for an &lt;code&gt;ActiveRecord&lt;/code&gt; adapter when I came upon this interesting method:&lt;/p&gt;</description></item><item><title>Safely Passing Ruby Code in a Rake Task</title><link>https://life.beyondrails.com/blog/2015/12/04/safely-passing-ruby-code-in-a-rake-task/</link><pubDate>Fri, 04 Dec 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/12/04/safely-passing-ruby-code-in-a-rake-task/</guid><description>&lt;p&gt;I wanted to make a rake task that would accept something like &lt;code&gt;1.month&lt;/code&gt; or &lt;code&gt;1.day&lt;/code&gt; as one of it&amp;rsquo;s arguments. The immediate tool I reached for was &lt;code&gt;eval&lt;/code&gt; and it worked like a charm. However, &lt;a href="https://codeclimate.com"&gt;Code Climate&lt;/a&gt; (the tool we use to check for static analysis) complains about &lt;code&gt;eval&lt;/code&gt; and understandably so; the use of &lt;code&gt;eval&lt;/code&gt; is a practice full of danger and security vulnerabilities.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m using it inside a rake task that is never exposed to third parties, and anyone malicious enough to run the rake task with a bad parameter to be eval&amp;rsquo;d would already have had access to the system anyway, and able to wreak even greater havoc than by running the malicious code through the rake task. I believe this is an accepted risk scenario, and &lt;a href="https://prezi.com/user/ypmnd6xz0d4h/"&gt;Crystal&lt;/a&gt; (one of my colleagues who was reviewing my code) suggested that since I had a valid point, I can just turn off the Code Climate check for this particular instance.&lt;/p&gt;
&lt;p&gt;I thought that was justified, but I also thought it was a slippery slope. I&amp;rsquo;m sure there are ways to pass in a string and have it dynamically interpreted, without having to expose the system to a security vulnerability.&lt;/p&gt;</description></item><item><title>Evaluating Hackerrank for Tech Hiring</title><link>https://life.beyondrails.com/blog/2015/12/03/evaluating-hackerrank-for-tech-hiring/</link><pubDate>Thu, 03 Dec 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/12/03/evaluating-hackerrank-for-tech-hiring/</guid><description>&lt;p&gt;We were looking at &lt;a href="https://www.hackerrank.com"&gt;Hackerrank&lt;/a&gt; to see if they can help us with alleviating some of the interview and review load on our senior developers.&lt;/p&gt;</description></item><item><title>Ruby Development in Windows Revisited</title><link>https://life.beyondrails.com/blog/2015/11/07/ruby-development-in-windows-revisited/</link><pubDate>Sat, 07 Nov 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/11/07/ruby-development-in-windows-revisited/</guid><description>&lt;p&gt;Some time ago I &lt;a href="https://life.beyondrails.com/blog/2014/03/09/ruby-development-in-windows/"&gt;wrote about how I set up my machine&lt;/a&gt; so I can program hassle-free in ruby while running Windows. It was more of a reminder to myself than anything, if I ever needed to set things up the same way again.&lt;/p&gt;
&lt;p&gt;Fast forward to 2015. When a colleague saw my workstation and realized I was running Windows, he was quite surprised and asked me how I was doing it. I thought of pointing him to my old blog post, but I felt that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It was outdated (the setup described was from 2012, written in 2014)&lt;/li&gt;
&lt;li&gt;It was incomplete (it&amp;rsquo;s just a checklist of what I&amp;rsquo;ve installed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve improved on the whole setup since, and I thought it&amp;rsquo;s time to share the whole updated setup so that anyone else interested can benefit.&lt;/p&gt;</description></item><item><title>Codility - PermMissingElem</title><link>https://life.beyondrails.com/blog/2015/10/30/codility-permmissingelem/</link><pubDate>Fri, 30 Oct 2015 04:16:00 -0800</pubDate><guid>https://life.beyondrails.com/blog/2015/10/30/codility-permmissingelem/</guid><description>&lt;p&gt;&lt;a href="https://codility.com/programmers/task/perm_missing_elem"&gt;https://codility.com/programmers/task/perm_missing_elem&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Codility - FrogJmp</title><link>https://life.beyondrails.com/blog/2015/10/30/codility-frogjmp/</link><pubDate>Fri, 30 Oct 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/10/30/codility-frogjmp/</guid><description>&lt;p&gt;&lt;a href="https://codility.com/programmers/task/frog_jmp"&gt;https://codility.com/programmers/task/frog_jmp&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Codility - TapeEquilibrium</title><link>https://life.beyondrails.com/blog/2015/10/30/codility-tapeequilibrium/</link><pubDate>Fri, 30 Oct 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/10/30/codility-tapeequilibrium/</guid><description>&lt;p&gt;&lt;a href="https://codility.com/programmers/task/tape_equilibrium"&gt;https://codility.com/programmers/task/tape_equilibrium&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Using Dependency Injection and yield to Refactor a Legacy App</title><link>https://life.beyondrails.com/blog/2015/10/28/using-dependency-injection-and-yield-to-refactor-a-legacy-app/</link><pubDate>Wed, 28 Oct 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/10/28/using-dependency-injection-and-yield-to-refactor-a-legacy-app/</guid><description>&lt;p&gt;I had to create an automated report for finance and accounting that will send particular columns and their data in a csv once a month.&lt;/p&gt;
&lt;p&gt;Being the &lt;a href="http://threevirtues.com/"&gt;lazy&lt;/a&gt; developer that I am, I tried looking for code that already existed. I was planning to wrap up that code in a rake task and use &lt;a href="https://github.com/javan/whenever"&gt;whenever&lt;/a&gt; to schedule a cron job to send the report monthly.&lt;/p&gt;
&lt;p&gt;While I was able to find pre-existing code that did what finance wanted (I checked with them as well if the output showed what they needed), the code itself wasn&amp;rsquo;t easily convertible to a rake task.&lt;/p&gt;</description></item><item><title>Have Rails.logger Output Sent to the Console (surprise, created_at field is protected from mass-assignment)</title><link>https://life.beyondrails.com/blog/2015/09/29/have-rails.logger-output-sent-to-the-console-surprise-created_at-field-is-protected-from-mass-assignment/</link><pubDate>Tue, 29 Sep 2015 23:14:07 -0700</pubDate><guid>https://life.beyondrails.com/blog/2015/09/29/have-rails.logger-output-sent-to-the-console-surprise-created_at-field-is-protected-from-mass-assignment/</guid><description>&lt;p&gt;While working on a feature, I was wondering why my test is returning 0 records when I&amp;rsquo;m quite sure the query was written properly (it&amp;rsquo;s just a very simple query regarding date range).&lt;/p&gt;</description></item><item><title>Moving Hosts From Github Pages to Amazon S3</title><link>https://life.beyondrails.com/blog/2015/09/26/moving-hosts-from-github-pages-to-amazon-s3/</link><pubDate>Sat, 26 Sep 2015 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2015/09/26/moving-hosts-from-github-pages-to-amazon-s3/</guid><description>&lt;p&gt;I&amp;rsquo;ve decided to simplify the deployment &lt;a href="https://life.beyondrails.com/blog/2014/12/14/setting-up-and-automating-my-hugo-blog-deployment-to-github-pages/"&gt;process&lt;/a&gt; and instead host the blog at S3.&lt;/p&gt;</description></item><item><title>Preparing for a Hackathon: Choosing Your Platform</title><link>https://life.beyondrails.com/blog/2015/06/27/preparing-for-a-hackathon-choosing-your-platform/</link><pubDate>Sat, 27 Jun 2015 13:57:41 +0800</pubDate><guid>https://life.beyondrails.com/blog/2015/06/27/preparing-for-a-hackathon-choosing-your-platform/</guid><description>&lt;p&gt;One of the best things you can do during your hackathon presentation is to have your hack available on a publicly accessible platform. You can definitely just host your app in your local machine for the demo, but it is more powerful and impressive if you can involve everyone else in a room and get them to play with your hack during your demo.&lt;/p&gt;</description></item><item><title>Preparing for a Hackathon</title><link>https://life.beyondrails.com/blog/2015/06/26/preparing-for-a-hackathon/</link><pubDate>Fri, 26 Jun 2015 11:46:04 +0800</pubDate><guid>https://life.beyondrails.com/blog/2015/06/26/preparing-for-a-hackathon/</guid><description>&lt;p&gt;I once posted an answer to one of my friend&amp;rsquo;s question: &lt;a href="https://www.facebook.com/parasquid/posts/10153434511932922"&gt;Guys, how to win hackathon&lt;/a&gt; and I thought I should expand more about this.&lt;/p&gt;</description></item><item><title>The Tick-Tock Innovation Model Applied to Agile Methodology</title><link>https://life.beyondrails.com/blog/2014/12/15/the-tick-tock-innovation-model-applied-to-agile-methodology/</link><pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/12/15/the-tick-tock-innovation-model-applied-to-agile-methodology/</guid><description>&lt;p&gt;You&amp;rsquo;ve probably heard of the &lt;a href="http://www.intel.com/content/www/us/en/silicon-innovations/intel-tick-tock-model-general.html"&gt;tick-tock model that Intel is using&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a model where every 18 months, there&amp;rsquo;s a new focus on the chip architecture: the tick is a shrinking of the chip (which requires retrofitting their manufacturing process to support the smaller size) and the tock is an upgrade of the architecture itself, using the current manufacturing process.&lt;/p&gt;</description></item><item><title>Setting Up and Automating my Hugo Blog Deployment to Github Pages</title><link>https://life.beyondrails.com/blog/2014/12/14/setting-up-and-automating-my-hugo-blog-deployment-to-github-pages/</link><pubDate>Sun, 14 Dec 2014 07:16:31 -0800</pubDate><guid>https://life.beyondrails.com/blog/2014/12/14/setting-up-and-automating-my-hugo-blog-deployment-to-github-pages/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Update&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is largely obsolete. I have setup a new &lt;a href="https://life.beyondrails.com/blog/2015/09/26/moving-hosts-from-github-pages-to-amazon-s3/"&gt;process&lt;/a&gt; to deploy to Amazon S3 amd I recommend it over Github Pages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m currently moving my blog posts (and collecting all my blog entries from various blogging platforms) and putting them into Hugo. In case you&amp;rsquo;re wondering how I&amp;rsquo;ve set mine up, here&amp;rsquo;s a guide of what I&amp;rsquo;ve done.&lt;/p&gt;</description></item><item><title>Redoing my Blogs</title><link>https://life.beyondrails.com/blog/2014/12/12/redoing-my-blogs/</link><pubDate>Fri, 12 Dec 2014 12:25:29 -0800</pubDate><guid>https://life.beyondrails.com/blog/2014/12/12/redoing-my-blogs/</guid><description>&lt;p&gt;Yet again I&amp;rsquo;ve ported my blog into yet another blogging platform - &lt;a href="http://gohugo.io/"&gt;Hugo&lt;/a&gt;. I feel so strongly that I&amp;rsquo;d be staying for quite some time on this platform that I&amp;rsquo;ve been porting over all my other posts in all my other various blogs over here.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s quite an interesting blogging platform. It outputs static files, which means hosting options are very cheap with a wide variety of providers.&lt;/p&gt;</description></item><item><title>How I Hire Developers</title><link>https://life.beyondrails.com/blog/2014/11/04/how-i-hire-developers/</link><pubDate>Tue, 04 Nov 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/11/04/how-i-hire-developers/</guid><description>&lt;p&gt;I was invited to pressent at the &lt;a href="http://www.projectrenaissance.com/technology/kl-ruby-brigade-2"&gt;KL Ruby Brigade&lt;/a&gt; and I thought I shuld mix things around by talking about something not very technical but still very much relevant to the audience.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m in charge (but saying &amp;ldquo;in-charge&amp;rdquo; is a bit of a misnomer since in Mindvalley we don&amp;rsquo;t really have predefined job descriptions) of the internship program for new tech hires, I figures I should share some of the things I consider when interviewing and hiring people.&lt;/p&gt;</description></item><item><title>Getting Data From a Join Table in Rails</title><link>https://life.beyondrails.com/blog/2014/08/19/getting-data-from-a-join-table-in-rails/</link><pubDate>Tue, 19 Aug 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/08/19/getting-data-from-a-join-table-in-rails/</guid><description>&lt;p&gt;A friend asked in my &lt;a href="https://www.facebook.com/groups/klxrb"&gt;Ruby Facebook group&lt;/a&gt; about a &lt;a href="https://www.facebook.com/groups/klxrb/permalink/515838138548150/"&gt;problem&lt;/a&gt; he was having that I feel I&amp;rsquo;ve encountered before (or will be encountering in the future). It&amp;rsquo;s about having to retrieve data that is associated with a join table.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have set ActiveRecords models like these&lt;/p&gt;
&lt;/blockquote&gt;
&lt;script src="https://gist.github.com/87abbf74e8020ca7e95c.js?file=" type="text/javascript"&gt;&lt;/script&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to do something like current_user.boards.first.role which I expect to load the membership details of current_user AND the first board. Do you have any idea how can I achieve this? Do you suggest another approach?&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Setup and Configuration of my Machines</title><link>https://life.beyondrails.com/blog/2014/08/03/setup-and-configuration-of-my-machines/</link><pubDate>Sun, 03 Aug 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/08/03/setup-and-configuration-of-my-machines/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Work In Progress&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;m still in the middle of writing this article, and I probably will be always updating this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve just recently (re)installed Linux on my Acer V5 122p. Had to fiddle around with UEFI settings thinking to preserve my Windows 8.1 partition, but eventually I had to bite the bullet. I wiped the whole partition clean and turned off UEFI so my installation would be a lot simpler.&lt;/p&gt;</description></item><item><title>API Documentation with Grape and Swagger</title><link>https://life.beyondrails.com/blog/2014/06/01/api-documentation-with-grape-and-swagger/</link><pubDate>Sun, 01 Jun 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/06/01/api-documentation-with-grape-and-swagger/</guid><description>&lt;blockquote&gt;
&lt;p&gt;TL;DR
Use Swagger and Grape to create self-documenting APIs that automatically update themselves from metadata in the code. It also provides an API explorer to play around with.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;During the AngelHack KL event, I (being the backend developer of the team) had to create an API to facilitate communication between the iPhone app and Twilio. Since it was a hackathon, there was not a lot of time to completely hash out API protocols (as well as explaining to my team mates how RESTful APIs work).&lt;/p&gt;
&lt;p&gt;I was able to solve this by using Grape and Swagger. I can develop the API at my own time. When a particular endpoint was finished, I can push to production and my team mate is immediately able to see the documentation. He was also able to make use of the API explorer to test out the API&amp;rsquo;s responses to his queries.&lt;/p&gt;
&lt;p&gt;We were able to quickly develop the whole project quickly and easily because of this, and here&amp;rsquo;s a quick look at using Swagger with Grape.&lt;/p&gt;</description></item><item><title>Maker's Schedule, Manager's Schedule</title><link>https://life.beyondrails.com/blog/2014/04/01/makers-schedule-managers-schedule/</link><pubDate>Tue, 01 Apr 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/04/01/makers-schedule-managers-schedule/</guid><description>&lt;p&gt;Paul Graham&amp;rsquo;s (of YCombinator fame) essay on the difference between the Maker&amp;rsquo;s Schedule and the Manager&amp;rsquo;s Schedule is a timeless piece of advice that is sadly not as well known as it should be. The essay provides an interesting, if not logical reason behind why programmer&amp;rsquo;s skip meetings called by managers, while managers often tend to interrupt programmers.&lt;/p&gt;
&lt;p&gt;Here are some of the important points in his essay:&lt;/p&gt;</description></item><item><title>Ruby Development in Windows</title><link>https://life.beyondrails.com/blog/2014/03/09/ruby-development-in-windows/</link><pubDate>Sun, 09 Mar 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/03/09/ruby-development-in-windows/</guid><description>&lt;p&gt;I&amp;rsquo;ve done the unthinkable and I have a confession to make.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve switched my development machines to Windows.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the story of my heresy &amp;hellip; and my possible salvation.&lt;/p&gt;</description></item><item><title>Ruby and Blocks</title><link>https://life.beyondrails.com/blog/2014/03/04/ruby-and-blocks/</link><pubDate>Tue, 04 Mar 2014 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2014/03/04/ruby-and-blocks/</guid><description>&lt;p&gt;One of the most often used and ironically least understood concepts in the Ruby programming language is the block. If you&amp;rsquo;ve used one of the Enumerable mixed-in objects, you&amp;rsquo;ve encountered the block syntax.&lt;/p&gt;</description></item><item><title>Install ruby-2.0.0-p195 on Ubuntu 12.04</title><link>https://life.beyondrails.com/blog/2013/06/08/install-ruby-2.0.0-p195-on-ubuntu-12.04/</link><pubDate>Sat, 08 Jun 2013 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2013/06/08/install-ruby-2.0.0-p195-on-ubuntu-12.04/</guid><description>&lt;p&gt;It&amp;rsquo;s always easier to deal with a ruby binary that&amp;rsquo;s installed server-wide rather than a local user installation (done via &lt;a href="http://rvm.io/"&gt;rvm&lt;/a&gt; or &lt;a href="http://rbenv.org/"&gt;rbenv&lt;/a&gt;). Server initialization scripts don&amp;rsquo;t need to do path magic and profile sourcing in order to find the correct binary. Here I how to install ruby-2.0.0-p195 in a way that your system administrator will love you for.&lt;/p&gt;</description></item><item><title>Rolling Restarts with Capistrano and Linode</title><link>https://life.beyondrails.com/blog/2013/06/01/rolling-restarts-with-capistrano-and-linode/</link><pubDate>Sat, 01 Jun 2013 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2013/06/01/rolling-restarts-with-capistrano-and-linode/</guid><description>&lt;p&gt;Here I show how to perform a rolling restart using Capistrano, and making sure that the load balancer (in this case Linode) properly reroutes traffic to the still-running servers while the others are being restarted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;WARNING
I&amp;rsquo;m still ironing out a few bugs for the rolling deployments. The issue appears to be that Capistrano executes &lt;code&gt;deploy:create_symlink&lt;/code&gt; in parallel so the apps still experience downtime before the restart happens. The concept itself is sound but the code is not yet production ready!!&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Running PrivatePub/Faye Standalone in Heroku for Free</title><link>https://life.beyondrails.com/blog/2013/05/25/running-privatepub/faye-standalone-in-heroku-for-free/</link><pubDate>Sat, 25 May 2013 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2013/05/25/running-privatepub/faye-standalone-in-heroku-for-free/</guid><description>&lt;p&gt;&lt;a href="https://github.com/ryanb/private_pub"&gt;PrivatePub&lt;/a&gt; is an awesome gem by the renowned Ryan Bates of &lt;a href="http://railscasts.com/"&gt;Railscast&lt;/a&gt; fame. It provides an easy way to use Faye as a pubsub provider. Watch this &lt;a href="http://railscasts.com/episodes/316-private-pub"&gt;episode&lt;/a&gt; to see it in action.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have to bundle the gem with a Rails application though; you can deploy PrivatePub standalone as a rack application in Heroku. This allows you to run PrivatePub in a web dyno instead of a worker, allowing for easier maintenance (separation of repositories/codebases) and as a side effect, save on hosting costs.&lt;/p&gt;</description></item><item><title>My Development Setup</title><link>https://life.beyondrails.com/blog/2012/01/23/my-development-setup/</link><pubDate>Mon, 23 Jan 2012 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2012/01/23/my-development-setup/</guid><description>&lt;p&gt;At &lt;a href="http://www.mindvalley.com/"&gt;Mindvalley&lt;/a&gt; employees can have any kind of hardware/software they want, provided that they can prove it is necessary for the work they’re doing, or at least it increases their productivity. In my case, I opted for the setup as seen here (picture courtesy of my colleague):&lt;/p&gt;
&lt;blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/h_EQp/?utm_source=ig_embed&amp;amp;utm_medium=loading" data-instgrm-version="12" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"&gt;&lt;div style="padding:16px;"&gt; &lt;a href="https://www.instagram.com/p/h_EQp/?utm_source=ig_embed&amp;amp;utm_medium=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"&gt; &lt;div style=" display: flex; flex-direction: row; align-items: center;"&gt; &lt;div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"&gt;&lt;/div&gt; &lt;div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"&gt; &lt;div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"&gt;&lt;/div&gt; &lt;div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="padding: 19% 0;"&gt;&lt;/div&gt;&lt;div style="display:block; height:50px; margin:0 auto 12px; width:50px;"&gt;&lt;svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"&gt;&lt;g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"&gt;&lt;g transform="translate(-511.000000, -20.000000)" fill="#000000"&gt;&lt;g&gt;&lt;path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"&gt;&lt;/path&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div style="padding-top: 8px;"&gt; &lt;div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;"&gt; View this post on Instagram&lt;/div&gt;&lt;/div&gt;&lt;div style="padding: 12.5% 0;"&gt;&lt;/div&gt; &lt;div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"&gt;&lt;div&gt; &lt;div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"&gt;&lt;/div&gt; &lt;div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"&gt;&lt;/div&gt; &lt;div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left: 8px;"&gt; &lt;div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"&gt;&lt;/div&gt; &lt;div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left: auto;"&gt; &lt;div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"&gt;&lt;/div&gt; &lt;div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"&gt;&lt;/div&gt; &lt;div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt; &lt;p style=" margin:8px 0 0 0; padding:0 4px;"&gt; &lt;a href="https://www.instagram.com/p/h_EQp/?utm_source=ig_embed&amp;amp;utm_medium=loading" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank"&gt;@parasquid&amp;#39;s #workstation #mindvalley&lt;/a&gt;&lt;/p&gt; &lt;p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"&gt;A post shared by &lt;a href="https://www.instagram.com/ngeow/?utm_source=ig_embed&amp;amp;utm_medium=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"&gt; Wu Han Ngeow&lt;/a&gt; (@ngeow) on &lt;time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2012-01-17T10:18:06+00:00"&gt;Jan 17, 2012 at 2:18am PST&lt;/time&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;script async defer src="//www.instagram.com/embed.js"&gt;&lt;/script&gt;
&lt;caption&gt;Look, Ma! Four eyes!!&lt;/caption&gt;
&lt;p&gt;(the blank monitor on the left was an Ubuntu VM on screensaver mode)&lt;/p&gt;</description></item><item><title>Having Fun With Remote Shells</title><link>https://life.beyondrails.com/blog/2006/04/03/having-fun-with-remote-shells/</link><pubDate>Mon, 03 Apr 2006 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2006/04/03/having-fun-with-remote-shells/</guid><description>&lt;p&gt;I just bought a VPS (virtual private server) a couple of days ago, and I&amp;rsquo;m enjoying tinkering with it. It&amp;rsquo;s not the most powerful beast though; it only has 64MB RAM and 128MB swap. I won&amp;rsquo;t say the name of the company I&amp;rsquo;m subscribed to since my box isn&amp;rsquo;t exactly the bastion of security, but you should be able to discern the shell provider from how I describe my escapades :D&lt;/p&gt;</description></item><item><title>Recommended Programs</title><link>https://life.beyondrails.com/blog/2006/03/21/recommended-programs/</link><pubDate>Tue, 21 Mar 2006 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2006/03/21/recommended-programs/</guid><description>&lt;p&gt;While mucking around my computer and generally getting bored, I found a few neat programs to install. They&amp;rsquo;re really cool, and your Linux computer shouldn&amp;rsquo;t be without them :)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://adblock.mozdev.org/"&gt;Firefox AdBlocker&lt;/a&gt; - blocks ads from websites. Definitely heaven sent, as browsing becomes faster without all those ads being loaded (the extension dynamically modifies the page to comment out the ads, so they don&amp;rsquo;t get rendered). You can get to choose which ones to block too. Get the AdBlocker and teach those popup advertisers a lesson.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yakuake.uv.ro/"&gt;Yakuake&lt;/a&gt; - cool konsole for KDE. Anyone who had played quake before would recognize the interface. No need to reserve a space for the taskbar entry in the main panel. Plus, a terminal emulator is just one keypress away :)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://packages.debian.org/stable/games/kworldclock"&gt;kde WorldClock&lt;/a&gt; - nice way to impress your friends by showing you are a &amp;ldquo;Citizen of the World.&amp;rdquo; Set this as your desktop background and you&amp;rsquo;ll immediately know if it&amp;rsquo;s day or night in a particular region of the Earth.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Reinstalling Kubuntu</title><link>https://life.beyondrails.com/blog/2006/03/19/reinstalling-kubuntu/</link><pubDate>Sun, 19 Mar 2006 00:00:00 +0000</pubDate><guid>https://life.beyondrails.com/blog/2006/03/19/reinstalling-kubuntu/</guid><description>&lt;p&gt;My data drive had some corruption as regards its file system tree, and i was forced to rebuild it. I figured I&amp;rsquo;ll just reinstall Kubuntu too since I inadverdently installed Ubuntu Desktop, which kinda doubled the applications I have on the menu.&lt;/p&gt;
&lt;p&gt;Here are some of the things I did in order to remind myself in case my system crashes again:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make a dos partition writable - the options in fstab for the partition should be: user,exec,rw,umask=000 0 0&lt;/li&gt;
&lt;li&gt;Get Automatix and install some of the necessary non-free software&lt;/li&gt;
&lt;li&gt;Install packages used for compiling source code: sudo apt-get install build-essential&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ll add to the list as I walk through the rebuilding of my settings.&lt;/p&gt;</description></item></channel></rss>