Welcome to my blog and my playground.
I am Thai Pangsakulyanont. I put on this website various small projects, articles, and toys I made. Feel free to look around. For bigger projects, please see my website or my GitHub profile.
ttycast v0.2.0 is just released. This new version is easier to use, includes server-side terminal emulation (instead of client-side), configurable terminal size, and recording support to
.ttyfile. » read more
In Node.js, Buffers has toString() that can convert a buffer into a String with a specified encoding, and StringDecoder does the same. So, when to use StringDecoder? » read more
At the college, we're learning about abstract data types and few sorting algorithms, and so in this article I try to explain about the quicksort algorithm using some kind of an interactive demo. » read more
Tomorrow I'm going to have a discrete maths test, and so there are few friends asking me several questions.
So I think, wouldn't it be nice if there is a way to send them these mathematical equations (or few paragraph of text) in a way that is as easy as posting a Gist?
That's why I created Pagist. » read more
Just a diary for myself. Yesterday, while I was using my MacBook Pro normally, a soft touch on the return key broke it apart into two pieces. » read more
While creating a Live Scoreboard for this year's DJMAX Technika Thailand Championship, some of the data (list of participants, offline judge results) are stored on Google Spreadsheets.
I need to find a way to incorporate these data into the web app, and I find a purely client-side way to do it. » read more
I just refactored dtinthstagram a bit, to make the code more concise, also making use of Backbone.js. Here's the experience of it. » read more
I'm giving my friend a JavaScript and Node.js crash course through Skype, using ttycast to stream my live terminal session through to friend. Then I talked to him about what command-line apps can do: browsing the web, installing software, chatting, and watching movies right inside a Terminal! » read more
An Ajax app I made some time ago. It is an open-source super-smooth web-based Instagram viewer. If you are an Instagram user, try it out! :D » read more
Yesterday, I went to Chocolate Ville, a very beautiful restaurant, planning to take bunch of photos. I went with many friends, my MacBook Pro and my New iPad.
After the food is ordered, my friends went to look around and take more photos, while I and another friend were waiting for the food (someone has to look for our belongings), I then felt like oh it's a nice idea to take photos of everyone.
...but instead of asking the waitress to take a photo for us, I think I'd make my MacBook press the shutter button on my iPad for me. So while waiting for the food, I quickly created a remote shutter in Node.js. » read more
#thaiWitter has been using the engine in Firefox 3.6 since 2011, and I attempt to roll my own #thaiWitter app in XULRunner.
This blog post describes its experience. » read more
ttycast is a Node.js app that allows you to broadcast your tty online, in really real time! » read more
I just came from an HTML5 training. The instructors taught us some basic jQuery and told us to make an app about lifestyle.
So I think I'd try something new, so instead I play with Knockout.js » read more
Today, I started applying The Pomodoro Technique, so I made for myself a simple countdown timer.
This blog post also covers how to make a NSStatusItem that lives at the far right of the items. » read more
For some time blog has been running on a Ruby on Rails webapp hosted on Heroku, which makes it feels somewhat "slow". So I decided to make my website totally static and host them somewhere.
I got the blog engine done and then wondered where and how to put these static files. I chose Amazon S3 and tried to find a nice way to put the files up. I ended up writing my own syncer in Java. » read more
Just tried using Jailcoder to build and run iOS apps on my iPad. So here is a quick how to. » read more
While I was making dtinthstagram, I thought that it would be a good idea to make it work in Fluid, as well as a support for dock badges.
So I implemented it in a straightforward way. Then I found that going to other page and back to the old page breaks the Fluid JavaScript API. » read more
I've been chatting some OOP with a friend, who went to an army camp during the Object-Oriented Programming class. So I explained to him a bit on how
ActionListeners work. And here's how the conversation went: » read more
What it does, given a background color, an opacity, and a target color: It finds a color which when drawn on the background color with the given opacity, results in the target color. » read more
When I was making an auto form submission script, I tried to find out how to pass data from outside script to
page.evaluatescript. In all form submission examples that I've seen, they all use fixed data. As of 1.3.0, it's still unsupported.So I thought I would pass it as a global variable instead. » read more
So I played a bit with the PC Speaker like I like to do before in an AX-11. I tried using Beep() on Windows 7, but it didn't work, so I had to use Linux. I searched a lot on the Internet for how to make it generate a tone so I'll post it here for future reference. » read more
I just finished tweaking my Eclipse color theme.
On code with good balance of code and documentation, it will have a mix of cool colors and warm colors. Without the comments and stuff, it will look reddish. » read more
Not long ago while developing the #thaiWitter 3 server (Node.js + Express App), I realized that Heroku/Cedar doesn't gzip the output, so I need to gzip them myself. I go with node-compress. » read more
So in the preview of #thaiWitter 3 I've added Piggyback SSL to my Heroku app, and I couldn't find a way for the app to check if it's requested via SSL or not... » read more
The newer version of thaiWitter (known as thaiWitter 3) is almost out » read more
I'm been working on a little experiment that I need to process a set of images (loading it, and putting it in canvas, and then process it) sequentially.
In JavaScript, image loading is asynchronous, so I made these utility functions that makes processing things sequentially a lot easier. » read more
This so that you can make pictures that fit into Facebook's timeline cover image. » read more
I'm a bit tired of all those applications that tries to determine your top friends based on some factor, knowing that Facebook knows the ranking of your friend more than any other applications could know. So I created this little experiment. » read more
Hello! I am new to Ruby on Rails!
And I'm liking it! <3 » read more
Since the beginning, thaiWitter has a characteristic about the way it scrolls from one place to another place. This article discusses, in mathematics style, about how it scrolls from one position to another. » read more