Friday, July 23, 2010

NAIDCharities – Virtual Animal Rescue



naidLog

A few business associates of mine recently started a new animal charity called NAIDCharities

NAIDCharities is a ‘virtual animal rescue’. We don’t keep any animals, we don’t feed any animals, and most times, we don’t even see any animals. But we’re making a big difference anyway. Just being invisible.

We are a non-profit organization that helps abandoned animal placement services find homes for pets faster. How? Well, it’s all about social networking. We tell more people about the pet than would have ever known with traditional methods. And not just any home will do - we work to find the right type of owner with a little extra homework behind the scenes.

Using our technology background we are attempting to build a system that can automatically connect displaced animals with owners. Traditional systems rely on people looking for animals to discover a pet in need and adopt them, in essence a pull model. While this approach is affective too many animals go unnoticed. NAIDCharities is attempting to combine social media and data mining to switch the model from pull to push.

Using our technology we are attempting to find owners for animals automatically. Our theory is that if you are already an animal owner, you might be more willing to adopt or foster another animal. Even if you are not, you most likely have friends or family that are also animal owners and may be willing to inform them of an animal in need.

We are currently in the beginning stages of our efforts. Throughout the year I will be blogging about the technology approaches NAIDCharities utilizes to help reach our goal. One of those technologies currently under development is NAIDAR ®

NAIDAR (National Animal Information Database Animal Relocation) is a system that:

  • Discovers when pets enter and leave animal shelters and ascertains if/when naidar-copythe pet will be euthanized.
  • Identifies optimal prospect households for pet adoption.
  • Matches the pets and prospective owners through statistical modeling.
  • Communicates to the potential prospect the animals that are up for adoption and entices them to adopt.

NAIDCharities realizes that before animals can be saved from euthanizing, they must first be identified as being available for adoption in an animal shelter. Establishing strategic partnerships with animal listing services, along with proprietary web crawling technology to pick up animals from smaller disparate services, NAIDAR can quickly identify animals that are available for adoption. NAIDAR was written exclusively for this use, and can quickly ingest other data services that deal in animal adoption as they are identified.

The key component of NAIDAR is a patent pending model called P3 (Potential Pet-owner Prospects). P3 includes a statistical regression-based model that uses numerous data sources (such as NAID, customer databases from animal service providers, public record data, marketing, geographic and demographic information, and charity CRM data) to identify various levels of adoption candidates for an animal about to be euthanized. Like other regression models, it gains strength and accuracy (more variance is explained) over time from continued use.

With a pet in need of adoption, prospective homes are identified. NAIDAR “pushes” the animal information to the prospect in the hope they will adopt the animal. Instead of using traditional “pull” approaches where animal shelters rely on good Samaritans to inquire about animals under their watch, NAIDAR proactively works to place the animal in a new home.

The entire model becomes a continuous improvement cycle, learning from successful practices and placements, making each subsequent adoption a little more likely to be successful at a faster rate.

Please “bark” your support by clicking on the below buttons or check us out at http://www.naidcharities.org or on Facebook at http://facebook.naidcharities.org

Tuesday, May 25, 2010

Use Google Calendar as a Timesheet



I recently joined Daugherty Business Solutions, a strategic consulting partner committed to helping clients meet unique business and technology objectives. As a software consultant working on various projects I needed to be able to track the time I spent working on client projects. I also wanted a solution that didn't require installing any special software or requiring a specific computer. After trying several different approaches a fellow colleague (Todd LeLoup) showed me his technique using Microsoft Outlook Calendar to track what he was working on. I modified his technique slightly to be "cloud friendly." This technique utilizes the free Google Calendar service, requires no additional software, works on any computer, works on any Internet enabled mobile phone, and especially works great for the WebOS Palm Pre, which is my current smart phone and the mobile platform I like to develop on.

The Approach

One of the greatest features of Google Calendar is the ability to have multiple calendar "views" associated to one account. Google calendar will then overlay each view onto a single calendar, allowing you to see the big picture. I have a view for my personal calendar items (such as reminders about dentist appointments, taking out the garbage, etc) as well as a view for Daugherty client work.

myCalendar

Using this approach I can keep track of all the work I do for each client separately. At the end of the week I can then total up the hours spent on each client and submit to our billing department. While on site, I can use my Palm Pre mobile phone to input work information directly into the calendar as I do the work.

How to Setup Google Calendar

The first thing you need to do is make sure you have a free Google Calendar account. To sign up go to http://calendar.google.com and follow the directions for creating a new account. Once you have an account, setting up Google Calendar to support time sheets is very simple.

On the left hand side of the main calendar view will be a section titled My calendars. Click the "Add" button to begin adding a new view.

addCalendar

