<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deepak Kandepet</title><link>https://kandepet.com/</link><description>Recent content on Deepak Kandepet</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 14 May 2025 06:38:42 +0000</lastBuildDate><atom:link href="https://kandepet.com/index.xml" rel="self" type="application/rss+xml"/><item><title>PhotoOrganizer</title><link>https://kandepet.com/portfolio/photoorganizer/</link><pubDate>Mon, 05 Jun 2017 23:30:53 +0000</pubDate><guid>https://kandepet.com/portfolio/photoorganizer/</guid><description>&lt;p&gt;Script for organizing photos with duplicate detection (using PHash and BK Trees)&lt;/p&gt;&#10;&lt;p&gt;More details &lt;a href="https://kandepet.com/detecting-similar-and-identical-images-using-perseptual-hashes/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Ruby ImageSimilarity Library</title><link>https://kandepet.com/portfolio/imagesimilarity-ruby-bindings/</link><pubDate>Mon, 05 Jun 2017 21:42:55 +0000</pubDate><guid>https://kandepet.com/portfolio/imagesimilarity-ruby-bindings/</guid><description>&lt;p&gt;Ruby binding to image comparison algorithms (in C++ &amp;amp; Ruby)&lt;/p&gt;&#10;&lt;p&gt;Ruby bindings to the following image comparison algorithms. See &lt;a href="https://kandepet.com/detecting-similar-and-identical-images-using-perseptual-hashes/"&gt;this&lt;/a&gt; article for more information. Github &lt;a href="https://github.com/Kandepet/ImageSimilarity"&gt;link&lt;/a&gt;.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Average Hash&lt;/li&gt;&#10;&lt;li&gt;pHash&lt;/li&gt;&#10;&lt;li&gt;Color Histogram&lt;/li&gt;&#10;&lt;li&gt;Multiresolution Haar wavelet decomposition&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>OctoFoo</title><link>https://kandepet.com/portfolio/octofoo/</link><pubDate>Mon, 05 Jun 2017 20:07:24 +0000</pubDate><guid>https://kandepet.com/portfolio/octofoo/</guid><description>&lt;p&gt;Octofoo is a light and easy static blog/website generator written in PHP. It converts Markdown content, merges it with Twig layouts and generates static HTML files. It can also deploy these static files to github pages if you are publishing a blog.&lt;/p&gt;&#10;&lt;p&gt;OctoFoo is a light and easy static website generator written in PHP. THis is a heavily hacked fork of PHPoole by Arnaud Ligny (&lt;a href="https://github.com/Narno/PHPoole"&gt;https://github.com/Narno/PHPoole&lt;/a&gt;). It takes your content (written in &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; format), merges it with layouts (&lt;a href="http://twig.sensiolabs.org/"&gt;Twig&lt;/a&gt; templates) and generates static HTML files that can be used for any website or blog. It also has the ability to deploy the static HTML directly to github pages.&lt;/p&gt;</description></item><item><title>HackerNews in PHP</title><link>https://kandepet.com/portfolio/hackernews-in-php/</link><pubDate>Mon, 05 Jun 2017 18:22:49 +0000</pubDate><guid>https://kandepet.com/portfolio/hackernews-in-php/</guid><description>&lt;p&gt;A clone of &lt;a href="http://news.ycombinator.com/"&gt;Hackernews&lt;/a&gt; written in PHP. GitHub &lt;a href="https://github.com/Kandepet/HackerNews"&gt;Link&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="features"&gt;Features&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Submit stories or ask questions.&lt;/li&gt;&#10;&lt;li&gt;Recursive comments&lt;/li&gt;&#10;&lt;li&gt;Vote on questions and comments&lt;/li&gt;&#10;&lt;li&gt;Stories are ranked based on user votes using an algorithm similar to &lt;a href="http://www.righto.com/2013/11/how-hacker-news-ranking-really-works.html"&gt;hacker news ranking&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="screen-shots"&gt;Screen shots&lt;/h2&gt;&#10;&lt;h3 id="front-page"&gt;Front Page&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/42379b8885d5a180b817f5f76562540567ae65ab/687474703a2f2f692e696d6775722e636f6d2f6c784c5969676e2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/42379b8885d5a180b817f5f76562540567ae65ab/687474703a2f2f692e696d6775722e636f6d2f6c784c5969676e2e706e67" alt="Front Page"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="comments"&gt;Comments&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/b3e200694f300650a3cf9f4af4a36635fe31f769/687474703a2f2f692e696d6775722e636f6d2f386557484773722e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/b3e200694f300650a3cf9f4af4a36635fe31f769/687474703a2f2f692e696d6775722e636f6d2f386557484773722e706e67" alt="Comments"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>KickFaster</title><link>https://kandepet.com/portfolio/kickfaster/</link><pubDate>Fri, 02 Jun 2017 22:56:55 +0000</pubDate><guid>https://kandepet.com/portfolio/kickfaster/</guid><description>&lt;p&gt;Missed out on the super-crazy-early-early-bird pledge on Kickstarter? Paying more $$ because you were late by few minutes? Use Kick Faster to track unavailable kickstarter pledges and get notified as soon as they become available.&lt;/p&gt;&#10;&lt;h2 id="screenshots"&gt;Screenshots&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-1.png"&gt;&lt;img src="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-2.png"&gt;&lt;img src="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-3.png"&gt;&lt;img src="https://kandepet.com/wp-content/uploads/2017/06/KickFaster-3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>FlashWare - A firmware for ATTiny based flashlights</title><link>https://kandepet.com/portfolio/flashware-firmware-attiny-based-flashlights/</link><pubDate>Fri, 02 Jun 2017 00:26:27 +0000</pubDate><guid>https://kandepet.com/portfolio/flashware-firmware-attiny-based-flashlights/</guid><description>&lt;p&gt;&lt;a href="https://github.com/Kandepet/FlashWare"&gt;FlashWare&lt;/a&gt; is a firmware for my custom LED flashlight running on a 18350/18650 batterys with A17DD-L FET+1 Driver.&lt;/p&gt;&#10;&lt;p&gt;Features:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It is based on ToyKeepers BLF-A6 firmware.&lt;/li&gt;&#10;&lt;li&gt;Currently only supports ATTiny13A.&lt;/li&gt;&#10;&lt;li&gt;Dual channel support only (FET &amp;amp; 7135)&lt;/li&gt;&#10;&lt;li&gt;Uses Fast Pulse Width Modulation&lt;/li&gt;&#10;&lt;li&gt;Supports Off-Time Capacitor for mode selection.&lt;/li&gt;&#10;&lt;li&gt;Modes:&#10;&lt;ul&gt;&#10;&lt;li&gt;Regular Modes: Moonlight, Low, Medium, Turbo&lt;/li&gt;&#10;&lt;li&gt;Special Modes: STROBE, BIKING_STROBE, BATTCHECK&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;TURBO mode drops down to Medium after 45 seconds.&lt;/li&gt;&#10;&lt;li&gt;Battery Check mode blinks the light 0-10 times to display the state of the battery.&lt;/li&gt;&#10;&lt;li&gt;Mode memory: Last used mode saved to EEPROM. Next start always starts at previous saved mode.&lt;/li&gt;&#10;&lt;li&gt;Voltage monitoring supported to drop flashlight output when battery voltage is low. Low power cutoff switches off the flashlight when voltage drops below 2.7V.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Github: &lt;a href="https://github.com/Kandepet/FlashWare"&gt;https://github.com/Kandepet/FlashWare&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Katana STL slicer</title><link>https://kandepet.com/portfolio/katana/</link><pubDate>Thu, 01 Jun 2017 22:46:25 +0000</pubDate><guid>https://kandepet.com/portfolio/katana/</guid><description>&lt;p&gt;Katana is an experimental stl slicer and gcode generator for reprap 3D printers. Written in C++, Katana is based on schlizzer, written by Paul Geisler.&lt;/p&gt;&#10;&lt;p&gt;Usage: ./katana inputfile.stl outputfile.gcode&lt;/p&gt;&#10;&lt;p&gt;Important features missing w.r.t Slic3r:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;No discrimination of &amp;lsquo;solid&amp;rsquo; and &amp;lsquo;fill&amp;rsquo; areas. They are handled equally with fill_density=1.&lt;/li&gt;&#10;&lt;li&gt;Only &amp;lsquo;rectilinear&amp;rsquo; fill pattern supported.&lt;/li&gt;&#10;&lt;li&gt;No contour correction of perimeter and infill, so the object exceeds the specified .stl&lt;/li&gt;&#10;&lt;li&gt;Bad route planning leading to bad movement order with useless many and long travels&lt;/li&gt;&#10;&lt;li&gt;Even worse planning for &amp;rsquo;non manifold&amp;rsquo; objects (most of thingyverse i guess..)&lt;/li&gt;&#10;&lt;li&gt;No brim, skirt, cooling etc.&lt;/li&gt;&#10;&lt;li&gt;No automatic placement and z leveling&lt;/li&gt;&#10;&lt;li&gt;Generated Gcode need to be extended before printing&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Github: &lt;a href="https://github.com/Kandepet/katana"&gt;https://github.com/Kandepet/katana&lt;/a&gt;&lt;/p&gt;</description></item><item><title>3D Printing: Slicing 3D objects</title><link>https://kandepet.com/3d-printing-slicing-3d-objects/</link><pubDate>Thu, 01 Jun 2017 22:14:28 +0000</pubDate><guid>https://kandepet.com/3d-printing-slicing-3d-objects/</guid><description>A slicer is a toolpath generation software used in 3D printing. It facilitates the conversion of a 3D object model to specific instructions for the printer. The slicer converts a model in STL (stereolithography) format into printer commands in G-code format. I wrote my own slicer to understand how they work. Here is what I found out.</description></item><item><title>Deconstructing a flashlight</title><link>https://kandepet.com/deconstructing-a-flashlight/</link><pubDate>Thu, 04 May 2017 22:30:39 +0000</pubDate><guid>https://kandepet.com/deconstructing-a-flashlight/</guid><description>Ever wondered how the modern flashlight works? What happens when you click the switch on, or click it multiple times to change the brightness? I was curious about it as well, so I deconstructed a commercially available flashlight (&lt;a href="https://www.amazon.com/Flashlight-Astrolux-Zoomable-Waterproof-Adjustable/dp/B018M0B5Y4"&gt;Astrolux S1&lt;/a&gt;) and studied the parts; even reprogrammed it to have different levels of brightness. Here is what I found out.</description></item><item><title>Marlin 3D printer firmware: Delta inverse kinematics</title><link>https://kandepet.com/marlin-3d-printer-firmware-delta-inverse-kinematics/</link><pubDate>Thu, 09 Mar 2017 23:54:36 +0000</pubDate><guid>https://kandepet.com/marlin-3d-printer-firmware-delta-inverse-kinematics/</guid><description>With a simple cartesian printer, the carriage mechanism moves directly along rails in each of the x, y and z directions. If you want to move a print head from the origin to, say, (10,10,20) you simply direct the motors to move it 10mm along the x axis rail, 10 along the y axis rail and 20 along the z. With a delta printer, it’s not so simple. Moving any one of the carriages which run up and down the three vertical towers will cause movement of the printer nozzle in x,y and z simultaneously. Inverse kinematic calculations are required to work out how to move all three carriages to move the print head to the given (x,y,z) coordinates.</description></item><item><title>Dissecting the ErgoDox - The Ergonomic Programmable Keyboard</title><link>https://kandepet.com/dissecting-the-ergodox-the-ergonomic-programmable-keyboard/</link><pubDate>Fri, 10 Jun 2016 21:30:16 +0000</pubDate><guid>https://kandepet.com/dissecting-the-ergodox-the-ergonomic-programmable-keyboard/</guid><description>Invented by Dominic Beauchamp (a.k.a Dox), the ErgoDox is an ergonomic mechanical keyboard that uses an open hardware and software. This keyboard uses a split design that allows your arms to rest naturally at your sides. The split also allows you to angle the boards and doesn’t force you to contort your wrists. The keyboard is also fully programmable. Lets find out how it actually works.</description></item><item><title>Detecting similar and identical images using perseptual hashes</title><link>https://kandepet.com/detecting-similar-and-identical-images-using-perseptual-hashes/</link><pubDate>Tue, 31 Jul 2012 00:48:48 +0000</pubDate><guid>https://kandepet.com/detecting-similar-and-identical-images-using-perseptual-hashes/</guid><description>Couple of my hobbies are traveling and photography. I love to take pictures and experiment with photography. After several years, I have over 200K photos distributed across several disks and machines. I had to find a way to organize these photos and create a workflow for future maintenance. In this post I want to address one of the issues I had to solve: &lt;em&gt;&lt;strong&gt;finding duplicate images&lt;/strong&gt;&lt;/em&gt;.</description></item><item><title>Dissicting the 82559 Ethernet controller - From bits to waves</title><link>https://kandepet.com/from-bits-to-waves-the-inner-workings-of-an-ethernet-controller/</link><pubDate>Wed, 09 May 2012 13:57:00 +0000</pubDate><guid>https://kandepet.com/from-bits-to-waves-the-inner-workings-of-an-ethernet-controller/</guid><description>&lt;p&gt;When I first started working, I was very interested in learning about the Linux kernel. Specifically the TCP/IP stack and the inner workings of an Ethernet controller. To learn more, I picked one of the most widely used Ethernet controllers at that time, the &lt;a href="http://www.intel.com/design/network/products/lan/controllers/82559.htm" title="Intel 82559 10/100 Fast Ethernet Controller"&gt;Intel 82559 10/100 Fast Ethernet Controller&lt;/a&gt; and one of its open-source drivers, the &lt;a href="http://lxr.free-electrons.com/source/drivers/net/eepro100.c?v=2.4.37"&gt;eepro100&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Thought 82559 chip is no longer manufactured and the eepro driver has been deprecated, this article will still serve as a guide for how an ethernet controller works. We&amp;rsquo;ll look at how the eepro100 driver interfaces with the Intel 82559 chipset and how the 82559 converts the packets sent by the driver to signals transmitted over physical ethernet cable.&lt;/p&gt;&#10;</description></item><item><title>Dissecting Lucene - The Index format</title><link>https://kandepet.com/dissecting-lucene-the-index-format/</link><pubDate>Sun, 02 Oct 2011 03:54:10 +0000</pubDate><guid>https://kandepet.com/dissecting-lucene-the-index-format/</guid><description>&lt;p&gt;Lucene is high-performance, scalable, full-featured, open-source text search engine written in Java. Since I am a search engineer by profession, I wanted to learn more about Lucene and its internals.&lt;/p&gt;&#10;&lt;p&gt;This article is about the index format of the 3.4 Lucene. Specifically the Lucene inverted index.&lt;/p&gt;&#10;</description></item><item><title>How big of a haystack do you need to hide?</title><link>https://kandepet.com/how-big-of-a-haystack-do-you-need-to-hide/</link><pubDate>Fri, 05 Aug 2011 01:13:16 +0000</pubDate><guid>https://kandepet.com/how-big-of-a-haystack-do-you-need-to-hide/</guid><description>&lt;p&gt;Every fact you learn about a person reduces the &amp;ldquo;entropy&amp;rdquo; of their identity. For e.g.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;If I know your gender, we can eliminate about 50% of the population: There were about 155.6 million females &amp;amp; 151.4 million males in the United States in 2009.&lt;/li&gt;&#10;&lt;li&gt;If I know your birthday we can eliminate a much larger percentage of the population: At age 85 and older, there were more than twice as many women as men. People under 20 years of age made up over a quarter of the U.S. population (27.3%), and people age 65 and over made up one-eighth (12.8%) in 2009.&lt;/li&gt;&#10;&lt;li&gt;We can narrow you down even more if we know your zip code&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Each of these facts independently narrow down the population, so much so that the combination of gender, ZIP code, birth date was &lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.91.4147&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;unique for about 63% of the U.S&lt;/a&gt;. population.&lt;/p&gt;&#10;</description></item><item><title>ABOUT ME</title><link>https://kandepet.com/about-me/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kandepet.com/about-me/</guid><description>&lt;p&gt;My name is Deepak Kandepet. Professionally, I help make ads relevant for one of the biggest search engines in the world. When not working (and when my twins let me), I love to dabble with everything from Linux kernel, TCP/IP stack, high performance computing and recently a lot of web-programming. I have a background in electronics &amp;amp; communication along with computer science which helps me understand not just the software side of things, but delve deep into the heart of the hardware.&lt;/p&gt;</description></item><item><title>Archives</title><link>https://kandepet.com/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kandepet.com/archives/</guid><description>archives</description></item></channel></rss>