<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on Kalyan</title>
    <link>https://kalyanchakravarthy.net/blog.html</link>
    <description>Recent content in Blogs on Kalyan</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 19 Aug 2021 14:46:14 +0200</lastBuildDate><atom:link href="https://kalyanchakravarthy.net/blog/feeds.rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Left Shift with Float Conversion in Go!</title>
      <link>https://kalyanchakravarthy.net/blog/left-shift-with-float-conversion-in-go.html</link>
      <pubDate>Thu, 19 Aug 2021 14:46:14 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/left-shift-with-float-conversion-in-go.html</guid>
      <description>The following piece of code while it looks innocent actually does not compile
return int64(0.5 * float64((1&amp;lt;&amp;lt;n)-1)) It produces the following error
exp.go:22:28: invalid operation: 1 &amp;lt;&amp;lt; n (shift of type float64) What is happening here?
This is because when you do float64(1&amp;lt;&amp;lt;n) the first instinct of golang&amp;rsquo;s compiler is to convert the 1 into float64. So its equivalent to float64(1) &amp;lt;&amp;lt; n which obviously would not work because you can&amp;rsquo;t shift floats.</description>
    </item>
    
    <item>
      <title>Submit Ajax Form including Button Name</title>
      <link>https://kalyanchakravarthy.net/blog/submit-ajax-form-including-button-name.html</link>
      <pubDate>Mon, 12 Apr 2021 20:15:56 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/submit-ajax-form-including-button-name.html</guid>
      <description>When submitting an ajax from, form.serialize() does not include the clicked button. We need to manually append this from the originalEvent attribute