The Create New Calendar window will display. This window allows you to assign a name and description to your view. You can name the view anything you want. Just make sure it is descriptive enough for you to identify it.

newCalendar

Once you have your time-sheet view created you can start adding events to it. There are several different ways to add events in Google calendar, but the simplest approach is to click the drop down arrow of the time-sheet calendar under the My calendars section and select "Create event on this calendar".

createNewEvent

This will bring up the new event window where you can enter the information about the event. I use a naming schema for my events that make it easier for me to separate work for different clients. In the What field I use the schema <<Client Name>>: <<Work Title>> where Client Name is the name of the client I did the work for, and <<Work Title>> is the name of the work I did. Starting each event with the name of the client makes it easier to group work together. The rest of the fields are self explanatory. There are two fields to make sure you set correctly before hitting save. The Calendar field determines what view will contain the event. Make sure you are using the correct time-sheet view before hitting save. The other field to double check is the Show me as field. Make sure it is set to Available so that you won't get any reminder notifications.

createNewEvent2

Other Tips and Tricks

At the end of each week I need to calculate the total hours worked for each client to be able to bill them appropriately. My simple approach is to store the total hours worked as an All Day event on the calendar. Here is how to do it.

At the start of a day I spend a few minutes and sum up all the work I did for the previous day. For each client I add an All Day calendar event using the following naming schema: <<Client Name>>:<<Client Hours>> hrs where as before Client Name represents the client I did work for and Client Hours is the amount of time spent working for that client for that day. After totalling up the work for each client I add one more All Day event summing up the entire day's worth of work. I usually use the naming schema: ------ Total Hours: <<Total Hours>> hrs ------

allDayEvents

The All Day trick makes it extremely easy for me to create my end-of-week time sheet since All I have to do is scan the top section of the calendar for each day and plug in the numbers.

In summary, Google Calendar offers a quick, easy, portable, and best of all free solution for implementing a way to track the type of work you do. Give it a try and see for yourself!

Tuesday, May 11, 2010

How to Simulate a WebOS Palm Pre Web Browser using Google Chrome



Several times in the past I have needed to simulate a Palm Pre WebOS browser to take screen shots for blog posts. Not wanting to load up the Palm Pre developers kit, I discovered Google Chrome makes it easy to simulate the user agent used by the WebOS browser.

Here is all you have to do if you use Windows.

  • Launch a command prompt (Start, Run, cmd, Enter)
  • Type the following command to launch Google Chrome. Don't forget to replace the {USER_ID} variable with the user id you are logged into Windows with.
     
  • XP
    • "C:\Documents and Settings\{USER_ID}\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --user-agent="Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0"
       
  • Vista, Windows 7
    • "C:\Users\{USER_ID}\AppData\Local\Google\Chrome\Application\chrome.exe"  --user-agent="Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0"

The Palm Pre has a screen resolution of 320x480. The easiest way to resize your browser consistently is to install the Google Chrome Extension: Resolution Test which will allow you to resize your window to any resolution you can think of.

Using the Palm Pre user agent you can now navigate Chrome to any website you would access using your phone. The website will render as it would on your phone since both the WebOS browser and Google Chrome are WebKit browser engines. Enjoy!

googleCalendar1

Sunday, April 11, 2010

How to share files on your WebOS smart-phone over the Internet



One of the best “hacker friendly” smart phones is the Palm Pre and more specifically phones running on the WebOS platform. WebOS is a Linux based distribution with proprietary components from Palm allowing the platform to support its touch screen interface and phone features. Palm has to-date been very supporting of the homebrew community and their passion for digging into the guts of the phone and unlocking all of its secrets. Two groups in particular lead the charge WebOS Internals and Palm Pre Hacks. These dedicated individuals spend their free-time looking into ways to better the user experience of the Palm Pre. A lot of the background research that went into this post has come from these groups and I would like to thank them for their hard work.

If you are looking at this post then we must assume you are not content on using the out-of-the-box features of your phone and would like to extend its capabilities. Maybe it is the challenge, maybe it is the wow-factor you get from your friends and coworkers. In any event, this post will guarantee to give you both. Recently I came across a few postings from Palm Pre Hacks describing how to run WordPress on a Palm Pre. This excellent post got me thinking about some of the other things you could do with a web server running on your smart-phone. My first idea was for a simple way to share the pictures on your phone with your friends and family. So without further ado here are the steps you need to do to start sharing your pictures (or anything else on your phone)

Prerequisites

To implement the steps of this post you must first “root” your phone. This simply means you need to be able to access the Linux shell of your phone. There are several accepted techniques but if this is the first time you are rooting your phone you will need to use the Novaterm technique. Once you have gained access to the Linux shell you can continue. I prefer to SSH into my Palm Pre since it is the standard approach to connecting to remote Linux shells.

