code.Antrikshy2024-02-17T21:15:52+00:00https://antrikshy.com/codeAntriksh YadavStreaming Direct PUT Firehose Records Into S3 With Newline Characters2023-10-28T00:00:00+00:00https://antrikshy.com/code/streaming-direct-put-firehose-records-into-s3-with-newline-chracters<p>Recently, I found myself working with AWS Kinesis Firehose and S3. All I wanted was to write <em>custom</em> JSON records programmatically into a Firehose stream, and have it output to an S3 location. However, by default, the records would get written without any newline separators. Searching for how to insert newline characters generally got me to complex solutions for complex data input sources.</p>
<p>Neither AWS documentation, nor existing Stack Overflow answers pointed me towards the incredibly simple actual syntax. I chased down complex solutions using Firehose features until I figured out you can just include the newline character directly after your message.</p>
My Mid 2023 Red + White Gaming PC Build2023-08-26T00:00:00+00:00https://antrikshy.com/code/my-mid-2023-red-white-gaming-pc-build<p>Four years and a GPU shortage later, I built my third gaming PC in July 2023. It was a tough one to plan because <a href="/code/late-2018-ryzen-rtx-red-white-gaming-pc-build">my last build</a> was really hard to top.</p>
<p><img src="/assets/reviews/2023-pc-build-hero.jpg" alt="" /></p>
<p>It’s technically the fourth PC build I’ve been part of, after helping my brother build his first in late 2021.</p>
Painless Partitioned localStorage In A React App2022-09-01T00:00:00+00:00https://antrikshy.com/code/painless-partitioned-localstorage-in-a-react-app<p>The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage">localStorage API</a> is as straightforward as can be. Create, read, delete, clear-all methods, and that’s about it. The only notable limitation is that it only stores strings, but that can be mitigated using JSON stringification and parsing to expand support for objects and more.</p>
<p>I came up with this cute wrapper class for localStorage a few years ago, and it remains one of my favorite personal utility classes in JavaScript.</p>
Switch Displays In Windows With Python2022-01-30T00:00:00+00:00https://antrikshy.com/code/switch-displays-in-windows-with-python<p>You can execute <code class="language-plaintext highlighter-rouge">displayswitch.exe</code> to bring up the Win+P display switcher utility from the command line. This is not a new discovery by any stretch. Some web searching tells me this utility has existed since at least Windows 7. It wasn’t the easiest thing to find instructions when I wanted a solution. I figured I should write this down in the context of Python to help people searching with the keywords I was.</p>
<p>So if you’re setting up a script for your own personal automation, or writing a utility application in Python that switches or extends users’ displays, here are some code snippets to copy-paste.</p>
LG C1 OLED TV Review By A Cinephile2022-01-01T00:00:00+00:00https://antrikshy.com/code/lg-c1-oled-review<p>I put off writing this review for so long because my thoughts on this TV are not easy to compile into words. This review is the culmination of very heavy use over a whole quarter, me ruminating over all aspects of this product, and several conversations I’ve had with different people about this purchase.</p>
<p>To help set the stage, perhaps I should start with my profile as a consumer. In summary:</p>
<ul>
<li><strong>I am very discerning about picture quality.</strong> many hours over days to get picture modes and settings <em>just</em> right on a new TV.</li>
<li><strong>I am extremely particular about user experience in software.</strong> Part of my professional work happens to involve some UX design.</li>
<li><strong>I watch a lot of movies.</strong> And I mean… A LOT. Hundreds per year.</li>
<li><strong>I tend to use my TVs very heavily.</strong> In the work-from-home world, I have this TV on for more than half of my waking hours of an average work day.</li>
</ul>
<p>When my 2016 Vizio P-Series gave up after 5 years of heavy use, I set off on my journey of picking just the right successor. I settled on what many reviewers consider the absolute best TV for movies (thanks Rtings, Digital Trends, others). This excludes exorbitantly expensive models, and the Sony A80J. That one was significantly more expensive at the time of my purchase. As a bonus, the LG C1 came with cutting edge gaming features like modern VRR support, new HDMI standards, low input latency and whatnot.</p>
Launching Apps On My Desktop PC Using Alexa2021-05-30T00:00:00+00:00https://antrikshy.com/code/launching-apps-on-my-desktop-pc-using-alexa<p>For the last couple of years, I’ve had a <em>very</em> nifty setup in my home. It allows me to turn on my desktop PC using Alexa, so that I don’t have to walk up to it, press the power button, then wait for it to boot up. I have <a href="/code/powering-on-my-desktop-pc-using-alexa-and-a-raspberry-pi">previously chronicled</a> the process of setting it up on this blog.</p>
<p>An important bit of tl;dr, I achieved this using Simple Queue Service (SQS) on AWS, a Raspberry Pi constantly querying a queue for instructions, and the <a href="https://en.wikipedia.org/wiki/Wake-on-LAN">Wake-on-LAN standard</a>.</p>
<p>Ever since I set that up, I’ve had this idea of taking that a step further, and sending requests directly into Windows once it has woken up.</p>
Number Of Possible MOD Pizza Recipes2020-11-21T00:00:00+00:00https://antrikshy.com/code/number-of-possible-mod-pizza-recipes<p>For those unfamiliar with <a href="https://modpizza.com/we-are-mod/">MOD Pizza</a>, they are a restaurant chain across the US and Canada, who specialize in quickly-served, made-to-order pizza. You get to pick anywhere between zero to all of their available toppings at flat rates, a bit like sandwiches at Subway.</p>
<p>A few months ago, I saw an advert for MOD Pizza on the side of a Seattle public transit bus. I wish I had taken a picture so that I wouldn’t have to go by memory, but I remember it claiming something along the lines of “thousands of possible combinations”. I remember thinking, “gee, it has to be a lot more than thousands” and that they must be intentionally undercounting them because millions or billions would sound too ridiculous to the general passerby.</p>
<p>I figured I’d double check their math.</p>
Jekyll Blogging From Any Computer On Your Network With A Raspberry Pi2020-09-06T00:00:00+00:00https://antrikshy.com/code/jekyll-blogging-from-any-computer-on-your-network-with-a-raspberry-pi<p>As any Jekyll site owner would know, my workflow for writing these blog posts involves… friction.</p>
<ol>
<li>Open the site project in a text editor.</li>
<li>Open command line window, navigate to the project location.</li>
<li>Run the <code class="language-plaintext highlighter-rouge">jekyll</code> command to serve up a local preview of the site.</li>
<li>Preview the site in a web browser while working on it.</li>
</ol>
<p>Steps 2-4, of course, are somewhat optional; they are only required if you want to actively look at your changes as you make them.</p>
<p>I know these steps cannot be entirely eliminated without also foregoing the other benefits of Jekyll as a platform, but I also wanted to streamline the process as much as possible.</p>
<p>My updated workflow not only eliminates steps 2 and 3 from every writing session, but also comes with some nifty bonus features, like the ability to preview the site on my phone over LAN.</p>
A Succinct, CSS-Only Overflow Scroll Indicator2020-05-04T00:00:00+00:00https://antrikshy.com/code/a-succinct-css-only-overflow-scroll-indicator<p>So, you’ve set an element to <code class="language-plaintext highlighter-rouge">overflow: scroll</code> with an explicit height. Now you have a scrollable space. Depending on the content in this space, it may not be entirely obvious that it <em>is</em> scrollable, unless the content happens to be obviously cut off. Here’s an example.</p>
<div style="height: 150px; margin: 35px; font-size: 20px; line-height: 25px; overflow: scroll;">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc sed velit dignissim sodales ut eu sem integer vitae. Amet cursus sit amet dictum sit amet justo donec enim. Non consectetur a erat nam. Ut venenatis tellus in metus. Arcu vitae elementum curabitur vitae nunc sed velit dignissim. At urna condimentum mattis pellentesque id. Natoque penatibus et magnis dis parturient. Dolor sed viverra ipsum nunc aliquet bibendum. Dapibus ultrices in iaculis nunc sed. Sed blandit libero volutpat sed cras ornare arcu. Vitae et leo duis ut.
</div>
<blockquote>
<p>Note: This does not apply on Windows or other operating systems (or browsers) that usually default to showing scroll bars for every scrollable element on the web.</p>
</blockquote>
<p>The are all sorts of solutions to this on the web, but I didn’t want any surrounding HTML elements and more CSS to make them work. Here’s a quick CSS solution.</p>
Language Trends By Developer Type - Stack Overflow Developer Survey 20192019-06-04T00:00:00+00:00https://antrikshy.com/code/stack-overflow-developer-survey-2019-language-trends-by-developer-type<p>About two months ago, Stack Overflow released the results of their annual Developer Survey.</p>
<p>In the <a href="https://redd.it/bb83gd">r/programming discussion</a> of these results, a few folks were disappointed that Stack Overflow’s official analysis of the data did not separate popularity data for languages, platforms, frameworks etc. by developer type.</p>
<p><a class="embedly-card" href="https://www.reddit.com/r/programming/comments/bb83gd/stackoverflow_developer_survey_results_2019/ekhc3go">Card</a>
<script async="" src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script></p>
<p>So I waited for the dataset to be <a href="https://insights.stackoverflow.com/survey">released under ODbL</a>, and re-parsed the popularity numbers myself.</p>
Herman Miller Sayl Review, Plus Warranty Service Experience2019-02-09T00:00:00+00:00https://antrikshy.com/code/herman-miller-sayl-review-with-warranty-service-experience<p>This chair may not have the same icon status as some other Herman Miller designs (Aeron), but it still frequently gets screen time in TV and movies. I can’t blame those set designers; this chair makes a statement that few others do in the task chair space.</p>
<p>I moved into a new condo in late 2016. I wanted a modern look with the furnishing. Somehow, things fell into place such that I ended up with a white and red color scheme in the living room. Not too keen on waiting for a custom order from Herman Miller, I happened to find <a href="https://www.amazon.com/dp/B00OBWBSA4">this perfect white and red trim</a> of their Sayl chair on Amazon, sold by a seller named OfficeDesigns. We’ll come back to OfficeDesigns later.</p>
<p><img src="/assets/reviews/herman-miller-sayl.jpg" alt="" /></p>
My Late 2018 Red + White Gaming PC Build2019-01-28T00:00:00+00:00https://antrikshy.com/code/my-late-2018-red-white-gaming-pc-build<p>I finished this build in December, just didn’t get around to posting it online until now. The aesthetic took some work. My form factor and the color scheme constraints were not easy to build in.</p>
<p><img src="/assets/reviews/2018-pc-build-hero.jpg" alt="" /></p>
Powering On My Desktop PC Using Alexa And A Raspberry Pi2018-03-04T00:00:00+00:00https://antrikshy.com/code/powering-on-my-desktop-pc-using-alexa-and-a-raspberry-pi<p>A few years ago, before living in a smart home, I used to dream of turning on my gaming PC with a Hollywood-sci-fi voice command like “battlestation up”. A few days ago, I finally achieved it with a bit of elbow grease (and a clunkier voice command).</p>
<p><img src="/assets/alexa-raspberry-pi-wake-on-lan-demo.gif" style="min-width: 100%;" /></p>
Growing Into Non-Deterministic User Interfaces2017-10-07T00:00:00+00:00https://antrikshy.com/code/growing-into-non-deterministic-user-interfaces<p>I found myself scrolling through the Home section of the YouTube app the other day. I usually go straight to my subscriptions, but I happened to be running dry on subscription videos. So I decided to browse through what the YouTube algorithms had to recommend for me, and also through the trending list that day.</p>
<p>As I was scrolling through, I noticed a widget. It contained three video thumbnails from the same channel, placed horizontally, and it was labeled “Rising Creator”. I had never seen this widget before. I scrolled past it.</p>
Seeding Torrents Using Transmission CLI2017-03-15T00:00:00+00:00https://antrikshy.com/code/seeding-torrents-using-transmission-cli<p>I set up a Raspberry Pi 3 for some smart home projects that have been swimming around in my head lately. I figured I could put this always-on computer to some good use at the same time and contribute to torrent swarms for some Linux distros and other open source projects. I’ve got a no-cap Internet connection lying around doing nothing when I’m at work.</p>
<p>I wanted a torrent client that I could use completely on the command line, run as a daemon of some sort. I ended up using Transmission. It’s a great, easy to use torrent client; unfortunately, there is a lack of decent documentation around it. This post exists as a quick and dirty overview guide for people who want to torrent entirely from the command line (using Transmission).</p>
Status Audio HD Two Review By A Casual Listener2016-10-14T00:00:00+00:00https://antrikshy.com/code/status-audio-hd-two-review-by-a-casual-listener<p><img src="/assets/reviews/hd-two-hero.jpg" alt="" /></p>
<p>I wanted a nice pair of headphones to listen to music at work, on a budget of around $100 (because I’m not really an aficionado). Keep in mind that I have never owned a set of quality headphones.</p>
<p>After looking around for a bit, I decided over-ear headphones were for me, since I wanted comfort and quality, and I would be using them at my desk for the most part.</p>
<p>As I often do, I started my research at <a href="http://thewirecutter.com/reviews/the-best-150-over-ear-headphones/">The Wirecutter</a>, and pretty much decided I’d be getting either <strong>Sony’s classic <a href="https://amzn.com/B000AJIF4E">MDR-7506</a></strong> or <strong>Audio Technica’s very popular <a href="https://amzn.com/B00KFKO6K0">ATH-M40x</a></strong>. The former seems to be a well-respected model from the 90s, and the latter arguably looks better. Both perform similarly, according to many reviews and online discussions. I was very split between the two.</p>
<p>Eventually, I stumbled upon <a href="https://youtu.be/0IJJOu-sBvA">a YouTube video</a> that compared the MDR-7506 with a couple of <strong><a href="http://thestatusaudio.com">Status Audio</a> products</strong>. This was the first time I had heard of them. I was enticed by their promise of high-end audio quality at a lower price because of their no-marketing, no celebrity endorsements, direct-to-consumer model. And I decided to give them a chance.</p>
<p>I have used their HD Two headphones extensively for the last three weeks, and here are my thoughts about them.</p>
How I Got Started With Programming Side Projects2016-08-26T00:00:00+00:00https://antrikshy.com/code/how-i-got-started-with-programming-side-projects<p><img src="/assets/side-projects-screenshot.png" alt="" /><br />
<small><em>(Since people asked: Sublime Text 3 with “Spacegray Light” from <a href="https://github.com/saadq/Materialize">Materialize</a> and the <a href="http://font.ubuntu.com/#charset-mono-bold">Ubuntu Mono Bold</a> typeface)</em></small></p>
<p>Like most of the other students in the computer science program at UC San Diego, I went through a couple of years simply coasting through classes. I had never been good <em>nor</em> bad academically, and my GPA was fairly average. I was enjoying programming classes, with their deliciously challenging assignments; calculus, not so much.</p>
<p>In this non-technical blog post (for a change), I would like to walk through my experience with my open-source projects. Projects which later helped me out immensely in getting internships (including one at Amazon, which turned into a full-time offer).</p>
<p>If you are a current or prospective CS student, hopefully you will leave with some inspiration.</p>
Python Single-File Script Project Structure And Distribution Through PyPI/pip For Noobs2016-08-17T00:00:00+00:00https://antrikshy.com/code/python-single-file-script-project-structure-and-distribution-through-pypi-pip-for-noobs<p>Python may be known for its ease of use, but making my pet projects available through the simple <code class="language-plaintext highlighter-rouge">pip install petprojectinator</code> command has been a whole different experience. The Python Package Index (PyPI) feels like an antiquated repo with longwinded documentation for developers who want to contribute.</p>
<p>This hasn’t changed all <em>that</em> much, but lately, a new <a href="http://pypi.io">pypi.io</a> site has been in development, and with it, some of the barriers to entry has been removed from the upload process.</p>
<p>This post is intended to be a quick guide for organizing a tiny Python project (not much more than one script) for distribution via PyPI/pip and the <em>new</em>, simpler upload process.</p>
A Quickstart Guide To Implementing User Configuration In Your Pebble Watchapp2016-06-17T00:00:00+00:00https://antrikshy.com/code/a-quickstart-guide-to-implementing-user-configuration-in-your-pebble-watchapp<p>I recently decided to try my hand at Pebble development in C, with a native watchface. Documentation about accepting user configuration is a bit messy. This is because there is a lot of overlap between user configuration and watch-to-phone communication in general. Even after reading through it all, I needed external help and there were few resources that laid everything out in an easily digestible way.</p>
<p>So I decided to summarize all the components that you need to set up to allow for user configuration in a native Pebble watchapp or watchface, written in C. I really hope this helps someone out there visualize the flow better.</p>
Make Your Raspberry Pi Accessible Over The Web - An Arch Linux Guide2015-12-13T00:00:00+00:00https://antrikshy.com/code/make-your-raspberry-pi-accessible-over-the-web-an-arch-linux-guide<p>After struggling to find a good use for my Raspberry Pi for years, I finally decided to get into hardware projects. I figured I’d set up a fresh installation of Arch Linux on it to learn that as well. Two birds, one stone.</p>
<p>My first goal was to hook up a DHT22 temperature and humidity sensor, connect it to the Pi and somehow make its data accessible over the web. This guide will walk you through that second part.</p>
<p>You don’t <em>have</em> to be setting up any hardware to follow this guide. Even if you just want to be able to SSH into your Pi from anywhere consistently and reliably, this guide is exactly what you are looking for. None of this is <em>really</em> specific to the Pi. You can follow it to set up <em>any</em> computer running Linux.</p>
Deploying And Testing An Alexa Skill On AWS Lambda2015-09-13T00:00:00+00:00https://antrikshy.com/code/deploying-and-testing-an-alexa-skill-on-aws-lambda<p>I find Amazon’s <a href="https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-lambda-function">official documentation</a> on deploying Alexa Skills a bit hard to follow. After reading through it a few times and finally managing to get it working, I decided to re-word all of that information into this concise blog post that I hope is more digestible. I trust that someone will find it useful.</p>
<p>What I am trying to do here is to summarize the process that Amazon’s documentaion lays out in a rather messy fashion. So this post <em>does</em> assume that you know what you are doing. It will (hopefully) get you started <em>testing</em> your Skill.</p>
Computer Science Programs Are Not Software Engineering Programs2015-05-30T00:00:00+00:00https://antrikshy.com/code/a-computer-science-program-is-not-a-software-engineering-program<p><img src="http://abstrusegoose.com/strips/computer_science_major.png" style="max-width: 18rem; float: none; margin: 0 auto; " /></p>
<p>Comic source: <a href="http://abstrusegoose.com/206">Abtruse Goose</a></p>
<p>This is something I realized after I was more than halfway through my computer science program at UC San Diego. This post is republished from a <a href="http://redd.it/37t3fj">reddit post</a> I made that did fairly well.</p>
Deploy Express.js On Digital Ocean (Ubuntu) - A Complete, Mostly Succinct Guide2015-05-09T00:00:00+00:00https://antrikshy.com/code/deploy-an-expressjs-app-on-digital-ocean-complete-succinct-guide<p>In terms of pricing and configurability, I have not come across any host better than Digital Ocean for Node.js projects. Consider using <a href="https://www.digitalocean.com/?refcode=69c47bb531c2">my referral link</a> to create your Digital Ocean account to earn $10 in credit and support me at the same time.</p>
<p>This is a short tutorial to get started with a very simple, small-scale deployment. While it is a very bare-bones tutorial, it can be (and has been) used for very real deployments. As of this time, I have a couple of production sites running this configuration, namely the <a href="http://legday.co">LegDay website</a> and <a href="http://quibbler.co">Quibbler</a>.</p>
<p>This article is meant to guide you quickly through the steps, not to explain what goes on behind every single command.</p>
Run MongoDB Automatically With Your Node.js Project2015-04-03T00:00:00+00:00https://antrikshy.com/code/run-mongo-db-automatically-with-your-nodejs-project<blockquote>
<p>Update: The database isn’t closed properly when tests fail, which causes some issues. I kind of gave up on this.</p>
</blockquote>
<p>I thought I’d share this quick tip I came up with for my own convenience while working with Node.js. Every time I work on a MongoDB-powered Node.js project, I open a separate tab in Terminal and start MongoDB using the <code class="language-plaintext highlighter-rouge">mongod</code> command so that it runs in the background while I develop and test my project.</p>
<p>This is pretty inconvenient to do each time, so I thought I’d automate it as seamlessly as possible. Mostly, I wanted to keep my unit tests as independent from anything else as possible.</p>
Converting XML From A URL To JSON Using Node.js2015-03-28T00:00:00+00:00https://antrikshy.com/code/converting-xml-from-a-url-to-json-using-nodejs<p>For a recent personal project, I needed to fetch an XML Atom feed from a URL and convert it to a JSON object to return through my API. Surprisingly, there was no clear-cut tutorial on how to do this. While it isn’t very difficult, I figured I’d write one anyway to help any beginners out there looking for assistance. I’m not an expert at this, but feel free to ask me any questions in the comments below. Every single one of them is read.</p>
Write A Simple Countdown Timer In JavaScript2015-03-21T00:00:00+00:00https://antrikshy.com/code/write-a-simple-countdown-timer-in-javascript<p>There are libraries for all kinds of countdowns (from a specified time or leading up to a specific time or date) that you can use in your website’s front-end. For <a href="http://antrikshy.com/checkmt/">checkmt</a>, I wanted my own timer for several reasons:</p>
<ol>
<li>Full control over code meant flexibility and maintainability.</li>
<li>Loading a library for something as simple as this was not necessary.</li>
</ol>
<p>So I whipped up my own solution using JavaScript. Here’s how I did it.</p>
Pebble.js Tutorial - An In-Depth Guide To Writing Pebble Apps Using JavaScript2015-02-05T00:00:00+00:00https://antrikshy.com/code/pebble-js-tutorial-a-guide-to-writing-pebble-apps-using-javascript<p><img src="/assets/apphookup-pebble-1.png" alt="AppHookup screenshot 1" style="max-width: 33%;" />
<img src="/assets/apphookup-pebble-2.png" alt="AppHookup screenshot 2" style="max-width: 33%;" />
<img src="/assets/apphookup-pebble-3.png" alt="AppHookup screenshot 3" style="max-width: 33%;" /></p>
<p>Apps for the Pebble smartwatch platform are traditionally written in C. A Pebble is a low-power computer with limited storage and memory. It does not come with a full-blown interpreter for Python or JavaScript. Hence, C was the only option for developers for quite some time.</p>
<p><a href="http://developer.getpebble.com/docs/pebblejs/">Pebble.js</a>, a framework for writing JavaScript applications was announced at JSConf 2014. It is mainly a framework intended to write apps that need an Internet connection to run. While it is not very limited in most ways, the framework may not be what you expect it to be. I’m writing this to clear up any confusion regarding the design of Pebble.js apps.</p>
Make Pushy Off-Canvas Menu Appear From The Right2015-01-10T00:00:00+00:00https://antrikshy.com/code/make-pushy-appear-on-right<p>I recently discovered Christopher Yee’s <a href="http://www.christopheryee.ca/pushy/">Pushy</a> off-canvas navigation menu. So far, I have found it to be the easiest to implement slide-out menu if you have an existing website. However, it comes with one limitation - it only slides out from the left side of the page. Fortunately, its CSS is pretty easy to modify so that it appears on the right side.</p>
Simple In-Button Click Confirmation With jQuery2014-11-26T00:00:00+00:00https://antrikshy.com/code/simple-in-button-click-confirmation-with-jquery<p><img src="/assets/jquery-btn-confirm-gif.gif" alt="In-button confirmation" /></p>
<p>While working on a project, I needed an elegant button click confirmation. After a quick bit of searching, I couldn’t find anything satisfactory, so I came up with this tiny snippet of jQuery to easily add in-button confirmation for a click.</p>
<p>In my case, I wanted the user to confirm deletion of an important item from a database. I didn’t want a tacky solution like a modal or a confirmation box. I just wanted a simple “Sure?” text to show inside the button itself, and a second click to confirm.</p>
<p>My solution only requires about 6 lines of jQuery excluding any of the code you execute after the confirmation.</p>
Show Post Excerpts On Your Poole Blog Homepage2014-11-07T00:00:00+00:00https://antrikshy.com/code/show-post-excerpts-on-your-poole-blog-homepage<p>I was happy when I found out about Jekyll and then later Poole (via <a href="http://joshualande.com/jekyll-github-pages-poole/">Joshua Lande</a>). Poole seemed great! Other than the lack of many themes, Poole fit my needs quite perfectly. The default theme was great, so I rolled with it. But I faced the drawback of using someone else’s design: Customizing it requires a lot of poking under the hood. Besides, I was completely new to Jekyll and the Liquid templating engine, and I knew very little about how the internals work.</p>
<p>I didn’t like the way the Poole homepage showed the most recent complete post on the landing page. I thought it would be hard to fix, so I didn’t bother for some time. When I did get around to it, I was surprised to find out how easy it was.</p>
virtualenv - A Quick, Practical Explanation For Beginners2014-10-26T00:00:00+00:00https://antrikshy.com/code/virtualenv-a-quick-practical-explanation-for-beginners<p>As a budding Python dev, you must have read about virtualenv all over the place. Despite its popularity, I could not find a good, short explanation, written for beginners when I was getting started. I have figured out how it works, and now I can explain it to you.</p>
<p>virtualenv is so easy conceptually that I was ashamed of not understanding it earlier. When I first heard about it, I thought of it as some sort of Python module organizing tool. I thought to myself, “what about all of the packages I already have installed?” I didn’t understand whether I would have to somehow organize all the stuff I had installed before using virtualenv.</p>
<p>Then I realized that this handy-dandy tool is something entirely different and supposed to be used <em>in conjunction</em> with globally installed packages.</p>
Safari Extension Development: Set-Up Automatic Updates For Your Extension2014-09-17T00:00:00+00:00https://antrikshy.com/code/safari-extension-development-set-up-automatic-updates-for-your-extension<p>If you are developing a Safari browser extension, you don’t just want to release it. Later down the road, you may want to extend it further or just squash some bugs. You cannot expect your users to return to your website or the extension gallery to download updates manually.</p>
<p>Unfortunately, Safari extensions are an often ignored part of Apple’s Developer Program and the company does not maintain a formalized update system like its App Stores. Even if you submit your extension to Apple’s gallery, you will need to set up your own server to provide a download link and manage your own update mechanism. They do not provide server space or an admin console to push updates.</p>
<p>Apple’s desktop browser does have built-in support for auto-updates, so you are not left in the cold completely. It is, however, a bit of a hassle to set up and can be very confusing and frustrating when you are ready to publish an extension for the very first time.</p>
Safari Extension Development: Capture Keyboard Shortcuts2014-09-16T00:00:00+00:00https://antrikshy.com/code/safari-extension-development-capture-keyboard-shortcuts<p>Apple does not provide an API to make a Safari browser extension that listens to keyboard shortcuts of your choice. I could not find any guides on how to achieve this, so I decided to write about my experience with this when developing <a href="http://antrikshy.com/Projects/recovertabs.htm">RecoverTabs</a>. I hope it helps someone trying to implement this in their own extension.</p>
<p>jQuery is <strong>not</strong> required for this solution.</p>
<p>If anybody reading this knows of a better way, do tell me in the comments. I’ll appreciate it.</p>
The Absolute Noob Guide To Hosting A Personal Website Or Blog On GitHub Pages - Part 32014-09-09T00:00:00+00:00https://antrikshy.com/code/the-absolute-noob-guide-to-hosting-a-personal-website-or-blog-on-github-pages-part-3<p>So you have decided to use Jekyll as your website engine of choice. It makes themeable, efficient websites that can be hosted on a traditional web server without the need for computation in the cloud, the hassle of databases etc.</p>
The Absolute Noob Guide To Hosting A Personal Website Or Blog On GitHub Pages - Part 22014-09-04T00:00:00+00:00https://antrikshy.com/code/the-absolute-noob-guide-to-hosting-a-personal-website-or-blog-on-github-pages-part-2<p>In <a href="http://code.antrikshy.com/noob-guide-to-hosting-cheap-website-blog-jekyll-github-pages-1">Part 1</a>, I explained the basics of setting up a GitHub repository for your GitHub Pages website. So far, you should have:</p>
<ol>
<li>Understood how GitHub works.</li>
<li>Created a GitHub account with a nice username choice, especially if you’re want to use their free <em>username</em>.github.io address.</li>
<li>Created a Git repository named <em>username</em>.github.io somewhere on your computer using the GitHub app. GitHub will recognize this as a user website.</li>
</ol>
<p>Now to decide what kind of website you want to set up.</p>
The Absolute Noob Guide To Hosting A Personal Website Or Blog On GitHub Pages - Part 12014-09-01T00:00:00+00:00https://antrikshy.com/code/the-absolute-noob-guide-to-hosting-a-personal-website-or-blog-on-github-pages-part-1<p>So you have made a decision. You want a personal webpage. You want to look professional by including a link in your email signature, with your job application or on your resume. It can be a convenient place to showcase any work you have done. Or it can just function as a hub for downloads or links to your portfolios on other websites like 500px, GitHub, deviantART, Behance etc.</p>
<p>Or maybe you have decided to go with a self-hosted personal blog. Instead of buying a domain name through WordPress.com or Blogger, you want more freedom in case you wish to migrate or change services later down the road.</p>
<p>Maybe you want both.</p>
Introducing Antriksh's Blog2014-08-31T00:00:00+00:00https://antrikshy.com/code/introducing-antrikshs-blog<p>Welcome to my personal blog! As I grow my skills, work on projects and experiment with code, I will inevitably come across things that are not well-documented online. I may figure out ways to accomplish something on a path that is not well-trodden. I may design something that requires documentation on a clean page but does not necessitate a GitHub repository. This is what this blog is for. To rephrase, I will document things on this blog that I don’t find elsewhere and which people like me might need at some point.</p>
<h2 id="examples-of-future-posts">Examples Of Future Posts:</h2>
<ul>
<li>How to [do something] using [some less-known framework/technology]</li>
<li>List of useful commands to [do something] in [some programming language]</li>
<li>Problems I faced while setting up [something]</li>
</ul>