$(&amp;#34;form&amp;#34;).on(&amp;#34;submit&amp;#34;, function(event)) { var data = $(this).serialize(); if(event.originalEvent.submitter) { data = s[&amp;#39;name&amp;#39;] + &amp;#34;=&amp;#34; + s[&amp;#39;value&amp;#39;] + &amp;#34;&amp;amp;&amp;#34; + data } // continue } </description>
    </item>
    
    <item>
      <title>Basic Auth in Go</title>
      <link>https://kalyanchakravarthy.net/blog/basic-auth.html</link>
      <pubDate>Wed, 24 Mar 2021 23:19:41 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/basic-auth.html</guid>
      <description>Code snippet to perform basic auth using go. Every incoming request is required to pass the the username/password combination in the headers and you are expected to validate and return a www-authenticate header response in case of auth failure.
hFunc := func(w http.ResponseWriter, r *http.Request) { user, pass, ok := r.BasicAuth() if !ok { fmt.Println(&amp;#34;Error parsing basic auth&amp;#34;) w.Header().Set(&amp;#34;WWW-Authenticate&amp;#34;, `Basic realm=&amp;#34;mydomain&amp;#34;`) w.WriteHeader(401) return } // ... do your thing } return http.</description>
    </item>
    
    <item>
      <title>Network Scans with arp and nmap</title>
      <link>https://kalyanchakravarthy.net/blog/network-scans.html</link>
      <pubDate>Tue, 09 Jun 2020 14:26:07 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/network-scans.html</guid>
      <description>Once in a while, I get around running network scans to check what devices and ports are open on my network. The proliferation of IoT devices in my home, combined with lack of VLAN capabilities of my router, has upped my uneasiness in the recent times.
There are two modes of scans I often run
MAC Address scans All devices on my router have to be manually mac address whitelisted before they are able to connect to either the internet or be used internally.</description>
    </item>
    
    <item>
      <title>Books in 2019</title>
      <link>https://kalyanchakravarthy.net/blog/books-in-2019.html</link>
      <pubDate>Wed, 15 Jan 2020 00:01:43 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/books-in-2019.html</guid>
      <description>As with 2016, 2017 &amp;amp; 2018, I spent time lot of time reading in 2019. I managed read a total of 28 books, of which a fair amount ended up being science fiction.
Non-fiction Its good to get the nonfiction list out of the way as its pretty short. I enjoyed every single one of them. They were light, informative and useful.
Kubernetes by Kelsey Hightower
The Gene by Siddhartha Mukherjee</description>
    </item>
    
    <item>
      <title>Automated Plant Watering System - Part 3 - the software</title>
      <link>https://kalyanchakravarthy.net/blog/automated-plant-watering-system-part-3-improving-code.html</link>
      <pubDate>Thu, 09 Jan 2020 18:08:37 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/automated-plant-watering-system-part-3-improving-code.html</guid>
      <description>This is a follow up to Part 2 of my Mark2 design and build of Plant watering system.
Learning The 3.7v LiPo was unable to deliver the required current of about 350 mA for running 2 motors simultaneously. This lead to the batteries dying out prematurely while being perfectly capable of squeezing out juice for just one motor. Different plants have different water consumption characteristics. For example with the current setup my Basil plant was thriving while the Coriander plant withered away due to over-watering The use of a push button without a pull down resistor makes it unusable and therefore less useful.</description>
    </item>
    
    <item>
      <title>Starlink satellite tracker</title>
      <link>https://kalyanchakravarthy.net/blog/starlink-satellite-tracker.html</link>
      <pubDate>Fri, 03 Jan 2020 01:14:54 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/starlink-satellite-tracker.html</guid>
      <description>This is my first app that is published on both Android Play Store &amp;amp; Apple Appstore platforms. Despite React Native&amp;rsquo;s brittleness and shortcomings, the productivity I experienced while working with it was phenomenal. I think I might just migrate all my old &amp;ldquo;pure&amp;rdquo; Objective-C apps to RN.
Really happy with how it turned out. Am even proud of what my lackluster design skills managed to churn out. The apps were built as a companion to the web version that my friend built (me.</description>
    </item>
    
    <item>
      <title>Getting rid of Alternate Screen</title>
      <link>https://kalyanchakravarthy.net/blog/getting-rid-of-alternative-screen.html</link>
      <pubDate>Mon, 30 Dec 2019 11:18:36 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/getting-rid-of-alternative-screen.html</guid>
      <description>&amp;hellip; or simply making the damn terminal content persist when I seek any form of --help or run git diff.
I don&amp;rsquo;t know whoever thought or why they thought that alternate screen was a sane idea is beyond me. I&amp;rsquo;d do a git diff to check my commits and promptly forget the specifics by the time I get to writing the commit message. Same with the python REPL&amp;rsquo;s help function. The frustration was the kind that builds up like a thousand paper cuts, each seemingly an insignificant occurrence, only day you suddenly find yourself quadriplegic.</description>
    </item>
    
    <item>
      <title>Stuff I learnt in 2019</title>
      <link>https://kalyanchakravarthy.net/blog/learning-in-2019.html</link>
      <pubDate>Thu, 26 Dec 2019 22:05:50 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/learning-in-2019.html</guid>
      <description>I enjoy learning new things, especialy if I am able to either build something out of it or put it to use to improve my life. Here are some things from the top of my head that I managed to learn or start learning in 2019.
Tech/Programming
Learning new technologies is a never-ending endeavour. I built at least one public-facing hobby project starting from zero with the following:
React Native for building iOS &amp;amp; Android apps * Published an iOS app with another in the works.</description>
    </item>
    
    <item>
      <title>Automated Plant Watering System - Part 2 - PCB Design and Prototyping</title>
      <link>https://kalyanchakravarthy.net/blog/automated-plant-watering-system-part-2-pcb-design-and-prototyping.html</link>
      <pubDate>Wed, 28 Aug 2019 10:49:11 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/automated-plant-watering-system-part-2-pcb-design-and-prototyping.html</guid>
      <description>After running the Mark-1 prototype for a week, I wanted to scale up this effort for more of my plants. However efforts to prototype on a PCB blank were a complete mess, so I decided to jump the gun and build Mark-2.
Mark-2 Design Goals: It was clear that running one MCU per plant was not effective, at the same time I wanted configurability and thus compromises had to be made.</description>
    </item>
    
    <item>
      <title>Automated Plant Watering System  - Part 1</title>
      <link>https://kalyanchakravarthy.net/blog/automating-watering-plants.html</link>
      <pubDate>Mon, 26 Aug 2019 11:40:41 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/automating-watering-plants.html</guid>
      <description>As I finally found sometime at hand, I decided to attend to one of my long standing projects to automate watering of my plants, which have been through stressful troughs of famine and crests of over-watering.
Goals One of the goals were that the system should last long enough while running off a battery. Secondary goals was the use of soil moisture sensors to optimize further.
Bill of materials: Digispark Attiny85 Common NPN Transistor 3.</description>
    </item>
    
    <item>
      <title>Split mp3&#39;s using silence detection</title>
      <link>https://kalyanchakravarthy.net/blog/split-mp3s.html</link>
      <pubDate>Wed, 03 Jul 2019 02:44:34 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/split-mp3s.html</guid>
      <description>Am listening to audio for practicing dutch comprehension, which essentially consists of a collection of short sentences on repeat. However this audio is available as a single track and for the purpose of shadowing, I wanted individual mp3&amp;rsquo;s.
Enter mp3splt
Install it using brew brew install mp3splt Auto detect silence and split mp3splt -s -d output_folder audio.mp3 This detects the average silence level and uses it to split.
Params:
-s - Split with auto detection -d - Output directory Split at specified silence volume mp3splt -s -p th=-40 audio.</description>
    </item>
    
    <item>
      <title>FFMPEG: Combine videos and re-encode</title>
      <link>https://kalyanchakravarthy.net/blog/ffmpeg-combine-videos-and-re-encode.html</link>
      <pubDate>Sat, 02 Mar 2019 13:01:22 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/ffmpeg-combine-videos-and-re-encode.html</guid>
      <description>Over the past few weeks, I&amp;rsquo;ve taken to recording my Squash games using my Gopro to understand areas of improvement. The video is recorded at 1080p and 60fps, however Gopro splits the video into several large sized mp4 files.
I wanted to combine them together into a single file and re-encoded to reduce the file size significantly and ffmpeg came to rescue.
Combine Files First order is to combine the files.</description>
    </item>
    
    <item>
      <title>Books in 2018</title>
      <link>https://kalyanchakravarthy.net/blog/books-in-2018.html</link>
      <pubDate>Tue, 01 Jan 2019 09:43:08 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/books-in-2018.html</guid>
      <description>Similar to 2016 and 2017, I spent a lot of time reading books. Original goal was to read at least 25, but I managed to read only 24. However, I attribute it to spending a lot time reading genres that were outside my comfort zone, such as philosophy and biographies.
Here is a small collage I built with a python script, of all the titles I managed to read.
Fiction 1.</description>
    </item>
    
    <item>
      <title>Bug in my code and Ballet</title>
      <link>https://kalyanchakravarthy.net/blog/bug-in-my-code-and-ballet.html</link>
      <pubDate>Fri, 29 Jun 2018 14:29:44 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/bug-in-my-code-and-ballet.html</guid>
      <description>&amp;hellip; of sorts, or more accurately barre.
I use a service called Onefit in the Netherlands which lets me register for group lessons or use a gym in a bunch of places (limit is four times a month). I used it for joining yoga classes sometime back. Apparently its quite popular with locals here and so I have a hard time finding a spot. So like any sensible person, I tried to automate it.</description>
    </item>
    
    <item>
      <title>Python Deployments Wishlist</title>
      <link>https://kalyanchakravarthy.net/blog/python-deployment-wishlist.html</link>
      <pubDate>Fri, 29 Jun 2018 14:05:20 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/python-deployment-wishlist.html</guid>
      <description>Am currently faced with a baffling realisation of the reality that there is no one sane way to deploy python applications.
It&amp;rsquo;s utterly annoying that I cannot just tar a virtual env and use it.
Performing pip install on every deploy is plain ridiculous. Downloading from the internet on every code change with separate virtualenv is a nogo. No RPMs, nope, no way am writing another spec file.
Wishlist:
Deployment tooling that allows me to go from zero to production with a new application with no setup.</description>
    </item>
    
    <item>
      <title>People</title>
      <link>https://kalyanchakravarthy.net/blog/toxic-people.html</link>
      <pubDate>Mon, 26 Mar 2018 16:21:34 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/toxic-people.html</guid>
      <description>Ever since we are born into this world, our lives begin by being cared by others. We grow to realise, implicitly that people are essential. How could we comprehend any other possibility?
So we try to be friendly, often more than that is necessary or possible to be reciprocated as humans are different. Why do it then? Because it&amp;rsquo;s convenient to think, to have more friends is to share good times with many, thereby meaning more happiness.</description>
    </item>
    
    <item>
      <title>Introduction to R language</title>
      <link>https://kalyanchakravarthy.net/blog/introduction-to-r-lang.html</link>
      <pubDate>Thu, 05 Oct 2017 22:34:44 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/introduction-to-r-lang.html</guid>
      <description>Inspired by a friend&amp;rsquo;s prolific use of R for doing data analysis, over past few days I have been trying to get the hang of the language. Here are some notes and thoughts
First impressions Thinking of R as a programming language may sub-consciously invite a notion of procedural logic. That was a path not worth going down. Its easier to assimilate the syntax, if one were to consider it an expression evaluation system.</description>
    </item>
    
    <item>
      <title>Getting started with a blank iOS Project</title>
      <link>https://kalyanchakravarthy.net/blog/blank-ios-project-without-storyboards.html</link>
      <pubDate>Wed, 26 Jul 2017 21:08:04 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/blank-ios-project-without-storyboards.html</guid>
      <description>Everytime I start a new Xcode/iOS project, there are few rituals I perform, quite religiously.
Disable Storyboards I dislike storyboards and xibs with passion. Fiddling around a clunky Xcode interface to get layouts to work, with uncertainty of how they will behave on different resolutions, is quite annoying. And in large team settings which I worked in before, its quite frankly useless.
What&amp;rsquo;s needed for doing it?
Delete files Main.storyboard and Main-iPad.</description>
    </item>
    
    <item>
      <title>Go-snippet: static file server</title>
      <link>https://kalyanchakravarthy.net/blog/go-snippet-static-file-server.html</link>
      <pubDate>Wed, 26 Jul 2017 14:38:04 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/go-snippet-static-file-server.html</guid>
      <description>Am working on building some tooling that involves cloning a git repository and passing its path to my go server. One of the duties of that server is to make a static files folder available at a specific path.
This is the code snippet I use to achieve it.
r := mux.NewRouter() //gorilla mux r.PathPrefix(&amp;#34;/static&amp;#34;).Handler( http.StripPrefix( &amp;#34;/static/&amp;#34;, http.FileServer(http.Dir(&amp;#34;./static-dir/&amp;#34;), ), ) http.Handle(&amp;#34;/&amp;#34;, r) http.ListenAndServe(&amp;#34;:8080&amp;#34;, nil) Note: The comma at end of each line, including at the end of http.</description>
    </item>
    
    <item>
      <title>TLS webserver server in Go</title>
      <link>https://kalyanchakravarthy.net/blog/tls-server-in-go.html</link>
      <pubDate>Sun, 23 Jul 2017 13:31:52 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/tls-server-in-go.html</guid>
      <description>Simple HTTP Server Getting a go webserver is incredibly simple. All it takes is this
mux := http.NewServeMux() mux.HandleFunc(&amp;#34;/&amp;#34;, func(w http.ResponseWriter, r *http.Request) s := &amp;amp;http.Server{ Addr: &amp;#34;:8080&amp;#34;, Handle: mux, } s.ListenAndServe() TLS Server If all you wanted was to run it with single certificate pair, its straight forward
s.ListenAndServeTLS(&amp;#34;certFile&amp;#34;, &amp;#34;keyFile&amp;#34;) TLS Server with multiple certificates Default server.ListenAndServe is not good for running an http server with multiple certificates.
This was a particular use case I needed to solve</description>
    </item>
    
    <item>
      <title>Books in 2017</title>
      <link>https://kalyanchakravarthy.net/blog/books-in-2017.html</link>
      <pubDate>Sat, 22 Jul 2017 22:37:13 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/books-in-2017.html</guid>
      <description>Last year I read quite some books, unconsciously, without much thought but entirely engrossed. It bought me peace and quiet. A big chunk of it was fiction.
As a challenge of not only equalling the amount of reading I get done, I also set myself up to expand on the topics to read. This has been hard so far.
Here is a list in reverse chronological order that I finished reading.</description>
    </item>
    
    <item>
      <title>HTTPS server with Go &#43; LetsEncrypt</title>
      <link>https://kalyanchakravarthy.net/blog/https-server-with-go-letsencrypt.html</link>
      <pubDate>Thu, 12 Jan 2017 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/https-server-with-go-letsencrypt.html</guid>
      <description>Getting a HTTPS server started in Go using certificates from letsencrypt is incredibly easy. Just takes 3 lines of code.
Usage The package autocert does this for you.
go get -d golang.org/x/crypto/acme/autocert Use it to constructs a new listener and start a server
l := autocert.NewListener(&amp;#34;www.example.com) s := &amp;amp;http.Server{} s.Serve(l) Full Source package main import ( &amp;#34;fmt&amp;#34; &amp;#34;net/http&amp;#34; &amp;#34;github.com/gorilla/mux&amp;#34; &amp;#34;golang.org/x/crypto/acme/autocert&amp;#34; ) func main() { // 1. proxy requests // 2. letsencrypt based https // 3.</description>
    </item>
    
    <item>
      <title>Books in 2016</title>
      <link>https://kalyanchakravarthy.net/blog/books-in-2016.html</link>
      <pubDate>Tue, 06 Dec 2016 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/books-in-2016.html</guid>
      <description>A better part of 2016 was spent reading books. This obsession took shape from the company of people who liked to read, in a country where there was nothing much I could do offline without getting overwhelmed; nor could I wander around online without ultra-slow-vpns (aka China). One goal for 2016 was to finish reading atleast 25 book and I managed to reach it. A major chunk was filled by Sci-Fi.</description>
    </item>
    
    <item>
      <title>Xcode: Keyboard shortcuts for assistant editor</title>
      <link>https://kalyanchakravarthy.net/blog/xcode-keyboard-shortcuts-for-assistant-editor.html</link>
      <pubDate>Mon, 07 Mar 2016 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/xcode-keyboard-shortcuts-for-assistant-editor.html</guid>
      <description>Most of the time I just need 2 code panes on my main monitor, for which using ⌥⌘↩ or Option-Command-↩ usually does the job. Sometimes I need to see more than 2 files on the same screen and I always keep forgetting how to do that in Xcode. Here is it on record for posterity.
There are 2 ways
View -&amp;gt; Assistant Editor -&amp;gt; Add Assistant editor Command-Shift-O -&amp;gt; Select file -&amp;gt; Command+J </description>
    </item>
    
    <item>
      <title>FFMPEG: Simple video editing</title>
      <link>https://kalyanchakravarthy.net/blog/ffmpeg-simple-video-editing.html</link>
      <pubDate>Sun, 06 Mar 2016 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/ffmpeg-simple-video-editing.html</guid>
      <description>As I started shooting videos from my drone, a pattern I repeatedly see is that I want to extract bits of a video for posting. Since I can&amp;rsquo;t be bothered to install dedicated video editing tools to do that, am learning how to do that in ffmpeg. Turns out it is pretty straight forward
Cut video $ ffmpeg -i &amp;lt;InputVideo.mp4&amp;gt;\ -ss &amp;lt;start_from_seconds&amp;gt;\ -t &amp;lt;end_at_seconds&amp;gt;\ -c copy &amp;lt;OutputVideo.mp4&amp;gt; -ss start_from_seconds - this is the start time point in original video -t end_at_seconds - end time point in the original video Add Audio This works by selecting 2 inputs and composing the output with stream selection using -map.</description>
    </item>
    
    <item>
      <title>Dispatch Sources: Timer</title>
      <link>https://kalyanchakravarthy.net/blog/dispatch-sources-timer.html</link>
      <pubDate>Tue, 15 Sep 2015 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/dispatch-sources-timer.html</guid>
      <description>Dispatch souces define an event source that when triggered can invoke a pre-defined callback. Instead of registering for events and then writing logic to handle events to make a callback, dispatch source can be used.
Dispatch timer
For example, with interval timers, its not trivial to setup NSTimer outside of main threads as it requires a run-loop with predictable lifetime. Using a runloop outside main thread is painful. Dispatch queues have ephimeral threads and as such are bad candidates for use with NSTimers.</description>
    </item>
    
    <item>
      <title>Go-lang Notes</title>
      <link>https://kalyanchakravarthy.net/blog/go-notes.html</link>
      <pubDate>Sat, 27 Jun 2015 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/go-notes.html</guid>
      <description>Declarations Sometimes its hard to believe that this is indeed a compiled language, mostly due to type inference.
In most cases you do not need to specify type in declarative initialization unless you are just declaring.
var someInt int; // type required anotherInt := 23 // type not required Type inference is only available inside functions and not in top level declarations. The designers state that it is by design to optimise for faster compilation.</description>
    </item>
    
    <item>
      <title>Detect touches on words in UILabels</title>
      <link>https://kalyanchakravarthy.net/blog/detect-touches-on-words-in-uilabels.html</link>
      <pubDate>Thu, 23 Apr 2015 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/detect-touches-on-words-in-uilabels.html</guid>
      <description>Detecting touches on UIViews is quite trivial. But trying to recognize touches on individual words or attributed strings can be not so much, which was exactly what I wanted to do.
There are 2 approaches one can take
CoreText and compute the frames of all glyphs TextKit - which is not exactly kit per se, but are bunch of classes part of UIKit TextKit TextKit is designed based on MVC, with:</description>
    </item>
    
    <item>
      <title>Sketch Plugin to resize iOS app icon to all resolutions</title>
      <link>https://kalyanchakravarthy.net/blog/sketch-plugin-to-resize-ios-app-icon-to-all-resolutions.html</link>
      <pubDate>Tue, 14 Apr 2015 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/sketch-plugin-to-resize-ios-app-icon-to-all-resolutions.html</guid>
      <description>Most common use-case of designing an iOS App Icon, simply involves designing the main iTunesArtwork@2x.png and then resizing it to all other resolutions. Since the default template does not come with a smart symbol available across all artboards, you have to create one and copy it over and resize it manually.
Since I am too lazy to do it, I wrote a sketch plugin in javascript.
Steps: Open Sketch * Create New From Template</description>
    </item>
    
    <item>
      <title>Convert DXF to SVG using OpenSCAD</title>
      <link>https://kalyanchakravarthy.net/blog/convert-dxf-to-svg.html</link>
      <pubDate>Sat, 06 Dec 2014 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/convert-dxf-to-svg.html</guid>
      <description>After discovering a local makerspace which has free open days, I wanted to try their laser cutter, for which I needed to provide a file in SVG format.
One of the challenges I set myself up for was to be able to create model and have series of scripts to do the rest of conversion for me.
I started with a simple sliced model in OpenSCAD, which unfortunately only exported to DXF format</description>
    </item>
    
    <item>
      <title>Drawing anti-aliased unicode text with python</title>
      <link>https://kalyanchakravarthy.net/blog/drawing-anti-aliased-unicode-text-with-python.html</link>
      <pubDate>Sun, 16 Nov 2014 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/drawing-anti-aliased-unicode-text-with-python.html</guid>
      <description>For an app I was hacking during the weekend, I needed to generate images for all characters of Berber alphabet and had to figure out several things
converting hexcode to python unicode Since there were a lot of characters and they were contiguous, I could loop through them - for this, I had to figure out how to convert hex code into python unicode character
hexCode = &amp;#39;0x2d62&amp;#39; # U+2d62 intValue = int( hexCode, 16 ) # hex is base 16 # using unicode(intValue) won&amp;#39;t work pyUnicodeChar = unichr( intValue ) drawing on the image Next came the part of drawing it on a ImageDraw surface -</description>
    </item>
    
    <item>
      <title>Flask custom template loaders</title>
      <link>https://kalyanchakravarthy.net/blog/flask-custom-template-loaders.html</link>
      <pubDate>Sun, 09 Nov 2014 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/flask-custom-template-loaders.html</guid>
      <description>Flask is amazing. The templating system called jinja2 packed with it is equally amazing.
The default behaviour of flask app is to look for template files specified in app.template_folder directory. Although this will work in most use-cases, sometimes you need additional control over this - for example if you have user specific templates or if you want to load templates from a database, dynamically.
This can be accomplished, by initialising app.</description>
    </item>
    
    <item>
      <title>Open home webserver to internet</title>
      <link>https://kalyanchakravarthy.net/blog/open-home-webserver-to-internet.html</link>
      <pubDate>Sat, 08 Nov 2014 01:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/open-home-webserver-to-internet.html</guid>
      <description>There are several ways to open up your home webserver to the internet, the most popular one involves port forwarding. But it is not something that one can assume to be available in all situations.
If you do have a server already, we can use it to create a tunnel. This essentially involes 2 steps
1. create tunnel from home server to remote server This creates a tunnel between home_port and remote_port_x.</description>
    </item>
    
    <item>
      <title>Propogating iOS Gestures to parent views</title>
      <link>https://kalyanchakravarthy.net/blog/propogating-ios-gestures-to-parent-views.html</link>
      <pubDate>Thu, 25 Sep 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/propogating-ios-gestures-to-parent-views.html</guid>
      <description>If a custom UIView adds UITapGestureRecognizer to one of its elements for example say tracking, the default behaviour would prevent it from the gesture being propogated it to its parent views which may be listening for the same gesture.
Gesture propogation can be ensured simply by implementing a UIGestureRecognizerDelegate method.
- (void)setup { UITapGestureRecognizer *gestuer = [[UITapGestureRecognizer alloc] init]; gesture.delegate = self; } #pragma mark - UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } Unlike other solutions, this does not reqire the UIView subclass to be aware of the existence any other gesture recognizers.</description>
    </item>
    
    <item>
      <title>Comparing NSDates from different timezones</title>
      <link>https://kalyanchakravarthy.net/blog/compare-nsdate-different-timezone.html</link>
      <pubDate>Wed, 30 Jul 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/compare-nsdate-different-timezone.html</guid>
      <description>Comparing 2 NSDate&amp;rsquo;s is trivial, unless they are from different timezone, in which case one of them should be converted to the other timezone and then compared.
Here is a simple code snippet that I came up with. It gets the offset from GMT in seconds for both timezones and uses the delta to convert a date relative to the other timezone.
// Get time and time zone offset from GMT NSDate *currentTime = [NSDate date]; NSInteger currentTZSec = [[NSTimeZone defaultTimeZone] secondsFromGMT]; NSDate *otherTime = info.</description>
    </item>
    
    <item>
      <title>Zhang-Suen Thinning Algorithm</title>
      <link>https://kalyanchakravarthy.net/blog/zhang-suen-thinning-algorithm.html</link>
      <pubDate>Sat, 26 Jul 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/zhang-suen-thinning-algorithm.html</guid>
      <description>Fiddling around with ideas on how to break captchas, I realised one of the first steps towards it could be the simplification of the input image, into a simple node graph (after elimination of background artefacts). From the node graph, it should be trivial to classify a particular graph structure into its corresponding ASCII symbols, without delving into neural networks.
To construct node graph, it seemed logical to thin down symbols into simple lines, which is when I came across Zhang-Suen Thinning algorithm (pdf paper).</description>
    </item>
    
    <item>
      <title>Text to speech on iOS</title>
      <link>https://kalyanchakravarthy.net/blog/text-to-speech-on-ios.html</link>
      <pubDate>Mon, 30 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/text-to-speech-on-ios.html</guid>
      <description>category: programming
Starting iOS7, the SDK contains a new set of APIs for performing text-to-speech related operations under the library AVFoundation.
There are 3 components required for performing text-2-speech on iOS
Voice This determines the speech synthesis voice and language. The default is English.
For eg: Consider the russian letter &amp;quot;Ж&amp;quot; - english voice pronounces it as Crylic Za while the russian voice actually pronounces it as the alphabet.
// Instantiate Russian voice/pronounciation AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@&amp;#34;ru-RU&amp;#34;]; Utterance Here is the definition from the apple docs</description>
    </item>
    
    <item>
      <title>Sniff HTTP traffic on iOS</title>
      <link>https://kalyanchakravarthy.net/blog/sniff-http-traffic-on-ios.html</link>
      <pubDate>Sun, 29 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/sniff-http-traffic-on-ios.html</guid>
      <description>On my way to reverse engineer the api&amp;rsquo;s of a particular app, I stumbled upon a problem on how to sniff network traffic. The obvious choice was either to jailbreak or run a proxy server and use Charls Proxy to sniff. The later is a good solution, if if I wanted to inspect HTTPS.
Since I was only interested in HTTP Headers, I found the ideal solution - Remote Virtual Interface Tool or rvictl which remotely captures packets from any connected mobile device (read iOS devices)</description>
    </item>
    
    <item>
      <title>Setting up Core Data</title>
      <link>https://kalyanchakravarthy.net/blog/setting-up-core-data.html</link>
      <pubDate>Wed, 18 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/setting-up-core-data.html</guid>
      <description>category: programming
tags: iOS
Am just beginning to learn Core Data on iOS. Trying to refer to the default template provided by XCode when creating new project, was not of any help in making me understand it better. After reading few tutorials and some coding, here is what I understood:
Classes There are a lot of classes required for setting up and using core data. Here are the common ones and their definitions</description>
    </item>
    
    <item>
      <title>Accessing Objective-C properties internally</title>
      <link>https://kalyanchakravarthy.net/blog/accessing-objective-c-properties-internally.html</link>
      <pubDate>Fri, 13 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/accessing-objective-c-properties-internally.html</guid>
      <description>Inside an objective class, there are 2 ways to access any declared property
self.propertyName _propertyName Although both the uses hypothetically have the similar effect, there are 3 distinct differences self.propertyName trigggers the setter, which is important if you are performing any additional operations or validations. This does not happen when accessing the ivar directly
self.propertyName also triggers KVO Notifications which _propertyName conveniently ignores.
Accesing property also gives access to various memory management features for free.</description>
    </item>
    
    <item>
      <title>Drawing lines and circles using CoreGraphics</title>
      <link>https://kalyanchakravarthy.net/blog/ios-drawing-using-coregraphics.html</link>
      <pubDate>Mon, 09 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/ios-drawing-using-coregraphics.html</guid>
      <description>Having to create simple images, which only contain say a circle or a line or a combination of simple primitives, in various resolutions for retina and non-retina displays, for use in my iOS apps, annoys me. I find it a lot easier to do it all in code using CoreGraphics.
Here are some of the steps needed to generate a UIImage* of size (30,30) that contains a circle and a line passing through it</description>
    </item>
    
    <item>
      <title>Discarding changs in git and submodules</title>
      <link>https://kalyanchakravarthy.net/blog/git-discard-submodule-changes.html</link>
      <pubDate>Wed, 04 Jun 2014 06:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/git-discard-submodule-changes.html</guid>
      <description>git master repo To discard local changes in git repository
git reset --hard submodule repo For submodules its a bit tricky.
Try updating the submodules if you think you did not make any local changes. git submodule update --init If it doesn&amp;rsquo;t work, hard reset all submodules git submodule foreach git reset --hard If none of it works It probably means there are some hidden/gitignored files lying around in submodule repository directory.</description>
    </item>
    
    <item>
      <title>Using Attributed Strings on iOS</title>
      <link>https://kalyanchakravarthy.net/blog/using-nsattributedstring-on-ios.html</link>
      <pubDate>Tue, 03 Jun 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/using-nsattributedstring-on-ios.html</guid>
      <description>Setting up Attributed string
Setting font, foreground color, etc on UILabel* for normal text is quite straight forward as all the attributes are set on the instance directly. For attributed text, all these properties have to be set explicitly on NSAttributedString instance as none of the text attributes from UILabel are applied.
This example creates a string and highlights a specific part by making it bold and changing the color to gray.</description>
    </item>
    
    <item>
      <title>FFMPEG: Create video from sequence of Images</title>
      <link>https://kalyanchakravarthy.net/blog/ffmpeg-create-video-from-images.html</link>
      <pubDate>Thu, 29 May 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/ffmpeg-create-video-from-images.html</guid>
      <description>I was recently working on creating a timelapse video from about 90 images, each of which is a 3-6 second exposure, which I shot during one of my bike trips.
rename files The images in JPG format, shot on 5D-Mark2, needed renaming to &amp;lsquo;img_%d.jpg&amp;rsquo; format, which I quickly did with a simple python script
&amp;gt;&amp;gt;&amp;gt; import os &amp;gt;&amp;gt;&amp;gt; from glob import glob &amp;gt;&amp;gt;&amp;gt; for i, f in enumerate( glob(&amp;#39;*.jpg&amp;#39;) ): .</description>
    </item>
    
    <item>
      <title>List directories in python</title>
      <link>https://kalyanchakravarthy.net/blog/list-directories-in-python.html</link>
      <pubDate>Thu, 29 May 2014 02:00:00 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/list-directories-in-python.html</guid>
      <description>Its pretty straight forward to list files, by using:
import glob print glob.glob(&amp;#34;*&amp;#34;) Listing directories especially only those in current level requires the use of os.walk
os.walk(&amp;#39;content/&amp;#39;).next()[1] </description>
    </item>
    
    <item>
      <title>Longest palindromic substring</title>
      <link>https://kalyanchakravarthy.net/blog/longest-palindromic-substring.html</link>
      <pubDate>Tue, 14 Jan 2014 11:16:32 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/longest-palindromic-substring.html</guid>
      <description>The simplest naive solution, of looping through each character as the centre of palindrome, to finding longest palindromic substring, in a string, has O(n^2) time complexity. This can be improved to be solvable in linear time or O(N) complexity - and there are many ways to do it - one being creating a suffix tree of all prefixes and another being Manachers algorithm.
Manacher&amp;rsquo;s algorithm works pretty much the same way naive solution works, except, it tries to use the properties of palindromes i.</description>
    </item>
    
    <item>
      <title>Make files visible in iOS iTunes App Documents</title>
      <link>https://kalyanchakravarthy.net/blog/ios-make-files-visible-itunes.html</link>
      <pubDate>Mon, 06 Jan 2014 06:00:00 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/ios-make-files-visible-itunes.html</guid>
      <description>For saving configuration files one should use the Application Support directory provided by the sandbox. The sign that you are using it is the flag NSApplicationSupportDirectory.
But to make your file visible in the iTunes App Documents directory
Enable the flag boolean UIFileSharingEnabled in Project-Info.plist. In xcode this is available in the dropdown as Application supports iTunes file sharing flag Use NSDocumentDirectory flag instead of NSApplicationSupportDirectory Here is an example for computing path to ApplicationSupport NSFileManager *defaultManager = [NSFileManager defaultManager]; NSError *error = nil; NSURL *appPath = [defaultManager URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&amp;amp;error]; And for the file path to Documents and making it visible in iTunes</description>
    </item>
    
    <item>
      <title>Trust &amp; Credibility</title>
      <link>https://kalyanchakravarthy.net/blog/trust-credibility.html</link>
      <pubDate>Wed, 07 Aug 2013 19:13:04 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/trust-credibility.html</guid>
      <description>Smartness does not imply one will get things done. Competence does not imply accountability and which in turn does not imply smartness. These attributes are neither inter-related nor do they all go hand in hand.
Respect is what you gain when you show one of the attributes. Trust &amp;amp; Credibility are what you gain when you exhibit positive levels of all of them. Its easy to mistake for them to be universal (i.</description>
    </item>
    
    <item>
      <title>Inverted Snakes</title>
      <link>https://kalyanchakravarthy.net/blog/inverted-snakes.html</link>
      <pubDate>Wed, 17 Oct 2012 03:12:23 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/inverted-snakes.html</guid>
      <description>Everyone has played classic snake, be it on mobile, online, gameboy, whatever. If you have not, drop everything, I mean everything, including your heartbeat if possible and get on and play it.
Invertes snakes is a Javascript/Canvas implementation of Classic Snake with a twist - There are 2 snakes Red and Blue - You only control one snake, the 2nd one just mirrors your movement. The food for snakes alternate between Red &amp;amp; Blue, each snake only eats its colored food.</description>
    </item>
    
    <item>
      <title>Tetris in Javascript and Canvas</title>
      <link>https://kalyanchakravarthy.net/blog/tetris-in-javascript-and-canvas.html</link>
      <pubDate>Tue, 14 Feb 2012 12:30:22 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/tetris-in-javascript-and-canvas.html</guid>
      <description>I love tetris. I have never written tetris before and I have always wanted to. Attempted it once but couldn&amp;rsquo;t figure out heads and tails of it and then left at it. I wanted to get over it. So i wrote it, in less than 4 hours (bragging rights) in JavaScript using canvas. Feel free to browse the source or Play it here
http://kalyanchakravarthy.net/projects/fun/jstris/
During the process I learnt how to use the javascript &amp;ldquo;with()&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Anonymous functions in Javascript</title>
      <link>https://kalyanchakravarthy.net/blog/anonymous-functions-in-javascript.html</link>
      <pubDate>Tue, 14 Feb 2012 11:14:56 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/anonymous-functions-in-javascript.html</guid>
      <description>The usual way to create anonymous functions is to write something like this
(function() { alert(&amp;#39;hello&amp;#39;); })(); I recently learnt this works too (#1)
!function() { alert(&amp;#39;hello&amp;#39;); }(); But interestingly enough that same code, without the !, throws a syntax error. (#2)
function() { alert(&amp;#39;hello&amp;#39;); }(); This had me stoked for a while until I realized why and it was obvious all along.
In the first case the &amp;ldquo;!&amp;rdquo; makes the function be treated as an anonymous function object and then negating it to result false after it has executed.</description>
    </item>
    
    <item>
      <title>Detecting multiple arrow key strokes</title>
      <link>https://kalyanchakravarthy.net/blog/detecting-multiple-arrow-key-strokes.html</link>
      <pubDate>Mon, 07 Nov 2011 02:23:46 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/detecting-multiple-arrow-key-strokes.html</guid>
      <description>Most games or applications which make use of arrow keys, sometimes require the use of multiple combinations like UP+RIGHT, LEFT+DOWN, etc also. I was trying to do the same for a 3d game I was trying to write in Processing. It might seem like a simple problem, which it is, surprisingly i couldn&amp;rsquo;t find anything on it. So after playing around with a little bit i figured it out.
Each key when pressed and released individually triggers a separate event, including for combinations of keys.</description>
    </item>
    
    <item>
      <title>RSS Feed for Flickr Explore</title>
      <link>https://kalyanchakravarthy.net/blog/rss-feed-for-flickr-explore.html</link>
      <pubDate>Tue, 25 Oct 2011 22:42:29 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/rss-feed-for-flickr-explore.html</guid>
      <description>Am a big fan of Google Reader and have subscribed to hundreds of RSS feeds. I love browsing through Flickr. I am addicted to it, especially to their explore section, where daily they come up with few hundred most interesting photos from flickr for that day.
So I wrote a PHP Script which generates an RSS feed of the 100 most interesting photos on Flickr&amp;rsquo;s explore, every single day via a cron job which uses Flickr API and a bit of cUrl magic.</description>
    </item>
    
    <item>
      <title>Iteration number 22</title>
      <link>https://kalyanchakravarthy.net/blog/iteration-number-22.html</link>
      <pubDate>Sun, 10 Apr 2011 05:00:38 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/iteration-number-22.html</guid>
      <description>In Perspective&amp;hellip;kalyan02
(Posted for 2nd of April, My Birthday)
Life is like a loop, it goes on, and on, iterating through every passing year. This post, commemorates my 22nd one, which as a customary, I have done in the past too. It helps keep record, of what I wanted to do, what I have done, what I am going to do or atleast that which I thought I should do, leaving behind a trail of how I have changed.</description>
    </item>
    
    <item>
      <title>What matters?</title>
      <link>https://kalyanchakravarthy.net/blog/what-matters-2.html</link>
      <pubDate>Tue, 25 Jan 2011 17:49:19 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/what-matters-2.html</guid>
      <description>Knowledge weighs more than anything
And what matters is we strive to push our bounds for more of it&amp;hellip;
the first sketch was originally drawn for this post</description>
    </item>
    
    <item>
      <title>Of learning and attitude</title>
      <link>https://kalyanchakravarthy.net/blog/of-learning-and-attitude.html</link>
      <pubDate>Tue, 25 Jan 2011 04:11:21 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/of-learning-and-attitude.html</guid>
      <description>Discussions are good. Debates are better. Great when they are impromptu. Awesome, when they are with people who have respectable amount of knowledge gained over many years. Splendid if it is at workplace, for it adds positive energy to the environment, and forms a perfect ground for having an intelligent conversation. The one having naive ideas gets corrected and directed. One with more knowledge knows the other persons perspective. One who has no idea, has an opportunity to learn about both the sides of the argument, that if they were to show atleast a tiny bit of interest, a pretty big IF.</description>
    </item>
    
    <item>
      <title>Emptyvesselism</title>
      <link>https://kalyanchakravarthy.net/blog/emptyvesselism.html</link>
      <pubDate>Fri, 14 Jan 2011 08:02:51 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/emptyvesselism.html</guid>
      <description>Empty-Vessel. Pencil sketch
Let me introduce to you the another class of so called humans known as - Attention craving zombies! They belong to an advanced generation of &amp;ldquo;Empty Vessels&amp;rdquo; species of viruses, which originally known to have originated in relation to solid empty objects mostly metals for making lot of noise, crept into human bodies. This condition is due to an infection, known as &amp;ldquo;emptyvesselism&amp;rdquo;. This like a disease manifests itself inside the entire human body, but in all cases it resides inside the human head.</description>
    </item>
    
    <item>
      <title>Fractal Fun and l-systems</title>
      <link>https://kalyanchakravarthy.net/blog/fractal-fun-and-l-systems.html</link>
      <pubDate>Mon, 20 Dec 2010 19:42:26 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/fractal-fun-and-l-systems.html</guid>
      <description>Fractals are fun to understand and also to code. They are also philosophically significant as they offer infinite scope for dissecting an given entity, event in life or for the matter of fact the very human nature, as its never ending, but thats subjective.
L-Systems are generating self similar fractals, in which an initial set of generating rules cumulatively applied on an initial state for given &amp;rsquo;n&amp;rsquo; generations produces a growing fractal.</description>
    </item>
    
    <item>
      <title>Bugs to fix, Bugs to swat</title>
      <link>https://kalyanchakravarthy.net/blog/bugs-to-fix-bugs-to-swat.html</link>
      <pubDate>Tue, 19 Oct 2010 11:04:55 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/bugs-to-fix-bugs-to-swat.html</guid>
      <description>A little poetic dedication to all my fellow developers who share the plight of being unreportedly haressed by QA &amp;amp; Testing teams without pity! This was written in those very moments.
bugs to fix and bugs to swat making life hell are qa&amp;#39;s who seem good at that oh i envy those testing people for they get paid to cause hell &amp;amp; trouble they show no mercy even for bugs so small that i&amp;#39;d rather kill someone than sit to fix them all i gather my courage and sit to fix it off but before i get my share of pat for the bug i just swat like a villain to ruin it all with more reports, they just come back makes me wonder why won&amp;#39;t they die oh why won&amp;#39;t they die or i will kill them untill i die damn these dinosours of my life ~Kalyan *[QA]: Quality Assurance</description>
    </item>
    
    <item>
      <title>Jython script to compile jython scripts to java class files</title>
      <link>https://kalyanchakravarthy.net/blog/jython-script-to-compile-jython-scripts-to-java-class-files.html</link>
      <pubDate>Fri, 18 Jun 2010 21:27:38 +0200</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/jython-script-to-compile-jython-scripts-to-java-class-files.html</guid>
      <description>Jython, the python implementation in Java, is one of the most amazing things i have come across in quite some time, the environment is a seamless fusion of both the languages.
Playing around with it since yesterday, from what i have noticed, the jythonc compiler is missing in 2.5.x version of jython. But on doing a quick search i found a java based jython compiler scripts ( here and here ).</description>
    </item>
    
    <item>
      <title>Java synchronization over multiple shared objects</title>
      <link>https://kalyanchakravarthy.net/blog/java-synchronization-over-multiple-shared-objects.html</link>
      <pubDate>Sat, 27 Mar 2010 20:06:29 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/java-synchronization-over-multiple-shared-objects.html</guid>
      <description>When developing a multi-threaded application in Java or any threaded environment as a matter of fact, the first and the foremost issues that one would need to consider is synchronization of shared resources.
To synchronize a shared object or resource in java, its as straight forward as using the &amp;ldquo;synchronized&amp;rdquo; keyword while declaring a function or as a code block
public class Foo() { //Way 1 public synchronized void bar() {} //Way 2 void baz() { synchronized(boo) { //some sync foo } } } Whether to synchronize the code block by wrapping them under a synchronized function, or a synchronized code block over the shared resource, is upto the programmer.</description>
    </item>
    
    <item>
      <title>Raphael snake</title>
      <link>https://kalyanchakravarthy.net/blog/raphael-snake.html</link>
      <pubDate>Fri, 26 Mar 2010 19:39:17 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/raphael-snake.html</guid>
      <description>RaphaelJS is an interesting SVG based javascript graphics library for the web browser, provides an intuitive and easy to use way to draw elements, animate them, add event handlers, etc. It even lets us plug in event handlers from other libraries such as YUI, jQuery. Inspite of apparent advantages in Canvas tag, one thing about SVG which can make a designer cry in happiness is, it works on IE. Period.</description>
    </item>
    
    <item>
      <title>flipkurl - php/curl api library to access flipkart.com</title>
      <link>https://kalyanchakravarthy.net/blog/flipkurl-phpcurl-api-library-to-access-flipkart-com.html</link>
      <pubDate>Mon, 08 Mar 2010 19:12:15 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/flipkurl-phpcurl-api-library-to-access-flipkart-com.html</guid>
      <description>Flipkurl is a php-curl based api library to access the contents of flipkart.com site, login into it, search book listings, add books to cart, move books from to wishlist, read contents of cart, etc.
Usually shopping carts don&amp;rsquo;t persist the user&amp;rsquo;s selection across logins, but this one does. So whatever books you add via the library will stay in your account, so you can checkout/pay later from there.
Some possible uses of the API include Custom User Interfaces, Mobile UI&amp;rsquo;s, Mashups with other API&amp;rsquo;s, Automate stuff, etc.</description>
    </item>
    
    <item>
      <title>Curl &amp; handling cookie sessions</title>
      <link>https://kalyanchakravarthy.net/blog/curl-handling-cookie-sessions.html</link>
      <pubDate>Tue, 02 Mar 2010 02:10:16 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/curl-handling-cookie-sessions.html</guid>
      <description>Curl is a very interesting utility library which lets one connect and interact with any remote url via any of the supported standard protocol. Though curl is essentially a command line tool, various bindings are available for access via programming languages, popularly php
From a php perspective, curl can be used to remotely access any URL, login, authenticate, and perform other actions. Directly using curl to retrieve content is a no brainer like fetching rss feeds, etc.</description>
    </item>
    
    <item>
      <title>The anti life phase</title>
      <link>https://kalyanchakravarthy.net/blog/the-anti-life-phase.html</link>
      <pubDate>Sun, 07 Feb 2010 06:19:18 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/the-anti-life-phase.html</guid>
      <description>Time and again the phase comes and goes with neither a definite time period of occurrence nor a specific period of effect. When it does come, drains the energy to the last remaining ATP molecular juices out of you, makes us behave in weird ways you otherwise would have never imagined ever before, makes us make weird resolutions and self promises which by the time we have gathered enough energy to break out of, they would have already been lost deep down the lone corners of our brain.</description>
    </item>
    
    <item>
      <title>Simple Overlay Box - jQuery Tutorial</title>
      <link>https://kalyanchakravarthy.net/blog/simple-overlay-box-jquery-tutorial.html</link>
      <pubDate>Sun, 07 Dec 2008 11:03:30 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/simple-overlay-box-jquery-tutorial.html</guid>
      <description>Here goes another tutorial to create a simple overlay box using jQuery, which can be used to display info text, full size images of thumbnails, anything that can be represented in html can be used. This simple tutorial takes you through few lines of jquery which create an overlay box, position it at the center of the screen, and is also adjusted automatically when the window is resized.
The size of the overlay box, styles and everything are adjustable.</description>
    </item>
    
    <item>
      <title>Toggle Dropdown - jQuery tutorial</title>
      <link>https://kalyanchakravarthy.net/blog/toggle-dropdown-jquery-tutorial.html</link>
      <pubDate>Sat, 29 Nov 2008 10:42:47 +0100</pubDate>
      
      <guid>https://kalyanchakravarthy.net/blog/toggle-dropdown-jquery-tutorial.html</guid>
      <description>Most of us even though we may have heard of jQuery, may not have tried their hand at it. probably like me untill sometime ago. This tutorial is really simple for anyone who knows jQuery, but for those who don&amp;rsquo;t it may be interesting enough to get you started.
This tutorials demonstrates how to create toggle dropdowns, like the one in gamil reply button. [ demo &amp;amp; download links at the bottom ]</description>
    </item>
    
  </channel>
</rss>