Before we can get to the heart of this post we must first tackle a big issue. If you are going to let others view the files off your phone using the Internet then you are going to have to give those people and easy way to access your phone. Dynamic DNS is the answer we are looking for. Dynamic DNS allows your friends and family to enter a user friendly name like http://johnsmithpalmpre.selfip.com:8081/ to gain access to your phone. Setting up the Dynamic DNS is easy to do. The best post I have found for doing this comes from Palm Pre Hacks and their posting on setting up SSH on the Palm Pre. Once on the post scroll down to the section titled Step by Steps to Setup Dynamic DNS for your Palm Pre.

One more thing to consider. The majority of the steps in this post requires the modification of configuration files. The accepted Linux tool for doing this is the vi text editor. If however you are a novice at Linux the vi text editor can be VERY daunting. I have found the Linux nano text editor to be much easier for beginner Linux users to grasp. To install nano on your palm pre type the following command inside your linux shell




sudo ipkg-opt install nano



Setting up LighttpddirectoryBrowsing

The secret to this post is setting up a web server that supports directory browsing. What is directory browsing? Well a web server can be configured to display the contents of the server just like you see when you use Windows Explorer. This means you can give your friends and family a URL to a virtual directory on your web server (phone) and allow them to view the contents of that folder, including sub folders and of course files.

For this posting we will be using Lighttpd. Lighttpd is an open-source lightweight web server for the Linux OS and is ideal for websites with light traffic or for Palm Pre smart-phones :=) Again WebOS Internals steps to the plate with a simple to follow post on how to install Lighttpd. Please note that if you follow the posting from WebOS Internals your default server port will be 8081 and your default folder for your web server will be /opt/share/www. Once you have the web server installed we need to make a few tweaks to the configuration file. The Lighttpd configuration file is located at /opt/etc/lighttpd/lighttpd.conf. Using your favorite Linux text editor you need to modify/add the following settings (I will be using nano)









cd /opt/etc/lighttpd


sudo cp lighttpd.conf lighttpd.conf.bak


sudo nano lighttpd.conf


The first command cd /opt/etc/lighttpd will navigate you to the folder location of the configuration file.

sudo cp lighttpd.conf lighttpd.conf.bak will make a backup copy of the configuration file. I never make a change to a configuration fie without fist backing it up. You never know when you may need to revert your changes!

The last command sudo nano lighttpd.conf launches the nano text editor. Once inside your text editor you need to find the following line of text:

dir-listing.activate

In nano you can do this by pressing CTRL+W and typing dir-listing.activate

ssh1

If the line of text starts with # remove it. Also make sure the value of the setting is set to enabled. The line of text should look like






## virtual directory listings

dir-listing.activate = "enable"


Now scroll to the bottom of the file and add the following text:






server.follow-symlink = "enable"



The setting: server.follow-symlink tells Lighttpd to support using sym links which are like Windows shortcuts. After you have added this command save your changes and exit the text editor. In nano, all you need to do is press CTRL+X and then Y. For the changes we just did to take affect we need to restart the web server. To do this type the following command:






sudo /opt/etc/init.d/S80lighttpd restart


Setting up virtual directories

Now that the hard stuff has been done all we need to do is tell the web server which directories we wish to support. The simplest approach is to setup a symlink underneath the root web folder. Pictures taken on your phone are stored in the /media/internal/DCIM folder.

ssh2

To allow your web-server to list the contents of this folder type the following commands:







cd /opt/share/www



sudo ln –s /media/internal/DCIM pictures


The cd /opt/share/www command navigates you to the root web folder of Lighttpd. sudo ln –s /media/internal/DCIM pictures creates a symlink to the /media/internal/DCIM folder and gives it the name pictures.

Testing your setup

Now that you have configured your web server to support directory listing, enabled supporting symbolic links, and setup a symlink under the root web folder it is time to test your hard work out. All you need to do is go to your favorite web browser and type the address of your Dynamic DNS entry you setup previously adding :8081/pictures to the end of the URL. For example:

http://yourdynamicdnsentry:8081/pictures

If everything worked you should see a directory listing of all the pictures in your DCIM folder on your phone. If you click on one of the links you will be able to see the picture!

proof1

Conclusion

Setting up a web server to run on your Palm Pre is very simple to do. Once you have this web server up and running the number of things you can do with it are limitless. Keep in mind that your phone won’t be the speediest web server on the block, but it will do for simple file viewing and impressing your co-workers and friends. Using the power of symlinks you can open up any folder on your phone you wish. Of course with great power comes great responsibility. Make sure you follow all copyright laws when opening up your phone for browsing. I would also advice not giving out the Dynamic DNS address of your phone to the public as you don’t want to spend your precious CPU cycles severing up pictures to the general populace. Enjoy!