<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>thani.sh</title>
		<link>https://thanish.me</link>
		<description>Notes on building things.</description>
		<language>en</language>
		<lastBuildDate>Sat, 27 Jun 2026 18:16:19 GMT</lastBuildDate>
		
		<item>
			<title>Multiplayer Tetris Game (part 6)</title>
			<link>https://thanish.me/blog/2025-06-08-multiplayer-tetris-game-part-6</link>
			<guid isPermaLink="true">https://thanish.me/blog/2025-06-08-multiplayer-tetris-game-part-6</guid>
			<pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate>
			<description>Instead of the step by step approach we followed on the previous article, what would happen if we simply asked the AI agent? Would it still be able to complete the task?</description>
		</item>
		<item>
			<title>Multiplayer Tetris Game (part 5)</title>
			<link>https://thanish.me/blog/2025-05-25-multiplayer-tetris-game-part-5</link>
			<guid isPermaLink="true">https://thanish.me/blog/2025-05-25-multiplayer-tetris-game-part-5</guid>
			<pubDate>Sun, 25 May 2025 00:00:00 GMT</pubDate>
			<description>We can take our game a step forward by allowing users to play from multiple devices. This time, let&apos;s try to use some AI agents to do the coding.</description>
		</item>
		<item>
			<title>Multiplayer Tetris Game (part 4)</title>
			<link>https://thanish.me/blog/2022-11-20-multiplayer-tetris-game-part-4</link>
			<guid isPermaLink="true">https://thanish.me/blog/2022-11-20-multiplayer-tetris-game-part-4</guid>
			<pubDate>Sun, 20 Nov 2022 00:00:00 GMT</pubDate>
			<description>This tutorial continues where we left off on part 3. We will add some tests to make sure the game is working as expected.</description>
		</item>
		<item>
			<title>Multiplayer Tetris Game (part 3)</title>
			<link>https://thanish.me/blog/2022-11-11-multiplayer-tetris-game-part-3</link>
			<guid isPermaLink="true">https://thanish.me/blog/2022-11-11-multiplayer-tetris-game-part-3</guid>
			<pubDate>Fri, 11 Nov 2022 00:00:00 GMT</pubDate>
			<description>This tutorial continues where we left off on part 2. We will split the code into multiple files to make it easier to maintain and implement a few more game rules.</description>
		</item>
		<item>
			<title>Multiplayer Tetris Game (part 2)</title>
			<link>https://thanish.me/blog/2021-01-24-multiplayer-tetris-game-part-2</link>
			<guid isPermaLink="true">https://thanish.me/blog/2021-01-24-multiplayer-tetris-game-part-2</guid>
			<pubDate>Sun, 24 Jan 2021 00:00:00 GMT</pubDate>
			<description>This tutorial validates the design we used to write code on part 1. We will try whether it&apos;s possible to fix bugs easily and whether we can add some new features to the game without major code/design changes.</description>
		</item>
		<item>
			<title>Multiplayer Tetris Game (part 1)</title>
			<link>https://thanish.me/blog/2020-12-13-multiplayer-tetris-game-part-1</link>
			<guid isPermaLink="true">https://thanish.me/blog/2020-12-13-multiplayer-tetris-game-part-1</guid>
			<pubDate>Sun, 13 Dec 2020 00:00:00 GMT</pubDate>
			<description>A tutorial about writing a multiplayer game from scratch. Starting from solidifying the requirements and continues all the way up to creating a working prototype with vanilla js.</description>
		</item>
		<item>
			<title>Solving Interview Problems</title>
			<link>https://thanish.me/blog/2019-02-05-creately-interview-question</link>
			<guid isPermaLink="true">https://thanish.me/blog/2019-02-05-creately-interview-question</guid>
			<pubDate>Tue, 05 Feb 2019 00:00:00 GMT</pubDate>
			<description>Sometimes, we get to solve programming questions on site during software engineering interviews. This is one of the questions I used to ask from candidates.</description>
		</item>
		<item>
			<title>Debugging RxJS code</title>
			<link>https://thanish.me/blog/2018-09-05-debugging-rxjs-code</link>
			<guid isPermaLink="true">https://thanish.me/blog/2018-09-05-debugging-rxjs-code</guid>
			<pubDate>Wed, 05 Sep 2018 00:00:00 GMT</pubDate>
			<description>This are undocumented internal details of RxJS and it can break anytime. It probably would have changed by the time you&apos;re reading this blog post.</description>
		</item>
		<item>
			<title>Duplicate click events</title>
			<link>https://thanish.me/blog/2017-06-27-debugging-duplicate-click-events</link>
			<guid isPermaLink="true">https://thanish.me/blog/2017-06-27-debugging-duplicate-click-events</guid>
			<pubDate>Tue, 27 Jun 2017 00:00:00 GMT</pubDate>
			<description>While trying to debug this issue, we found out a couple of interesting things about how Angular manages event handlers.</description>
		</item>
		<item>
			<title>FabricJS performance hack</title>
			<link>https://thanish.me/blog/2017-05-17-fabricjs-performance-hack</link>
			<guid isPermaLink="true">https://thanish.me/blog/2017-05-17-fabricjs-performance-hack</guid>
			<pubDate>Wed, 17 May 2017 00:00:00 GMT</pubDate>
			<description>The frame rate can be improved by only rendering inside a rAF callback.</description>
		</item>
		<item>
			<title>The class in static methods</title>
			<link>https://thanish.me/blog/2017-01-25-getting-the-class-in-static-methods</link>
			<guid isPermaLink="true">https://thanish.me/blog/2017-01-25-getting-the-class-in-static-methods</guid>
			<pubDate>Wed, 25 Jan 2017 00:00:00 GMT</pubDate>
			<description>This is useful when writing static methods which can be inherited by other classes. Here&apos;s an example.</description>
		</item>
		<item>
			<title>Async tasks sequentially</title>
			<link>https://thanish.me/blog/2017-01-09-running-async-tasks-sequentially</link>
			<guid isPermaLink="true">https://thanish.me/blog/2017-01-09-running-async-tasks-sequentially</guid>
			<pubDate>Mon, 09 Jan 2017 00:00:00 GMT</pubDate>
			<description>Let&apos;s check this badly written example first. The sequence below will run each step asynchronously.</description>
		</item>
		<item>
			<title>Rant - JavaScript import syntax</title>
			<link>https://thanish.me/blog/2016-09-07-rant--javascript-import-syntax</link>
			<guid isPermaLink="true">https://thanish.me/blog/2016-09-07-rant--javascript-import-syntax</guid>
			<pubDate>Wed, 07 Sep 2016 00:00:00 GMT</pubDate>
			<description>The import syntax on javascript looks damn ugly when many items from a module. Take this example piece of code form a typical GraphQL code.</description>
		</item>
		<item>
			<title>Transpiled JS on Github?</title>
			<link>https://thanish.me/blog/2016-07-13-transpiled-js-on-github</link>
			<guid isPermaLink="true">https://thanish.me/blog/2016-07-13-transpiled-js-on-github</guid>
			<pubDate>Wed, 13 Jul 2016 00:00:00 GMT</pubDate>
			<description>If you&apos;re maintaining a javascript project on Github there&apos;s a good chance you&apos;re using a transpiler to convert it to a format usable be older platforms and to minify it.</description>
		</item>
		<item>
			<title>Using multiple GOPATHs</title>
			<link>https://thanish.me/blog/2016-01-18-using-multiple-gopaths</link>
			<guid isPermaLink="true">https://thanish.me/blog/2016-01-18-using-multiple-gopaths</guid>
			<pubDate>Mon, 18 Jan 2016 00:00:00 GMT</pubDate>
			<description>Is it possible to use multiple directories as GOPATH and how does it behave when downloading packages or when importing go pacakges from code?</description>
		</item>
		<item>
			<title>Masking GraphQL Errors</title>
			<link>https://thanish.me/blog/2016-01-03-masking-graphql-errors</link>
			<guid isPermaLink="true">https://thanish.me/blog/2016-01-03-masking-graphql-errors</guid>
			<pubDate>Sun, 03 Jan 2016 00:00:00 GMT</pubDate>
			<description>The way graphql-js and express-graphql handle errors is has some issues. Consider this example server which has a bug in a resolve function.</description>
		</item>
		<item>
			<title>Github repo license file</title>
			<link>https://thanish.me/blog/2015-10-17-github-repo-license-file</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-10-17-github-repo-license-file</guid>
			<pubDate>Sat, 17 Oct 2015 00:00:00 GMT</pubDate>
			<description>I, like many other developers, always use Github to host my projects. And like most of them I thought all of  my public projects are by default open source.</description>
		</item>
		<item>
			<title>Day 3</title>
			<link>https://thanish.me/blog/2015-07-29-day-3--packages</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-07-29-day-3--packages</guid>
			<pubDate>Wed, 29 Jul 2015 00:00:00 GMT</pubDate>
			<description>All go packages except packages from the standard library are placed inside the $GOPATH. A package consists of a set of go files in a directory.</description>
		</item>
		<item>
			<title>Day 2 - Built-in Features</title>
			<link>https://thanish.me/blog/2015-07-28-day-2--built-in-features</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-07-28-day-2--built-in-features</guid>
			<pubDate>Tue, 28 Jul 2015 00:00:00 GMT</pubDate>
			<description>This tutorial consists of a number of example go programs demonstrating each feature. It is recommended to try some of them on the Go playground or on your local machine.</description>
		</item>
		<item>
			<title>Day 1 - Getting Started</title>
			<link>https://thanish.me/blog/2015-07-27-day-1--getting-started</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-07-27-day-1--getting-started</guid>
			<pubDate>Mon, 27 Jul 2015 00:00:00 GMT</pubDate>
			<description>The go playground is where go code can be run easily and fast therefore it makes an efficient place to try new go code. This also makes the playground useful when learning how to program with Go.</description>
		</item>
		<item>
			<title>Limit Go Benchmark b.N</title>
			<link>https://thanish.me/blog/2015-07-23-limit-go-benchmark-b-n</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-07-23-limit-go-benchmark-b-n</guid>
			<pubDate>Thu, 23 Jul 2015 00:00:00 GMT</pubDate>
			<description>Operations count (b.N) can be set inside the function to limit the number of operations Go benchmark does. But perhaps this is a sign there might be other issues.</description>
		</item>
		<item>
			<title>Go for Node developers</title>
			<link>https://thanish.me/blog/2015-04-15-go-for-node-developers</link>
			<guid isPermaLink="true">https://thanish.me/blog/2015-04-15-go-for-node-developers</guid>
			<pubDate>Wed, 15 Apr 2015 00:00:00 GMT</pubDate>
			<description>I&apos;m developing Node apps for years and started working with Go last month. So far, I like it as much as I like Node. So I hope to blog some quick tips about Go (aka Golang).</description>
		</item>
		<item>
			<title>Errors vs. Bugs</title>
			<link>https://thanish.me/blog/2014-10-11-errors-vs-bugs</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-10-11-errors-vs-bugs</guid>
			<pubDate>Sat, 11 Oct 2014 00:00:00 GMT</pubDate>
			<description>One of the most important things I learned during past few months at  MeteorHacks is the difference between errors and bugs and how they  should be handled.</description>
		</item>
		<item>
			<title>Isolated Testing</title>
			<link>https://thanish.me/blog/2014-09-08-isolated-testing</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-09-08-isolated-testing</guid>
			<pubDate>Mon, 08 Sep 2014 00:00:00 GMT</pubDate>
			<description>Just thought of sharing something about writing tests with JavaScript. Usually, it&apos;s best to keep tests simple and test just one thing per test.</description>
		</item>
		<item>
			<title>Empty Function Shorthand</title>
			<link>https://thanish.me/blog/2014-08-13-empty-function-shorthand</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-08-13-empty-function-shorthand</guid>
			<pubDate>Wed, 13 Aug 2014 00:00:00 GMT</pubDate>
			<description>JavaScript is an interesting language and so far my favorite. Maybe it&apos;s just me but I find stuff some people complain about javascript such as automatic semicolon insertion.</description>
		</item>
		<item>
			<title>Aggregation for Firebase</title>
			<link>https://thanish.me/blog/2014-05-24-aggregation-for-firebase</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-05-24-aggregation-for-firebase</guid>
			<pubDate>Sat, 24 May 2014 00:00:00 GMT</pubDate>
			<description>Assume we need to create a realtime dashboard to show some summary values. Usually, with Firebase, we&apos;ll have to get all data to the client and process them there.</description>
		</item>
		<item>
			<title>Organizing files in Meteor</title>
			<link>https://thanish.me/blog/2014-05-02-organizing-files-in-meteor</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-05-02-organizing-files-in-meteor</guid>
			<pubDate>Fri, 02 May 2014 00:00:00 GMT</pubDate>
			<description>Starting hacking on a project with Meteor is lots of fun. But things can become a mess very easily. Meteor does not have too much restrictions on how to organize our project.</description>
		</item>
		<item>
			<title>‘Hello World&apos; to MeteorJS</title>
			<link>https://thanish.me/blog/2014-05-02-another-hello-world-to-meteorjs</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-05-02-another-hello-world-to-meteorjs</guid>
			<pubDate>Fri, 02 May 2014 00:00:00 GMT</pubDate>
			<description>In this tutorial, I&apos;ll try to walk you through building a simple realtime wall (like a guestbook) where anyone can post messages.</description>
		</item>
		<item>
			<title>When not to &quot;Fork&quot; on Github</title>
			<link>https://thanish.me/blog/2014-04-02-when-not-to-fork-on-github</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-04-02-when-not-to-fork-on-github</guid>
			<pubDate>Wed, 02 Apr 2014 00:00:00 GMT</pubDate>
			<description>When I first started using Github, just like many others I simply  went ahead and forked each and every repository I liked on Github. But  this makes no sense at all.</description>
		</item>
		<item>
			<title>Elastic Iframes</title>
			<link>https://thanish.me/blog/2014-03-29-elastic-iframes</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-03-29-elastic-iframes</guid>
			<pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
			<description>Sometimes it become necessary to use iframes when building some web  applications. Often we have them hidden but sometimes iframes can be  useful visible too.</description>
		</item>
		<item>
			<title>Setting up wingpanel-slim</title>
			<link>https://thanish.me/blog/2014-03-28-setting-up-wingpanel-slim</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-03-28-setting-up-wingpanel-slim</guid>
			<pubDate>Fri, 28 Mar 2014 00:00:00 GMT</pubDate>
			<description>Elementary OS is one of the most beautiful operating systems I&apos;ve  ever used. Usually I mod my OS extremely but for the first time, I left most of the OS defaults as is.</description>
		</item>
		<item>
			<title>Create an empty git branch</title>
			<link>https://thanish.me/blog/2014-03-27-create-an-empty-git-branch</link>
			<guid isPermaLink="true">https://thanish.me/blog/2014-03-27-create-an-empty-git-branch</guid>
			<pubDate>Thu, 27 Mar 2014 00:00:00 GMT</pubDate>
			<description>It&apos;s really easy to create a new empty git branch with no parents (AKA orphan branches). First create an orphan branch with this command.</description>
		</item>
	</channel>
</rss>