<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on David Hamp-Gonsalves</title><link>https://davidhampgonsalves.com/posts/</link><description>Recent content in Posts on David Hamp-Gonsalves</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Wed, 20 Sep 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://davidhampgonsalves.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>13 Years of Foxish</title><link>https://davidhampgonsalves.com/13-years-of-foxish/</link><pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/13-years-of-foxish/</guid><description>13 years ago I owned a hand me down Sony Vaio laptop. It was hot and slow with a worn out battery and browsing the net was the bane of its existence. Around this time chrome was launched for Linux and it was so fast and light that it made this laptop usable again. The only issue was that it didn&amp;rsquo;t have RSS support and I loved Firefox live bookmarks for keeping up with hackernews and digg.</description></item><item><title>Solar Powered Conways Game of Life</title><link>https://davidhampgonsalves.com/solar-powered-conways-game-of-life/</link><pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/solar-powered-conways-game-of-life/</guid><description>I made an e-ink based, solar powered version of the famous Conways Game of Life.
Typically these celular automations run at whatever speed our eyes find to be visually pleasing but I wanted to see what a version that reflected the real worlds energy patterns would be like.
In my version the world and its cellular inhabitants must survive low power peroids each night along with reduced power peroids when its rainy or snowy.</description></item><item><title>Junk Drawer Phone as a Music Streaming Server</title><link>https://davidhampgonsalves.com/junk-drawer-phone-as-a-music-streaming-server/</link><pubDate>Sun, 23 Apr 2023 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/junk-drawer-phone-as-a-music-streaming-server/</guid><description>I wanted to get a music streaming server running as I have in the past but with the scarcity of RasberryPi&amp;rsquo;s my I needed to try something new. I had a Samsung Galaxy S7 that had been taking up space in my junk drawer and this post is my journey to give it a new task.
First step was remembering why I stopped using it. Trying to charge it revealed that the charging port was broken.</description></item><item><title>Recharable Flame Jar</title><link>https://davidhampgonsalves.com/recharable-flame-jar/</link><pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/recharable-flame-jar/</guid><description>I&amp;rsquo;ve learned a lot from watching BigClive and this project was the combination of three of those learnings.
Free lithium cells and USB charge circuits litter the streets in most cities in the form of disposiable e-cigarettes. You can buy really nice &amp;ldquo;flame&amp;rdquo; bulbs from aliexpress for ~6$. You can still buy wonderful mecury position switches from China. I combined these components along with a glass jar and a 3D printed frame into a digital flame jar.</description></item><item><title>MidTBot Pen Plotter</title><link>https://davidhampgonsalves.com/midtbot-pen-plotter/</link><pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/midtbot-pen-plotter/</guid><description>I build the wonderful MidTBot and have been enjoying creating pen plots.
My version abuses the tiny bot by extending the linear rods to give me a drawing size of 360x240 mm.
Its brain is an ESP-32 running the flexible FluidNC which turns the GRBL into motor movements via two StepStick stepper drivers.
Plots Mostly I&amp;rsquo;ve been doing procedurally generated pieces but I also played with 3D vectorization using Blender/Freestyle, pixel art fills, vector fills, clear layer topographic mapping (of the moon) and lots more.</description></item><item><title>Solar Lights for Sub-Zero Temperatures</title><link>https://davidhampgonsalves.com/solar-lights-for-sub-zero-temperatures/</link><pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/solar-lights-for-sub-zero-temperatures/</guid><description>In cold climates solar lights are nice but typically short lived. Moisture corrodes their circits and once covered in snow the low charge levels will destroy the batteries. This is unfortunate because winter months can be the most enjoyable and with longer nights a little extra light, diffused through a sprinkling of snow is very pleasant.
The easy way to circumvent these issues is to rip the guts out of an existing unit, replace its battery with a cheap (3-4$ aliexpress) greencap 100F supercap and stick the whole thing in a glass jar.</description></item><item><title>ESP Based Scheduling Thermostat</title><link>https://davidhampgonsalves.com/esp-based-scheduling-thermostat/</link><pubDate>Mon, 01 Apr 2019 20:02:31 -0300</pubDate><guid>https://davidhampgonsalves.com/esp-based-scheduling-thermostat/</guid><description>I moved into a house that uses a few mini split heatpumps for temperature control and while the technology is efficient and amazing interacting with them is not. Each unit eschews the standard thermostat wiring and standards in favor of implementing their own baked in system.
In my case this means that I can&amp;rsquo;t schedule temperature changes through the day or even set temperatures outside of a small range (16°-25° C).</description></item><item><title>Life Dashboard</title><link>https://davidhampgonsalves.com/life-dashboard/</link><pubDate>Fri, 01 Feb 2019 20:02:31 -0300</pubDate><guid>https://davidhampgonsalves.com/life-dashboard/</guid><description>Second hand Kindles are waiting in drawers for someone to repurpose them into something great. Boasting large e-ink screens, wifi connectivity and ARM processors they are an amazing hacking platform.
Check out the project repository for more details.
In my case I created an information panel summarizing my day such as my calendar, surf and weather forecast, garbage schedule, school closures, etc. My favorite part is that any extra space is filled with a random Pokémon sprite which my kids(not me) like to come check in on.</description></item><item><title>Halloween Mask 2018</title><link>https://davidhampgonsalves.com/halloween-mask-2018/</link><pubDate>Wed, 24 Oct 2018 20:02:31 -0300</pubDate><guid>https://davidhampgonsalves.com/halloween-mask-2018/</guid><description>I made a cardboard halloween mask powered by an Arduino. Unfortunately it was too scary for the kids when combined with the hunch back and cloak I made so I couldn&amp;rsquo;t wear it.
It has blinking eyes and a breath animation and the code that powers it can be found in github.</description></item><item><title>Reverse Engineering Cat Genie 120 DRM</title><link>https://davidhampgonsalves.com/reverse-engineering-cat-genie-120-drm/</link><pubDate>Tue, 17 Jul 2018 20:02:31 -0300</pubDate><guid>https://davidhampgonsalves.com/reverse-engineering-cat-genie-120-drm/</guid><description>TLDR: My robot cat litter box bricks itself after a set number of washes with each soap cartridge so I reverse engineered and suppressed the verfication process to enable refilling.
Problem I bought a robot cat litter box called the CatGenie 120 and it was great&amp;hellip; until I realized that the helpful low soap warning was actually DRM which blocks all cleaning actions once its official soap cartridge is &amp;ldquo;empty&amp;rdquo;.</description></item><item><title>Arduino Grow Clock</title><link>https://davidhampgonsalves.com/arduino-grow-clock/</link><pubDate>Thu, 15 Mar 2018 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/arduino-grow-clock/</guid><description>A grow clock is a simple visual indicator of day and nigh. Its purpose is to help children understand day and night and to convince them to stay in bed sleeping until the world is ready to get up.
My version was made to be recyclable, since these devices are only useful for the short time before children can read a traditional clock.
I its comprised of a servo and an Arduino MKR1000 (because I had a spare one) but any Arduino compatible board with a RTC(real time clock) will work.</description></item><item><title>Harvest Automation</title><link>https://davidhampgonsalves.com/harvest-automation/</link><pubDate>Wed, 01 Nov 2017 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/harvest-automation/</guid><description>Keeping up with invoicing is time consuming is an easy task to delay / forget due to procrastination.
I automated the task of generating the initial structure (two week period, 8 hours a day, only weekdays) so that I get a reminder email at the end of every period and I can just make adjustments and send.
You can find the code here.</description></item><item><title>GCN Top 10 Cycling Apps</title><link>https://davidhampgonsalves.com/gcn-top-10-cycling-apps/</link><pubDate>Thu, 05 Oct 2017 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/gcn-top-10-cycling-apps/</guid><description>A few years back I wrote a simple launcher that took advantage of Strava&amp;rsquo;s NFC action intents to automatically start recording a ride. I created some icons for it, named it One Tap Record for Strava and put it in the Play store for others to use.
Fast forward to today, where without a single update or PR campaign the &amp;ldquo;app&amp;rdquo; has garnered 100 thousand users and was featured on GCN&amp;rsquo;s Top 10 Cycling Apps list.</description></item><item><title>DIY Cycling Rollers</title><link>https://davidhampgonsalves.com/diy-cycling-rollers/</link><pubDate>Sun, 16 Jul 2017 19:51:50 -0300</pubDate><guid>https://davidhampgonsalves.com/diy-cycling-rollers/</guid><description>I built a set of rollers to determine how much I enjoyed riding them. They were made from 3 inch ABS pipe, which I finished with drilled end caps, fitted with lag bolts. The bolts fit into ball bearings(scavenged from a skateboard) which were recessed into the 2x4 frame.
This build was intended as a proof-of-concept but worked sufficiently well that a second version was not required. The only deficiency I encountered was from poorly triangulating the cap centers(I used a tape measure and hand drilled the holes) which resulted in vibration at high speeds.</description></item><item><title>Gif Twist</title><link>https://davidhampgonsalves.com/gif-twist/</link><pubDate>Sun, 09 Apr 2017 10:31:31 -0400</pubDate><guid>https://davidhampgonsalves.com/gif-twist/</guid><description>I saw a interesting timelapse animation on Reddit and created Gif-Twist to automate the long manual processs (~10 hours).
Gif-Twist combines all the images of a timelapse into each output frame, displaying slices of each radiating around a central point.
Examples</description></item><item><title>Cargo Bike in Canada</title><link>https://davidhampgonsalves.com/cargo-bike-in-canada/</link><pubDate>Thu, 26 Jan 2017 10:17:20 -0800</pubDate><guid>https://davidhampgonsalves.com/cargo-bike-in-canada/</guid><description>I&amp;rsquo;ve had a Babboe cargo bike in Toronto for a year now, this is a review of that time.
I&amp;rsquo;ve ridden the Babboe every day for a year. Its terrific on the ice and works well in deep snow. Its amazingly useful, and gets my daughter to daycare and back each day. It holds about $200 in groceries plus a child. Its easy to peddle and only takes a few minutes to learn to ride (if you can already ride a bicycle).</description></item><item><title>A New Value Add for Being the Best</title><link>https://davidhampgonsalves.com/a-new-value-add-for-being-the-best/</link><pubDate>Thu, 19 Jan 2017 14:12:19 -0500</pubDate><guid>https://davidhampgonsalves.com/a-new-value-add-for-being-the-best/</guid><description>TLDR: Training data shapes our current iterations of AI and as they get more competitive so will the people who create it.
While its easy to use training data from many individuals(driving habits for example) which might average out to be the best overall it will be hard to optomize for specific attributes(gas millage, passenger comfort).
I think this will create new incentives for being the best at mundane activities.</description></item><item><title>Hugo Black &amp; Light</title><link>https://davidhampgonsalves.com/hugo-black-light/</link><pubDate>Sun, 08 Jan 2017 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/hugo-black-light/</guid><description>I converted my blog from Octopress to Hugo and in as part of that process ported over the existing theme. Its available on the Hugo Themes Site.
Its called Black and Light and is high contrast, text oriented, and Javascript-free.
Features Loads in a single request (with web-fonts disabled) 100 / 100 on Google Page Speed test (100 / 100 on mobile with web-fonts disabled) Scriptless (unless you enable Google Analyitcs) Styles inlined in head High Contrast Style Demo h1 Heading h2 Heading h3 Heading h4 Heading h5 Heading h6 Heading This is bold text</description></item><item><title>Octopress to Hugo</title><link>https://davidhampgonsalves.com/octopress-to-hugo/</link><pubDate>Fri, 06 Jan 2017 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/octopress-to-hugo/</guid><description>I ported this blog (and its theme from Octopress 2 to Hugo.
The process (which I wont go into detail about since the hugo docs are great) was enjoyable and quick.
Hugo is easy to reason about, amazingly fast, and at least for a simple site like this a much better fit.</description></item><item><title>Webhook Liason</title><link>https://davidhampgonsalves.com/webhook-liason/</link><pubDate>Sun, 01 May 2016 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/webhook-liason/</guid><description>Webhook are the glue between many internet services but in many cases developers will write little bits of code to help translate payloads between such services and make them compatible.
Webhook Liason was designed to address these requirement via configurable filtering/transforming proxy for Webhooks / HTTP requests. This allows the conversion of request data to JSON, limits subsequent requests via filters and finally transforms the request JSON into the destination(s) format to be sent.</description></item><item><title>CircleCI vs Travis</title><link>https://davidhampgonsalves.com/circleci-vs-travis/</link><pubDate>Fri, 15 Apr 2016 23:12:01 -0500</pubDate><guid>https://davidhampgonsalves.com/circleci-vs-travis/</guid><description>TLDR: Just use CircleCI.
Having used both products in my last two positions I can say that while I once pined for Travis&amp;rsquo;s(then) superior documentation, that stage has passed and I now enthusiastically choose CircleCI.
CircleCI&amp;rsquo;s UI is amazing. It feels snappy and well suited to the task. I often find myself waiting for pages to load in Travis. The UI is also branch centric which better supports feature development where as Travis seems project focused and doesn&amp;rsquo;t suit my typical usage.</description></item><item><title>Should You Move To San Francisco?</title><link>https://davidhampgonsalves.com/should-you-move-to-san-francisco/</link><pubDate>Mon, 11 Jan 2016 23:09:36 -0500</pubDate><guid>https://davidhampgonsalves.com/should-you-move-to-san-francisco/</guid><description>TLDR: Yes.
My move to SF is 100% a silicon valley stereotype. I wrote an app(eb), was contacted by some startups and large valley companies and a couple weeks later I was on a plane with a 6 month old and my wife.
Coming from Toronto there was almost no cultural transition, except for the dissonance between rich/poor and how strictly each cultural group / archetype stays in their own portion of the city.</description></item><item><title>Hacktoberfest 2015</title><link>https://davidhampgonsalves.com/hacktoberfest-2015/</link><pubDate>Mon, 23 Nov 2015 23:14:38 -0500</pubDate><guid>https://davidhampgonsalves.com/hacktoberfest-2015/</guid><description>I took part in Digital Oceans Hacktoberfest &amp;amp; had a lot of fun. I ended up pushing some PR&amp;rsquo;s to new projects that I wouldn&amp;rsquo;t have otherwise and got a a t-shirt even though I live in Canada (usually these things are US only). I also noticed an influx in GitHub stickers in my neighbourhood (which were included with the t-shirt) so I assume there must be a few participants in my hood.</description></item><item><title>Java 8: The Good Parts</title><link>https://davidhampgonsalves.com/java-8-the-good-parts/</link><pubDate>Sun, 06 Sep 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/java-8-the-good-parts/</guid><description>Sometimes I feel that Java has become a second class citizen on the JVM. While it commands a huge market share and is generally blazingly fast it hasn&amp;rsquo;t progressed like Clojure, Scala and even Groovy have. Java 8 delivered on some of the long planned features and this post is to talk about my favourites.
Streams Java&amp;rsquo;s Streams are monads that let you represent computations as a chain of steps. Typically they are created from a Collection and then the typical functional map, reduce, filter, etc functions are applied to achieve a desired transformation.</description></item><item><title>The Value of Failed Projects</title><link>https://davidhampgonsalves.com/the-value-of-failed-projects/</link><pubDate>Mon, 03 Aug 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/the-value-of-failed-projects/</guid><description>Personal projects fail just as easily as well funded professional ones. Even small projects and spikes deserve to be put down gently and documented for the benefit of all projects that follow.
My contributions are:
Tree-Rings Open-Mosiac</description></item><item><title>Failed Projects: Open Mosaic</title><link>https://davidhampgonsalves.com/failed-projects-open-mosaic/</link><pubDate>Sun, 02 Aug 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/failed-projects-open-mosaic/</guid><description>The goal of this project was to recreate an image as a mosaic of other images. I wanted to achieve this with a low number of tiles and not simply use images as pixels based on their colors.
Mistakes The biggest mistake I made was to vastly underestimate the difficulty of the problem. I thought I could get good results by tuning my early histogram grid implementation and floundered. I have seen many other attempts at this project but yet to see any that produce good results.</description></item><item><title>Failed Projects: Tree Ring Generation</title><link>https://davidhampgonsalves.com/failed-projects-tree-ring-generation/</link><pubDate>Sat, 01 Aug 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/failed-projects-tree-ring-generation/</guid><description>Project Goal I wanted to generate SVG based tree rings that would mirror peoples lives based on some basic info (name, age, times of growth).
Project Motivation Tree rings are interesting because they contain a lot of information. Over the course of the project I identified and achieved the following:
age (how many rings) species (bark characteristics, color, chance of cracking, etc) ring dark to light ratio and smoothness cracks that span multiple rings and have depth defects in rings (both round and angled) non-uniform ring width (simulate environmental factors) grain texture and coloration The code generates a scalable image using millions of points.</description></item><item><title>The Longterm Costs of Personal Projects</title><link>https://davidhampgonsalves.com/the-longterm-costs-of-personal-projects/</link><pubDate>Wed, 15 Jul 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/the-longterm-costs-of-personal-projects/</guid><description>Maintaining personal projects incur a small but on going cost: API&amp;rsquo;s change, PAAS&amp;rsquo;s deprecate old stacks, frameworks and libraries die / decay and domains need to be renewed.
If you want your projects to live to a ripe old age without requiring a constant stream of your love and attention I suggest:
Avoid PAAS Heroku, GAE, etc are all active projects that regularly deprecate obsolete stacks which your project will eventually be running on.</description></item><item><title>File to Knife Conversion</title><link>https://davidhampgonsalves.com/file-to-knife-conversion/</link><pubDate>Fri, 05 Jun 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/file-to-knife-conversion/</guid><description>To learn some of the basics of metallurgy and have an understanding of what goes into some of our most basic tools I built a knife out of a discarded file.
Good quality files are made from high carbon steel which can be annealed (softened) so that it can be worked into a new shape and then hardened to produce a pretty high quality knife.
I mostly followed the excellent video series by Walter Sorrells but with a modified design.</description></item><item><title>WebRTC in 5 Minutes</title><link>https://davidhampgonsalves.com/webrtc-in-5-minutes/</link><pubDate>Sat, 23 May 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/webrtc-in-5-minutes/</guid><description>While WebRTC has been around for awhile now but its still feels like a young technology and there are few resources to learn about it. These are the basics of how a connection is made between peers which is important for understanding how WebRTC differs from traditional networking.
Creating a Connection __Fetch ICE (Interactive Connectivity Establishment) Candidates from STUN server.__ Contains details of how the data is going to be exchanged (ip, port, protocol).</description></item><item><title>Terminal GIFs on OSX</title><link>https://davidhampgonsalves.com/terminal-gifs-on-osx/</link><pubDate>Tue, 07 Apr 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/terminal-gifs-on-osx/</guid><description>Using Gifs for terminal explanations and usages aren&amp;rsquo;t new and exciting anymore but they are still useful. This is how to create them quickly on OSX.
Install The tool we will use to capture our gif ttygif.
brew install imagemagick ttyrec brew install https\://raw.githubusercontent.com/icholy/ttygif/master/ttygif.rb Gif The process of creating the gif is:
Run ttyrec which records your terminal session as series of png files. Run ttygif to convert the png files to small gifs.</description></item><item><title>Ethical Apps on Greenpeace Podcast</title><link>https://davidhampgonsalves.com/ethical-apps-on-greenpeace-podcast/</link><pubDate>Fri, 20 Mar 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/ethical-apps-on-greenpeace-podcast/</guid><description>Did a interview about ethical apps on the Greenpeace Podcast. Its a great new podcast and I had a great time speaking with them.
Listen The podcast is also up on soundcloud so you can hear my first segment or the entire show from there.</description></item><item><title>Docker Phusion Base</title><link>https://davidhampgonsalves.com/docker-phusion-base/</link><pubDate>Sun, 15 Mar 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/docker-phusion-base/</guid><description>I have been using the phusion baseimage-docker. While in the past i&amp;rsquo;ve been mostly interested in making my docker images as small as possible with images like alpine-linux(busy-box based) the Phusion base breaks from this tradition by encouraging you to run multiple processes from a single container.
While I was wary of this approach initially they make a good argument for it and in practice I have been really enjoying working in this fashion.</description></item><item><title>Launchd in 5 Minutes</title><link>https://davidhampgonsalves.com/launchd-in-5-minutes/</link><pubDate>Sun, 01 Feb 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/launchd-in-5-minutes/</guid><description>Launchd is the official way to schedule a task or run a service on OSX. The provided documentations goal is to turn you into a launchd expert at the cost of your afternoon. These are the 5 minute highlights to get a task running.
Configure Plist You tell launchd to run a task by putting a reverse domain named plist file(com.example.name) in ~/Library/LaunchAgents, this is probably what you are looking for but if you want it to be global then put it in /Library/LaunchAgents.</description></item><item><title>OpenCV CompareHist Performance</title><link>https://davidhampgonsalves.com/opencv-comparehist-performance/</link><pubDate>Sat, 31 Jan 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/opencv-comparehist-performance/</guid><description>I did some performance tests on the four histograms comparison methods that [compareHist](http://docs.opencv.org/java/org/opencv/imgproc/Imgproc.html#compareHist(org.opencv.core.Mat, org.opencv.core.Mat, int)) provides and initially found that in basic performance tests they were all about the same speed. More recently I profiled them in a real world application and found they were significantly different.
This is all using the Java OpenCV bindings.</description></item><item><title>Markov Chains in Clojure</title><link>https://davidhampgonsalves.com/markov-chains-in-clojure/</link><pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/markov-chains-in-clojure/</guid><description>I noticed that when you enter 30 into tumblrs age field it switches from &amp;ldquo;years old&amp;rdquo; to &amp;ldquo;years young&amp;rdquo;. Fully grasping the limited scope of my existence for the first time I wrote a Markov Chain generator so that it could provide(tenuous) value long after I have fled this mortal coil, by mashing up the works of Roald Dahl with some Clojure manuals.
When you reach this point in your life you can save some time and use my Clojure implementation or write your own.</description></item><item><title>If You Are Moving To San Francisco</title><link>https://davidhampgonsalves.com/if-you-are-moving-to-san-francisco/</link><pubDate>Wed, 10 Dec 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/if-you-are-moving-to-san-francisco/</guid><description>My family and I moved from Canada to San Francisco recently these are some pointers for others thinking of doing the same.
SSN You wont have an SSN for a while. You need to wait 10 days before you can apply in person and then wait some more for it to come. The next points all deal with living without one.
Banking You&amp;rsquo;ll probably hear many recommendations about getting a TD or RBC cross border accounts.</description></item><item><title>The Music Player/Organizer For the Rest of Us</title><link>https://davidhampgonsalves.com/the-music-player/organizer-for-the-rest-of-us/</link><pubDate>Fri, 02 May 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/the-music-player/organizer-for-the-rest-of-us/</guid><description>Everyone has their own (strong) opinions about this but I think I&amp;rsquo;ve figured it out. First to organize your music Beets is amazing. Its light, easy to use and lets you tweek things exactly how you want them.
The limitation with Beets was that it was just an organizer and you still needed a full GUI application to conveniently find and play your music. This weekend I wrote the Play plugin which lets you harness the might of Beets queries and send those results to your choice of lightweight music player.</description></item><item><title>Painless Resumes with Markdown</title><link>https://davidhampgonsalves.com/painless-resumes-with-markdown/</link><pubDate>Tue, 15 Apr 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/painless-resumes-with-markdown/</guid><description>Latex might be the most fashionable format for the discerning developer but I think its overkill. For my current resume rerwrite I choose markdown because:
Its plan text so its easy to edit and version. Its super simple and you are probably already well versed. There are already a bunch of nice css templates to work from. You can use it to generate most formats you may need. This is my resume.</description></item><item><title>Postgresql Range Basics</title><link>https://davidhampgonsalves.com/postgresql-range-basics/</link><pubDate>Tue, 18 Mar 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/postgresql-range-basics/</guid><description>In postgres 9.2 a new family of data types were added called Ranges. This is a quick overview of how to use them.
Range Types There are a handful of built in range types that cover the expected number and date types and you can also define your own if you need something outside of that.
Basic Operations Defining Range - CREATE TABLE ranges (range int4range) Inserting Range - INSERT INTO ranges VALUES(&amp;rsquo;[1, 4]') Infinate Ranges - INSERT INTO ranges VALUES(&amp;rsquo;[4, infinity]') Check Range Membership - SELECT * FROM ranges where range @&amp;gt; 2 Get Range Bounds - SELECT lower(range), upper(range) FROM ranges Defining Ranges Values You can define inclusive ranges using [2,3] and exclusive ranges using (1,4).</description></item><item><title>Dynamic CSS Reset</title><link>https://davidhampgonsalves.com/dynamic-css-reset/</link><pubDate>Sat, 15 Mar 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/dynamic-css-reset/</guid><description>When ever you ever have to inject HTML into an unknown page you have to battle with all the page styles messing with your own content. This happens a lot when building bookmarklets like my recent RSVP Reader. In the past you had to manually assign values for all the CSS properties that could have been set by the page. Since then then initial CSS property was added we can perform this reset automatically.</description></item><item><title>Spritz like(RSVP) Reader Bookmarklet</title><link>https://davidhampgonsalves.com/spritz-likersvp-reader-bookmarklet/</link><pubDate>Tue, 04 Mar 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/spritz-likersvp-reader-bookmarklet/</guid><description>So after seeing Spritz I waited for someone to whip up a nice extension so that I could try out the same technique(RSVP) in my brower. Since that hasn&amp;rsquo;t happened I created a bookmarklet that covers the basics so that we test this all out in real life and see how useful it really is.
install To install drag the following link to your bookmark bar.
RSVP Instructions Select some text on a page and click the bookmarklet.</description></item><item><title>Technical Interview Prep</title><link>https://davidhampgonsalves.com/technical-interview-prep/</link><pubDate>Fri, 24 Jan 2014 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/technical-interview-prep/</guid><description>This is my current list of online resources for preparing for technical interviews. I&amp;rsquo;ve setup this list as a github repo to allow others to contribute via pull requests.
Short List big-O cheat sheet - Refresher on the complexity of various algorithms. Design Patterns - Quick reference of design patterns. Sorting Algorithm Animation - Sorting algorithms visualised. Hacking a Google Interview Course Notes - General problems and prep suggestions(confidence booster). MIT Intro to Algorithms Lectures - Good to listen to in the background or before bed.</description></item><item><title>Awesome Free Hosting Stacks</title><link>https://davidhampgonsalves.com/awesome-free-hosting-stacks/</link><pubDate>Tue, 19 Nov 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/awesome-free-hosting-stacks/</guid><description>Weekend projects and free hosting stacks go hand in hand. Its a hard sell to sign up for recurrent fees to power hacks and &amp;ldquo;experiments&amp;rdquo;. This is a list of combinations that I like.
Highly Cachable Database Driven Sites Heroku + Mongo HQ : Databases on Heroku can be expensive. You can get around this using plugins and being flexable with your backend choices. The two best options I found are Mongo HQ which will give you 1/2 a Gig of storage.</description></item><item><title>Generating Identicons</title><link>https://davidhampgonsalves.com/generating-identicons/</link><pubDate>Tue, 19 Nov 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/generating-identicons/</guid><description>Identicons are icons that are generated from some form of user information. They usually serve to fill the gaps left by photo-less users that don&amp;rsquo;t provide a photo as unique(ish) identifiers for users.
These are usually generated by hashing the chosen user data and then using that hash to flip image pixels on and off. The following code snippit is a Java implementation of this concept and generates a 5*5 pixel, horizontally symmetrical identicon much like the ones github recently rolled out.</description></item><item><title>Apps4Halifax Crime Heatmaps</title><link>https://davidhampgonsalves.com/apps4halifax-crime-heatmaps/</link><pubDate>Sat, 16 Nov 2013 21:02:46 -0300</pubDate><guid>https://davidhampgonsalves.com/apps4halifax-crime-heatmaps/</guid><description>I took part in the Apps4Halifax open data contest and won second place in my category with Halifax Crime.
Halifax Crime is an animated heatmap of crime in the city.</description></item><item><title>Building a Basic Android Bot</title><link>https://davidhampgonsalves.com/building-a-basic-android-bot/</link><pubDate>Thu, 14 Nov 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/building-a-basic-android-bot/</guid><description>Last week I started playing a new game on my phone called Castle Crash. I don&amp;rsquo;t play often play video games but when I do, I play them obsesively until they are defeated. In this case you can&amp;rsquo;t beat the game since you are playing against the internet so I decided to tap out and let my computer take over.
MonkeyRunner Android has a great tool for writing simple automated tests on a device called MonkeyRunner.</description></item><item><title>Compressing JSON into a Brittle Lightweight String</title><link>https://davidhampgonsalves.com/compressing-json-into-a-brittle-lightweight-string/</link><pubDate>Thu, 07 Nov 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/compressing-json-into-a-brittle-lightweight-string/</guid><description>Client side single page apps tend to throw a lot of JSON data across the internet. These are some techniques I used on cimrheatmap.ca to compress my Geo/Time data by about 90% and avoided the overhead of gzipping the page. Be warned most of this was just for fun and is a silly idea because of the disadvantages listed bellow. {lat\:45.123, lng\:-63.123, type\: 'Assult', timestamp\: '1383837388112'} vs. '3 0 '</description></item><item><title>Animated Javascript Heatmaps.js</title><link>https://davidhampgonsalves.com/animated-javascript-heatmaps.js/</link><pubDate>Wed, 23 Oct 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/animated-javascript-heatmaps.js/</guid><description>I&amp;rsquo;ve been working on a crime heatmap animation lately and these are some tips for anyone else building something similar.
Heatmap.js For my animation I used a version of heatmap.js that was tweeked for animation by alastair.is. The tweek slightly changes the look of the heatmaps but achieves a much better frame rate.
The Animation If you new to Javascript based animation you will want to read up on window.requestNextAnimationFrame().</description></item><item><title>Detecting Mobile Device from Javascript</title><link>https://davidhampgonsalves.com/detecting-mobile-device-from-javascript/</link><pubDate>Mon, 21 Oct 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/detecting-mobile-device-from-javascript/</guid><description>This is a pretty lightweight way of detecting when your javascript is living in a mobile device.
if(typeof window.orientation != &amp;#39;undefined&amp;#39;) { /* put mobile spesific code here */ } To omit spesific devices from running this code you can also add individual checks like the following.
if(typeof window.orientation != &amp;#39;undefined&amp;#39; &amp;amp;&amp;amp; !navigator.userAgent.match(/iPad/i)) { /* put mobile spesific(but not ipad) code here */ } This is a mix of the answers found on stack overflow.</description></item><item><title>List Of Programming Competitions/Contests</title><link>https://davidhampgonsalves.com/list-of-programming-competitions/contests/</link><pubDate>Tue, 03 Sep 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/list-of-programming-competitions/contests/</guid><description>Google Code Jam annual competition ACM ICPC annual competition ICF PC annual competition USA Computing Olympiad annual competition community training Facebook Puzzles competition SPOJ competition Hack-Fit competition hackathon Kaggle predictive modeling competitions community Hacker Rank competition community training Code Chef competition community training Code Forces competition community training Project Euler tests Initial Round community training Online Judge training Know of another one? Let me know</description></item><item><title>Halifax Bus GPS Data</title><link>https://davidhampgonsalves.com/halifax-bus-gps-data/</link><pubDate>Tue, 20 Aug 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/halifax-bus-gps-data/</guid><description>There are so many Haligonians that want a GPS based Go Time bus tracker. The secret is that the apps and data exist, but that no one ever seems to find them.
The other day that changed for me and I found (via wikipedia) an old broken government webpage that when you looked at the pages source contained a link to: mobile departures.
When combined with the recent bus information released as part of Halifax&amp;rsquo;s Open Data Project you have everything you need to build a great Bus App.</description></item><item><title>Drawing Region Polygons on Google Maps API v.3</title><link>https://davidhampgonsalves.com/drawing-region-polygons-on-google-maps-api-v.3/</link><pubDate>Tue, 06 Aug 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/drawing-region-polygons-on-google-maps-api-v.3/</guid><description>You can &amp;ldquo;draw&amp;rdquo; all sorts of stuff on Google Maps using Layers but mor simply you can also directly create polygons and with a bit of extra work make them looks pretty cool. In this case I&amp;rsquo;m tracing a country using data from the Natural Earth Google Fusion Tables Dataset. Here is the final product showing where New York is.
Drawing a Polygon The Natural Earth Dataset provides outline coordinates using the EPSG 4326 projection.</description></item><item><title>Generating Bitcoins using Online Ads</title><link>https://davidhampgonsalves.com/generating-bitcoins-using-online-ads/</link><pubDate>Fri, 02 Aug 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/generating-bitcoins-using-online-ads/</guid><description>After reading about using online ads to launch a javascript based DDoS attack I started wondering about how well such a system would do at mining bitcoins. These are my rough calculations.
From my research I&amp;rsquo;ve found there are 3 ways to mine bitcoins(compute hashes) using Javascript:
UI thread (I was seeing about 800 hashes/s) Multiple threads via WebWorkers (I was seeing about 13000 hashes/s) Using the GPU via WebGL (limited browser support couldn&amp;rsquo;t find working example).</description></item><item><title>Building Phonegap/Cordova Apps for IOS</title><link>https://davidhampgonsalves.com/building-phonegap/cordova-apps-for-ios/</link><pubDate>Fri, 05 Jul 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/building-phonegap/cordova-apps-for-ios/</guid><description>If you don&amp;rsquo;t own a mac it can be tricky to write/build a mobile application for IOS unless you own a Macbook. In the world of Phonegap there are a few options to get you into the marketplace.
Phonegap Build Phonegap build is very nice. It looks good, is easy to use, builds are fast, their debugging system is really nice and quite clever. They also offer hydration which causes your device to pull your latest build so you don&amp;rsquo;t have to reinstall.</description></item><item><title>ASM.js in 30 Seconds</title><link>https://davidhampgonsalves.com/asm.js-in-30-seconds/</link><pubDate>Wed, 22 May 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/asm.js-in-30-seconds/</guid><description>Everyone loves faster Javascript, which is why Mozilla&amp;rsquo;s ASM.js is such big news. This is my 5 second overview.
ASM.js is a subset of javascript that allows for further optimization.
You can mark your JS code as being ASM.js complaint by adding &amp;ldquo;use asm;&amp;rdquo; to your file/function(similar to &amp;ldquo;use strict&amp;rdquo;).
ASM.js contains type hints and lacks a garbage collector. These differences make it highly optimizable (roughly half as fast as native).</description></item><item><title>RSS Luddite</title><link>https://davidhampgonsalves.com/rss-luddite/</link><pubDate>Tue, 26 Mar 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/rss-luddite/</guid><description>With Google Reader closing its doors the &amp;ldquo;Is RSS Dead?&amp;rdquo; debate has been revived.
As someone who loves RSS(enough to write a Chrome Extension) but never liked Google Reader I&amp;rsquo;d like my turn on the soapbox.
Since my first usage of Firefox(ver 1.5) I have always loved its live bookmarks feature(but not the read/unread indicators).
RSS readers shouldn&amp;rsquo;t be email clones. They should expect us to ignore items and act as a consistent, omnipresent and minimal interface to the internet.</description></item><item><title>Building Dolphin-Emu on Fedora</title><link>https://davidhampgonsalves.com/building-dolphin-emu-on-fedora/</link><pubDate>Sun, 20 Jan 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/building-dolphin-emu-on-fedora/</guid><description>Over the holidays I wanted to play some old game cube games to be festive(Christmas means new games). After some performance troubles I noticed that the version of the Dolphin Emulator I was using from the Fedora repos was version 3 and the current was 3.5. Eventually I broke down and built the latest version, which did make my life/performance better.
Bellow is the command to install all the build dependancies and after that the build should go smoothy and you&amp;rsquo;ll be up and running in no time.</description></item><item><title>Phonegap and a Million Frameworks</title><link>https://davidhampgonsalves.com/phonegap-and-a-million-frameworks/</link><pubDate>Wed, 09 Jan 2013 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/phonegap-and-a-million-frameworks/</guid><description>When writing a mobile app there are a ton of choices you need to make before you really get started. I&amp;rsquo;m going to discuss some of my experiences making these choices and living with them afterwards, starting with PhoneGap/Cordova itself.
Phonegap/Cordova First off Cordova and Phonegap are the same thing, Phonegap is currently transitioning over to be an Apache Incubator project which is called Cordova.
When choosing to use Cordova you are saying a few things about your app.</description></item><item><title>Javascript Damerau Levenshtein Algorithim</title><link>https://davidhampgonsalves.com/javascript-damerau-levenshtein-algorithim/</link><pubDate>Tue, 20 Nov 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/javascript-damerau-levenshtein-algorithim/</guid><description>The Damerau Levenshtein algorithim calculates a distance between two words in the same way that basic Levenshtein does but adds transpositions to the set of operations that it uses to calculate distance. This makes it much more reliable at finding similiar or alternate spellings of words.
I was doing some nodejs work lately and needed such a function to clean up one of my datasets and so I ported this version from C# to Javascript.</description></item><item><title>DIY Photobooth</title><link>https://davidhampgonsalves.com/diy-photobooth/</link><pubDate>Mon, 12 Nov 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/diy-photobooth/</guid><description>Last week I got married(it was amazing and surreal). When planning the wedding we really wanted to make the whole night reflect &amp;ldquo;us&amp;rdquo;. This meant an all vegan menu from hearty catering(amazing) and a lot of elbow grease as we built and crafted mostly everything ourselves. Our signs were life sized pictures, the cupcake stand was wooden slabs of a tree and I build a photobooth which is what I&amp;rsquo;m going to talk about in this post.</description></item><item><title>The Magic of UPC/EAN Barcodes</title><link>https://davidhampgonsalves.com/the-magic-of-upc/ean-barcodes/</link><pubDate>Mon, 12 Nov 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/the-magic-of-upc/ean-barcodes/</guid><description>Lately I&amp;rsquo;ve been working a mobile app called Ethical Barcode that scans product barcodes and determines if the related brand is worth supporting/avoiding.
As such of this I&amp;rsquo;ve been getting pretty familiar with the pitfalls and issues surrounding barcodes and product identification and I thought I&amp;rsquo;d share some of details that were tricky to find/figure out.
Before we get into the hurdles though, I&amp;rsquo;ll cover some barcode basics.
Barcode Types(that matter)</description></item><item><title>UPC/EAN Product Databases/API's</title><link>https://davidhampgonsalves.com/upc/ean-product-databases/apis/</link><pubDate>Wed, 07 Nov 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/upc/ean-product-databases/apis/</guid><description>Converting a barcode into useful, descriptive information is harder then you would expect. Or rather its difficult to do with any reliability and accuracy. There are a few good API&amp;rsquo;s that I&amp;rsquo;ve been using or looking into that I&amp;rsquo;ll cover here. The API&amp;rsquo;s Each service offers different information so you need to nail down your requirements before you read further. For my needs I really just need Barcode -&amp;gt; Company but I&amp;rsquo;ll try to add details that fall outside of that where I can remember them.</description></item><item><title>Install Node.js / NPM on Fedora Core 17</title><link>https://davidhampgonsalves.com/install-node.js-/-npm-on-fedora-core-17/</link><pubDate>Thu, 18 Oct 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/install-node.js-/-npm-on-fedora-core-17/</guid><description>This is just a short and sweet set of commands to install Nodejs and NPM on Fedora 17.
Versions Fedora Core 17 node.js 0.8.9 The Guts(go bash go!) sudo yum install openssl-devel.i686 gcc gcc-c++ sudo ./configure sudo make -j2 sudo make install su cd /tmp git clone https\://github.com/isaacs/npm.git cd npm make install exit Most of this was based on an older post I found here.</description></item><item><title>Updating Chrome Extension Manifest</title><link>https://davidhampgonsalves.com/updating-chrome-extension-manifest/</link><pubDate>Wed, 29 Aug 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/updating-chrome-extension-manifest/</guid><description>This post should really just read: JQuery 1.4 breaks(Refused to execute inline script) when used in Chrome Extensions using the version 2 Manifest. Update to Jquery 1.7 and you&amp;rsquo;ll be happy.
Unfortunately it doesn&amp;rsquo;t, it reads more like:
Last night I decided to cross something off my to do list and updated Foxish(a chrome extension) to use the version 2 manifest that will become manditory in a short while.
For the most part it was pretty painless.</description></item><item><title>Awesome Ideas Market Halifax</title><link>https://davidhampgonsalves.com/awesome-ideas-market-halifax/</link><pubDate>Thu, 21 Jun 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/awesome-ideas-market-halifax/</guid><description>Last week I took part inHalifax&amp;rsquo;s Awesome Idea Market and had a fantastic time.
This event brings people with ideas(sellers) together with people who want to chip in some money to get them started(buyers).
As a seller I had the opportunity to pitch my idea to each of the buyers as they came around. This was great practice and it allows you to test and tweek each variation of your pitch in rapid succession.</description></item><item><title>Iterative Javascript QuickSelect</title><link>https://davidhampgonsalves.com/iterative-javascript-quickselect/</link><pubDate>Fri, 08 Jun 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/iterative-javascript-quickselect/</guid><description>A couple weeks ago I entered my first AI related contest, hosted by scribd. The contest was great for beginners since it involved a very simple world and control scheme.
At some point in by bot creation process I needed to determine the n-th highest number in an Array. While for such a simple project I probably should have just thrown some loops together and moved on, but since the project was just I started researching the problem and Hoare&amp;rsquo;s Selection Algorithm.</description></item><item><title>Change Gnome Shell Dash Key Binding</title><link>https://davidhampgonsalves.com/change-gnome-shell-dash-key-binding/</link><pubDate>Mon, 30 Apr 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/change-gnome-shell-dash-key-binding/</guid><description>Most of the key binding can be configured from the system settings &amp;gt; Keyboard area with the exception of the configuring the dash or overview overlay, which by default is bound to the left super key. This can be problematic in certain cases and especially in the case of some VM&amp;rsquo;s.
To change this binding you need to modify the gconf settings by doing something like the following
gconftool-2 -s /apps/mutter/general/overlay_key Super_R -t string This line when run from the termainal tells the gconf tool that you want to set(-s) the overlay_key property to the Super_R key(or whatever you want to bind it to) and that this property is of type(-t) string.</description></item><item><title>Pygmenter</title><link>https://davidhampgonsalves.com/pygmenter/</link><pubDate>Wed, 01 Feb 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/pygmenter/</guid><description>Pygmenter is a web based frontend for the Pygments syntax highlighter. I whipped it up so I that I could write blog entries without leaving my browser and also to help when I&amp;rsquo;m unable to install pygments locally on the machine I&amp;rsquo;m writing from.
code As always the code is tucked away in my git hub repo.</description></item><item><title>HTML Sticky Headers</title><link>https://davidhampgonsalves.com/html-sticky-headers/</link><pubDate>Sun, 22 Jan 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/html-sticky-headers/</guid><description>Sticky headers are heading elements that stick to the top of the window as the user scrolls down the page. This is useful since you can use them to retain the contextual information of the section regardless of the position.
In my case I needed to have multiple headers in the hourly forecast list for hourweather.com.
I found there wasn&amp;rsquo;t much out there about this topic, especially when you want to have multiple sticky headers per page so I thought I&amp;rsquo;d share my implementation(which is pretty rough) for others to reference for the main ideas.</description></item><item><title>Slimming Down JQuery Easing</title><link>https://davidhampgonsalves.com/slimming-down-jquery-easing/</link><pubDate>Fri, 06 Jan 2012 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/slimming-down-jquery-easing/</guid><description>For simple javascript animations there is always a trade off between code size and visual effects. Recently I was trying to add some visual pizzazz to hour weather but didn&amp;rsquo;t want to incur the overhead of JQuery UI. What I was looking for was just a simple bounce effect on some moving objects. A lighter weight alternative that I considered was JQuery easing but even that seemed like overkill. My solution was to rip out the parts I needed and I wanted to share how easy that process is.</description></item><item><title>Loading Indicator &amp; CSS Animations</title><link>https://davidhampgonsalves.com/loading-indicator-css-animations/</link><pubDate>Sat, 26 Nov 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/loading-indicator-css-animations/</guid><description>Recently I needed a minimum viable animated web loading indicator. I didn&amp;rsquo;t want to add another image to my page for load time reasons. Nor did I want to write any javascript for size/time reasons. This left me with CSS animations. CSS based animations at this point only have limited browser support but for my project which already required HTML5 Geo Location it seemed like a good fit. This post is to show how easily this animation can be added as well as show how nicely it downgrades.</description></item><item><title>Weather Icon Set</title><link>https://davidhampgonsalves.com/weather-icon-set/</link><pubDate>Tue, 22 Nov 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/weather-icon-set/</guid><description>For Hourly Weather I needed a full set of weather icons that represented a wide palate of weather conditions as well as had night/day versions of each.
I couldn&amp;rsquo;t find an existing set that offered the scope I needed but I did find a set I liked. I can&amp;rsquo;t remember the source now(if anyone does please let me know) but working from that I build up the missing entries. Since the weather is everyones business I thought I&amp;rsquo;d share them here.</description></item><item><title>SMTP Test/Usage Via Telnet</title><link>https://davidhampgonsalves.com/smtp-test/usage-via-telnet/</link><pubDate>Wed, 09 Nov 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/smtp-test/usage-via-telnet/</guid><description>A telnet client is a handy testing tool for testing connectivity between servers. Today I needed to test an SMTP server connection from a linux environment so I wrote the following script. You could use the same technique manually to do the same thing as long as your have access to a telnet client.
Usage The script takes three parameters: the smtp server url, the sender address and the recipient address.</description></item><item><title>Connecting to SVN with Scala/Java</title><link>https://davidhampgonsalves.com/connecting-to-svn-with-scala/java/</link><pubDate>Thu, 25 Aug 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/connecting-to-svn-with-scala/java/</guid><description>I needed to do some SVN scraping recently to automate the detection of certain areas of code and this is what I learned.
Libraries SVNKit was too low level for my(and I suggest most) needs. I found I was writing quite a bit of code for relatively simple actions.
SvnClientAdapter provides a simplified interface for either the cmd line client, SVNJavahl or SVNKit. Its my recommendation that for most projects this is the best way to go.</description></item><item><title>Injecting Live Metadata with Wowza (1/3)</title><link>https://davidhampgonsalves.com/injecting-live-metadata-with-wowza-1/3/</link><pubDate>Wed, 03 Aug 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/injecting-live-metadata-with-wowza-1/3/</guid><description>This is the first post in a series about injecting JSON based metadata into a live RTP streams using Wowza Media Server, Adobe Flex and OSMF.
What We&amp;rsquo;re Building Over the course of these posts I&amp;rsquo;ll cover how to trigger a event with associated JSON data from a flash object via a NetConnection which then in turn cause Wowza to inject the related data into the live RTP media stream and then finally to listen for and handle that event on the client side OSMF based video player.</description></item><item><title>Flash NetConnection for Wowza RMI (2/3)</title><link>https://davidhampgonsalves.com/flash-netconnection-for-wowza-rmi-2/3/</link><pubDate>Tue, 02 Aug 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/flash-netconnection-for-wowza-rmi-2/3/</guid><description>This is the second post in a series about injecting JSON based metadata into a live RTP streams using Wowza Media Server, Adobe Flex and OSMF.
What We&amp;rsquo;ve Built So far in the previous post we got Wowza setup and created a module which will inject our JSON metadata into our live RTP stream.
What We&amp;rsquo;re Building (in this post) In this short post we&amp;rsquo;ll be triggering the injection of metadata from the browser using a flash object created with Flex.</description></item><item><title>Live Metadata Handling Using OSMF (3/3)</title><link>https://davidhampgonsalves.com/live-metadata-handling-using-osmf-3/3/</link><pubDate>Mon, 01 Aug 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/live-metadata-handling-using-osmf-3/3/</guid><description>This is the third post in a series about injecting JSON based metadata into a live RTP streams using Wowza Media Server, Adobe Flex and OSMF.
What We&amp;rsquo;ve Built So far in the previous posts(1,2) we setup Wowza and created a module which will inject our JSON metadata into our live RTP stream. Then we created a flash object to trigger the event injection with our metadata from the browser.</description></item><item><title>OpenCV/Python Color Tracking</title><link>https://davidhampgonsalves.com/opencv/python-color-tracking/</link><pubDate>Mon, 30 May 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/opencv/python-color-tracking/</guid><description>Preamble I needed some color based object tracking for a project I was hacking together last weekend. I choose to use the OpenCV Python bindings since I knew that I wouldn&amp;rsquo;t be doing anything fancy and I thought it would simplify the learning process. While the Python bindings are great I wasn&amp;rsquo;t able to find much documentation and what I thought would be an easy 10 minutes turned into a bit of an afternoon project.</description></item><item><title>PDF's using iText in 10 lines</title><link>https://davidhampgonsalves.com/pdfs-using-itext-in-10-lines/</link><pubDate>Mon, 16 May 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/pdfs-using-itext-in-10-lines/</guid><description>There are some getting started tutorials for the iText library but I don&amp;rsquo;t think they really capture how fast and easy it is to get working PDF&amp;rsquo;s.
Your standard servlet hello world example is 10 super simple lines.
In your servlets doGet method:
response.setContentType(&amp;#34;application/pdf&amp;#34;); Document document = new Document(); try { PdfWriter.getInstance(document, response.getOutputStream()); document.open(); document.add(new Paragraph(&amp;#34;Hello world&amp;#34;)); document.close(); } catch (DocumentException e) { //handle the error } to break that down: First you need to let the browser know via the http response headers that the content is a pdf.</description></item><item><title>Hourly Weather</title><link>https://davidhampgonsalves.com/hourly-weather/</link><pubDate>Fri, 01 Apr 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/hourly-weather/</guid><description>Hourly Weather is two small projects that share the same major code base. The first is an App/Appwidget for the android platform and the second is a web application.
Both projects have a similiar goal which is to give you an hour based forecast for your current location. The Android version does this using the devices build in location based hardware and the web application does this using the new HTML 5(kind of) geo-location api.</description></item><item><title>JQuery JFeed</title><link>https://davidhampgonsalves.com/jquery-jfeed/</link><pubDate>Wed, 26 Jan 2011 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/jquery-jfeed/</guid><description>While working on Foxish I needed to parse some RSS/Atom feeds in javascript. Thinking there would be nice a library for this I took a look around and found a couple old libraries and determined that the best of those was JFeed which is a JQuery plugin.
Issues As I worked on the project I discovered issues with the library and since it was last updated in 2007 it didn&amp;rsquo;t support JQuery 1.</description></item><item><title>Html5 Canvas Yule Log</title><link>https://davidhampgonsalves.com/html5-canvas-yule-log/</link><pubDate>Sat, 25 Dec 2010 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/html5-canvas-yule-log/</guid><description>The last few weeks I&amp;rsquo;ve seen more fake burning fires then every other holiday season I can remember so when I noticed no one had written one in canvas I figured I&amp;rsquo;ll fill the gap.
the Fire Not being a game developer I needed to read a bit about how to create a reasonable but minimally resource intensive fire simulation. The one I chose works by randomly generating colors and then propagating them up the page while averaging out near by colors and adding a cooling effect.</description></item><item><title>Notefeeder</title><link>https://davidhampgonsalves.com/notefeeder/</link><pubDate>Wed, 01 Dec 2010 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/notefeeder/</guid><description>Note Feeder is a small web application that lets you save urls and notes from your current page.
You can access your notes from RSS feeds to find sites or thoughts later.
Features Save links and notes without leaving your page using the bookmarklet. Various ways to create notes. For details see the input methods page. Access your notes from your current page using the RSS feeds. For other options see the output methods page Description field supports markdown.</description></item><item><title>Foxish</title><link>https://davidhampgonsalves.com/foxish/</link><pubDate>Sun, 30 May 2010 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/foxish/</guid><description>Foxish is a Chrome/Chromium extension that mimics the excellent native handling of RSS and Atom feed reading in Firefox using live bookmarks.
It does this by syncing RSS feeds with bookmark folders and refreshing them on a customizable interval.
Features Enables live bookmark handling of RSS/Atom feeds. Detects feeds on the page(code based on RSS Subscription Extension by Google). Customizable polling interval. Import function for OPML. Download Get Foxish from the Google Chrome Extensions site.</description></item><item><title>Foxish FAQ</title><link>https://davidhampgonsalves.com/foxish-faq/</link><pubDate>Sat, 29 May 2010 00:00:00 +0000</pubDate><guid>https://davidhampgonsalves.com/foxish-faq/</guid><description>What is Foxish RSS? Foxish is an RSS/Atom reader in the style of Firefox&amp;rsquo;s Live Bookmarks. It syncs RSS/Atom feeds with bookmark folders so that you can conveniently watch and read the content. I feel this style of RSS/Atom consumption is a perfect fit for sites like Reddit, Hacker News, etc.
My Foxish RSS feeds arn&amp;rsquo;t syncing There can be a couple reasons for this. First the feed itself may have an issue and second you may have hit the Chrome extension bookmark API limit.</description></item></channel></rss>