<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Continuously Deployed</title>
 <link href="http://danmayer.github.com/atom.xml" rel="self"/>
 <link href="http://danmayer.github.com"/>
 <updated>2012-05-12T10:08:09-07:00</updated>
 <id>http://danmayer.github.com</id>
 <author>
   <name>Dan Mayer</name>
   <email>dan@mayerdan.com</email>
 </author>

 
 <entry>
   <title>Rails tests gotcha with I18n.locale</title>
   <link href="http://danmayer.github.com/2012/01/14/Rails-tests-gotcha-with-I18nlocale"/>
   <updated>2012-01-14T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2012/01/14/Rails-tests-gotcha-with-I18nlocale</id>
   <content type="html">&lt;p&gt;Ruby, Rails, TestingA example of a bad I18n rails test&amp;#8230; Found some tests failing in a project because tests in different files would change I18n.locale, changes like this make your tests fail if the tests are not run in the standard order. since this took me awhile to track down, I thought I should share a quick example for others to find. So if you are having a issue like this remember to add a teardown method that resets I18n.locale to the default local. &lt;script src='https://gist.github.com/1568648.js?file=I18n_bad_test.rb'&gt; &lt;/script&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby processing: making it snow</title>
   <link href="http://danmayer.github.com/2011/12/27/Ruby-processing-making-it-snow"/>
   <updated>2011-12-27T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/12/27/Ruby-processing-making-it-snow</id>
   <content type="html">&lt;p&gt;ruby, processing, graphicsI re-found a fun holiday project I did a couple years ago &lt;a href='https://github.com/danmayer/Processing-Snow'&gt;making snow with Ruby processing&lt;/a&gt;. &lt;a href='/assets/snow-processing.jpg'&gt;&lt;img src='/assets/snow-processing-thumb-500x312-49.jpg' alt='snow-processing.jpg' /&gt;&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Cleaning up files after hacking</title>
   <link href="http://danmayer.github.com/2011/12/17/Cleaning-up-files-after-hacking"/>
   <updated>2011-12-17T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/12/17/Cleaning-up-files-after-hacking</id>
   <content type="html">&lt;p&gt;system, adminThis blog was hacked awhile ago. It was annoying, I hadn&amp;#8217;t updated my blog software for awhile and there was a security hole. It was a good learning experience of how to deal with the intrusion. It was also nice to be able to quickly whip together some scripts to help clean everything up. This let me see which files were recently modified&lt;code&gt;find . -type f -mtime -3 | grep -v &amp;quot;/Maildir/&amp;quot; | grep -v &amp;quot;/logs/&amp;quot;&lt;/code&gt; The exploiters were modifying my .htaccess and adding a few files of their own, this deleted their files&lt;script src='https://gist.github.com/1491781.js?file=gistfile1.txt'&gt; &lt;/script&gt; This code helped remove exploit code that was injected into all of the pages on the site.&lt;script src='https://gist.github.com/1491783.js?file=remove_code.rb'&gt; &lt;/script&gt; After upgrading my software and installing security patches, a bit of other cleanup, and file permission fixes everything was back to normal.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>ActiveRecord / Rails case insensitive ordering</title>
   <link href="http://danmayer.github.com/2011/11/16/ActiveRecord--Rails-case-insensitive-ordering"/>
   <updated>2011-11-16T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/11/16/ActiveRecord--Rails-case-insensitive-ordering</id>
   <content type="html">&lt;p&gt;Rails, Ruby, ActiverecorderIt is pretty common to want to have the results of a query sorted by order. I wanted the results sorted by name on a user object. Oddly it is hard to find how to make a string based order case insensitive on google. So for other having the same issue, it is simple, just add lower(field) in the order clause and it will sort in a case insensitive manner. Now I don&amp;#8217;t care when a user doesn&amp;#8217;t capitalize the first letter of their name. &lt;code&gt;User.order(&amp;#39;lower(name)&amp;#39;).all&lt;/code&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Announcing NothingCalendar</title>
   <link href="http://danmayer.github.com/2011/11/14/Announcing-NothingCalendar"/>
   <updated>2011-11-14T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/11/14/Announcing-NothingCalendar</id>
   <content type="html">&lt;p&gt;Ruby, Rails, learning, projectsI wanted a small project to play around with. A project that was small and simple that I could actually get done in my free time. An app I would use myself. I ended up deciding to build &lt;a href='http://nothingcalendar.com'&gt;NothingCalendar&lt;/a&gt;, which was inspired by &lt;a href='http://calendaraboutnothing.com'&gt;CalendarAboutNothing&lt;/a&gt;. It let&amp;#8217;s users track events, anything they feel like tracking over time. Mark off days you worked out, kept to your diet, worked on writing, studied, quit smoking, or anything else. The idea was a simple way that I could add marks on a calendar on my phone, and have it sync-able and shareable. I also wanted it to be useable when you are offline, since phones loose connection often in metros, planes, lines, etc. One goal with the project is to keep it is small enough that I can build it and play around with different ideas. It is such a small app, that I could rewrite the entire thing with a new methodology if I wanted. Which is exactly what I plan on starting to do. I wanted a app that I could practice new skills and techniques on, while still being useful, and something I would use on a day to day basis. I started working on the project with the idea to build up a chain of doing some open source experimental development having a playground to try things and learn. A small app where I could push myself to look at new technologies, and to force myself to release them into a production environment, opposed to another one off script or tests that never see the light of day. I highly recommend forcing yourself to do a bit of development every day, it is recommended by a bunch of smart people (&lt;a href='http://pragprog.com/the-pragmatic-programmer'&gt;Andrew Hunt and David Thomas&amp;#8217;s The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt;, &lt;a href='http://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic/dp/1934356344'&gt;Chad Folwer&amp;#8217;s The Passionate Programmer&lt;/a&gt;, &lt;a href='http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/0596006624'&gt;Paul Graham&amp;#8217;s Hackers and Painters&lt;/a&gt;). I was in part inspired by &lt;a href='http://twitter.com/#!/eee_c'&gt;Chris Strom (@eee_c)&lt;/a&gt;, who has done incredible work keeping up a chain and blogging about what he learns. NothingCalendar is a testament to what you can do in about 15 minutes a day. That is about how much time I have spent on it most evenings. Just forcing myself to do a bit every day, has led to my longest &lt;a href='http://calendaraboutnothing.com/~danmayer'&gt;streak on CalendarAboutNothing&lt;/a&gt; (66 days at the moment). Just remembering to code a bit everyday, keeps the project in your mind, keeps you improving it. It also makes refactoring little things a perfect task, you only have a few minutes take something on. Complete a tiny refactoring of from a todo list and check it in. I frequently just check in #TODO comments, and grep for them when I don&amp;#8217;t have much time or an idea of what to work on. After a tiny todo, call it a day and know you will have more time sometime soon to do something more substantial. Please give NothingCalendar a try, and let me know how it goes or any problems / feature ideas. I will will be working more more on it each day, and trying to rewrite large parts of the app using some new ideas.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>working with Facebook  Dialog Feed and urls with params</title>
   <link href="http://danmayer.github.com/2011/11/13/working-with-Facebook--Dialog-Feed-and-urls-with-params"/>
   <updated>2011-11-13T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/11/13/working-with-Facebook--Dialog-Feed-and-urls-with-params</id>
   <content type="html">&lt;p&gt;Facebook&amp;#8217;s documentation always sucks. There are many examples of working with facebooks dialog feed, but none of them include passing urls that have params. They are all simple examples like share &amp;#8216;http://example.com&amp;#8217;, well if you want to share &amp;#8216;http://example.com?foo=bar&amp;amp;buzz=baz&amp;#8217; you are kind of out of luck. It took me far longer than I care to admite to figure out the right way to get facebook to share a link that included params. I was using ruby and rails, creating a link with _url and params, and then trying to encode it and send it to facebook. Below is what ended up working. Note that it seems to be a bit of an odd encoding, but it allows one to send urls with params and encoded &amp;#8217;?&amp;#8217; and &amp;#8217;&amp;amp;&amp;#8217; properly through facebook and have the share url include the params your expecting. &lt;code&gt;facebook_shared\_url = action\_url({:foo =&amp;gt; &amp;#39;bar&amp;#39;, :buzz =&amp;gt; &amp;#39;baz&amp;#39;})facebook\_url = &amp;quot;https://www.facebook.com/dialog/feed?app_id=#{FACEBOOK_CLIENT_ID}&amp;amp;redirect_uri=#{URI.encode(facebook_shared\_url).gsub(&amp;#39;&amp;amp;amp;&amp;#39;,&amp;#39;%26&amp;#39;)}&amp;amp;description=#{text}&amp;amp;name=#{via}&amp;amp;link=#{URI.encode(facebook_shared\_url).gsub(&amp;#39;&amp;amp;amp;&amp;#39;,&amp;#39;%26&amp;#39;)}&amp;quot;&lt;/code&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Grep a filtered list of files</title>
   <link href="http://danmayer.github.com/2011/11/12/Grep-a-filtered-list-of-files"/>
   <updated>2011-11-12T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2011/11/12/Grep-a-filtered-list-of-files</id>
   <content type="html">&lt;p&gt;I am working on a project that has view formats. Frequently when grepping the project, I want to grep only one format. I added a couple bash aliases to help me pipe a list of files to grep. Grepping through a specific list of files can be useful in many situations. Here is how to grep a list of files or set up quick aliases to make it easy to do. First you need to get a list of files, in my case I do this with find and looking for the touch format &lt;code&gt;alias find_touch_views=&amp;#39;find app/views/ -name &amp;quot;*.touch.erb&amp;quot;&amp;#39;&lt;/code&gt; This generates the list of files you want to grep, now you just pipe that list to grep using xargs to grep each file for a specific word. &lt;code&gt;alias grep_touch_views=&amp;#39;find_touch_views | xargs grep -Ri &amp;quot;$0&amp;quot;&amp;#39;&lt;/code&gt; in the end this lets me run &lt;code&gt;grep_touch_views touch-nav&lt;/code&gt; Modify these to fit your needs and add them to your ~/.bash_profile &lt;code&gt;alias find_touch_views=&amp;#39;find app/views/ -name &amp;quot;*.touch.erb&amp;quot;&amp;#39;alias grep_touch_views=&amp;#39;find_touch_views | xargs grep -Ri &amp;quot;$0&amp;quot;&amp;#39;&lt;/code&gt; which gives me a list of all the views that contain touch-nav.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Git clone from local filesystem to fetch local branches</title>
   <link href="http://danmayer.github.com/2011/10/29/Git-clone-from-local-filesystem-to-fetch-local-branches"/>
   <updated>2011-10-29T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2011/10/29/Git-clone-from-local-filesystem-to-fetch-local-branches</id>
   <content type="html">&lt;p&gt;Github, Git, environment, So I am working on a project that has a very long test suite. Yes, that is a problem and we should start to do something about it. For now that problem exists but it leads to wanting to do some weird things. I wanted to work on code in a branch, while my tests were running in another. I had cloned the project twice so I had two versions, of the project, the issue was the branch I wanted to work in hadn&amp;#8217;t been pushed remote. I then realized since it is git I could easily solve the problem by pointing my second version of my project at the first and fetching all of my local branches! Git is pretty great that you can solve things like this. It also means you could easily just run git off a shared network filesystem, no reason to really setup a fancy git server. Here are the steps make a second version of a project and then fetch the local branches from your first version # if you haven&amp;#8217;t clone a second version of the project do that from the filesystem or the git server&amp;gt; cd project_2&amp;gt; git clone /Users/danmayer/projects/project_1&amp;gt; Cloning into project_1&amp;#8230; # in the second version of your project add a remote repo pointing at the original version of the project on your filesystem&amp;gt; cd project_1&amp;gt; git remote add local /Users/danmayer/projects/project_1/&amp;gt; git fetch local&amp;gt; git branch #=&amp;gt; a list of the branches on your first projects directory This is a pretty simple thing to do, but when I ran into the issue it took me a bit of time to realize how simple it was to solve this problem. It also just illustrates just how versatile git really is.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Simplifying new gemset creation for RVM</title>
   <link href="http://danmayer.github.com/2011/10/23/Simplifying-new-gemset-creation-for-RVM"/>
   <updated>2011-10-23T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2011/10/23/Simplifying-new-gemset-creation-for-RVM</id>
   <content type="html">&lt;p&gt;Ruby, environment, developmentI found myself annoyed that each time I created a new project I had to go through the same steps to create and setup my gemset. I am also trying to be better about automating things I do over and over. I decided I should put something in my .bash_profile to simplify my frequent task of making a new gemset on a brand new project. The manual way I ended up creating gemsets in the past, was:* cd to project_directory* rvm use ree (my preferred local ruby run time)* rvm gemset create projectGemSet* echo &amp;#8216;rvm use ree@projectGemSet&amp;#8217; &amp;gt; .rvmrc* cd ../* cd project_directiory* agree to trust the .rvmrc file That is pretty simple, but gets a bit annoying to do over and over. I figured I could very quickly whip up a solution in my bash profile. Unfortunately, due to my shell scripting skills kind of sucking, I ended up using Ruby. Basically after adding my new ruby script to my .bash_profile, I can now just type &amp;#8216;init_gemset newgemset&amp;#8217;, and I will be left in my project using my new gemset. The final script is below. &lt;script src='https://gist.github.com/1257690.js?file=init_gemset.rb'&gt; &lt;/script&gt; One thing to note is the time saved with automating a repetitive task vs. time spent to automate it. In the end because of spending a decent amount of time trying to write this as a shell script without using Ruby. I likely spent more time getting this script working, than it will ever save me. It also isn&amp;#8217;t even fully reusable for other people in it&amp;#8217;s current state (the .bash_profile function needs a full path to the ruby script in it, and my preferred RVM ruby is hard coded). It could be made more easily reusable / sharable (likely making it a gem, or sending a pull request to RVM itself with this as a feature). Doing this the fully &amp;#8216;right&amp;#8217; way would just add more time spent, on something I initially did to save a few moments. I wanted to get back to what I was originally working on, and I had something that would work for me. So I will leave it here as a simple gist. Working on this also made me think about what is worth spending time automating. In terms of savings this likely wasn&amp;#8217;t worth much, but there are many times that a repetitive task is really begging for automation.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>ActiveRecord Association objects can act weird (bug in association#any?)</title>
   <link href="http://danmayer.github.com/2011/10/02/ActiveRecord-Association-objects-can-act-weird-bug-in-associationany"/>
   <updated>2011-10-02T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2011/10/02/ActiveRecord-Association-objects-can-act-weird-bug-in-associationany</id>
   <content type="html">&lt;p&gt;Rails, RubyI found a weird issue when working with &lt;a href='http://apidock.com/rails/ActiveRecord/Associations/AssociationProxy'&gt;ActiveRecord AssociationProxy objects&lt;/a&gt;, they weren&amp;#8217;t proxying the method correctly. The issue arose when trying to use the #any? method on an array which should be true when empty. When calling this on a AssociationProxy object that has 0 items it was returning false. Oddly enough inspecting or to_s the association and then calling #any? resulted in the correct behavior. It was so weird though that after looking at other options I ended up using the present?, which always behaved how I expected it to. Even weirder is the issue only presented itself in the rails server debug and production modes. It always acted as one would expect in rails console. I started to dig in more, but ended up yak shaving a lot of other stuff to try to learn exactly what the cause was. If anyone understands the issue better, I would be happy to know more. Until then, be aware that at least in the 2.3.X versions of rails, ActiveRecord AssociationProxy#any? acts funky and should not be trusted. Use a work around like present? or length &amp;gt; 0 (both worked correctly in console and on dev/production server environments). This is one of these issues where there is so much going on in the rails stack that it is hard to determine where the issue lies. So for those googling this issue, beware AssociationProxy.any? on has_many relationships. Example code:&lt;script src='https://gist.github.com/1250980.js?file=AR_bug.rb'&gt; &lt;/script&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Google Closure Compiler And Ruby</title>
   <link href="http://danmayer.github.com/2011/07/04/Google-Closure-Compiler-And-Ruby"/>
   <updated>2011-07-04T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2011/07/04/Google-Closure-Compiler-And-Ruby</id>
   <content type="html">&lt;p&gt;I have repeatedly needed to compress / minify a collection of javascript files. Which I had been doing by hand with &lt;a href='http://closure-compiler.appspot.com/home'&gt;Google&amp;#8217;s closure compiler&lt;/a&gt;. I started to get annoyed with this process and went looking for a better solution. If you are using Rails, there is a great solution using &lt;a href='http://documentcloud.github.com/jammit/'&gt;Jammit&lt;/a&gt; asset packager library for Rails. I was not using rails, and just needed something that could write the files on demand. A bit of quick searching came up withh this post &lt;a href='http://tinyhippos.com/2010/01/08/compressing-javascript-code-with-google-closure-compiler-and-ruby/'&gt;Compressing Javascript Code With Google Closure Compiler And Ruby&lt;/a&gt;. It basically met my needs, but needed to be modified a bit to take a collection of files and write that collection of compresses files back to disk. Here is the solution I ended up with: &lt;script src='https://gist.github.com/1063584.js'&gt; &lt;/script&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Emacs swap buffer window method</title>
   <link href="http://danmayer.github.com/2011/06/05/Emacs-swap-buffer-window-method"/>
   <updated>2011-06-05T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2011/06/05/Emacs-swap-buffer-window-method</id>
   <content type="html">&lt;p&gt;So I really like split screen in emacs. I am in that mode pretty much all the time. One thing that annoyed me was opening a file on the side of the screen I wanted. Sometimes I want code left, tests right others it is project A left project B right or often server code left, client code right. Anyways I often opened a file on the wrong side of the screen and wanted to move the buffer. Previously I always closed the buffer, then switched to the other emacs window (C-x o) then reopened the file. This annoyed me to know end, so I finally went looking for a solution. I found something that was close, but not what I wanted, which &lt;a href='http://stackoverflow.com/questions/1774832/how-to-swap-the-buffers-in-2-windows-emacs'&gt;swaps two buffers positions left and right&lt;/a&gt;, so I started with that code and modified it to do just what I want. I then bound the function to &amp;#8220;C-x /&amp;#8221; which wasn&amp;#8217;t in use and I can now swap buffer windows with ease. Also, kind of fun to do a bit of lisp/emacs hacking and breaking out of my Ruby world a bit. &lt;script src='https://gist.github.com/1009137.js?file=swap_buffer_window.el'&gt; &lt;/script&gt; If you notice I have it also close the current tab for the buffer and move the cursor context to the new buffer on the other side of the screen. Most people hate and don&amp;#8217;t use tabs in emacs so that one tab closing could be commented out. I love tabs because I am a very spacial person and the tabs let me keep the physical location of the buffers in my head. This was written to run in Aquamacs, but will work equally well in standard emacs. Just drop it in your .emacs file or emacs config directory. Code can be found at this gist, &lt;a href='https://gist.github.com/1009137'&gt;Emacs swap buffer window&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Force all Sinatra traffic to https</title>
   <link href="http://danmayer.github.com/2010/08/07/Force-all-Sinatra-traffic-to-https"/>
   <updated>2010-08-07T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/08/07/Force-all-Sinatra-traffic-to-https</id>
   <content type="html">&lt;p&gt;I wanted to have all traffic on a site go through https. Since the site was on heroku. &lt;code&gt;@env[&amp;#39;rack.url_scheme&amp;#39;])==&amp;#39;https&amp;#39;&lt;/code&gt; wasn&amp;#8217;t a sufficient way of detecting if on https. You need to also check &lt;code&gt;(@env[&amp;#39;HTTP_X_FORWARDED_PROTO&amp;#39;]&lt;/code&gt;. Below I wrote a simple before filter which you could place in the production configuration. After talking with the author of rack-ssl-enforcer I got that patched to work on heroku as well. So that is an even simpler option. Anyways, I spent far to long googling sinatra https, sinatra ssl, sinatra over https, sinatra secure, and heroku https, and couldn&amp;#8217;t find good pages on this for awhile. So here is the info for anyone else wanted to host secure Sinatra pages on heroku. &lt;script src='http://gist.github.com/512887.js?file=sinatra_https_redirect.rb'&gt; &lt;/script&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Adding Custom JavaScript Handlers for PhoneGap Android</title>
   <link href="http://danmayer.github.com/2010/07/10/Adding-Custom-JavaScript-Handlers-for-PhoneGap-Android"/>
   <updated>2010-07-10T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/07/10/Adding-Custom-JavaScript-Handlers-for-PhoneGap-Android</id>
   <content type="html">&lt;p&gt;One of the advantages I mentioned about PhoneGap, was being able to write custom native code, and interface with it via JavaScript. Their Aren&amp;#8217;t great example of how to do this out there, so I figured a quick blog post was in order. I search around for how to do this when getting started with PhoneGap, and the best example I could find was, &lt;a href='http://www.somms.net/2010/05/28/native-messages-for-android-phonegap/'&gt;Native messages for Android PhoneGap&lt;/a&gt;. Following this example, I was able to get my own Javascript interface working. Basically you create a class (using java for android example): &lt;script src='http://gist.github.com/470919.js?file=CustomJS.java'&gt; &lt;/script&gt;I create this private class in the main Java class which extends DroidGap (the class that boots up PhoneGap and creates the webview UI). &lt;script src='http://gist.github.com/470920.js?file=extendDroidGap.java'&gt; &lt;/script&gt; Then in your html you can call in javascript bridged Java functions like &lt;code&gt;var myData = CUSTOM.getData();&lt;/code&gt; which will return the java data (in this case a string) to the javascript. I have used the JS bride to begin new Android Activities, Close the WebView and move entirely to Native code. Background the WebUI to do something native for awhile, then return the WebView back to the front, Etc. &lt;script src='http://gist.github.com/470922.js?file=customJSPhoneGap.js'&gt; &lt;/script&gt; This can be done similarly for the iPhone and Objective-C to Javascript with PhoneGap. This lets you leverage extra native flexibility while still building the majority of your app as JS, CSS, and HTML.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Mobile Development and My Recommendation for PhoneGap</title>
   <link href="http://danmayer.github.com/2010/07/06/Mobile-Development-and-My-Recommendation-for-PhoneGap"/>
   <updated>2010-07-06T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/07/06/Mobile-Development-and-My-Recommendation-for-PhoneGap</id>
   <content type="html">&lt;p&gt;In the last month or so I have been exploring mobile development. I wrote basic native Android and iPhone apps. I also build cross platform apps using Rhodes, Titanium, and PhoneGap. I thought it would be good to share my thoughts and experiences on the mobile dev space. If you want full control and are doing a lot of local heavy processing (CPU bound) native is the way to go. I program to the web data without access I don&amp;#8217;t do much interesting. When the whole app basically relies on live data I feel javascript, HTML, and CSS is the way to go. Not only am I already familiar with it, but basically the app can share code with the mobile site. Also, using JS, HTML, and CSS gives the most flexibility in terms of supporting multiple devices. Since I wasn&amp;#8217;t using anything specific to a single mobile device or really pushing the hardware, I quickly moved away from fully native apps. It wasn&amp;#8217;t worth the time and extra effort to write nearly the same app in Java, Objective C, and whatever else. Game developers, and those doing a bunch with video, photos, etc are probably most interested in native apps and probably won&amp;#8217;t be as interested in other options. This lead me to explore &lt;a href='http://rhomobile.com/products/rhodes/'&gt;Rhodes&lt;/a&gt;, &lt;a href='http://www.appcelerator.com/'&gt;Titanium&lt;/a&gt;, and &lt;a href='http://phonegap.com'&gt;PhoneGap&lt;/a&gt; as alternatives to purely native apps. All of which let you leverage HTML and CSS for building a UI. Rhodes lets you write code in Ruby using a MVC framework. You leverage html (erb/haml) views using a Ruby back end to make remote requests, interact with a DB, and interact with native phone components. It is a cool framework, and obviously since it is Ruby, I enjoyed writing the code. However, it obscured the actual process of making an app for a device a bit much for my comfort. If something went wrong anywhere in the stack or if you wanted to break out of the Rhodes way to do something native on a platform it was difficult to do. It tries to manage the entire app development end to end hiding any per device customizations away from you. Since I wanted to be able to use some existing libraries for Android and iPhones, this limitation was a dealbreaker. Titanium and PhoneGap use the same basic approach as each other providing a javascript library, which interfaces with native code for each device. You write an app in JS/HTML/CSS and make calls to the JS library to interact with native elements like the accelerometer, GPS, buttons, etc. I think it&amp;#8217;s a big win to be able to write most of the app in familiar web languages basically utilizing Ajax and local storage to give a nice mobile experience. Getting up and running on either Titanium or PhoneGap was painless. Again, in the end I wanted more control over some native components which caused me to choose PhoneGap over Titanium. While the concept is the same for both of these products, their approach is very different. Titanium is a bit more all or nothing of an approach, you develop in Titanium&amp;#8217;s little world and it is best to not go out ofit. PhoneGap takes a extremely lightweight and minimalist approach to getting your project running on each device. It gives you basically the bare necessities and gets out of your way. PhoneGap doesn&amp;#8217;t try to configure the build environment and it doesn&amp;#8217;t manage simulators. To create a app with PhoneGap for any mobile platform you point to the same web directory (HTML, CSS, JS, and images), then generate a native app for the device. At that point you have the same native app project you would have if you were to start from scratch but you have a few nice libraries and code started for you. If you don&amp;#8217;t like the way PhoneGap does something, that is fine delete it, override it, extend it. You need to do something native PhoneGap doesn&amp;#8217;t support add your own JS handlers and interact with new or existing native code. I needed to allow for FaceBook connect login on Android, which PhoneGap doesn&amp;#8217;t support no problem. FaceBook maintains a Android SDK, which I imported into my PhoneGap project and added JS handlers which call to the FaceBook Android native code. There is a bug in Androids SSL cert verification for WebKit that was causing errors for HTTPS access, drop into java override the SSL Cert verification and fixed that. This would be difficult to do with Rhodes or Titanium because they don&amp;#8217;t allow you easily write and interact with your own native code. The project has to work only through the API provided to you to stay cross compatible. Which is great in some ways, but very limiting if you want to break out and just tweak a few little things. I have been extremely happy working with PhoneGap, it rocks. It lets you build a native mobile app as a locally cached and privileged mobile website. You can leverage existing mobile site code for the native app. It will still be better than a pure website experience. It lets you piggyback on skill web developers already have. It is a great way to make use of HTML5 local DBs, local data, and HTML templates. It encourages you follow best practices for building a mobile site that works offline and requests only minimal JSON so it can fast over slow internet. Before building an app with PhoneGap I recommend building a mobile site. Learn about best practices for the mobile web. If you are new to developing sites for mobile, I highly recommend following the recommendations from &lt;a href='http://www.engineyard.com/video/12678746'&gt;Yehuda Katz on building great mobile sites&lt;/a&gt;. He discusses some things specific to Rails 3, but mostly just good JS practices. In many ways when building a PhoneGap app you are just building a mobile website. You have access to utilizing some native things that you can&amp;#8217;t with pure HTML/CSS. Local storage is a good example, it is supported by HTML5, but the earlier Android webkit didn&amp;#8217;t support it. Using PhoneGap you have local storage on old devices and it can use standard HTML5 local storage on newer devices. Last but not least, PhoneGap has a great &lt;a href='http://www.phonegap.com/community'&gt;active community&lt;/a&gt;. Drop into #phonegap on freenode and people are always around to help out. The mailing list has a constant flow of questions and answers. While &lt;a href='http://www.phonegap.com/docs'&gt;PhoneGap docs&lt;/a&gt; are a little out of date, there are people actively working on improving them. There are many example applications and open code on github to check out how to use PhoneGap. Also, the code is small and simple enough it is a great project to get involved in and give back. After working with it awhile, you will start to understand the internals and could help contribute patches, features, and plugins to the community.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Ruby-fitbit API has been updated</title>
   <link href="http://danmayer.github.com/2010/07/03/The-Ruby-fitbit-API-has-been-updated"/>
   <updated>2010-07-03T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/07/03/The-Ruby-fitbit-API-has-been-updated</id>
   <content type="html">&lt;p&gt;More about it can be found on here, &lt;a href='http://github.com/danmayer/ruby-fitbit'&gt;Ruby-fitbit api on github&lt;/a&gt;. Also, the original announcement can be found on &lt;a href='/assets/2010/05/ruby_fitbit_api.php'&gt;my blog&lt;/a&gt;. Basically there is now detailed access to any of the data types for any given day. This can be used to backup your fitbit or gather the data for your own charting purposes. Which I will likely start taking advantage of soon for my fitbit blog widget. Example: ~/projects/ruby-fitbit(master) &amp;gt; ruby bin/ruby-fitbit MYEMAIL MYPASS steps 06/22/2010Calories Burned 1012Steps Taken 0Milkes Walked .00Activity Levels Durations:Sedentary 16hrs 7minLightly 0minFairly # =&amp;gt; {fitbit.fairly_active}Very 0minsteps data for data Tue Jun 22 00:00:00 -0400 2010+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;-+| 0 | 1 |+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;-+| Tue Jun 22 21:50:00 -0400 2010 | 91.0 || Tue Jun 22 05:05:00 -0400 2010 | 0.0 || Tue Jun 22 16:15:00 -0400 2010 | 0.0 || Tue Jun 22 10:40:00 -0400 2010 | 0.0 || Tue Jun 22 19:55:00 -0400 2010 | 69.0 || Tue Jun 22 14:20:00 -0400 2010 | 15.0 || Tue Jun 22 08:45:00 -0400 2010 | 1.0 || Tue Jun 22 03:10:00 -0400 2010 | 0.0 || Tue Jun 22 23:35:00 -0400 2010 | 0.0 || Tue Jun 22 01:15:00 -0400 2010 | 0.0 || Tue Jun 22 18:00:00 -0400 2010 | 0.0 || Tue Jun 22 12:25:00 -0400 2010 | 0.0 || Tue Jun 22 06:50:00 -0400 2010 | 0.0 || Tue Jun 22 21:40:00 -0400 2010 | 11.0 || Tue Jun 22 10:30:00 -0400 2010 | 0.0 || Tue Jun 22 04:55:00 -0400 2010 | 0.0 || Tue Jun 22 16:05:00 -0400 2010 | 0.0 || Tue Jun 22 19:45:00 -0400 2010 | 543.0 || Tue Jun 22 14:10:00 -0400 2010 | 0.0 || Tue Jun 22 08:35:00 -0400 2010 | 347.0 || Tue Jun 22 03:00:00 -0400 2010 | 0.0 || Tue Jun 22 23:25:00 -0400 2010 | 0.0 || Tue Jun 22 01:05:00 -0400 2010 | 0.0 || Tue Jun 22 17:50:00 -0400 2010 | 0.0 || Tue Jun 22 12:15:00 -0400 2010 | 0.0 || Tue Jun 22 06:40:00 -0400 2010 | 0.0 || Tue Jun 22 21:30:00 -0400 2010 | 25.0 || Tue Jun 22 10:20:00 -0400 2010 | 0.0 || Tue Jun 22 04:45:00 -0400 2010 | 0.0 || Tue Jun 22 15:55:00 -0400 2010 | 0.0 || Tue Jun 22 19:35:00 -0400 2010 | 19.0 || Tue Jun 22 14:00:00 -0400 2010 | 0.0 || Tue Jun 22 08:25:00 -0400 2010 | 0.0 || Tue Jun 22 02:50:00 -0400 2010 | 0.0 || Tue Jun 22 23:15:00 -0400 2010 | 0.0 || Tue Jun 22 06:30:00 -0400 2010 | 0.0 || Tue Jun 22 00:55:00 -0400 2010 | 0.0 || Tue Jun 22 17:40:00 -0400 2010 | 0.0 || Tue Jun 22 12:05:00 -0400 2010 | 0.0 || Tue Jun 22 21:20:00 -0400 2010 | 23.0 || Tue Jun 22 15:45:00 -0400 2010 | 0.0 || Tue Jun 22 10:10:00 -0400 2010 | 0.0 || Tue Jun 22 04:35:00 -0400 2010 | 0.0 || Tue Jun 22 19:25:00 -0400 2010 | 535.0 || Tue Jun 22 02:40:00 -0400 2010 | 0.0 || Tue Jun 22 13:50:00 -0400 2010 | 0.0 || Tue Jun 22 08:15:00 -0400 2010 | 0.0 || Tue Jun 22 23:05:00 -0400 2010 | 0.0 || Tue Jun 22 11:55:00 -0400 2010 | 0.0 || Tue Jun 22 06:20:00 -0400 2010 | 0.0 || Tue Jun 22 00:45:00 -0400 2010 | 0.0 || Tue Jun 22 17:30:00 -0400 2010 | 0.0 || Tue Jun 22 21:10:00 -0400 2010 | 0.0 || Tue Jun 22 15:35:00 -0400 2010 | 0.0 || Tue Jun 22 10:00:00 -0400 2010 | 0.0 || Tue Jun 22 04:25:00 -0400 2010 | 0.0 || Tue Jun 22 19:15:00 -0400 2010 | 595.0 || Tue Jun 22 08:05:00 -0400 2010 | 0.0 || Tue Jun 22 02:30:00 -0400 2010 | 0.0 || Tue Jun 22 13:40:00 -0400 2010 | 0.0 || Tue Jun 22 22:55:00 -0400 2010 | 0.0 || Tue Jun 22 17:20:00 -0400 2010 | 0.0 || Tue Jun 22 11:45:00 -0400 2010 | 0.0 || Tue Jun 22 06:10:00 -0400 2010 | 0.0 || Tue Jun 22 00:35:00 -0400 2010 | 0.0 || Tue Jun 22 21:00:00 -0400 2010 | 0.0 || Tue Jun 22 04:15:00 -0400 2010 | 0.0 || Tue Jun 22 15:25:00 -0400 2010 | 0.0 || Tue Jun 22 09:50:00 -0400 2010 | 0.0 || Tue Jun 22 19:05:00 -0400 2010 | 425.0 || Tue Jun 22 13:30:00 -0400 2010 | 0.0 || Tue Jun 22 07:55:00 -0400 2010 | 0.0 || Tue Jun 22 02:20:00 -0400 2010 | 0.0 || Tue Jun 22 22:45:00 -0400 2010 | 0.0 || Tue Jun 22 00:25:00 -0400 2010 | 0.0 || Tue Jun 22 17:10:00 -0400 2010 | 22.0 || Tue Jun 22 11:35:00 -0400 2010 | 0.0 || Tue Jun 22 06:00:00 -0400 2010 | 0.0 || Tue Jun 22 20:50:00 -0400 2010 | 0.0 || Tue Jun 22 09:40:00 -0400 2010 | 0.0 || Tue Jun 22 04:05:00 -0400 2010 | 0.0 || Tue Jun 22 15:15:00 -0400 2010 | 0.0 || Tue Jun 22 18:55:00 -0400 2010 | 62.0 || Tue Jun 22 13:20:00 -0400 2010 | 0.0 || Tue Jun 22 07:45:00 -0400 2010 | 0.0 || Tue Jun 22 02:10:00 -0400 2010 | 0.0 || Tue Jun 22 22:35:00 -0400 2010 | 0.0 || Tue Jun 22 05:50:00 -0400 2010 | 0.0 || Tue Jun 22 00:15:00 -0400 2010 | 0.0 || Tue Jun 22 17:00:00 -0400 2010 | 35.0 || Tue Jun 22 11:25:00 -0400 2010 | 0.0 || Tue Jun 22 20:40:00 -0400 2010 | 0.0 || Tue Jun 22 15:05:00 -0400 2010 | 0.0 || Tue Jun 22 09:30:00 -0400 2010 | 0.0 || Tue Jun 22 03:55:00 -0400 2010 | 0.0 || Tue Jun 22 18:45:00 -0400 2010 | 0.0 || Tue Jun 22 02:00:00 -0400 2010 | 0.0 || Tue Jun 22 13:10:00 -0400 2010 | 0.0 || Tue Jun 22 07:35:00 -0400 2010 | 0.0 || Tue Jun 22 22:25:00 -0400 2010 | 0.0 || Tue Jun 22 11:15:00 -0400 2010 | 0.0 || Tue Jun 22 05:40:00 -0400 2010 | 0.0 || Tue Jun 22 00:05:00 -0400 2010 | 0.0 || Tue Jun 22 16:50:00 -0400 2010 | 0.0 || Tue Jun 22 20:30:00 -0400 2010 | 0.0 || Tue Jun 22 14:55:00 -0400 2010 | 0.0 || Tue Jun 22 09:20:00 -0400 2010 | 0.0 || Tue Jun 22 03:45:00 -0400 2010 | 0.0 || Tue Jun 22 18:35:00 -0400 2010 | 0.0 || Tue Jun 22 07:25:00 -0400 2010 | 0.0 || Tue Jun 22 01:50:00 -0400 2010 | 0.0 || Tue Jun 22 13:00:00 -0400 2010 | 91.0 || Tue Jun 22 22:15:00 -0400 2010 | 445.0 || Tue Jun 22 16:40:00 -0400 2010 | 0.0 || Tue Jun 22 11:05:00 -0400 2010 | 0.0 || Tue Jun 22 05:30:00 -0400 2010 | 0.0 || Tue Jun 22 20:20:00 -0400 2010 | 0.0 || Tue Jun 22 14:45:00 -0400 2010 | 0.0 || Tue Jun 22 09:10:00 -0400 2010 | 0.0 || Tue Jun 22 03:35:00 -0400 2010 | 0.0 || Wed Jun 23 00:00:00 -0400 2010 | 0.0 || Tue Jun 22 07:15:00 -0400 2010 | 0.0 || Tue Jun 22 01:40:00 -0400 2010 | 0.0 || Tue Jun 22 18:25:00 -0400 2010 | 0.0 || Tue Jun 22 12:50:00 -0400 2010 | 0.0 || Tue Jun 22 22:05:00 -0400 2010 | 80.0 || Tue Jun 22 16:30:00 -0400 2010 | 0.0 || Tue Jun 22 10:55:00 -0400 2010 | 0.0 || Tue Jun 22 05:20:00 -0400 2010 | 0.0 || Tue Jun 22 20:10:00 -0400 2010 | 0.0 || Tue Jun 22 03:25:00 -0400 2010 | 0.0 || Tue Jun 22 14:35:00 -0400 2010 | 0.0 || Tue Jun 22 09:00:00 -0400 2010 | 370.0 || Tue Jun 22 23:50:00 -0400 2010 | 0.0 || Tue Jun 22 12:40:00 -0400 2010 | 0.0 || Tue Jun 22 07:05:00 -0400 2010 | 0.0 || Tue Jun 22 01:30:00 -0400 2010 | 0.0 || Tue Jun 22 18:15:00 -0400 2010 | 0.0 || Tue Jun 22 21:55:00 -0400 2010 | 69.0 || Tue Jun 22 16:20:00 -0400 2010 | 0.0 || Tue Jun 22 10:45:00 -0400 2010 | 0.0 || Tue Jun 22 05:10:00 -0400 2010 | 0.0 || Tue Jun 22 20:00:00 -0400 2010 | 0.0 || Tue Jun 22 08:50:00 -0400 2010 | 13.0 || Tue Jun 22 03:15:00 -0400 2010 | 0.0 || Tue Jun 22 14:25:00 -0400 2010 | 0.0 || Tue Jun 22 23:40:00 -0400 2010 | 0.0 || Tue Jun 22 18:05:00 -0400 2010 | 0.0 || Tue Jun 22 12:30:00 -0400 2010 | 0.0 || Tue Jun 22 06:55:00 -0400 2010 | 0.0 || Tue Jun 22 01:20:00 -0400 2010 | 0.0 || Tue Jun 22 21:45:00 -0400 2010 | 17.0 || Tue Jun 22 05:00:00 -0400 2010 | 0.0 || Tue Jun 22 16:10:00 -0400 2010 | 0.0 || Tue Jun 22 10:35:00 -0400 2010 | 0.0 || Tue Jun 22 19:50:00 -0400 2010 | 155.0 || Tue Jun 22 14:15:00 -0400 2010 | 40.0 || Tue Jun 22 08:40:00 -0400 2010 | 203.0 || Tue Jun 22 03:05:00 -0400 2010 | 0.0 || Tue Jun 22 23:30:00 -0400 2010 | 0.0 || Tue Jun 22 01:10:00 -0400 2010 | 0.0 || Tue Jun 22 17:55:00 -0400 2010 | 0.0 || Tue Jun 22 12:20:00 -0400 2010 | 0.0 || Tue Jun 22 06:45:00 -0400 2010 | 0.0 || Tue Jun 22 21:35:00 -0400 2010 | 53.0 || Tue Jun 22 10:25:00 -0400 2010 | 0.0 || Tue Jun 22 04:50:00 -0400 2010 | 0.0 || Tue Jun 22 16:00:00 -0400 2010 | 0.0 || Tue Jun 22 19:40:00 -0400 2010 | 438.0 || Tue Jun 22 14:05:00 -0400 2010 | 0.0 || Tue Jun 22 08:30:00 -0400 2010 | 12.0 || Tue Jun 22 02:55:00 -0400 2010 | 0.0 || Tue Jun 22 23:20:00 -0400 2010 | 0.0 || Tue Jun 22 06:35:00 -0400 2010 | 0.0 || Tue Jun 22 01:00:00 -0400 2010 | 0.0 || Tue Jun 22 17:45:00 -0400 2010 | 0.0 || Tue Jun 22 12:10:00 -0400 2010 | 0.0 || Tue Jun 22 21:25:00 -0400 2010 | 32.0 || Tue Jun 22 15:50:00 -0400 2010 | 0.0 || Tue Jun 22 10:15:00 -0400 2010 | 0.0 || Tue Jun 22 04:40:00 -0400 2010 | 0.0 || Tue Jun 22 19:30:00 -0400 2010 | 499.0 || Tue Jun 22 02:45:00 -0400 2010 | 0.0 || Tue Jun 22 13:55:00 -0400 2010 | 0.0 || Tue Jun 22 08:20:00 -0400 2010 | 0.0 || Tue Jun 22 23:10:00 -0400 2010 | 0.0 || Tue Jun 22 12:00:00 -0400 2010 | 0.0 || Tue Jun 22 06:25:00 -0400 2010 | 0.0 || Tue Jun 22 00:50:00 -0400 2010 | 0.0 || Tue Jun 22 17:35:00 -0400 2010 | 0.0 || Tue Jun 22 21:15:00 -0400 2010 | 67.0 || Tue Jun 22 15:40:00 -0400 2010 | 0.0 || Tue Jun 22 10:05:00 -0400 2010 | 0.0 || Tue Jun 22 04:30:00 -0400 2010 | 0.0 || Tue Jun 22 19:20:00 -0400 2010 | 604.0 || Tue Jun 22 08:10:00 -0400 2010 | 0.0 || Tue Jun 22 02:35:00 -0400 2010 | 0.0 || Tue Jun 22 13:45:00 -0400 2010 | 0.0 || Tue Jun 22 23:00:00 -0400 2010 | 0.0 || Tue Jun 22 17:25:00 -0400 2010 | 0.0 || Tue Jun 22 11:50:00 -0400 2010 | 10.0 || Tue Jun 22 06:15:00 -0400 2010 | 0.0 || Tue Jun 22 00:40:00 -0400 2010 | 0.0 || Tue Jun 22 21:05:00 -0400 2010 | 0.0 || Tue Jun 22 04:20:00 -0400 2010 | 0.0 || Tue Jun 22 15:30:00 -0400 2010 | 0.0 || Tue Jun 22 09:55:00 -0400 2010 | 0.0 || Tue Jun 22 19:10:00 -0400 2010 | 291.0 || Tue Jun 22 13:35:00 -0400 2010 | 0.0 || Tue Jun 22 08:00:00 -0400 2010 | 0.0 || Tue Jun 22 02:25:00 -0400 2010 | 0.0 || Tue Jun 22 22:50:00 -0400 2010 | 0.0 || Tue Jun 22 17:15:00 -0400 2010 | 0.0 || Tue Jun 22 11:40:00 -0400 2010 | 0.0 || Tue Jun 22 06:05:00 -0400 2010 | 0.0 || Tue Jun 22 00:30:00 -0400 2010 | 0.0 || Tue Jun 22 20:55:00 -0400 2010 | 0.0 || Tue Jun 22 04:10:00 -0400 2010 | 0.0 || Tue Jun 22 15:20:00 -0400 2010 | 0.0 || Tue Jun 22 09:45:00 -0400 2010 | 0.0 || Tue Jun 22 19:00:00 -0400 2010 | 161.0 || Tue Jun 22 13:25:00 -0400 2010 | 0.0 || Tue Jun 22 07:50:00 -0400 2010 | 0.0 || Tue Jun 22 02:15:00 -0400 2010 | 0.0 || Tue Jun 22 22:40:00 -0400 2010 | 0.0 || Tue Jun 22 00:20:00 -0400 2010 | 0.0 || Tue Jun 22 17:05:00 -0400 2010 | 0.0 || Tue Jun 22 11:30:00 -0400 2010 | 0.0 || Tue Jun 22 05:55:00 -0400 2010 | 0.0 || Tue Jun 22 20:45:00 -0400 2010 | 0.0 || Tue Jun 22 09:35:00 -0400 2010 | 0.0 || Tue Jun 22 04:00:00 -0400 2010 | 0.0 || Tue Jun 22 15:10:00 -0400 2010 | 0.0 || Tue Jun 22 18:50:00 -0400 2010 | 0.0 || Tue Jun 22 13:15:00 -0400 2010 | 0.0 || Tue Jun 22 07:40:00 -0400 2010 | 0.0 || Tue Jun 22 02:05:00 -0400 2010 | 0.0 || Tue Jun 22 22:30:00 -0400 2010 | 0.0 || Tue Jun 22 05:45:00 -0400 2010 | 0.0 || Tue Jun 22 00:10:00 -0400 2010 | 0.0 || Tue Jun 22 16:55:00 -0400 2010 | 37.0 || Tue Jun 22 11:20:00 -0400 2010 | 0.0 || Tue Jun 22 20:35:00 -0400 2010 | 26.0 || Tue Jun 22 15:00:00 -0400 2010 | 0.0 || Tue Jun 22 09:25:00 -0400 2010 | 0.0 || Tue Jun 22 03:50:00 -0400 2010 | 0.0 || Tue Jun 22 18:40:00 -0400 2010 | 0.0 || Tue Jun 22 01:55:00 -0400 2010 | 0.0 || Tue Jun 22 13:05:00 -0400 2010 | 75.0 || Tue Jun 22 07:30:00 -0400 2010 | 0.0 || Tue Jun 22 22:20:00 -0400 2010 | 22.0 || Tue Jun 22 11:10:00 -0400 2010 | 0.0 || Tue Jun 22 05:35:00 -0400 2010 | 0.0 || Tue Jun 22 00:00:00 -0400 2010 | 0.0 || Tue Jun 22 16:45:00 -0400 2010 | 0.0 || Tue Jun 22 20:25:00 -0400 2010 | 0.0 || Tue Jun 22 14:50:00 -0400 2010 | 0.0 || Tue Jun 22 09:15:00 -0400 2010 | 0.0 || Tue Jun 22 03:40:00 -0400 2010 | 0.0 || Tue Jun 22 18:30:00 -0400 2010 | 0.0 || Tue Jun 22 07:20:00 -0400 2010 | 0.0 || Tue Jun 22 01:45:00 -0400 2010 | 0.0 || Tue Jun 22 12:55:00 -0400 2010 | 0.0 || Tue Jun 22 22:10:00 -0400 2010 | 268.0 || Tue Jun 22 16:35:00 -0400 2010 | 0.0 || Tue Jun 22 11:00:00 -0400 2010 | 0.0 || Tue Jun 22 05:25:00 -0400 2010 | 0.0 || Tue Jun 22 20:15:00 -0400 2010 | 0.0 || Tue Jun 22 03:30:00 -0400 2010 | 0.0 || Tue Jun 22 14:40:00 -0400 2010 | 0.0 || Tue Jun 22 09:05:00 -0400 2010 | 74.0 || Tue Jun 22 23:55:00 -0400 2010 | 0.0 || Tue Jun 22 12:45:00 -0400 2010 | 0.0 || Tue Jun 22 07:10:00 -0400 2010 | 0.0 || Tue Jun 22 01:35:00 -0400 2010 | 0.0 || Tue Jun 22 18:20:00 -0400 2010 | 0.0 || Tue Jun 22 22:00:00 -0400 2010 | 0.0 || Tue Jun 22 16:25:00 -0400 2010 | 0.0 || Tue Jun 22 10:50:00 -0400 2010 | 0.0 || Tue Jun 22 05:15:00 -0400 2010 | 0.0 || Tue Jun 22 20:05:00 -0400 2010 | 0.0 || Tue Jun 22 08:55:00 -0400 2010 | 0.0 || Tue Jun 22 03:20:00 -0400 2010 | 0.0 || Tue Jun 22 14:30:00 -0400 2010 | 16.0 || Tue Jun 22 23:45:00 -0400 2010 | 0.0 || Tue Jun 22 18:10:00 -0400 2010 | 0.0 || Tue Jun 22 12:35:00 -0400 2010 | 0.0 || Tue Jun 22 07:00:00 -0400 2010 | 0.0 || Tue Jun 22 01:25:00 -0400 2010 | 0.0 |+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;-+289 rows in setdone&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Javascript document.addEventListener PhoneGap deviceready issues</title>
   <link href="http://danmayer.github.com/2010/06/26/Javascript-documentaddEventListener-PhoneGap-deviceready-issues"/>
   <updated>2010-06-26T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/06/26/Javascript-documentaddEventListener-PhoneGap-deviceready-issues</id>
   <content type="html">&lt;p&gt;I had some issues with the deviceready callback. I had seen some similar posts, and figured I could save someone some time. Basically when using document.addEventListener order matters a lot. It all comes down to exactly when this line is loaded and what is already defined. &lt;pre&gt;document.addEventListener(&quot;deviceready&quot;, deviceSetup, true);&lt;/pre&gt; We have custom JS, and originally it was loaded second, so the deviceready event was fired before, the listener was set. &lt;pre&gt;        &lt;script src='lscustom.js' type='text/javascript' charset='utf-8'&gt; &lt;/script&gt;         &lt;script src='phonegap.js' type='text/javascript' charset='utf-8'&gt; &lt;/script&gt; &lt;/pre&gt; After that I was still having an issue and it turns out the method you define register as the callback needs to be defined before you add the listener. So having this in our lscustom.js works. &lt;pre&gt;var deviceSetup = function(){   console.log(&quot;Device Setup&quot;); };     document.addEventListener(&quot;deviceready&quot;, deviceSetup, true); While, the below fails. document.addEventListener(&quot;deviceready&quot;, deviceSetup, true); var deviceSetup = function(){   console.log(&quot;Device Setup&quot;); }; &lt;/pre&gt; Anyways since I ended up wasting a bit of time searching and debugging this issue, I figured I would share my debugging session.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Code Highlighting on MovableType</title>
   <link href="http://danmayer.github.com/2010/06/21/Code-Highlighting-on-MovableType"/>
   <updated>2010-06-21T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/06/21/Code-Highlighting-on-MovableType</id>
   <content type="html">&lt;p&gt;&lt;code&gt;def code_highlighting  puts &amp;quot;this is a highlight&amp;quot;end&lt;/code&gt; I found a &lt;a href='http://blogspot.makotokw.com/portfolio/movabletype/syntaxhighlighter/'&gt;syntaxhighlighter plugin&lt;/a&gt;, which makes it simple to use &lt;a href='http://alexgorbatchev.com/wiki/SyntaxHighlighter'&gt;SyntaxHighlighter&lt;/a&gt; on Movable Type. After downloading and unzipping the plugin in your MT directory. Just add the &lt;pre&gt; MTSyntaxHighlighterInclude &lt;/pre&gt; tag to your templates and then choose the SyntaxHighlighter format when making a post.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Appcelerator Titanium older SDKs</title>
   <link href="http://danmayer.github.com/2010/06/16/Appcelerator-Titanium-older-SDKs"/>
   <updated>2010-06-16T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/06/16/Appcelerator-Titanium-older-SDKs</id>
   <content type="html">&lt;p&gt;If you have a need to work with a app on a older SDK Titanium doesn&amp;#8217;t make it very easy for you. In fact they don&amp;#8217;t seem to have historical files available for download or any info on how to install older SDKs. You can get a old version of the 0.8.x (in this case 0.8.2) SDK here:&lt;a href='http://share1t.com/dto0nv'&gt;Titanium 0.8.2 SDK download&lt;/a&gt; And after a bunch of searching I found that you should move the file on OSX to this location:/Library/Application Support/Titanium/mobilesdk/osx/0.8.2 After that restart Titanium and the SDK should be available to you in the SDK dropdown when you create or import projects.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby Dev Available for Contracting</title>
   <link href="http://danmayer.github.com/2010/06/12/Ruby-Dev-Available-for-Contracting"/>
   <updated>2010-06-12T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/06/12/Ruby-Dev-Available-for-Contracting</id>
   <content type="html">&lt;p&gt;&lt;a href='http://avdi.org/devblog'&gt;Avdi&lt;/a&gt; a ex-Devver, developer, has just announced that &lt;a href='http://avdi.org/devblog/2010/06/11/open-for-business/'&gt;ShipRise LLC&lt;/a&gt; is open for business. He is looking to do freelancing/contracting for Ruby and other hard development problems. I can attest to Avdi&amp;#8217;s skill in breaking down hard problems (like distributed test running) into elegant simple solutions. If you are looking for a great dev to work with you on a project, ping him. Besides Ruby and general coding, Avdi is ready to help with &amp;#8220;Dispersed team facilitation&amp;#8221;, which he has long term experience with. If you have a small distributed team of developers, he can help get everyone on the right path to work together, while being apart. He is gather a ton of information to help remote workers at his new blog &lt;a href='http://wideteams.com/'&gt;Wide Teams&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>New gig at LivingSocial</title>
   <link href="http://danmayer.github.com/2010/06/03/New-gig-at-LivingSocial"/>
   <updated>2010-06-03T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/06/03/New-gig-at-LivingSocial</id>
   <content type="html">&lt;p&gt;livingsocial, ruby, jobsI just started my new gig at &lt;a href='http://livingsocial.com'&gt;LivingSocial&lt;/a&gt;. I had been a fan of their product ever since moving to DC. I had loved how it got groups of my friends to get together and plan something. I also really enjoyed how it gave me new ideas of cool things to do in my city. Especially since I just moved to DC and didn&amp;#8217;t really know what to do. We have bought deals to restaurants we wanted to try, restaurants we already knew and loved, kennedy center brunch with a group of friends, a wine tour with a group of 5 of us going. We have really enjoyed the savings, but even more so that it helps get us out there doing and trying new things. Anyways I will be joining the development team, obviously doing Ruby stuff, since that is what I am focused on now. The team is already impressive and has accomplished a lot and scaled the site to request levels I have yet to deal with. I am excited to get to work and learn with the team, while bringing some of my skills from past experiences to help with the team. Yesterday, I pushed my first code live to production, which made me an official member of the team. Now to dig in and wrap my head around this code base. &lt;div class='zemanta-pixie' style='margin-top:10px;height:15px'&gt;[![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=5df197a5-7f10-440c-bac4-5b6890b06322)](http://reblog.zemanta.com/zemified/5df197a5-7f10-440c-bac4-5b6890b06322/ &quot;Reblog this post [with Zemanta]&quot;)&lt;span class='zem-script more-related pretty-attribution'&gt;&lt;script src='http://static.zemanta.com/readside/loader.js' type='text/javascript' defer='defer'&gt; &lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby Fitbit API</title>
   <link href="http://danmayer.github.com/2010/05/26/Ruby-Fitbit-API"/>
   <updated>2010-05-26T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/26/Ruby-Fitbit-API</id>
   <content type="html">&lt;p&gt;&lt;a href='http://fitbit.com'&gt;Fitbit&lt;/a&gt; has been slow to release an official API, so I started work on a screen scraping version. It will become a nice gem interface to the real API when it is released. It is pretty limited at the moment, only able to pull the most basic current days info. You can check it out here &lt;a href='http://github.com/danmayer/ruby-fitbit/'&gt;ruby-fitbit&lt;/a&gt; on github. Example output&lt;pre&gt;~/projects/ruby-fitbit(master) &amp;gt; ruby bin/ruby-fitbit my@email.com MYPASSCalories Burned 834Steps Taken 552Milkes Walked .23Activity Levels Durations:Sedentary 11hrs 28minLightly 19minFairly 16minVery 0min    done&lt;/pre&gt; I also connected a quick sinatra app on &lt;a href='http://heroku.com'&gt;Heroku&lt;/a&gt; to it so that I could embed the data in my personal blog as a widget. I will clean that up and release the code for it soon. Here is the widget at the moment. I need to add good CSS that is customizable by the user. It would also be good to make it easy for others to host their own widgets opposed to just my own data. &lt;iframe name='fitbit' scrolling='no' src='http://fitbit-widget.heroku.com/widget/60a4da84f6d1b0d92d8be565b9cffa8c0f0d24ccd6da0ddc1f021cc29ffbc92a' frameborder='1' height='320px' width='200px' /&gt; &lt;div class='zemanta-pixie' style='margin-top:10px;height:15px'&gt;[![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=7e9bcb50-5d30-472a-8b60-885abfa6e7af)](http://reblog.zemanta.com/zemified/7e9bcb50-5d30-472a-8b60-885abfa6e7af/ &quot;Reblog this post [with Zemanta]&quot;)&lt;span class='zem-script more-related pretty-attribution'&gt;&lt;script src='http://static.zemanta.com/readside/loader.js' type='text/javascript' defer='defer'&gt; &lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Converting Movable Type to Tumblr</title>
   <link href="http://danmayer.github.com/2010/05/23/Converting-Movable-Type-to-Tumblr"/>
   <updated>2010-05-23T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/23/Converting-Movable-Type-to-Tumblr</id>
   <content type="html">&lt;p&gt;Continuing my work on converting this blog to be a dev blog, I moved over all non development and computer related posts to my personal blog. I just converted about 1,000 posts and 3,000 comments from MovableType to Tumblr and Disqus. I decided I would host my personal blog on Tumblr, which has been interesting so far. Sucking the old posts and comments out of MovableType and pushing them to Tumblr wasn&amp;#8217;t as easy as I had hoped. Although it gave me a chance to enjoy on of my favorite parts of being a developer. If something doesn&amp;#8217;t exist and I want it, I can built it. So I set off to write a script that would take a Movable Type blog export and import all of the posts into Tumblr and push all of the comments to Disqus. While it wasn&amp;#8217;t the easiest thing to do, it wasn&amp;#8217;t that difficult either. I have slowly built up a collection of various utilities to help port from Movable Type to Wordpress, or from wordpress.org to wordpress.com. Things that help clean up formatting or remove javascript and replace it with something allowed on wordpress.org. I added my conversion script to the inconveniently named &lt;a href='http://github.com/danmayer/MT_WP_Converter'&gt;MT_WP_Converter&lt;/a&gt; git repo. &lt;a href='http://github.com/danmayer/MT_WP_Converter/blob/master/mt_tumblr_converter.rb'&gt;View MovableType to Tumblr Converter Script&lt;/a&gt; &lt;script src='http://gist.github.com/412468.js?file=movabletyle_tumblr.rb'&gt; &lt;/script&gt; Quick Gotchas:* There are lots of older or bad example code on how to use the disqus API out there, I had a problem posting comments because all of the POST endpoints must end with a &amp;#8217;/&amp;#8217;, which I didn&amp;#8217;t know. This forum post helped me &lt;a href='http://www.ruby-forum.com/topic/180723'&gt;fix an issue posting to disqus with rest client&lt;/a&gt;.* Remember to turn off the facebook publishing for tumblr, before doing the import or testing it. I didn&amp;#8217;t remember this and published the same test post on facebook about 40 times. Oops!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Improving my Emacs Configurations</title>
   <link href="http://danmayer.github.com/2010/05/14/Improving-my-Emacs-Configurations"/>
   <updated>2010-05-14T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/14/Improving-my-Emacs-Configurations</id>
   <content type="html">&lt;p&gt;Emacs, Aquamacs, emacs starter kit, developmentI have been using Emacs as my default editor for awhile now. My emacs setup was a hodge podge of various plugins, code from friends, blogs, etc&amp;#8230; It wasn&amp;#8217;t organized and was hard to maintain and fine tune. I decided it was time to get my emacs config under control, and under git so it was portable and easy to revert update etc. I looked at a couple options for existing Emacs configuration setups for Ruby. &lt;a href='http://github.com/technomancy/emacs-starter-kit'&gt;Emacs Starter Kit&lt;/a&gt;&lt;a href='http://github.com/topfunky/emacs-starter-kit'&gt;Topfunky&amp;#8217;s Emacs Starter Kit&lt;/a&gt;&lt;a href='http://github.com/walter/aquamacs-emacs-starter-kit'&gt;Aquamacs Starter Kit&lt;/a&gt; In the end I ended up going with &lt;a href='http://github.com/walter/aquamacs-emacs-starter-kit'&gt;Aquamacs Starter Kit&lt;/a&gt;, namely because I have been a fan of Aquamacs for awhile, and already new my way around it&amp;#8217;s system pretty well. The original Starter kit, from Technomancy, doesn&amp;#8217;t play nicely with Aquamacs and leads to some issues. Some people have forks that are supposed to work better with Aquamacs, but it seems the kit built from the ground up for Aquamacs works best. Topfunky&amp;#8217;s project is based on the original emacs starter kit, but has been customized to work well with &lt;a href='http://www.apple.com/downloads/macosx/unix_open_source/carbonemacspackage.html'&gt;Carbon Emacs&lt;/a&gt;, which is more cross compatible than Aquamacs, so your emacs config is more likely to be portable to all unix systems as well as OS X with Carbon emacs. This looks like a really interesting option, but I decided I liked some of the nice extra sugar that Aquamacs provides. First install &lt;a href='http://github.com/walter/aquamacs-emacs-starter-kit'&gt;Aquamacs starter kit&lt;/a&gt; There were a few things that I couldn&amp;#8217;t stand from the defaults in the Aquamacs Starter Kit and removed also some modifications that I added. ### Disabling/Removing some Starter Kit features You likely installed your starter kit to a location like, &amp;#8216;/Users/danmayer/Library/Preferences/Aquamacs Emacs/aquamacs-emacs-starter-kit&amp;#8217;, go there to find the files for modification. Disabling the emacs Twitter client, sorry I like my twitter to be entirely separate from my dev environment. Then edit &amp;#8216;init.el&amp;#8217;:&lt;code&gt;;;(autoload &amp;#39;twitter-get-friends-timeline &amp;quot;twitter&amp;quot; nil t);;(autoload &amp;#39;twitter-status-edit &amp;quot;twitter&amp;quot; nil t);;(global-set-key &amp;quot;\C-xt&amp;quot; &amp;#39;twitter-get-friends-timeline);;(add-hook &amp;#39;twitter-status-edit-mode-hook &amp;#39;longlines-mode)&lt;/code&gt; Disable Ruby-electric, which tries to complete various matched chars and statements as you type like &amp;#8216;, {}. (), begin/end, if/end, etc&amp;#8230; It drives me nuts and breaks my thought process. Edit &amp;#8216;misc-mode-tweaks.el&amp;#8217;:&lt;code&gt;;;(require &amp;#39;ruby-electric);;(add-hook &amp;#39;ruby-mode-hook;;          (lambda nil;;            (require &amp;#39;ruby-electric);;            (ruby-electric-mode);;            (flymake-mode-on)))&lt;/code&gt; ### Additions to Starter Kit I saw a Emacs package to add flog score inline to ruby method scores and thought that sounded like a great addition to help keep my methods concise, so I added that, to my .emacs: &lt;code&gt;;; ruby-complexity flog scores for methods http://github.com/topfunky/emacs-starter-kit/tree/master/vendor/ruby-complexity/(add-to-list &amp;#39;load-path &amp;quot;~/.emacs.d/vendor/ruby-complexity/&amp;quot;)    (require &amp;#39;linum)(require &amp;#39;ruby-complexity)(add-hook &amp;#39;ruby-mode-hook  (function (lambda ()      (flymake-mode)      (linum-mode)      (ruby-complexity-mode))))&lt;/code&gt; I also liked some of the options from &lt;a href='http://github.com/defunkt/textmate.el'&gt;defunkt&amp;#8217;s Textmate minor mode&lt;/a&gt;. First &amp;#8216;cd ~/.emacs.d/vendor; git clone git://github.com/defunkt/textmate.el.git&amp;#8217; Again added to my .emacs file: &lt;code&gt;;; textmate bindings for some nicer key combos for common actions(add-to-list &amp;#39;load-path &amp;quot;~/.emacs.d/vendor/textmate.el&amp;quot;)(require &amp;#39;textmate)(textmate-mode)&lt;/code&gt; I am just starting to get going with improving my Emacs setup, so I am sure I will likely be making additional changes. The current changes above are checked into &lt;a href='http://github.com/danmayer/aquamacs-emacs-starter-kit'&gt;my fork&lt;/a&gt; of the project, feel free to pull the above changes if you&amp;#8217;d like. If you have any great Emacs tips, tricks, or plugins I should add let me know as I am sure it can just keep getting better, but I am pretty happy for now. &lt;a href='/assets/custom_aquamacs.jpg'&gt;&lt;img src='/assets/custom_aquamacs_sm.jpg' alt='' /&gt;&lt;/a&gt; &lt;div class='zemanta-pixie' style='margin-top:10px;height:15px'&gt;[![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=e37199cb-1e97-43c9-82a8-909a8342131f)](http://reblog.zemanta.com/zemified/e37199cb-1e97-43c9-82a8-909a8342131f/ &quot;Reblog this post [with Zemanta]&quot;)&lt;span class='zem-script more-related pretty-attribution'&gt;&lt;script src='http://static.zemanta.com/readside/loader.js' type='text/javascript' defer='defer'&gt; &lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Introducing Ruby Resume, a project to create and host your resume</title>
   <link href="http://danmayer.github.com/2010/05/10/Introducing-Ruby-Resume%2C-a-project-to-create-and-host-your-resume"/>
   <updated>2010-05-10T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/10/Introducing-Ruby-Resume,-a-project-to-create-and-host-your-resume</id>
   <content type="html">&lt;p&gt;Ruby, Github, Open source, Programming, Heroku, Markdown, Tools, ResumeThe &lt;a href='http://github.com/danmayer/Resume'&gt;Ruby Resume project&lt;/a&gt;, is a project I started to make it easier for Ruby developers to create, host, share their resume, and keep it up to date. It is an open source project, that anyone can use to help manage their resume online. It offers a variety of options and you can take or leave any part you wish. Basically, you fork the project, alter some things for your needs, and can contribute interesting additions back to the shared Ruby Resume project. The project uses Sinatra, Markdown, and a collection of Rake tasks to get the job done. What does the Ruby Resume project do?- Supports deploying your resume to &lt;a href='http://heroku.com'&gt;Heroku&lt;/a&gt; in a variety of formats.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easily deploy your app to any Sinatra compatible host&lt;/li&gt;

&lt;li&gt;Allows simple publishing of your resume to your github personal page.&lt;/li&gt;

&lt;li&gt;It makes it simple to publish your resume as a gem. I got the idea for a &lt;a href='http://groups.google.com/group/rails-business/msg/68cf8a890c0d4fc8?pli=1'&gt;personal resume gem&lt;/a&gt; from &lt;a href='http://twitter.com/edavis10'&gt;Eric Davis&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;It uses Markdown, which integrates well with &lt;a href='http://github.com/blog/553-looking-for-a-job-let-github-help'&gt;Github Jobs&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;It currently suppots HTML, LaTeX, and Markdown. Soon it will support PDF, RTF, etc&amp;#8230; I built this because I had to publish and start updating my resume again after not dealing with it for 3 years. I wanted something that would simplify the whole process. I wanted my resume under git, and I wanted to be able to quickly deploy any changes online and support a large number of formats. Anyways check out the &lt;a href='http://github.com/danmayer/Resume'&gt;source on Github&lt;/a&gt; and the Readme which gives simple instructions on how to use the project. Or what the video below which demonstrates how to use this project for your own resume. Live Examples:- My &lt;a href='http://resume.mayerdan.com'&gt;resume on Heroku&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;My &lt;a href='http://danmayer.github.com'&gt;Github personal page&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;My personal resume gem is, &lt;a href='http://rubygems.org/gems/danmayer-resume'&gt;danmayer-resume&lt;/a&gt;, which can be installed using &lt;code&gt;gem install danmayer-resume&lt;/code&gt;, then execute danmayer-resume &lt;object height='300' width='400'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11642402&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' /&gt;&lt;embed allowfullscreen='true' src='http://vimeo.com/moogaloop.swf?clip_id=11642402&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' allowscriptaccess='always' type='application/x-shockwave-flash' height='300' width='400' /&gt;&lt;/object&gt; &lt;a href='http://vimeo.com/11642402'&gt;Ruby Resume Project&lt;/a&gt; from &lt;a href='http://vimeo.com/danmayer'&gt;dan mayer&lt;/a&gt; on &lt;a href='http://vimeo.com'&gt;Vimeo&lt;/a&gt;. &lt;div class='zemanta-pixie' style='margin-top:10px;height:15px'&gt;[![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=8c8aa943-8dd9-4306-a95c-2dbff0b07c08)](http://reblog.zemanta.com/zemified/8c8aa943-8dd9-4306-a95c-2dbff0b07c08/ &quot;Reblog this post [with Zemanta]&quot;)&lt;span class='zem-script more-related pretty-attribution'&gt;&lt;script src='http://static.zemanta.com/readside/loader.js' type='text/javascript' defer='defer'&gt; &lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>This blog will be changing soon</title>
   <link href="http://danmayer.github.com/2010/05/04/This-blog-will-be-changing-soon"/>
   <updated>2010-05-04T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/04/This-blog-will-be-changing-soon</id>
   <content type="html">&lt;p&gt;thoughts BlogIt will becoming my development blog. I am currently working on updating and reconfiguring the system, but you can look forward to many changes around here. If you want to follow and read my more personal blog posts, head over to &lt;a href='http://wastedbrains.com'&gt;WastedBrains&lt;/a&gt;, which will host my non development blogging and thoughts.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A archive of my last project</title>
   <link href="http://danmayer.github.com/2010/05/01/A-archive-of-my-last-project"/>
   <updated>2010-05-01T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2010/05/01/A-archive-of-my-last-project</id>
   <content type="html">&lt;p&gt;Since Caliper is shutting down on April 30th, I made a little video to show what it did, and explain it&amp;#8217;s purpose. It isn&amp;#8217;t really promotional, but if people ever want a reference of something I worked on this should help. &lt;object height='300' width='400'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11358149&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' /&gt;&lt;embed allowfullscreen='true' src='http://vimeo.com/moogaloop.swf?clip_id=11358149&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1' allowscriptaccess='always' type='application/x-shockwave-flash' height='300' width='400' /&gt;&lt;/object&gt; &lt;a href='http://vimeo.com/11358149'&gt;Caliper Screencast&lt;/a&gt; from &lt;a href='http://vimeo.com/user2008106'&gt;dan mayer&lt;/a&gt; on &lt;a href='http://vimeo.com'&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Dan Mayer Resume</title>
   <link href="http://danmayer.github.com/2009/04/18/Dan-Mayer-Resume"/>
   <updated>2009-04-18T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2009/04/18/Dan-Mayer-Resume</id>
   <content type="html">&lt;p&gt;&lt;a href='/assets/Dan_Mayer_Resume.txt'&gt;Download file&lt;/a&gt; Daniel Mayerdan@mayerdan.com503-819-3246821 Maryland Ave NE #305Washington, DC 20002 http://github.com/danmayerhttp://mayerdan.com DevverFounder / CTO / Ruby Software DeveloperApril 2008 - Present (2 years 1 month)Software startup to make the lives of developers easier. Originally, developed accelerated testing for Ruby developers. More recently, launched getcaliper.com, which builds code analytics for all Rubygems and builds metrics for public and private git-based Ruby projects. * Built accellerated testing tool, using distributed computing services to run developer tests * Developed a cloud-based continious integration server and notification services * Developed cloud-based code metrics and analytics project analyzer, which integrated with Rubygems to provide analytics on all public Rubygems and many OSS git-based projects (7000+ projects) * Member of a distributed agile team &amp;#8211; practiced daily standups, remote pair programming, and continious integration * Worked extensively with cloud based services and distributed computing techniques. (EC2, Beanstalkd queues, Schemaless SimpleDB, S3) * Developed and deployed EventMachine, Merb, Rails, and Sinatra in production environments. PretheoryFounderMay 2007 - April 2008 Small Denver-based consumer web startup. Built Seekler.com to help people find the best of everything online by created social, community-based top 10 lists on consumer-driven topics or products. IndigioJava Lead EngineerAugust 2006 - May 2007 Developed web sites for Fortune 500 companies. Managed a small Java team with local and international remote employees. ISTJava Software EngineerDecember 2005 - June 2006Developed full lifecycle of a DOD distributed syncronous infrastructure in Java. Education: University of ColoradoBoulder, COB.S., Computer ScienceGPA: 3.185 Skills:Ruby, Rails, Sinatra, EventMachine, DataMapper, Linux, OSX, Javascript (JQuery/Prototype), HTML, AWS, Distributed Computing, Apache, MySql, Postgres, Schemaless DBs (NoSql), Pair Programming, Test-Focused Development, Distributed Teams, Developer team management, Participating in Ruby OSS software, Active on Github, building custom protocal EventMachine-based protocals, building restful webservice API&amp;#8217;s&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Refactoring makes me happy</title>
   <link href="http://danmayer.github.com/2008/07/29/Refactoring-makes-me-happy"/>
   <updated>2008-07-29T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2008/07/29/Refactoring-makes-me-happy</id>
   <content type="html">&lt;p&gt;I still get such a kick out of refactoring and shrinking down code. I try not to shrink it to the point that it is harder to read. I think some people get a little overzealous with refactoring and obscure so much of the code that it is no longer that readable, or everything is 20 levels deeper than it should be when you are in a debugger trying to trace a programs execution. Anyways I was cleaning up a bunch of little TODOs or ugly sections of code that had been building up in some of our files. It felt good, and should make things even simpler moving forward.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Quicksort in Processing.js</title>
   <link href="http://danmayer.github.com/2008/05/28/Quicksort-in-Processingjs"/>
   <updated>2008-05-28T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2008/05/28/Quicksort-in-Processingjs</id>
   <content type="html">&lt;p&gt;I always liked computer visualization. I think it is fun and interesting, and drawing Mandelbrot for the first time brought a smile to my face. I always thought I understood sorting, AI, search, and other algorithms best when you could really see them in action. I always enjoyed little videos or applets of a bunch of different sorting algorithms comparing their differences and speeds. I don&amp;#8217;t really have time right now to do a whole bunch, but when I saw &lt;a href='http://ejohn.org/blog/processingjs/'&gt;processing ported to javascript&lt;/a&gt; I thought I really would have to write a visualization for at least one sort just for the fun of playing around with a cool project. So here is a link to my &lt;a href='http://mayerdan.com/quicksort.html'&gt;Quicksort in Processing.js&lt;/a&gt;, it will only work in the very newest browsers (FF3, Opera 9.5, and other beta browsers&amp;#8230; feel free to try it out on anything worst thing that will happen is just an empty box&amp;#8230; but it will not likely do anything on older browsers). Anyways, just some fun coding to play around with&amp;#8230; If anyone can figure out how to make the double buffering / frame rate look good I would love a fix to make the animation run smoothly.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>iTunes Stalling on Windows XP</title>
   <link href="http://danmayer.github.com/2008/02/25/iTunes-Stalling-on-Windows-XP"/>
   <updated>2008-02-25T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2008/02/25/iTunes-Stalling-on-Windows-XP</id>
   <content type="html">&lt;p&gt;I have been meaning to write this little tutorial ever since I fixed my iTunes on windows XP. I have a pretty good computer (3.4 ghz 1Gb ram), so I was confused when switching from WinAmp to iTunes to find my music randomly stalling. If i was running something process intensive like compiling or even just loading a new program my music would stutter on XP. I search around the web and found that others were having this problem, but not many had a good solution. After browsing around the web, I found that the stuttering in my music was caused when iTunes didn&amp;#8217;t get enough of the CPU to process the music file. So when something would jump up and use 90% of my CPU iTunes would happily stop processing the music because it didn&amp;#8217;t have a high enough process priority to keep a couple percent of CPU for itself. When playing music in the background iTunes only needs 3%-4% to play the music. So now knowing the problem I searched for solutions and many just said that every time they started iTunes they would open the Windows Task Manager go to the processes tab and right click on iTunes to set the priority of the process to high. This did in fact work, but now I had to do that every time that I openned iTunes which was really annoying. So I continued looking for a better solution. There are special windows programs out there, most of them cost money, that will monitor which processes are running on the system and automatically change the process priority on any app you tell the system to increase the priority to whatever settings you choose. This seemed like and OK solution but now having an app running all the time checking my processes and just some other app that could cause problems, seemed bad. It also seems that processes aren&amp;#8217;t as stable if you switch their priority after they begin, it is best to set the priority as they are started. So off searching for a solution I found that you can start processes in does and pass what priority you want to start the process. So I decided to just hack up a little script which would launch iTunes from dos with a process priority of &amp;#8216;High&amp;#8217;. to run a windows app at a different process priority than the default you can create a file named &amp;#8220;appName.bat&amp;#8221; (in this case iTunes.bat), place this file in the same directory as the executable you want to run with a higher priority. Then edit the bat file (you can edit it in notepad). Add this line to the file start /high iTunes.exe (or start /priority_setting application.exe) Save your bat file&amp;#8230; Now all you have to do is create shortcuts to the new bat file instead of the shortcuts pointing directly the application. To create a shortcut right click on your bat file and select &amp;#8216;Create Shortcut&amp;#8217;. If you want the shortcut to have the same icon as the original app instead of the dos icon, right click the shortcut and got to properties, then the &amp;#8216;Shortcut&amp;#8217; tab, and click Change Icon. Select browse an application to search for an icon in, then select the application you are creating a shortcut for (in this case iTunes.exe), it will display the available icons select the one your want. Anyways, I hope this helps anyone else having trouble getting audio to play smooth on windows XP with iTunes. I have also used this method to speed up some other processes that I always want running full speed on windows, with pretty good success.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>online resources for computer science students</title>
   <link href="http://danmayer.github.com/2008/01/20/online-resources-for-computer-science-students"/>
   <updated>2008-01-20T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2008/01/20/online-resources-for-computer-science-students</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.virtualhosting.com/blog/2008/50-killer-online-resources-for-computer-science-students/'&gt;50 killer online resources for computer science students&lt;/a&gt;. I thought it was a decent list and figured I would share it. Dave sorry their is stuff about computers on my blog, I know it bothers you&amp;#8230; You never called me when you were in Denver, so um&amp;#8230; were even or something.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails built in string shortcuts</title>
   <link href="http://danmayer.github.com/2007/10/16/Ruby-on-Rails-built-in-string-shortcuts"/>
   <updated>2007-10-16T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/10/16/Ruby-on-Rails-built-in-string-shortcuts</id>
   <content type="html">&lt;p&gt;There are some great string munipulation shortcuts in rails. I thought this was a good write up and little collection of some of the most useful functions. &lt;a href='http://thinkingrails.blogspot.com/2007/01/stringy-shortcuts-string-methods-ruby.html'&gt;Rails string shortcuts&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Always use lenth on ruby collections</title>
   <link href="http://danmayer.github.com/2007/09/07/Always-use-lenth-on-ruby-collections"/>
   <updated>2007-09-07T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/09/07/Always-use-lenth-on-ruby-collections</id>
   <content type="html">&lt;p&gt;This bug never got me, but it is a good little ruby best practice to follow. So remember when ever using ruby collections use .length call not the .size call&amp;#8230; &lt;a href='http://blog.floehopper.org/articles/2007/08/07/why-array-length-is-better-than-array-size'&gt;Why use length on all ruby collections&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Amazing Image Resizing</title>
   <link href="http://danmayer.github.com/2007/08/21/Amazing-Image-Resizing"/>
   <updated>2007-08-21T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/08/21/Amazing-Image-Resizing</id>
   <content type="html">&lt;p&gt;This is the coolest image resizing I have ever seen, I love that your can resize to erase objects out of photos, awesome&amp;#8230; &lt;a href='http://www.youtube.com/watch?v=vIFCV2spKtg&amp;amp;eurl=http%3A%2F%2Fwww%2Emilkandcookies%2Ecom%2Flink%2F66481%2Fdetail%2F'&gt;Amazing Image Resizing&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Finished Rails Book</title>
   <link href="http://danmayer.github.com/2007/08/12/Finished-Rails-Book"/>
   <updated>2007-08-12T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/08/12/Finished-Rails-Book</id>
   <content type="html">&lt;p&gt;I finally finished a reading the rails book all the way through. I keep putting it off and reading other books because reading straight through a programming book is boring. Yippie for finishing that up, and I learn some more little rails tricks that should be helpful. Next up Linux System Administration and Backup and Recovery!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Using Rails link_to_if</title>
   <link href="http://danmayer.github.com/2007/07/31/Using-Rails-link_to_if"/>
   <updated>2007-07-31T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/07/31/Using-Rails-link_to_if</id>
   <content type="html">&lt;p&gt;There are a lot of great helper methods in rails, and I need to remember to use more of them, one I over looked for a long time that I have found useful is link_to_if &amp;lt;%= link_to_if logged_in?, &amp;#8220;#{item.name}&amp;#8221;, :controller =&amp;gt; &amp;#8216;items&amp;#8217;, :action =&amp;gt; &amp;#8216;show&amp;#8217;, :id =&amp;gt; item %&amp;gt; replaces the much longer and more verbose: &amp;lt;%- if logged_in? %&amp;gt;&amp;lt;%= link_to , &amp;#8220;#{item.name}&amp;#8221;, :controller =&amp;gt; &amp;#8216;items&amp;#8217;, :action =&amp;gt; &amp;#8216;show&amp;#8217;, :id =&amp;gt; item %&amp;gt;&amp;lt;%- else %&amp;gt;&amp;lt;%= item.name %&amp;gt;&amp;lt;%- end %&amp;gt; I like being able to replace five confusing lines with one single simple solution. The link_to_if helper writes a link if the condition is met, otherwise it just outputs the text that would have been in the link. Very cool. Also if you want to use &lt;a href='http://www.rails.cz/articles/2007/07/13/ajax-forms-with-multiple-submit-buttons-bug'&gt;Ajax forms with multiple submit buttons in Rails, here is the solution&lt;/a&gt;. Lastly if you are trying to write a selector and want to make sure the test is returning the html you expect you can add puts @response.body into the test after the page call and see the response. This has been useful to me a few times.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Highly useful assert_select</title>
   <link href="http://danmayer.github.com/2007/06/26/Highly-useful-assert_select"/>
   <updated>2007-06-26T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/06/26/Highly-useful-assert_select</id>
   <content type="html">&lt;p&gt;I find myself using the assert_select a lot while doing testing and rails. I have had to keep looking up different examples depending on the situation. I have found that this page seems to have most everything I need when I can&amp;#8217;t remember it off the top of my head. &lt;a href='http://railsmanual.com/module/ActionController::Assertions::SelectorAssertions'&gt;Rails assert select examples&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby rails testing</title>
   <link href="http://danmayer.github.com/2007/06/12/Ruby-rails-testing"/>
   <updated>2007-06-12T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/06/12/Ruby-rails-testing</id>
   <content type="html">&lt;p&gt;My roommate made a great post on rails testing so I thought I would share that here. &lt;a href='http://blog.pretheory.com/arch/2007/06/adventures_in_testing_part_i_r.php'&gt;Testing faster in ruby on rails&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby email to rss</title>
   <link href="http://danmayer.github.com/2007/05/20/Ruby-email-to-rss"/>
   <updated>2007-05-20T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/20/Ruby-email-to-rss</id>
   <content type="html">&lt;p&gt;A simple ruby email2rss example When I was searching for some basic ruby scripts to download pop email I came across the &lt;a href='http://rubyforge.org/projects/email2rss/'&gt;email 2 Rss&lt;/a&gt; project on Ruby forge. Since I noticed there was no code available for the project yet I figured I would make a quick version up and make the code available, so anyone else searching for similar examples would have a starting point. This code is just a functional example, but doesn&amp;#8217;t have any real options or error checking so use at your own risk. Download the source to &lt;a href='http://WWW.bandddesigns.com/ml/arch/RubyEmail.zip'&gt;Ruby Email to RSS Feed&lt;/a&gt; &lt;pre&gt;require 'net/pop'require 'rss/maker'    version = &quot;2.0&quot; # [&quot;0.9&quot;, &quot;1.0&quot;, &quot;2.0&quot;]destination = &quot;/archive/emailFeed.xml&quot; # local file to write    #create a new email Feedcontent = RSS::Maker.make(version) do |rss|  rss.channel.title = &quot;Dan Email Feed&quot;  rss.channel.link = &quot;http://www.pretheory.com&quot;   rss.channel.description = &quot;My newest emails&quot;   rss.items.do_sort = true # sort items by date    Net::POP3.start('pop.yourDomain.com', 110,                    'userName', 'myPass') do |pop|    if pop.mails.empty?      puts 'No mail.'    else      i = 0      pop.each_mail do |m|   # or &quot;pop.mails.each ...&quot;        subject = m.header.split(&quot;\r\n&quot;).grep(/^Subject: /)[0]        subject = subject.gsub(&quot;Subject: &quot;,&quot;&quot;)        subject = subject.gsub(&quot;:&quot;,&quot;&quot;)        subject = subject[0,15] if(subject.length &gt; 15)        link = 'http://www.gmail.com'        body = m.pop        body = body[0,25] if(body.length &gt; 25)                #create feed item        item = rss.items.new_item        item.title = subject        item.link = link        item.date = Time.now        item.description = body            i += 1      end      puts &quot;#{pop.mails.size} mails popped.&quot;    end  endend    File.open(destination,&quot;w&quot;) do |f|  f.write(content)end    puts 'Done. Thanks.'&lt;/pre&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby Email Archiver</title>
   <link href="http://danmayer.github.com/2007/05/20/Ruby-Email-Archiver"/>
   <updated>2007-05-20T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/20/Ruby-Email-Archiver</id>
   <content type="html">&lt;p&gt;Checking and receiving email via ruby. If you need to get emails and check emails via a ruby script this should get you started in the right direction. I needed to copy down about six thousand emails from my pop server, so I wrote up this little script. Ruby makes email simple, you just need to know where to look and unfortunately most searches result in finding a 3rd party library that costs a pretty penny for email actions in ruby. What you really need is the &lt;a href='http://www.ruby-doc.org/stdlib/libdoc/net/pop/rdoc/classes/Net/POP3.html'&gt;Net::POP3&lt;/a&gt; or the &lt;a href='http://www.ruby-doc.org/stdlib/libdoc/net/imap/rdoc/classes/Net/IMAP.html'&gt;Net::IMAP&lt;/a&gt;. After going through the quick documentation and seeing some of the available code examples, writing the code is straightforward. This is just a very simple example, with hardly any error checking. Download the source to &lt;a href='http://WWW.bandddesigns.com/ml/arch/RubyEmail.zip'&gt;Ruby Email Archiver&lt;/a&gt; &lt;pre&gt;require 'net/pop'    Net::POP3.start('pop.yourdomain.com', 110,                    'userName', 'myPass') do |pop|  if pop.mails.empty?    puts 'No mail.'  else    i = 0    pop.each_mail do |m|   # or &quot;pop.mails.each ...&quot;      subject = m.header.split(&quot;\r\n&quot;).grep(/^Subject: /)[0]      subject = subject.gsub(&quot;Subject: &quot;,&quot;&quot;)      subject = subject.gsub(&quot;:&quot;,&quot;&quot;)      subject = subject[0,10] if(subject.length &gt; 10)      File.open(&quot;/archive/#{i}-#{subject}.txt&quot;, 'w') do |f|        f.write m.pop      end      #if you want to delete msg after archive      #m.delete      i += 1    end    puts &quot;#{pop.mails.size} mails popped.&quot;  endend&lt;/pre&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rails casts</title>
   <link href="http://danmayer.github.com/2007/05/18/Rails-casts"/>
   <updated>2007-05-18T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/18/Rails-casts</id>
   <content type="html">&lt;p&gt;A great way to keep up with some rails tips and ideas. I have started watching rails casts when I am eating a snack, working out, or just have a few minutes. It is a great and simple way to keep rails ideas fresh in your head. Most of the tips are fairly basic for now, but I am hoping they start dipping into more complex rails solutions. Or how to break out of the framework when it makes sense. &lt;a href='http://railscasts.com/'&gt;Railscasts&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Really good post on regular expresions</title>
   <link href="http://danmayer.github.com/2007/05/17/Really-good-post-on-regular-expresions"/>
   <updated>2007-05-17T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/17/Really-good-post-on-regular-expresions</id>
   <content type="html">&lt;p&gt;I found that this was a really good post on regular expressions. Just a good beginner walk through that will have you more comfortable looking at any regex you run into while debugging someone else&amp;#8217;s code, or if your trying to add your own regular expressions yourself. &lt;a href='http://immike.net/blog/2007/04/06/the-absolute-bare-minimum-every-programmer-should-know-about-regular-expressions/'&gt;Regular expression walk through&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>I am now at Pretheory</title>
   <link href="http://danmayer.github.com/2007/05/16/I-am-now-at-Pretheory"/>
   <updated>2007-05-16T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/16/I-am-now-at-Pretheory</id>
   <content type="html">&lt;p&gt;I know I don&amp;#8217;t actually post to this blog much at all, but I still occasionally add some stuff on it and I might slowly be bringing it back to life. So with that in mind I thought I should announce that I am now the co founder of a start up. &lt;a href='http://www.pretheory.com'&gt;Pretheory&lt;/a&gt;. If you want to keep up with the various projects we are working on the best place to check is over at the &lt;a href='http://blog.pretheory.com'&gt;Pretheory blog&lt;/a&gt;. Currently we are programming in Ruby on Rails, and we are hoping to have our first project launched by early August. So if you have been following this blog at all, keep and eye on &lt;a href='http://www.pretheory.com'&gt;Pretheory&lt;/a&gt; now as well. &lt;a href='http://www.pretheory.com'&gt;&lt;img src='http://WWW.bandddesigns.com/ml/arch/pretheory_logo.jpg' alt='pretheory_logo.jpg' /&gt;&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Good Startup Resources</title>
   <link href="http://danmayer.github.com/2007/05/14/Good-Startup-Resources"/>
   <updated>2007-05-14T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2007/05/14/Good-Startup-Resources</id>
   <content type="html">&lt;p&gt;Here is a list of some good start up resources that I have begun to check out on the web. &lt;a href='http://www.paulgraham.com/articles.html'&gt;Paul Graham&amp;#8217;s essays&lt;/a&gt;&lt;br /&gt;&lt;a href='http://shirky.com/'&gt;Clay Shirky&amp;#8217;s essays&lt;/a&gt;&lt;br /&gt;&lt;a href='http://onstartups.com/'&gt;OnStartups&lt;/a&gt;&lt;br /&gt;&lt;a href='http://www.smallbusinesshub.com/'&gt;Small Business Hub&lt;/a&gt;&lt;br /&gt;&lt;a href='http://news.ycombinator.com/'&gt;Startup news&lt;/a&gt;&lt;br /&gt;&lt;a href='http://programming.reddit.com/'&gt;programming.reddit.com&lt;/a&gt;&lt;br /&gt;&lt;a href='http://blog.pretheory.com/arch/000362.php'&gt;Good start up books to read&lt;/a&gt;&lt;br /&gt; Hopefully I will grow this list a bit more shortly, but for now that is some good information to get your started.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Eclipse Plugin Callisto</title>
   <link href="http://danmayer.github.com/2007/01/31/Eclipse-Plugin-Callisto"/>
   <updated>2007-01-31T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2007/01/31/Eclipse-Plugin-Callisto</id>
   <content type="html">&lt;p&gt;This is a pretty cool project you can use via the update manager you just tell it the type of development you want to do (java swing/j2ee/java webapps/c++/ and others). Anyways it is pretty good and gets a bunch of plugins together and manages them for you, so if newer versions of one thing still require an older version of another plug in it deals with any incompatibility issues. You select what you want and then it will say you need other dependencies click the button that says get required. That seems to be it. &lt;a href='http://www.eclipse.org/callisto/'&gt;Callisto&lt;/a&gt; peace,Dan&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Spam bots try anything</title>
   <link href="http://danmayer.github.com/2007/01/14/Spam-bots-try-anything"/>
   <updated>2007-01-14T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2007/01/14/Spam-bots-try-anything</id>
   <content type="html">&lt;p&gt;Well I have on many of my sites had to deal with and fight the onslaught of spam bots, but I still find them amusing some times. After a bug occurred on a production machine, I was looking at the logs and ran into many errors looking like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  2007-01-11 18:15:05,938 [TP-Processor4395]
  ERROR com.realestate.search.core.SearchController - java.lang.NumberFormatException: For input string: &amp;quot;http://valtrex-gs.****.com&amp;quot;2007-01-11 18:15:05,980 [TP-Processor4395]
  ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].[jsp] - Servlet.service() for servlet jspthrew exceptionjava.lang.NumberFormatException: For input string: &amp;quot;http://valtrex-gs.***.com&amp;quot;       at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It seems this was a pretty dumb, but probably mildly successful bot. It started some search and found tons of web pages, every time it encountered a form, it would attempt to fill out the majority of the fields with the URL hoping to make it into generated pages, most common search terms, comments, user names, or anything that would possibly link to the URL and increase the sites page rank. I found it hilarious, because somewhere on our site it was trying to fill out number, date, and other fields with the URL which we threw errors on format exceptions and probably returned them to the form with an error about that field. The bot hasn&amp;#8217;t given up, but hasn&amp;#8217;t slammed us very hard. Either way it is another amusing tale, of spam bots running amok on the web. At least they can make me laugh sometimes&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Mysql null date</title>
   <link href="http://danmayer.github.com/2006/12/18/Mysql-null-date"/>
   <updated>2006-12-18T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/12/18/Mysql-null-date</id>
   <content type="html">&lt;p&gt;I had an issue with java and hibernate returning a null date. java hibernate java.sql.SQLException: Value &amp;#8216;0000-00-00&amp;#8217; can not be represented as java.sql.Date This just took a little longer to find the fix on a google search than I thought it should have so I post what I ended up doing to resolve the situation here: ?zeroDateTimeBehavior=convertToNull you add this to your jdbc connection url and it will convert the 0000-00-00 to the proper type for java to work with. More info here: http://dev.mysql.com/doc/mysql/en/cj-upgrading.html#cj-upgrading-3-0-to-3-1 thanks to this thread, which had many other suggestions, but most of them were not helpful, but the one above saved my day. http://forum.java.sun.com/thread.jspa?threadID=649520&amp;amp;messageID=3824019 you can add this on the end of your hibernate connection file, like so&amp;#8230;&lt;property name='hibernate.connection.url'&gt;jdbc:mysql://{DB_IPADDRESS}:{DB_PORT}/{DB_NAME}?zeroDateTimeBehavior=convertToNull&amp;amp;profileSql=true&lt;/property&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Soap Sucks</title>
   <link href="http://danmayer.github.com/2006/11/19/Soap-Sucks"/>
   <updated>2006-11-19T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/11/19/Soap-Sucks</id>
   <content type="html">&lt;p&gt;I have said it for a long time now that XML and SOAP are bloated and most of the time the wrong way to do anything. Well it seems lead api developers are agreeing with me, it might have been the decade of XML but I hope to slowly see it fade to a hardly used only when needed standard, instead of the if it doesn&amp;#8217;t use XML it obviously isn&amp;#8217;t designed well. Soap i wasted so much time and clock cycle for projects that you never did well and were always replaced. &lt;a href='http://www.somebits.com/weblog/tech/bad/whySoapSucks.html'&gt;let me say now I&amp;#8217;d never choose to use SOAP and WSDL again. I was wrong&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java String isEmpty()</title>
   <link href="http://danmayer.github.com/2006/11/19/Java-String-isEmpty"/>
   <updated>2006-11-19T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/11/19/Java-String-isEmpty</id>
   <content type="html">&lt;p&gt;I have heard the java string class will finally get the isEmpty method in an upcoming release. Lets hope it is in 1.6, because I can&amp;#8217;t wait much longer, I can&amp;#8217;t for the life of me see why this was ignored for so long. Why have I had to put this in so many freakin if statements when this could have been fixed by adding a very easy and simple but amazingly easy to read and useful method. String randWord; /&lt;em&gt;random code or back in forth between many different classes&lt;/em&gt;/ String someFunction() {if(randWord!=null &amp;amp;&amp;amp; !randWord.equals(&amp;#8221;&amp;#8221;)) { /&lt;em&gt;do something&lt;/em&gt;/} &amp;#8230;.} all of this could just be replaced and make the code so much more readable with the isEmpty function, becoming the following&amp;#8230; if( !randWord.isEmpty() ) { /&lt;em&gt;do something&lt;/em&gt;/} I want this functionality and I want it now&amp;#8230; I guess since java is now opensource I should just go override the String class to add one simple function! So much value and so simple.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Nerds are great</title>
   <link href="http://danmayer.github.com/2006/10/12/Nerds-are-great"/>
   <updated>2006-10-12T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/10/12/Nerds-are-great</id>
   <content type="html">&lt;p&gt;Some days they make me proud to be a nerd&amp;#8230; This just cracks me up,&lt;a href='https://bugzilla.mozilla.org/show_bug.cgi?id=95849#c0'&gt;Mozilla Bug Report&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ubuntu Server 6.06</title>
   <link href="http://danmayer.github.com/2006/07/10/Ubuntu-Server-606"/>
   <updated>2006-07-10T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/07/10/Ubuntu-Server-606</id>
   <content type="html">&lt;p&gt;I installed Ubuntu server on one of my machines, one of the nice things about it, is that it from install it configures a working LAMP (Linux, Apache, MySQL and PHP) set up. Which is nice and saves lots of configuration. Unfortunately, I still need to get Subversion, Ruby, Tomcat, and other things installed and running on the system. Anyways since, I was going to have to set up a bunch of things and planned on using the system as a development machine I then installed Ubuntu desktop on the system as one of the aptitude scripts, which installs all the packages require for the desktop configuration. After that though, I realized that I was not able to complete any install with out causing an error in clvm, anything you install would cause a clvm error and make your install fail. So here is the fix if you install the Ubuntu server from CD and then install the desktop: Ultimately this post by npcomplete2000, was the solution for me:&lt;a href='http://www.ubuntuforums.org/archive/index.php/t-186356.html'&gt;http://www.ubuntuforums.org/archive/index.php/t-186356.html&lt;/a&gt; removing clvm caused no problems for me and was something I never thought I would need. After that I could install other applications with out problems. &lt;b&gt;More error information so those searching for error codes will find this post:&lt;/b&gt;Starting Cluster LVM Daemon clvmd could not connect to cluster managerConsult syslog for more informationinvoke-rc.d: initscript clvm, action &amp;#8220;start&amp;#8221; failed.dpkg: error processing clvm (&amp;#8211;configure): subprocess post-installation script returned error exit status 3Errors were encountered while processing: clvmE: Sub-process /usr/bin/dpkg returned an error code (1)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails Gem error could not find gem</title>
   <link href="http://danmayer.github.com/2006/07/10/Ruby-on-Rails-Gem-error-could-not-find-gem"/>
   <updated>2006-07-10T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/07/10/Ruby-on-Rails-Gem-error-could-not-find-gem</id>
   <content type="html">&lt;p&gt;I got this gem error on Ubuntu 6.06 over and over then finally I followed these instructions to install Ruby on Rails, &lt;a href='https://help.ubuntu.com/community/RubyOnRails'&gt;Install Ruby on Rails on Ubuntu 6.06&lt;/a&gt; and I changed one line: sudo gem update &amp;#8211;system IS WRONG!!!! run: sudo gem update and thing all the sudo gem installs work perfectly fine for me. Why I have no idea. I hate computers sometimes, but at least ruby and rails now work for Ubuntu 6.06 on my system.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Old Computer Science Links</title>
   <link href="http://danmayer.github.com/2006/07/03/Old-Computer-Science-Links"/>
   <updated>2006-07-03T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/07/03/Old-Computer-Science-Links</id>
   <content type="html">&lt;p&gt;General Links &lt;a href='http://www.colorado.edu'&gt;University of Colorado&lt;/a&gt;&lt;a href='http://www.web2gether.org'&gt;Web2gether Project&lt;/a&gt;&lt;a href='http://www.cs.colorado.edu/~l3d/'&gt;L3D labs at CU&lt;/a&gt;&lt;a href='http://programming.wastedbrains.com/'&gt;My code online&lt;/a&gt; Machine Learning &lt;a href='http://www.mit.edu/~9.520/'&gt;MITs class page on Machine Learning&lt;/a&gt;&lt;a href='http://www.developer.com/java/other/article.php/10936_1559871_1'&gt;The Use of Java in Machine Learning&lt;/a&gt;&lt;a href='http://aima.cs.berkeley.edu/'&gt;AI: a modern approach&lt;/a&gt;&lt;a href='http://staff.aist.go.jp/utsugi-a/Lab/Links.html'&gt;Java Neural Networks&lt;/a&gt; Text Categorization Links &lt;a href='http://www.cs.utexas.edu/users/mooney/ir-course/'&gt;Intelligent Information Retrieval&lt;/a&gt;&lt;a href='http://www.esi.uem.es/~jmgomez/tutorials/ecmlpkdd02/'&gt;Tutorial on Text Mining&lt;/a&gt;&lt;a href='http://sourceforge.net/projects/spay/'&gt;Open source spam filtering project&lt;/a&gt;&lt;a href='http://cl.aist-nara.ac.jp/~taku-ku/software/yamcha/'&gt;Yet Another Multipurpose Chunk Annotator&lt;/a&gt; Weka Links &lt;a href='http://www.cs.waikato.ac.nz/~ml/index.html'&gt;WEKA&lt;/a&gt;&lt;a href='http://www.cs.iastate.edu/~andymenz/573Project.html'&gt;Spam analysis&lt;/a&gt; LSA/LSI Links &lt;a href='http://lsa.colorado.edu'&gt;LSA @ CU&lt;/a&gt;&lt;a href='http://www.cs.utk.edu/~lsi/'&gt;LSI @ UTK&lt;/a&gt; SVM Links &lt;a href='http://www.ecs.soton.ac.uk/~srg/publications/pdf/SVM.pdf'&gt;Technical Paper Describing SVM classification&lt;/a&gt;&lt;a href='http://www.cs.colorado.edu/~grudic/teaching/CSCI4202_2004/'&gt;SVM Info / Lessons&lt;/a&gt;&lt;a href='http://www.kernel-machines.org/publications.html'&gt;Comprehensive List of SVM publications&lt;/a&gt;&lt;a href='http://www.cs.cornell.edu/People/tj/publications/joachims_99a.pdf'&gt;Large Scale SVM Learning&lt;/a&gt;&lt;a href='http://www.site.uottawa.ca/~nat/Courses/NLP-Course/itnn_1999_09_1048.pdf'&gt;SVM Spam Filter Research paper&lt;/a&gt; SVM Tools: &lt;a href='http://tedlab.mit.edu/~dr/SVDLIBC/'&gt;SVDLIBC&lt;/a&gt;&lt;a href='http://www.isi.edu/~hdaume/SVMseq/'&gt;SVMseq&lt;/a&gt;&lt;a href='http://cl.aist-nara.ac.jp/~taku-ku/software/TinySVM/'&gt;Tiny SVM&lt;/a&gt;&lt;a href='http://www.cs.cornell.edu/People/tj/svm_light/'&gt;SVM-Light&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Coding tan lines</title>
   <link href="http://danmayer.github.com/2006/05/21/Coding-tan-lines"/>
   <updated>2006-05-21T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/05/21/Coding-tan-lines</id>
   <content type="html">&lt;p&gt;This is funny, and probably far to true. &lt;img src='http://WWW.bandddesigns.com/blogger/arch/tanlines.jpg' alt='tanlines.jpg' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java skills wanted in the market</title>
   <link href="http://danmayer.github.com/2006/05/03/Java-skills-wanted-in-the-market"/>
   <updated>2006-05-03T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2006/05/03/Java-skills-wanted-in-the-market</id>
   <content type="html">&lt;p&gt;I have been looking around at what companies seem to want currently from a mi level Java programmer, it seems to be all over the map. I also have notice a big rise in the demand for C#/ASP programmers as well. So if your starting to hunt for a new Java developer position here is a list of things you might want to study up on a bit before going out on the job hunt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  [Java RMI](http://java.sun.com/j2se/1.4.2/docs/guide/rmi/javarmiproperties.html)[Java Swing Basics / tutorials](http://java.sun.com/docs/books/tutorial/uiswing/TOC.html)[EJB basics / tutorials](http://java.sun.com/developer/onlineTraining/EJBIntro/EJBIntro.html)[Some basic internationalization](http://java.sun.com/developer/technicalArticles/Intl/IntlIntro/)[Java Date formatting](http://home.tiscali.nl/~bmc88/java/sbook/016.html) or more [Date timezones](http://java.sun.com/j2se/1.5.0/docs/api/java/util/SimpleTimeZone.html)[Java Applet security](http://www.securingjava.com/chapter-two/)[Compressing serialized objects or other output files in Java](http://java.sun.com/developer/technicalArticles/Programming/compression/)&amp;lt;a href=&amp;quot;http://www.ccs.neu.edu/home/kenb/com3337/rmi_tut.html&amp;gt;more about Java RMI[Threading issues of Array List](http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html)[I know we all extend classes and work with interfaces, but they always ask questions about it at interviews](http://www.javacoffeebreak.com/java104/java104.html)There are also many [testing](http://www.webopedia.com/TERM/W/White_Box_Testing.html) positions [available](http://www.faqs.org/faqs/software-eng/testing-faq/section-13.html) which want experience with [JUnit](http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/junit/junit.html).&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So if your currently on a Java position and looking around a bit, here are some areas you should really brush up on a bit before starting your interview rounds.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ant options</title>
   <link href="http://danmayer.github.com/2006/01/30/Ant-options"/>
   <updated>2006-01-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/01/30/Ant-options</id>
   <content type="html">&lt;p&gt;if your running out of Java Heap space memory while running ant you probably just need to increase the memory size for ant when it is running to do this you set the enviroment variable ANT_OPTS. ANT_OPTS=-Xmx128M in windows you right click my computer go to properties, and then click advanced then set new enviroment variable name ANT_OPTS value -Xmx128M. If your running cygwin you must close current instances and reopen them to get the new settings to take effect, after opening up cygwin again try &amp;gt;echo $ANT_OPTS which should output your setting. If you still receive the error you can go higher with your memory. I have never had to go higher than 256.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Junit testing server states</title>
   <link href="http://danmayer.github.com/2006/01/19/Junit-testing-server-states"/>
   <updated>2006-01-19T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/01/19/Junit-testing-server-states</id>
   <content type="html">&lt;p&gt;Alot of Junit docs and faq tells you that have bad design if your trying to extend test suite so that there is only one setUp() and testDown() for a whole sweet of tests, but that just isnt true when your trying to tests proper order of state changes each transaction should change the state of the server dpending on its current state, if the server is started up new for each test your only testing the start up state&amp;#8230; my single unit tests have dependencies on previous tests that has cuased the server to be in its current state&amp;#8230; So no where gives good documentation on how to do this the faq is un usefully short showing how to extend testSuite but not how to use it&amp;#8230; so here is the best page for how to actually use it just ignore hte Turbine2 stuff: &lt;a href='http://wiki.apache.org/jakarta-turbine/Turbine2/FAQ'&gt;16. Q: How can I setup Turbine once for my JUnit Test cases?&lt;/a&gt; And remember that Junit executes your tests in order alphabetically and numerically after the intial keyword test. ie TestA will run before TestB so if you running tests in order for state make sure that you have your tests named appropriately to be sure they will run in the expected order. hope this helps someone running into problems running Juint with a single setUp across a suite of tests.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Apache2 integrating Tomcat 5.5 on windows</title>
   <link href="http://danmayer.github.com/2006/01/19/Apache2-integrating-Tomcat-55-on-windows"/>
   <updated>2006-01-19T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2006/01/19/Apache2-integrating-Tomcat-55-on-windows</id>
   <content type="html">&lt;p&gt;I have been trying to do this off and on for over a year and a half and every time i run into problems and I get pissed and quit. I have found hundreds of pages that all say different ways of how to solve the problem of integrating tomcat 5.5 with apache2. Non of them worked for me, but after combining tips from various install guides I can show you what finally worked for me. After wasting over all the time hours and hours&amp;#8230; here is all that I did small changes to the apache configure file and small ones to tomcats&amp;#8230; restart both of there servers and WHOOPIE it just works. Apache2 with Tomcat 5.5 on a windows server.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  httpdconf changes:    LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules/mod_proxy_http.so    &amp;lt;VirtualHost *:80&amp;gt;ServerName special.myname.comDocumentRoot &amp;quot;C:/Program Files/Apache Group/Apache2/htdocs&amp;quot;    &amp;lt;ifmodule mod_proxy.c&amp;gt;ProxyRequests OnProxyPass /cool http://66.***.***.**3:8082/your/webapp/rootdir/## these are comments on the dir#C:\Program Files\Apache\Tomcat 5.5\webapps\you\webapp\rootdir\# if anyone was confused to how that would map to windows tomcat stuff#ProxyPass /*.jsp http://66.***.***.**3:8082&amp;lt;/ifmodule&amp;gt;    tomcat&amp;#39;s server.xml:        &amp;lt;connector acceptcount=&amp;quot;100&amp;quot; disableuploadtimeout=&amp;quot;true&amp;quot; enablelookups=&amp;quot;false&amp;quot; connectiontimeout=&amp;quot;20000&amp;quot; port=&amp;quot;8082&amp;quot; maxsparethreads=&amp;quot;75&amp;quot; minsparethreads=&amp;quot;25&amp;quot; proxyport=&amp;quot;80&amp;quot; maxthreads=&amp;quot;150&amp;quot; /&amp;gt;

thats it... you might have to change some of your jsps for how they find local directories and get all the lookups for the local directories to match your mapping, but you got it... it should all work now. Congradulations... if that didnt work for you here are some sites I was looking at for help:

  [Apache proxy forwarding](http://www.drewnoakes.com/snippets/ConfiguringApacheToRedirectASingleHostToMultiplePorts/)    [Apache 2 tomcat 5.5](http://forum.sun.com/thread.jspa?threadID=22381&amp;amp;tstart=210)    best of luck post comments here and i can try to help you if they are problems i have run into before.&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>Broken MailEnable</title>
   <link href="http://danmayer.github.com/2005/12/20/Broken-MailEnable"/>
   <updated>2005-12-20T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/12/20/Broken-MailEnable</id>
   <content type="html">&lt;p&gt;Problem: Mail Enable Bad Mail folder became HUGE! Or MailEnable Bad Mail folder filled up! MailEnable was stuffing my hard drive with badmessages and outgoing that i didnt think it was allowed to send. Some spammers obviously found a way to attack my mail server and start making it work for them&amp;#8230; Anyways it filled an entire 80GB hard drive with bad emails&amp;#8230; The folders where so large that explorer would crash when trying to delete the files. So I search around and found this solution to emptying the folders. http://support.microsoft.com/default.aspx?scid=kb;en-us;555408 After you make sure it is working remove the /s from the end of the line you wont see that it is deleting one at a time, but the process goes about 10x faster because you aren&amp;#8217;t printing between each of the deletes. I also dissabled my entire mail server until i can figure out what the hell is going on and how to stop the spamming bastards that are trying to take over my server. windows server 2003 too many files to delete solved.Mail Enable can open config solved.Email Spam removed from system solved. The problem now is how slow it is going while deleting the files.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>No Fluff just Stuff</title>
   <link href="http://danmayer.github.com/2005/11/14/No-Fluff-just-Stuff"/>
   <updated>2005-11-14T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/11/14/No-Fluff-just-Stuff</id>
   <content type="html">&lt;p&gt;Well I am done with the Rocky Mountain Software Symposium (RMSS), No Fluff just Stuff. Which was excellent. I learned a ton I wish I could go to one of these ever 3 to 6 months&amp;#8230; Anyways I learned alot and have some great stuff that I can put into use on my projects at work. I also learned a ton of just really cool and interesting stuff. That will make me a better programmer all the time, as well as get me moving on new technologies faster than others. Anyways, it was really cool and interesting. Hopefully I will get to use and play with some of the code before i forget all of the cool stuff that i just learned&amp;#8230; check the new RSS feed reader that is on the front of wastedbrains to see something I coded up real quick&amp;#8230; I highly recommend the &lt;a href='http://www.nofluffjuststuff.com/'&gt;no fluff just stuff&lt;/a&gt; tour to everyone.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby on Rails</title>
   <link href="http://danmayer.github.com/2005/11/10/Ruby-on-Rails"/>
   <updated>2005-11-10T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/11/10/Ruby-on-Rails</id>
   <content type="html">&lt;p&gt;I have been learning the language ruby, and have begun playing around with ruby on rails. Which is a development framework for web based applications. I have been really impressed with ruby on rails so far, I was worried about how extendable it would be to less general problems, but it seems to be fairly extendable. Which is cool. I highly recommend giving it a shot and I think this was the best tutorial I have gone through while learning ruby. &lt;a href='http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html?page=1'&gt;Ruby on rails tutorial, building a cookbook&lt;/a&gt; I also recommend &lt;a href='http://www.pragmaticprogrammer.com/titles/rails/index.html'&gt;Agile web development with Rails, from the Pragmatic Programmers&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>CSS columns guides</title>
   <link href="http://danmayer.github.com/2005/09/08/CSS-columns-guides"/>
   <updated>2005-09-08T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/09/08/CSS-columns-guides</id>
   <content type="html">&lt;p&gt;I needed some good CSS layouts so i looked around tinkered a bit and got what i want, and I thought i should share some of the best resources i found. I would like to give thanks to everyone that has made their CSS and XHTML layouts available as it is a very cool thing to do and help out with other web developers. &lt;a href='http://www.manisheriar.com/holygrail/'&gt;Great threecolum css with header and footer&lt;/a&gt; &lt;a href='http://www.redmelon.net/tstme/3colfixed/'&gt;Center floating three column&lt;/a&gt; &lt;a href='http://www.alistapart.com/stories/flexiblelayouts/'&gt;a list apart&lt;/a&gt; &lt;a href='http://www.fu2k.org/alex/css/layouts/3Col_NN4_RWS_A.mhtml'&gt;liquid header&lt;/a&gt; &lt;a href='http://www.fu2k.org/alex/css/layouts/3Col_NN4_FFFF.mhtml'&gt;Ordered columns float model&lt;/a&gt; &lt;a href='http://webhost.bridgew.edu/etribou/layouts/skidoo/'&gt;Skidoo layouts&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Apache XML RPC Asych</title>
   <link href="http://danmayer.github.com/2005/08/08/Apache-XML-RPC-Asych"/>
   <updated>2005-08-08T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/08/08/Apache-XML-RPC-Asych</id>
   <content type="html">&lt;p&gt;Exception in thread &amp;#8220;Thread-0&amp;#8221; java.lang.NullPointerException at org.apache.xmlrpc.XmlRpcClient$XmlRpcClientAsyncThread.run(XmlRpcClient.java:271) If your getting any similar errors while trying to run executeAsync from the XmlRpcClient (org.apache.xmlrpc.XmlRpcClient) class. The problem is this &lt;a href='http://issues.apache.org/jira/browse/XMLRPC-62'&gt;bug&lt;/a&gt;, which has been fixed by apache, but hasn&amp;#8217;t made it into the binaries or the src releases because they havent been updated fro some time. To get the fix use the anonymous cvs, or apply this &lt;a href='http://issues.apache.org/jira/secure/attachment/12310763/executeAsync.patch'&gt;patch&lt;/a&gt; to your src. It took me a few hours to figure out the problem with this and fix it after finding the patch. So if you build the jars and use the xmlrpc-2.0-beta that is built as the jar you include in your project that should fix everything.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>java in cygwin</title>
   <link href="http://danmayer.github.com/2005/07/21/java-in-cygwin"/>
   <updated>2005-07-21T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/07/21/java-in-cygwin</id>
   <content type="html">&lt;p&gt;man I had some serious problems running java in cygwin with a shell script (sh script)&amp;#8230; So I am going to post my script to help you out&amp;#8230; there are a couple things of note first&amp;#8230; java a windows program expects windows paths your cygwin script proably uses unix paths. cygwin sh scripts treat &amp;#8217;;&amp;#8217; as a special character so when using multiple classpaths you must escape it &amp;#8216;\;&amp;#8217; to make it work as expected&amp;#8230; # test.shJAVAEXE=$JAVA_HOME/bin/java.execd ../IEP_HOME=C:\dev\dsmayer\sandbox\iepIEP_BIN=C:\dev\dsmayer\sandbox\iep\binIEP_LIB=C:\dev\dsmayer\sandbox\iep\libIEP_JAR=C:\dev\dsmayer\sandbox\iep\lib\iepio.jarIEP_IST=C:\dev\dsmayer\sandbox\iep\lib\istcustom.jarIEPB_JAR=C:\dev\dsmayer\sandbox\iep\lib\backport-util-concurrent.jarIEP_PROPS=C:\dev\dsmayer\sandbox\iep\properties echo java -cp $IEP_JAR\;$IEP_IST\;$IEPB_JAR RCS.example.RCSregechojava -cp $IEP_JAR\;$IEP_IST\;$IEPB_JAR RCS.example.RCSreg &amp;amp;java -cp $IEP_PROPS\;$IEP_JAR\;$IEPB_JAR\;$IEP_IST RCS.example.clients.ResourceClient &amp;amp;java -cp $IEP_PROPS\;$IEP_JAR\;$IEPB_JAR\;$IEP_IST RCS.example.clients.UserClient &amp;amp;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java Source Code Examples</title>
   <link href="http://danmayer.github.com/2005/06/28/Java-Source-Code-Examples"/>
   <updated>2005-06-28T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/06/28/Java-Source-Code-Examples</id>
   <content type="html">&lt;p&gt;A great collection of simple java source exmples. These are organized well and provide a wealth of information if your having problems doing something you know has been done before. &lt;a href='http://www.java2s.com/'&gt;http://www.java2s.com/ Java Source Examples&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Computer Science Research Papers</title>
   <link href="http://danmayer.github.com/2005/06/13/Computer-Science-Research-Papers"/>
   <updated>2005-06-13T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/06/13/Computer-Science-Research-Papers</id>
   <content type="html">&lt;p&gt;I have definately violated some of these and I think it would be good for people that are trying to do some serious analysis to follow these I do hate nothing more when marketing makes grapsh that essentially lie. Anyways if you have a computer science or any science for that matter paper, these are great rules to go by to remain creditable. &lt;a href='http://www.zedshaw.com/blog/philosophy/it_analysis_rubric.html'&gt;A Rubic for IT Analysis Papers&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Programming Links</title>
   <link href="http://danmayer.github.com/2005/06/02/Programming-Links"/>
   <updated>2005-06-02T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/06/02/Programming-Links</id>
   <content type="html">&lt;p&gt;Since I haven&amp;#8217;t been putting much interesting up here of my own code lately I figure I could point you to some things of note and interest: &lt;a href='http://www.broken-notebook.com/spell.php'&gt;Java Form SpellChecking&lt;/a&gt; This is a great tool to allow users of your site or webapp to have access to spell checking much like from MS word. &lt;a href='http://cocoongallery.sourceforge.net/'&gt;Java Image Galleries&lt;/a&gt; Ever wanted a great image gallery solution? &lt;a href='http://aoi.sourceforge.net/'&gt;Art of Illusion&lt;/a&gt; A cool 3d rendering studio entirely in Java. &lt;a href='http://java.sun.com/webservices/docs/1.3/tutorial/doc/'&gt;A good webservices and JAVA XML tutorial with lots of basic information&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Converting XML with XSLT</title>
   <link href="http://danmayer.github.com/2005/05/31/Converting-XML-with-XSLT"/>
   <updated>2005-05-31T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/05/31/Converting-XML-with-XSLT</id>
   <content type="html">&lt;p&gt;Problem: Converting XML to Excel I had to convert some XML to sort and display as we wished in excel. After reading a bunch of articles about XML-FO and other stuff about cacoon and other Java solutions I decided to go with just using a fairly simple XSLT stylesheet and convert the XML to HTML tables with the excel extension. This is even the &lt;a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexcl2k2/html/odc_xlflatnr.asp'&gt;recommended solution by microsoft&lt;/a&gt; (Which is probably because excel has a bloated and often changing format.) So converting this way leads to a well and easy and nice looking excel file and has the benifeit that anyone without excel can also view the file in a standard web browser. The microsoft tutorial on &lt;a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexcl2k2/html/odc_xlflatnr.asp'&gt;converting XML with XSTL&lt;/a&gt; is very good. If you have any problems or need more advanced XSTL this is also another very usefull &lt;a href='http://www.zvon.org/xxl/XSLTutorial/Books/Output/example1_ch1.html'&gt;set of XSTL examples&lt;/a&gt;. The basic idea is to make the stylesheet so that it can sort and create a easy to view html table. Then you can either let excel open the XML which can find the stylesheet and apply it for the user, or you can use a program to do the conversion for your user and output excel or html files. I needed to generate the files for my users so I went with Xalan from the apache foundation. Xalan is a XSL stylesheet processors in Java &amp;amp; C++ The example is simple to modify for whatever you need. I used the example file SimpleTransform, which can be found in the installation directory at &lt;install&gt;\xalan-j_2_6_0\samples\SimpleTransform    The result is simple and easy, below I will include my XSLT file to show how easy it is toe create simple large tables from a nice little XSLT file.    I couldnt include it as text cause it tried to render it so here is a link to it...[Download file](http://WWW.bandddesigns.com/ml/arch/trans.xsl)&lt;/install&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java string to inputstream</title>
   <link href="http://danmayer.github.com/2005/04/06/Java-string-to-inputstream"/>
   <updated>2005-04-06T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/04/06/Java-string-to-inputstream</id>
   <content type="html">&lt;p&gt;If you need to make a string into an input stream it is really easy. Many people say you shouldnt convert a string into an input stream and that it is bad code design though. Since I was using someone elses library that only took input streams and all of my input was created as strings i really had no choice but to do the conversion (which is wastefull of memory cause you essentially have exact copies of the same data). Making a string into an inputstream can be done like this: ByteArrayInputStream bs = new ByteArrayInputStream(site.getBytes()); If you have any problems leave a comment.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>CVS stuff</title>
   <link href="http://danmayer.github.com/2005/04/05/CVS-stuff"/>
   <updated>2005-04-05T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2005/04/05/CVS-stuff</id>
   <content type="html">&lt;p&gt;I always am forgettting this and that about CVS and this is just a really good resource on all the CVS stuff you would need to know when working with a regular CVS repository. &lt;a href='http://cvsbook.red-bean.com/cvsbook.html#Invoking%20CVS'&gt;Command Line CVS&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>java code tar</title>
   <link href="http://danmayer.github.com/2005/03/30/java-code-tar"/>
   <updated>2005-03-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/03/30/java-code-tar</id>
   <content type="html">&lt;p&gt;I have released a development version of java tar with added support for various GNU tar features like multi file, verification, and breaking the 8GB barrier. It is pretty nice so if your into learning some java code or working with tar there is alot of good info here and well documentated source code. &lt;a href='http://www.bandddesigns.com/ml/arch/002132.html'&gt;Java Tar upgrades&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java Tar and problems</title>
   <link href="http://danmayer.github.com/2005/03/30/Java-Tar-and-problems"/>
   <updated>2005-03-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/03/30/Java-Tar-and-problems</id>
   <content type="html">&lt;p&gt;I have been working on adding a bunch of GNU tar features to java tar. I will release the source soon, but I just wanted to comment on the lack of good documentation on the format that makes it very hard to work with the GNU tar format&amp;#8230; Simple things like regular tar takes char 32 as a null and ignored character&amp;#8230; and so does GNUtar for the regular tar fields but in the offset field needed for multi volume tars 32 crashes the program giving you header errors. It only accepts char 48 as a null which in the other size field it accepts either 32 or 48&amp;#8230; things like this are commented no where and i only discoved by writting and editing the GNU tar source. Which is also far under documentated in the code and very hard to follow. GNU Tar size field: If your working with GNU tar the size field is just like the standard tar field in ustar&amp;#8230; except which is no where to be found in their documentation when you support unlimited size files. If you have a file larger than 8GB to support it you must write the number as bits in twos compliment notation. Also after doing the you have to flip the sign bit (the very most left 0) to a 1. Which would normally mean you have a negative number and now if you decode this as a twos compliment you end up with a huge negative number&amp;#8230; but not encoded it normally as a positive number and flip that bit. I only figured this out after manually reading and decoding gnu tar and stanttard ustar headers for a long time. The is nothing that talks about how the support for unlimited files was added to gnu tar&amp;#8230; well hopefully if you are having the same problem you found this page. So upgrading GNU tar or other programs to support GNU tar should be easier. I have added support for these gnu features to javatar:Multi volumeverificationunlimited filesizefast single file extractionTar Table of contents (xml of the files and there offsets with in the tar) If your interested in this or have any questions about GNU tar or JAva tar feel free to send me an email and ask.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java Tar</title>
   <link href="http://danmayer.github.com/2005/03/30/Java-Tar"/>
   <updated>2005-03-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/03/30/Java-Tar</id>
   <content type="html">&lt;p&gt;Java Tar source. This might not be the final draft, but it is getting pretty close. Most features seem to be working well and the source is very well documentated. So if you want or need the new GNU features you can get them from java tar here. The main java tar build hasnt incoporated these yet but all of the modifications have been sent off to them, so hopefully they will incorporate them soon. &lt;a href='http://www.trustice.com/java/tar/'&gt;Java Tar homepage&lt;/a&gt; Until then feel free to download the java tar source from me. You can edit and modify as much as the orginal liscense allows, which says it is public domain use it as you wish. I would like to give a big thanks to Timothy Gerard Endres, who is the orginal author of Java Tar. If you have any questions comments or problems let me know. &lt;a href='http://WWW.bandddesigns.com/ml/arch/javatar-2.5.zip'&gt;Download Java Tar&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java copy file code</title>
   <link href="http://danmayer.github.com/2005/03/10/Java-copy-file-code"/>
   <updated>2005-03-10T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/03/10/Java-copy-file-code</id>
   <content type="html">&lt;p&gt;just cause i didnt find code on this fast enough here is code to copy a file using java. It reads the file in while writting it out using buffered readers and writters:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;   public static void copy(String from, String to) throws IOException{   InputStream in = null;    OutputStream out = null;    try {        in = new FileInputStream(from);        out = new FileOutputStream(to);        int length = 128*10240; // danger!        byte[] bytes = new byte[length];        int read=0;        for(;;){        read=in.read(bytes,0,length);        if(read==-1){            break;        }        out.write(bytes,0,read);        }        } finally {            if (in != null) {                in.close();            }            if (out != null) {                out.close();            }        }    }&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>my neglected blog</title>
   <link href="http://danmayer.github.com/2005/02/28/my-neglected-blog"/>
   <updated>2005-02-28T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/02/28/my-neglected-blog</id>
   <content type="html">&lt;p&gt;alright here is a post to my neglected blog. It always falls behind&amp;#8230; Anyways i have been doing a ton of programming, but sadly none of it is very interesting or new right now. Alot of the stuff I am doing I have done before, but I am trying to build up a system which I can use to explore some new ideas and I need a nice simple toolset built up before doing anything else all the interesting. So it might be awhile, before I have any really interesting things to post on here, but i will try and we will see when I get a chance to get back to my AI interests.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>GNU tar errors on windows</title>
   <link href="http://danmayer.github.com/2005/02/08/GNU-tar-errors-on-windows"/>
   <updated>2005-02-08T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/02/08/GNU-tar-errors-on-windows</id>
   <content type="html">&lt;p&gt;I ran into a very odd error while running GNU tar on windows XP under dos or the cmd.exe (dos emulator). The error must be incredibly rare since i only found one other post with similiar problems. I will first explain the error and then how it was fixed or resolved. here is the one link that I found with the similiar GNU windows tar error &lt;a href='http://tolstoy.newcastle.edu.au/R/help/98b/0492.htm'&gt;tar error&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  my error:C:\dev\dsmayer\sandbox\exe&amp;gt;tar cvf tester.tar newstar: Cannot add file news: No such file or directory (ENOENT)tar: Error exit delayed from previous errors&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;news was a standard directory. the error we found was occuring because we were in the &lt;code&gt;C:\dev\*.*&lt;/code&gt; directory apparently dev and aux (as the other user was having that error) are some sort of key words that screw up the program, I dont know why. I do know that moving tar.ext and my directory to a folder &lt;code&gt;c:\temp&lt;/code&gt; or any other &lt;code&gt;c:\*.*.\dsmayer\sandbox\exe&lt;/code&gt; and it would work. So if your having any erros similiar with GNU tar I suggest changing directories and seeing if that fixes your problems. Taring under cygwin in this directory worked fine it was only a problem when taring in dos. Good luck post any questions, comments, or other issues relating to GNU tar on windows here.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Jakarta org.apache.commons.fileupload</title>
   <link href="http://danmayer.github.com/2005/02/07/Jakarta-orgapachecommonsfileupload"/>
   <updated>2005-02-07T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2005/02/07/Jakarta-orgapachecommonsfileupload</id>
   <content type="html">&lt;p&gt;Using this package caused a little more problems than one would have believed, but it was by far still the best option out there. I found some other beens, but they only would successfully upload Ascii files and were not writen properly to write out image files or other binary data. After having a problem with a few other packages I went to use Jakarta&amp;#8217;s java fileupload and after figuring out multiple issues and reading alot of documentation I got all of it working as I wanted. I thought I should share th links I ended up using that were usefull and helped me get everything working.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.theserverside.com/articles/article.tss?l=HttpClient_FileUpload'&gt;File upload wrapper&lt;/a&gt; take a look at ProcessFileUpload.jsp&lt;/p&gt;
&lt;a href='http://jakarta.apache.org/commons/fileupload/using.html'&gt;Jakarta's how to use the fileupload package&lt;/a&gt;
&lt;p&gt;If you have any problems let me know and I can probably help you out.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Again Sorry</title>
   <link href="http://danmayer.github.com/2004/11/03/Again-Sorry"/>
   <updated>2004-11-03T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/11/03/Again-Sorry</id>
   <content type="html">&lt;p&gt;Again I am truly sorry that i haven&amp;#8217;t been posting anything here. School, My job hunt, and other things have b een taking my time. I have written quite a bit of code and hopefully will post it all soon. I have alot of little pocket pc applications and I also have done decision trees, neural networks, and probabilistic agents. I might have a pretty cool final project for my AI course to post but that will really depend on what I have time to end up doing for a project.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>sorry busy</title>
   <link href="http://danmayer.github.com/2004/10/12/sorry-busy"/>
   <updated>2004-10-12T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/10/12/sorry-busy</id>
   <content type="html">&lt;p&gt;Sorry there has been no updates and no new code posted for awhile. In fact comments were broken for the last couple months. Well I have fixed the comments and will slowly be getting back into some of the coding stuff. I have been busy with my job hunt, which seems to be going pretty well, but I dont want to jinx it. I have been doing some interesting stuff in my AI course and learning alot, we have been working with Agents and Probablistic Inference&amp;#8230; We are now doing Utility funtions and feedback learning systems, which is pretty cool. I wish i knew more about knowlege representation. Since coding up the problems takes me so long in part because i dont know how to represent all of the data for the problems. Oh well all is going well and I am learning, and I guess that is what that matters. The concepts I get and the coding I can figure out with time.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Intelligent Agents</title>
   <link href="http://danmayer.github.com/2004/09/09/Intelligent-Agents"/>
   <updated>2004-09-09T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/09/09/Intelligent-Agents</id>
   <content type="html">&lt;p&gt;Well I had to write a little one page paper for AI class about agents so here it is incase anyone else is ever thinking about a simple little agent that plays a wierd cave game called Wumpus world. Also, I guess some of the Ideas are a little interesting. The code to run and test everything is provided in my extended entry if you want it. (The code isn&amp;#8217;t the prettiest or well commented seeing as I had other work to do and had to finish the entire assignement in less than two days, but it works and the smart agent does do better thant he simple one.)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Agents&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I created the two agents, the dumb agent that was mostly random and the more intelligent agent. The dumb agent got an avg of -450 which was close to the naive agent the professor had coded up, which averaged -390. So everything with my world and agent seemed pretty close. I then began work on the intelligent agent. I found it significantly harder than expected to add features that improved performance. Many times adding rules that I thought would help improve the agents performance and these rules would actually result in far lower scores. After trying a few pretty simple ideas I developed what my final agent became. My final agent had an average score of -60 which wasn&amp;#8217;t great, but still significantly better than the dumb agent. I added one extra constraint to the game for fun, since I am a vegetarian I decided that I would never kill the Wumpus. So my algorithm would simple avoided the Wumpus in attempts to navigate to the gold. This lead to more impossible maps and therefor a lower overall score. It will still be interesting to see how my animal friendly agent performed in comparison to others.My more intelligent agent worked on the right hand on the maze wall idea. I would go forward until i found a area that could present a problem. A problem being either a stench or a breeze, if this problem was found i would turn around and walk the other direction and then try a different route, with my right hand facing the problem. This worked well at avoiding pits since I also had a higher percent of the time the choice of moving forward, and always would move forward if there was no chance of danger. This quickly lead to the problem of certain pits providing an infinite loop. Lowering my score by getting in a safe, but useless route. To fix this if I encountered the same pit problem multiple times i would then just walk threw the sensed breeze in hopes that the pit was not the direction I was going. This could have been improved by first trying alternate routes around the pit, but could have then left the problem of many different infinite loops.The improvement of the agent was significant and noticeable, but also illustrated the difficulties of simple relying on a simple set of rules. I think a more effective route would have been to have the agent slowly walk along any known safe route while mapping problem areas to his known portion of the map and only after exhausting all safe possibilities (and trying to create safe possibilities by killing the Wumpus) picking at random a unsafe point of passage that would lead to the most possible options for a next move.&lt;/p&gt;
&lt;script src='https://gist.github.com/2014472.js?file=wumpus.java' /&gt;</content>
 </entry>
 
 <entry>
   <title>fighting back</title>
   <link href="http://danmayer.github.com/2004/08/08/fighting-back"/>
   <updated>2004-08-08T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/08/08/fighting-back</id>
   <content type="html">&lt;p&gt;Well lately all the spam on my various websites had been getting out of control. They have machines that go to blogs and post comments with links to ads for words to raise their rating at google. It sucks it has been annoying me and the others that i host for. So i coded up a little thing i am hoping will help. We will see if it actually does. The good news is that i learned where code resides for the comments and i can add in more code and such if i need to to start blocking all the spammers. Fun huh. In the next couple days we will see if it works. It is a good use of learning time since today i was reading learning perl and working on perl programming and the entire blogging system was written in perl. Yeaaa I am learn a language that people told me to learn better before applying to google. if you have any problems leaving comments anywhere tell me with email&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>cleaning and moving</title>
   <link href="http://danmayer.github.com/2004/07/19/cleaning-and-moving"/>
   <updated>2004-07-19T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/07/19/cleaning-and-moving</id>
   <content type="html">&lt;p&gt;Today I am collecting all of the source and all of the data from News Shaker. I am preparing to move everything to a new machine that is on a live connection that everyone from the outside can get to. I will then continue to add the rest of the features mentioned below. The last week has been used to add these features, while making little to no process on improving the results of the learning. I am going to talk with a few people about how to improve the learning before working with that part of the project to much more. Overall most of the code seems quite stable enough but alot needs to be done on the user interface to make it useable by normal people that aren&amp;#8217;t accustom to odd design and testing set ups. It must be cleaned up before it could ever really be used.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Feature requests</title>
   <link href="http://danmayer.github.com/2004/07/06/Feature-requests"/>
   <updated>2004-07-06T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/07/06/Feature-requests</id>
   <content type="html">&lt;p&gt;I need to add the following features into news shaker to make it more usefull: Done (has an X if finished): X * Delete category and all related sites X * Delete category place all remaining sites in another category X * Ability to have one category be a sub category of another * 2 level categorization (related to the sub category idea above) X * Automated &amp;#8220;real world&amp;#8221; testing with accuracy for all categories after a new model build. Should consist of 20 unseen and unmodeled sites that are hand categorized and then have them categorized. X * A way to save the results from the real world testing in the database and display them. * A way to post articles that aren&amp;#8217;t links but are actually html files into the system. (This also allows visitors to view this file.) X * ability for people to vote for a file that is in the wrong category to be recategorized X * Increased categorization speed * Start a test from a new UID and then track where all the results go and view each result individually. * Making sure that two of the same sites are never added to the database * Checking and updating sites and getting rid of no longer existant ones. X * Ability for users to report errors and admins to view them and delete X * Ability for users to request categories and admins to view them and delete X * Ability for administrator to recategorize based on users votes to recategorizeOn another note i have increased accuracy on testing to the 94% overall accuracy on known documents and i am getting and average of 25% for unknown documents, which isn&amp;#8217;t horrible but i would like to do much better. I have now began to study and look into a transductive approach that i might begin to use, depending on the results of the next bits of testing.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>News Shaker</title>
   <link href="http://danmayer.github.com/2004/06/29/News-Shaker"/>
   <updated>2004-06-29T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/06/29/News-Shaker</id>
   <content type="html">&lt;p&gt;The last couple of weeks i have done alot of work on news shaker. I have done lots of testing. I all of the categories (about 12) to an approximated error average of 88%. For 12 categories this is really good. First i began by adding more and more data to the categories and rebuilding the models. This initially was increasing the percents but it ceased to help after all of the categories had about 90 documents in them. I then began to play with the weight of the positive terms. This was highly successful after increasing the weighting on all of the positive training vectors I could successfully take all of the training data and recategorize it with 88% accuracy with the remaining documents not wrongly categorized but declared to be of an unknown category. I then started real world testing giving all of my category unseen documents that were hand categorized. The results for the few real world tests i have done so far have been fairly poor, showing only 15-20% accuracy. I am not sure why that varying how the model is made dramatically increases percent of categorization of known documents but seems to have no effect on unseen documents. This currently is the problem i am working on. It is possitive to get known values accuracy for my models to range from 85% to 93%. After a little more real world testing and some other discussion i might be able to come to a conclusion as to what is going on between known and unknown examples.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>New NewsShaker Feature</title>
   <link href="http://danmayer.github.com/2004/06/18/New-NewsShaker-Feature"/>
   <updated>2004-06-18T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/06/18/New-NewsShaker-Feature</id>
   <content type="html">&lt;p&gt;After waiting weeks of meaning to add this feature I finally did it. It actually took me less than an hour when I thought i was going to have to write all sorts of new code and that everthing would somehow end up being far more complex than I wanted it to be. Simple feature added, now instead of telling the system to crawl an entire site, you can tell the system to add a single page to the database. This makes it easier when finding an article, that links to entirely useless data, but should be added. So I am glad i finally took the time to add this simple feature. It was also good to see that I still remember alot more of the code structure on the spidering system than i would have thought I remembered. Starting next week I am going to finish making the system entirely automated. I should be able to finish that in a couple days. Then I am going to make the system very general so it doesn&amp;#8217;t have to remain so specific to special education and then the same code base for newsshaker would be adoptable to other systems such as the HAMCOD project (which is a horrible name, but since I am more interested in just working on the idea for now I am not going to spend any time working on a name until success full. Man I could make some amazing progress on the system if i could get about 3 people coding on these machine learning systems. Oh well it is good to be back and making some progress again.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Initial Description of HAMCOD</title>
   <link href="http://danmayer.github.com/2004/06/17/Initial-Description-of-HAMCOD"/>
   <updated>2004-06-17T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/06/17/Initial-Description-of-HAMCOD</id>
   <content type="html">&lt;p&gt;This is a description of a idea that may be the next phase of my project as I continue my work with text categorization. It right now is just a initial idea and outline of an idea so that I have some thought to begin working with when I get to the next point. HAMCODHuman Assisted Machine Categorized Open Directory A collaborative human assisted machine categorized directory. That will extend the functionality of the ODP (http:www.dmoz.com) project. This project will combine a already large and extensive base of human knowledge, with text categorization and social collaboration techniques to increase the amount of well categorized and defined websites, without the need of such high levels of human interaction that are required for DMOZ. This projects goal is to eventually use machine learning techniques to replace the slow and time consuming process of human categorization. This will have humans interact with the machine learning process as it contributes to and works with the categorized directory. This will have humans say when something is miss categorized and they will be able to recommend new re-categorizations. Or recommend deletion from the directory. The spider would crawl for new pages that aren&amp;#8217;t listed in the category, if a new page is discover by the spider, the system will attempt to categorize it to the lowest level of a category that it can. So if there is a main category like &amp;#8220;shoes&amp;#8221; it might have a hierarchy like this: 1.______Shoes____________________Car______________________Cheese2._________|________________________|_________________________|3.Nike___Reebok__Vans________Ford____Toyota_________American____Cheddar The system would first do categorization on the level of is this page about shoes. If it is determined to be about shoes it would them use different models knowing that it is a shoe to try to determine what shoe company the page is about. In its early stages it will only work through the Computers category of the DMOZ project. Which is already contains 149,512 websites. To first determine if a site belongs in the computers category, I will need to get about 400,000 websites at random from other parts of the DMOZ directory. Alternatively, I could assume that if I can&amp;#8217;t find an appropriate sub category in computers that the site doesn&amp;#8217;t belong in the computers category at all. Initially I will design the system with no log in or registration required. Since use will be practically non existent. Once use begins I will require an email address and to have that email address to be confirmed. This will make it rather hard for companies or individuals to artificially increase their rankings with in the directory. With in each category the sites will need some sort of ranking system initially I won&amp;#8217;t worry about ranking the sites. I will just assume that as you get specific enough there will only be a small number of sites in each category. (This seems to be true for DMOZ)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Done testing and work on SVMMail</title>
   <link href="http://danmayer.github.com/2004/06/16/Done-testing-and-work-on-SVMMail"/>
   <updated>2004-06-16T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/06/16/Done-testing-and-work-on-SVMMail</id>
   <content type="html">&lt;p&gt;After going through a little less than 3000 emails. I have finished testing nad doing any work on SVMMail. It still is sitting at a 97.5% accuracy. I am sure this could be increased, but I need to move all of my focus back to my primary project, News Shaker. On the News Shaker front. I have added about 350 new manually categorized sites across the database. I am going to rebuild all of the models and see if the increased training data brings my percents up to a more reasonable level. Then once I have a little better percent accuracy I will begin all of the auto categorization code and just start to let the system go crazy and see how many sites it can categorize correctly when left to its own devices. Should be an interesting time next week. That is if the machine boots up. Someone was working on my system and now it freezes on boot up. I am sure all my data is still there and I have a fairly recent back up but hopefully this can be sorted out before the begining of next week. I also have began reading Managing Gigabytes which is about compressing and indexing documents and images. I also ordered a new book about machine learning and artifical intellegence that i will begin reading soon. Perhaps they will provide me with some new ideas on how to improve my system.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVMMail testing update</title>
   <link href="http://danmayer.github.com/2004/05/24/SVMMail-testing-update"/>
   <updated>2004-05-24T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/24/SVMMail-testing-update</id>
   <content type="html">&lt;p&gt;I have now gone through about 800 emails with my SVM / SMO mail filter. I am still getting about 97.5% accuracy. I have blocked over 700 spams from my mail account. I am taking off (to europe) and I am sure my mail will fill up with about 600 emails while I am gone so I will have a much larger test results when I return. Good luck to anyone else out there working with or thinking about SVMs / SMOs for spam filters. It looks like it is a winning combination. I hope my various code and articles can help you on your way. peace,Dan Mayer&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVM Mail feature vector</title>
   <link href="http://danmayer.github.com/2004/05/20/SVM-Mail-feature-vector"/>
   <updated>2004-05-20T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/20/SVM-Mail-feature-vector</id>
   <content type="html">&lt;p&gt;I have gotten a few emails and questions from others researchers in the community and I decided that I would begin to answer questions on my site rather than through email so any others could also benefit from the answer. So here is the first response I am posting on the web. Feel free to contact me if you have any other questions and I can try to respond. I found your project while googling for various alternatives to spamfiltering; I&amp;#8217;ve been thinking about trying SVM for mail filtering myself,but I&amp;#8217;m slightly at loss as to what features to use. A bag-of-words model comes naturally to mind, but it is not the mostefficient computationally; are you perhaps using it or something similar?First the text content is run through a common words stop list. This removes all very common and useless words when it comes to categorization. Removing words such as �the�, �is�, �that�, and so on. Then the text is converted to the SVM format of feature vectors. The feature vectors are created using a relative frequency to the total word space. &lt;b&gt;Feature # : frequency in document / frequency in word space&lt;/b&gt; So let�s say you have 3 documents in your space. All of the words in all of the documents would end up in your word space with a value of the total occurrences in all of the documents. Then a ratio for each document with the same word would be used for that feature. Each feature represents one word in the document. Lets do a tiny example: &lt;b&gt;Documents&lt;/b&gt;1: �There is a little cat�2: �Where is the little cat�3:�There is a little dog, very little� &lt;b&gt;Space&lt;/b&gt;There:2Where:1Is:2A:2Very:1The:1Little:4Cat:2Dog:1 So each of the words would be assigned a feature number in order of appearance, for instance �There� would be 1 and �Is� would be 2. Then to make the vector you would take each document and calculate the frequency ratio. For example we will do this for the 3rd document. There(1) : � Is : � a : � Little: 2/4 Dog : 1/1 Very : 1/1 Replacing the words with their feature numbers and the fractions with values would result in the final document vector based on frequency. 1:.5 2:.5 3:.5 4:.5 5:1 6:1 You mentioned bag of words which is another way you can create vectors to represent the text. I thought about this method and decided that the frequency would provide a better representation of each document. Neither way is that computationally affective I guess. You can leave out all features with 0 since they will be ignored in SVM anyways. I also leave out all ratios that result in less than 0.000001 because I figure that means the feature is really worthless in comparison to the space. What makes this fairly efficient is that the dictionary with the word counts is saved. So while building the model is time consuming getting new text and making comparisons is really pretty fast. Then you don�t have to rebuild the model each time you place something in a category you can only rebuild as needed or on a set time like once a week. If you would like to see all of the libraries and math that I created to create these vectors download the source code to Text2SVM which I use to do these conversions. This also allows you to save a dictionary since each word must relate to the same feature value in the model and with any future files you plan to test against the model. This allows you to create new vectors that will match up with your old model.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVMMail vs Apple Mail</title>
   <link href="http://danmayer.github.com/2004/05/19/SVMMail-vs-Apple-Mail"/>
   <updated>2004-05-19T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/19/SVMMail-vs-Apple-Mail</id>
   <content type="html">&lt;p&gt;Well it looks like my SVM mail is very similar to apple&amp;#8217;s Mail. Apples mail also uses a vector representation and training to achieve 98%+ accuracy (the claim). After reading through this, it makes sense why my filter is achieving such good accuracy. They are using a little more complicated vector analysis tool than I. I use SVMlight, while Apple is using LSA (Latentic Semantic Analysis), which i used to work with but I found the tools far less developed and harder to work with. It was causing me all sorts of problems to tell LSA to do the simple clustering I was doing very simple with SVMlight. The main reason it looks like they are using LSA is they first reduce the space vector and then using LSA on the reduced vector they are claiming a major performance increase. This is really believable, especially since LSA offers quick tools for folding new information into a model instead of recreating it. Anyways, I am happy to learn that the approach I took with my mail filter appears to be very similar to one of the best computer companies out there. It gives me even more reason to believe that I am on the right trail with all of my various Vector based learning algorithms. &lt;a href='http://www.macdevcenter.com/pub/a/mac/2004/05/18/spam_pt2.html'&gt;Explaining the Apple Mail Filter&lt;/a&gt; P.S. This means that my filter that has barely been developed and has many enhancements possible is achieving about .5% less than apples filter!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>News Shaker Update</title>
   <link href="http://danmayer.github.com/2004/05/18/News-Shaker-Update"/>
   <updated>2004-05-18T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/18/News-Shaker-Update</id>
   <content type="html">&lt;p&gt;After doing some initial work with the 8 category problem, I have run into some problems. Nothing that can�t be solved but just some initial hiccups as expected. The very first run through I was getting approximately 30% accuracy on my categorizations. Better than random guessing but still pretty worthless. After changing to a different layout of the model, I am now getting around 43%. Which 43% (on average of the 8 models some are higher) also sucks. I now have about 5 different ideas after talking with a professor at CU at how to improve my overall percents. I am trying to get over 75% accuracy once I have about that level (which isn�t that high) I am hoping with some user feedback on the site that the model will train and improve itself. Which would be really cool, and possible since pretty much the whole process is automated now. I first was taking all of the categories and creating a positive and a negative vector. The positive was all of the categorized data in the model. The negative was all of the other data in all the other categories. This wasn�t doing so well, so I removed the general category from the negative vector. I also removed the uncategorized data from the negative vector since it is possible these could fit in the category. Doing this increased my model accuracy from the 30% to the 43%. I am now considering other things I could do to improve the accuracy. One of the things I am considering is a two level model. The first would only say if the model relates to special education the second level would then categorize within the special education category. This would allow me to quickly dump anything I know isn�t related to special education at all. It would also allow me on the final site to have users help with the categorization process. Anything that couldn�t be categorized better than just special education related could be placed in a general category. The general category users could view and then place in the proper category which would in turn help train the system. I am also now considering a move from SVMlight to libSVM. Apparently libSVM offers some better options and optimizations, but still uses the same input format. This is important because text2SVM, took awhile and was written with SVMlight in mind. I have done some other optimizations on text2SVM which isn�t included in the released source because the project has begun to become less general and more specific to my project. It has improved and become far faster though. If I move to libSVM this would allow me to get results of a categorization attempt as a percent. If I had percents I could compare the results to different models better which would be useful since the value comparison between models isn�t scaled the same. One of the problems I am running into is testing time. It takes about 2 1/2 hours or so to create and run a new test. It requires a few different steps. If I run them all at once my machine runs out of memory and crashes. So I have to run the steps one at time even though the code is completely automated, it can�t run as such without time to dump the memory. Perhaps I will have to start looking around CU for a gigantic machine that I can use to do testing much faster. The spam filter has gone through over 500 emails now and has an accuracy of 97.5% on unseen new email. This is great, if it wasn�t so specialized to my mail I would make the filter available to everyone. That�s it for now. The good news is I think I am still headed in the right direction and I think I will end up with a capable system. The bad news is that I think it is going to be harder and more time consuming than originally planned. I will be busy with some other stuff and out of town over the next 3 weeks so there will probably be little updated information available on the project.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVM Mail testing</title>
   <link href="http://danmayer.github.com/2004/05/11/SVM-Mail-testing"/>
   <updated>2004-05-11T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/11/SVM-Mail-testing</id>
   <content type="html">&lt;p&gt;Today I got a chance to let SVM mail sort 252 messages that it has never seen before. The messages were moved sucessfully fromt he inbox to either my real folder, or my spam folder. Out of the 252 messages the system incorrectly categorized 8 emails. Three of the 8 were actually the same message sent out from the frienster network. I have added those messages to real training model. This means on the first really good real world test my filter achieved an 96.8% accuracy. This comparess well to the 98% estimated acuuracy of the model, by categorizing the training data 98% correctly. The system has been through about 400 emails, and my accuracy is now at 97.25 %. I have only retrained the model once including little bits of the new info I have collected. I places all of the incorrectly identified emails in the proper categories and retrained the system. Then just to see if that would make it correctly identify those emails I recategoried them, it cut the misclassifications in half, but some where still missclassified. It seems that forwarded messages with attachments are what it will missclassify still. Other emails seem good. I am currently not working on or extending this project because it was just a testing project for some of my code, which I am now focusing back on my News Shaker project, which is using SVM classification to create a google news like site.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVMMail</title>
   <link href="http://danmayer.github.com/2004/05/07/SVMMail"/>
   <updated>2004-05-07T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/05/07/SVMMail</id>
   <content type="html">&lt;p&gt;I reached a great milestone with SVMMail today. I will be doing more test and releasing more information next week. The initial results are a 97% accuracy on the filter. Also with real world testing (so far a low number of 65 mails), there was only 2 errors (1 false positive) in prediction. I had training data of 550 real emails and 713 spam emails (all of which i collected in the 3 weeks or so that I ahve been working on this project.) I am really excited that I have past the stumbling blocks that I was on the last 3 days where I was actually getting a 0% accuracy because a bug the was generating a pretty much random model. There is currently no web interface and it is all just run directly from java (jbuilder in my case). I will add features like that and the ability to track how many of each type of error my system makes later. This is a great I am really happy with how this is working out.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>SVM Spam Filtering</title>
   <link href="http://danmayer.github.com/2004/04/18/SVM-Spam-Filtering"/>
   <updated>2004-04-18T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/04/18/SVM-Spam-Filtering</id>
   <content type="html">&lt;p&gt;Support Vector Machine (SVM) Spam filtering. After working more with SVM and my software to utilize it moving along nicely, I am begining to do work on a spam filter for my email. I have been getting a much larger amount of email in the last couple months. The spam is highly recognizable and simple to see patterns in, 90% of it is related to buying prescription drugs. I figured that SVM should be able to detected this very easily. Since i have already written, a few java email applications, I thought it would be easy enough to write a program that will let me log on and list things as spam and then use that to train and SVM model, which takes far less training data than many other machine learning methods. For now i have done a very simplistic design, the first step will, be building a simple webmail system, it will really only be used to mark as spam, and check the spam folder to make sure there was no false positives. Then I will use my normal mail system to read and respond to the mail. When i first log into my simple webmail all new mail will be download and categorized. I will then be able to submit any missed items as spam. Anything newly categorized as spam or not will be places in either the spam, or real mail section of the database. The database will store who the mail was from, the subject, and the body of the message. I have now created two folders in my mail system. old and spam. I have moved all my old real mail to the old folder and all spam to the spam folder. I have about 300 spam messages and about 520 real messages. I have finished hte code for the mail checking and sorting using java. I now imported my Text2SVM software and used the to create the orginal model file. Now similiarly to my NewShaker software all that is left to do is have autocategorization. For spam this should be a little simpler since there are only two classification levels. This should let me learn the process that I will need to use for Newsshaker, but at a little simpler level. I created a model using 170 of real mail, vs spam. With it I was getting an 80% recognition on my test data, I think with some simple fixes in the way I am creating my text from my mail, stop listing, and stemming I should be able to increase this rate. I should also be able to increase the rate once I add more training data. (This was created as a sub project to create and test code that will be used for newsshaker) &lt;br /&gt;Here is my initial design.&lt;br /&gt;&lt;br /&gt;&lt;a href='./gif_1.gif'&gt;&lt;img src='./gif_1-thumb.gif' alt='gif_1.gif' /&gt;&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Programming progress</title>
   <link href="http://danmayer.github.com/2004/04/13/Programming-progress"/>
   <updated>2004-04-13T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/04/13/Programming-progress</id>
   <content type="html">&lt;p&gt;Today I accomplished alot on many different programming projects. 3 to be correct. Anyways, I got my comp org program almost done which is nice. I made some really good progress on my text categorization project for work. Then finally for my 3d graphics class i made some good progress on my very simple 3d shooter.&lt;/p&gt;

&lt;p&gt;I am happy to have accomplished so much, but on the downside it is 10:30 and i have been programming the entire day on one project or another. Argg&amp;#8230;&lt;/p&gt;

&lt;p&gt;I swear i will have to do something fun and exciting for all of you soon. Then i will have something worth writting about again, but until then here is a picture of my 3d shooter in progress&lt;/p&gt;

&lt;p&gt;BROKEN image&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A step closer to fully automated</title>
   <link href="http://danmayer.github.com/2004/04/13/A-step-closer-to-fully-automated"/>
   <updated>2004-04-13T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/04/13/A-step-closer-to-fully-automated</id>
   <content type="html">&lt;p&gt;After recent success with my models i wanted to do some much more involved and usefull tests. The only problem was half of the stuff i was doing by hand. I had written some java software Text2SVM toat would help witht he conversions and such, but i had to give it the names of the files and everything myself. I now integrated Text2SVM more into newsshaker. It uses the database to find out the names of all the categories. It recursively sorts through all the text files in given directories. It is quite nice. I ran into some problems where i was running the entire system out of memory even with a full gig given to java, which would cause way to much swapping and slow the hold system down. I rewrote my code to break up the steps into smaller parts using much less memory and it now doesnt crash and runs 2 or 3 times faster. I now can go straight from the database to 9 SVMlight formated text training datasets for models. The next step will be to write some code the generates the models using an interface between java and SVMlight. After that i will be writting some code to keep all the results of the testing organized and worthwhile, which i will be storing in the database. The final step will then be writting code that takes many random documents from my database and trys to categorize them, and stores if they were correctly told to be place in the category from which they came. I will then be storing a matrix of attempts to categorize a category and where it was actually categorized. This should be highly exciting because it will really let me see the info I need to know to make my system worka dn to know how reliably it works, and where the problems are occuring. It would let me for instants see if the space between special education parenting is to similiar and close to special education school to be determined, but if combined would serve as a valid and seperate categorization from everything else. School will probably keep me busy for awhile, but it is nice to be making some good progress and see a first beta version coming into very close view. Then i will have a wonderfull testing and development application for text categorization. Hopefully by the end of summer i will have everything generalized to the point that anyone could add categories and begin maintaining a category and seeing how they can get different results with different information retrival schemes, or using diffferent categorization algorythms besides SVMs. Anyone have some other algorythms worth looking into for text categorization, besides LSA/LSI and SVMs?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Busy</title>
   <link href="http://danmayer.github.com/2004/04/09/Busy"/>
   <updated>2004-04-09T00:00:00-07:00</updated>
   <id>hhttp://danmayer.github.com/2004/04/09/Busy</id>
   <content type="html">&lt;p&gt;Alright i have been really busy on my senior project for the last couple weeks so I haven&amp;#8217;t had time to really get any work done. I did however have a meeting with a CU AI professor who is familiar witht he use of SVMs. He thought i was on the right track and was approaching everything properly. He answered the one last question i had before i can really set the system up to start working on its own for categorization. So that was exciting. Now all i really need is a week or two to really spend some time coding. If i had the time i really think i could make a very impressive first run beta of the entire system. Then with some time i think it oculd turn into a pretty cool application. I am hoping to tweak some of the hard coded values to allow for much more flexability allowing hte system to be set up anywhere and work on categorizing any categories the user wants. The categories are currently hard coded into a few of the functions and in the end that wont be the best way to do things. Seperate good news is that my senior project just passed a 1 and 1/2 hour live test with 80 law students and a professor with no errors and no problems. That is the longest time the system has been used continously and by far the most users on the system at once. It is really kind of cool to think about the fact that their was 80 law students actively using something that i was a large part of creating. We are going to run a larger more extensive test on monday where the professor will be braodcasting a bunch of questions in class. We will see how that works out in the end, I am excited about it. The site will move soon, but if anyone is interested in looking at what my senior project can do take a look at &lt;a href='http://blackout.cs.colorado.edu/mtroom3/jsp'&gt;http://blackout.cs.colorado.edu/mtroom3/jsp&lt;/a&gt; It is an interactive classroom for the law school, so that professors can more easily get feedback and quiz large classes of students. Finally a good friend of mine from my research lab was notice by google and they called her up to talk to her and ask for her resume. So that is some pretty exciting news, that they are actively searching out talent. Perhaps as my project matures they will stumble apon what i am doing.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>FIRST GOOD SUCCESS!!</title>
   <link href="http://danmayer.github.com/2004/03/30/FIRST-GOOD-SUCCESS"/>
   <updated>2004-03-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/30/FIRST-GOOD-SUCCESS</id>
   <content type="html">&lt;p&gt;Using my Text2SVM after learning how to increase java memory size so that i could do a large test was very successful. I used about 2,700 documents and then put them into SVMlight. I used 90% training data and 10% testing data leaving around 270 tests. I achieved 95% accuracy in training SVM to recognize one text category from another. I am highly excited! Tomorrow i will be testing with several of my smaller categories today i tested with my largest category. If these trends contrinue&amp;#8230;. eeehhhh. I was really only hoping to achieve over 80% correct. So lets hope this is the start of something truely wonderful. I know that the results continuing this high are very unlikely, but i am still really excited about the first good results. I am pumped about doing more testing tomorrow!!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Current Percent levels</title>
   <link href="http://danmayer.github.com/2004/03/30/Current-Percent-levels"/>
   <updated>2004-03-30T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/30/Current-Percent-levels</id>
   <content type="html">&lt;p&gt;These are the current success levels for models based on different categories. These models were built with the current data in the News Shaker database. They were converted to SVMlight models with the use of Text2SVM without stemming enabled.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>NewsShaker: Features needed / bug report V.001</title>
   <link href="http://danmayer.github.com/2004/03/29/NewsShaker-Features-needed--bug-report-V001"/>
   <updated>2004-03-29T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/29/NewsShaker-Features-needed--bug-report-V001</id>
   <content type="html">&lt;p&gt;Features:* from empty DB to fully functional (no manual data entry)* No code should contain hard coded value refrencing categories* Easy way to define where search should put results default (in a category or in the uncategorized)* Ability for user to say they think the categorization is incorrect (if enough users say this it should be moved to the new category)* Store all SVM results int he database* a way to visualize the distances between the categories..* how many categorizations per category have been correct or incorrect* a way to start over the correct and incorrect after generating new SVM models* SVM weighting with C towards the positive examples* a way to let a user create their own account and their own categories to manage themselves* When administrator is adding a URL to crawl. Should be able to pick depth to crawl and default category that all results will be placed in. * Search entire database or by category using Lucecne* Ability to add single page to a category* More administration features* Ability to start or stop auto categorization* caching the front page* Text2SVM integration* Text2SVM configuration file* ability to create the SVM categories from the web as administrator* create only the dictionary and store it as one function* use stored dictionary to create all needed spaces for SVM models* ability to distinguish between multiple categories instead of single boolean. Bugs:* If the user chooses to move a page from one category to another but doesn&amp;#8217;t choose a new category it should do nothing and give them an error.* Crawling from the web doesn&amp;#8217;t work anymore* SVM first word spacing?? with the first character removal??? is this still a bug?* Counts for the categories should be switch to be autocounted* Text2SVM runs out of memory on large examples* front page loads to slowly* categories are manually counted let MYSQL do the counting!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Text2SVM</title>
   <link href="http://danmayer.github.com/2004/03/09/Text2SVM"/>
   <updated>2004-03-09T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/09/Text2SVM</id>
   <content type="html">&lt;p&gt;This is the main page for &amp;#8220;Text2SVM&amp;#8221; a java program that converts text documents to the format require for SVMlight. The project is currently in beta. I figured that i should release a early working version for anyone else that has been finding it very difficult to find software to help them work with SVM&amp;#8217;s. This project is distibuted as is with no garuntees. So use it try it out. Right now it is written very specifically to handle text files conversion to a single format for SVM light. This should be capable of being edited to support many other formats though. To read more about &lt;a href='http://svmlight.joachims.org/'&gt;SVMlight&lt;/a&gt;visit their page. If you make any good modifications or changes of this program I would love to hear about it please contact me at ddmayer (at) colorado (dot) edu (spam pertection). You can also leave comments on this page so other users could help solve your problems. To download the &lt;a href='/computer_science/files/Text2SVM.zip'&gt;code click here&lt;/a&gt;. This first release 0.001 include these features:-Import entire directory of files-Save dictionary to generate other word vectors based on same SVMmodel-export files in SVMlight format-Stemming to increase the occurance of words like (stopping and stopped)-The ability to import saved dictionaries and continue adding to the model-debugging code left in What is SVM, and why would i want to convert text to a word vector?Support Vector Machines. They are a method or clustering and machine learning. In this examples we are working with Text categorization using SVM. This programs purpose is to take a bunch of documents in a category and a bunch of documents unrelated to that category. It then creates word vectors out of all the documents. The word vectors then are converted to SVMlights format and given positve weight and negative weight. Anytime the document vector has a possitive weight that means we consider it part of our category. A negative weight means it is outside of our category. After the text is written in this format you can use SVMlight to compare unknown text and see if it belongs in this category. KNOWN ISSUES:- occassionally cuts the first letter off of a document.- uses high amount of memory to run the program add -Xmx256x then the program your trying to run. wc.java is known to run out of memory with large amounts of text.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Week of stuff</title>
   <link href="http://danmayer.github.com/2004/03/08/Week-of-stuff"/>
   <updated>2004-03-08T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/08/Week-of-stuff</id>
   <content type="html">&lt;p&gt;Well this is going to be a busy week. Instead of doing homework on saturday. I went to ft. Collins because my friend Matt wanted me to come up. Also since steve is in town i have been hanging out with him and doing stuff and there for not getting my work done. Today oddly enough instead of spending my time working on my various school projects, I worked for 6 hours on my work project. I accomplished quite a bit and I am now ready to introduce my &lt;a href='http://www.deadawakemovie.com/ml'&gt;Machine Learning blog&lt;/a&gt;. It follows my work and progress on some projects that i am working on and serves to be a center for most of my coding and source code. I am sure that doesn&amp;#8217;t interest 90% of the people that read my blog, but oh well. I am planning to be really busy until spring break. Which is kind of annoying. I wanted to ask this girl out, but i really dont have any time to go out on a date before spring break. Also, the whole spring break thing is still up in the air. I seriously have no clue what I will be doing. Scott and Dom still dont know when they are off work, how much time they will have and such. Also, I am pretty sure they both would rather just spend it with thier girlfriends. So I am really thinking about just going to vegas with some of my other friends. Also Megan, one of my good friends from highschool is coming to colorado the same week as my break for her springbreak. I would really like to see her, but it is likely that no matter what I do i will be out of town. Maybe I should just flip a coin a couple of times and figure it out. Well now I am off to a statistics review session.. yeaaa school from 7-9! You got to love being inside the entire day when it is beautiful outside.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Text to vectors progress</title>
   <link href="http://danmayer.github.com/2004/03/04/Text-to-vectors-progress"/>
   <updated>2004-03-04T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/04/Text-to-vectors-progress</id>
   <content type="html">&lt;p&gt;I finished the basic text to vector, but in its current form it is kinda useless. It only outputs to system.out in a format that isn&amp;#8217;t usefull yet. Also it doesn&amp;#8217;t save the dictionary that it uses to generate the vectors. So you can&amp;#8217;t generate any new word vectors to run comparisons with. I will be adding in features to save the generation dictionary, to import a saved dictionary, and to output the feature word vectors in the SVM light format. I also have recently found some cool java stemming software that I will add in to my project after I get the first usable version out. If your interested in the stemming software here are the links: &lt;a href='http://www.ils.unc.edu/keyes/java/porter/'&gt;Porter Stemming Algorythm&lt;/a&gt; &lt;a href='http://www.comp.lancs.ac.uk/computing/research/stemming/paice/paicejava.htm'&gt;Lancaster Stemmer&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Converting documents to word vectors</title>
   <link href="http://danmayer.github.com/2004/03/04/Converting-documents-to-word-vectors"/>
   <updated>2004-03-04T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/04/Converting-documents-to-word-vectors</id>
   <content type="html">&lt;p&gt;After unsuccessfully searching all over the web for source that would do this, I began writting my own code to convert all of my documents to word vectors based on a overall word space. I have a program that came with LSA called Pindex that does this but for LSA and it seems to give some odd results that I am not sure if they are compatable with SVM&amp;#8217;s. (I know that the formatting is different, which I will be converting to SVMlight formatting, but I am not sure if the data is valid.) I am now making a word vector for every document that will just be its total ratio to a total spaces count of those words. I will then have a seperate java app that allows you to give it two sets of documents and it will generate the proper SVM light input file. Giving one set of documents the positive value and the other set the negative. Then I should be able to create take any new text create its word vector based on the same dictionary and then run comparisons in SVMlight. I am hoping to have the text to vector done this weekend. It shouldn&amp;#8217;t be to difficult. Then I will release it on the web since i had a next to impossible time trying to find anything like this on the web.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Space Altering</title>
   <link href="http://danmayer.github.com/2004/03/02/Space-Altering"/>
   <updated>2004-03-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/02/Space-Altering</id>
   <content type="html">&lt;p&gt;I ran some initial results that would tell me how closely related all the documents within a category were related. we were looking for numbers in the .75 range. The first attempt was actually returning the .339 for one category and .328 for another. These were rather low. To improve the mean of the categories we thought creating a larger space with an overall larger vocabulary would help the documents to be more related. We increased the space from 987 total documents to 1798 documents. I didn&amp;#8217;t add any documents to either of the test categories, only to the overall space (documents that were really not related to either catgory). I also added a simple stoplist filtering out some common but irrelavent words. This didn&amp;#8217;t seem to help the relational mean between the two categories. The first category lowered from .339 to .320 while the second increased from .338 to .349. Now I have to decide wether to greatly increase the space, or greatly increase the documents within the categories (which i have to do by hand so it is a slow and time consuming process.)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Very cool clustering</title>
   <link href="http://danmayer.github.com/2004/03/01/Very-cool-clustering"/>
   <updated>2004-03-01T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/01/Very-cool-clustering</id>
   <content type="html">&lt;p&gt;This isn&amp;#8217;t quite related to my own machine learning research but it is cool to see what others out there are doing with machine learning. This is a very cool search engine that using text clustering. &lt;a href='http://vivisimo.com'&gt;http://vivisimo.com&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Setting Up</title>
   <link href="http://danmayer.github.com/2004/03/01/Setting-Up"/>
   <updated>2004-03-01T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/03/01/Setting-Up</id>
   <content type="html">&lt;p&gt;This is going to be a research blog kept by Dan Mayer to show his progress on his computer science research into machine learning. I will be setting up a collection of all the work and research that I have done on machine learning. I am working on a project for the L3D labs at the University of Colorado. I am working specifically with text categorization, currently focused on using LSA and SVM to categorize. I will post all the links, projects, examples, and resources that I have used and learned from during my progress on this project. This is documenting the work on my project &lt;a href='http://clever.cs.colorado.edu:8080/newsShaker/jsp/index.jsp'&gt;News Shaker&lt;/a&gt;, which will be similiar to &lt;a href='http://news.google.com/'&gt;google news&lt;/a&gt;. It uses a web spider and text categorization to organize the data into particular categories. The categories I am currently working with are special education related. The topics of the categories were choosen so that this project would become a sub project of &lt;a href='http://www.web2gether.org'&gt;Web2gether&lt;/a&gt;, which is a site to help the special education community. Currently all of the categories seen on the News Shaker site are manually sorted and loaded into the system after the spider crawls specific topics on the web. I am now working with LSA and SVMs to begin the text categorization of newly crawled websites and results. This project is also setting up a easy to use web managed content management system. This would allow for the quick set up and design of any topic based categorization using the methods developed while creating the original News Shaker which is focused on special education.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>open gl progress</title>
   <link href="http://danmayer.github.com/2004/02/16/open-gl-progress"/>
   <updated>2004-02-16T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/02/16/open-gl-progress</id>
   <content type="html">&lt;p&gt;Well first sorry about the site being down for awhile, my hosting service had some problems, but they have it fixed. Second, i finished my openGL project for fractal terrains today. This project took me entirely way to long, but it has been hard to move back to c++ after having all the nice things java provides you for so long. Anyways i am slowly getting back on track. So take a look and i hope you all like my little fractals. It is alot cooler if you actually have the program since you can rotate and do all sorts of stuff with the terrain then. Oh well back to laying and now moving. &lt;img src='http://WWW.bandddesigns.com/blogger/arch/openglfractal.jpg' alt='openglfractal.jpg' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>finished opengl</title>
   <link href="http://danmayer.github.com/2004/02/02/finished-opengl"/>
   <updated>2004-02-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/02/02/finished-opengl</id>
   <content type="html">&lt;p&gt;I just finished my first opengl progam. I know this one isn&amp;#8217;t 3d but it could be. I just had a hard time moving back to c++ at first since i am so used to java and remembering all the wierd ways to pass things in c++ sucked. Anyways simple but wonderfull since i am done with my first working and well documentated opengl program. I think i have a good understanding of how to work with opengl now as well. Anyways it is a fractal look and enjoy. i know it is simple. &lt;img src='http://WWW.bandddesigns.com/blogger/arch/koch.jpg' alt='koch.jpg' /&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Well today was a big</title>
   <link href="http://danmayer.github.com/2004/02/02/Well-today-was-a-big"/>
   <updated>2004-02-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/02/02/Well-today-was-a-big</id>
   <content type="html">&lt;p&gt;Well today was a big relief&amp;#8230; Since my server at work died twice on friday, I have been nervous all weekend that i might have lost all my work. today we recovered the server and i made sure to make backups of all of my files. So now even if the server dies (since we really dont know what the problem was) i wont loose any work. My project at work it moving along nicely. Their are about 900 sites in the database currently and we should be categorizing on the fly by the end of this week. Which will be a huge step. If all goes well i might have a highly successfully project right away. If not with some refinement over a few weeks we should be able to make it fairly successful.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Cool project</title>
   <link href="http://danmayer.github.com/2004/01/15/Cool-project"/>
   <updated>2004-01-15T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2004/01/15/Cool-project</id>
   <content type="html">&lt;p&gt;I just learned that the final project in my computer graphics course is to make a simple 3d Doom like game. I am excited. Depending on the models and if we can make them or we are just using stock models I will try to put a bunch of my friends in the game so that I can kill them and they can all kill each other. Yeaaaa violence. Either way it is going to be my first few steps in the direction of 3D graphics which is really cool and exciting.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>OpenGL Resources</title>
   <link href="http://danmayer.github.com/2003/11/08/OpenGL-Resources"/>
   <updated>2003-11-08T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2003/11/08/OpenGL-Resources</id>
   <content type="html">&lt;p&gt;This is a collection of various tips and things I use or have done in OpenGL. This is actually up on the web more as a refrence to myself than anything else. This is a collection of good links, programs, tutorials, and source code. That I have found usefull, created, or thought would be usefull to others. So enjoy any and all of my OpenGL info. &lt;b&gt;Projects:&lt;/b&gt; 3D shooter I wrote, it could obviously be improved alot but it is a good easy start.&lt;br /&gt;&lt;a href='http://WWW.deadawakemovie.COM/ml/archives/3dshoot.jpg'&gt;&lt;img src='http://WWW.deadawakemovie.COM/ml/archives/3dshoot-thumb.jpg' alt='3dshoot.jpg' /&gt;&lt;/a&gt; You can download the source and the exe and everything and mess with it yourself. This was written in Visual Studio.net &lt;a href='http://www.deadawakemovie.com/ml/files/Mayer_GL.zip'&gt;Get it&lt;/a&gt;&lt;br /&gt;I also made a fractal program into a openGL winamp plug in. If your interested in doing conversions to a winamp plug in yourself, you can download the source and the DLL for winamp and mess around with this.&lt;br /&gt;&lt;a href='http://www.deadawakemovie.com/ml/files/winamp.zip'&gt;Get the winamp code&lt;/a&gt; &lt;b&gt;Links:&lt;/b&gt; &lt;a href='http://graphics.stanford.edu/data/3Dscanrep/'&gt;A group of scanned 3D object models, and how to read and write them.&lt;/a&gt; &lt;a href='http://nehe.gamedev.net/'&gt;NEHE the best place to go for open GL resources.&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>C++ resources</title>
   <link href="http://danmayer.github.com/2003/11/04/C-resources"/>
   <updated>2003-11-04T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2003/11/04/C-resources</id>
   <content type="html">&lt;p&gt;This is a collection of various tips and things I use or have done in C+. This is actually up on the web more as a refrence to myself than anything else. I keep learning this stuff, but since I dont use it all that frequently I tend to forget how to do something exactly the next time i need to. So i will just keep a bunch of files that i use for refrence when coding. I don&amp;#8217;t use C++ as much now since I have been working mostly with Java at my job. Anyways here is some c++ stuff:&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>MySQL resources</title>
   <link href="http://danmayer.github.com/2003/11/02/MySQL-resources"/>
   <updated>2003-11-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2003/11/02/MySQL-resources</id>
   <content type="html">&lt;p&gt;This is a collection of various tips and things I use in MySQL. This is actually up on the web more as a reference to myself than anything else. I keep learning this stuff, but since I don&amp;#8217;t use it all that frequently I tend to forget how to do something exactly the next time i need to. So here are little commands I use and some tiny descriptions. If you have some tips tricks or think i am doing something the hard way please feel free to comment and share. If you have any MySQL questions please feel free to post them if you think it is something I might be able to help you with. That said here is mysql information&amp;#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;b&amp;gt;MySQL Commands:&amp;lt;/b&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;//to start mysql on the command line &lt;code&gt;Mysql �u root �p   (It will then ask for your password)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//To start mysql server &lt;code&gt;Sudo bash�bin/safe-mysqld� from the mysql root directory&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//How to select data using rules involving more than one table from MYSQL: &lt;code&gt;Select * from user leftjoin link on user.id = from Left join msg on to=msg.id where user.name = �john�;    Database:mysql -u root �p ***&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//snowmass //to create a text dump of a database &lt;code&gt;mysqldump �-user [user name] �-password=[password] [database name] &amp;gt; [dump file] &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to create a new databasemy &lt;code&gt;sql&amp;gt; create database somedb;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//granting privileges to a user &lt;code&gt;grant all privileges on *.* to NewsShaker@�localhost&amp;quot; &amp;gt; identified by &amp;#39;passwrd&amp;#39;;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//shows all the tables of a database &lt;code&gt;show tables;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//creates a new table in the database your currently using &lt;code&gt;create table &amp;quot;tablename&amp;quot; (&amp;quot;column1&amp;quot; &amp;quot;data type&amp;quot;, &amp;quot;column2&amp;quot; &amp;quot;data type&amp;quot;, &amp;quot;column3&amp;quot; &amp;quot;data type&amp;quot;);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//creates a link table (which is really the same as other tables but just//a way to associate data between tablescreate table link (catID bigint, pageID bigint);&lt;/p&gt;

&lt;p&gt;//deletes an entire tabledrop table Pages;&lt;/p&gt;

&lt;p&gt;//deletes an entry from table idgen where the item has a uid of 12delete from idgen where uid=12;&lt;/p&gt;

&lt;p&gt;//show only the colums of a table not the datashow columns from tablename;&lt;/p&gt;

&lt;p&gt;//To change the data of an already existing entry &lt;code&gt;update tablename set columname = &amp;quot;whatever&amp;quot; where columnname = &amp;quot;something&amp;quot;;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to alter a table if you need to add a new field &lt;code&gt;alter table tablename add column_name column_type after column_name2;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//creates a dump of database called newsshaker &lt;code&gt;./mysqldump �u root �p newsshaker &amp;gt; ../../../ddmayer/newsshakerdb.txt//at command line in the mysql/bin directory&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to recreate the database from the dump file &lt;code&gt;./mysql -u root -pPASSWORD newsshaker &amp;lt; ./newsshakerdb.txt//at the command line in the mysql/bin directory&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to get the count in a category since a date: &lt;code&gt;select count(*) as co from Pages as p left join link as l on p.UID = l.PageID left join categories as c on c.UID = l.CatID where c.name like &amp;#39;autism&amp;#39; and p.date &amp;gt; 20031201000000 group by c.UID;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to get only 5 in order as the very newest: &lt;code&gt;select p.UID,p.date,c.UID from Pages as p left join link as l on p.UID = l.PageID left join categories as c on c.UID = l.CatID where c.name like &amp;#39;autism&amp;#39; and p.date &amp;gt; 20031201000000 order by p.date DESC limit 5;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//to get a whole category: &lt;code&gt;select p.UID,p.date,c.UID from Pages as p left join link as l on p.UID = l.PageID left join categories as c on c.UID = l.CatID where c.name like &amp;#39;autism&amp;#39;;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//add a new user to your mysql system &lt;code&gt;mysql&amp;gt; GRANT ALL PRIVILEGES ON *.* TO &amp;#39;monty&amp;#39;@&amp;#39;localhost&amp;#39;    -&amp;gt;     IDENTIFIED BY &amp;#39;some_pass&amp;#39; WITH GRANT OPTION;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//getting random results from a mysql query or mysql table &lt;code&gt;mysql_query(&amp;quot;SELECT * FROM table ORDER BY RAND() LIMIT 1&amp;quot;)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;//renaming multiple tables at the same time. &lt;code&gt;RENAME TABLE old_table    TO backup_table, new_table TO old_table, backup_table TO new_table;&lt;/code&gt;&lt;/p&gt;
&lt;b&gt;Links:&lt;/b&gt;
&lt;p&gt;&lt;a href='http://www.mysql.org'&gt;MySQL home&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://sqlcourse.com/insert.html'&gt;My SQL commands tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.javacoding.net/articles/technical/java-mysql.html'&gt;Java MySQL tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.developer.com/java/data/article.php/3417381'&gt;Great java Mysql developer tutorial&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Linux / Unix Resources</title>
   <link href="http://danmayer.github.com/2003/11/02/Linux--Unix-Resources"/>
   <updated>2003-11-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2003/11/02/Linux--Unix-Resources</id>
   <content type="html">&lt;p&gt;This is a collection of various tips and things I use in linux. This is actually up on the web more as a refrence to myself than anything else. I keep learning this stuff, but since I dont use it all that frequently I tend to forget how to do something exactly the next time i need to. So here are little commands I use and some tiny descriptions. If you have some tips tricks or think i am doing something the hard way please feel free to comment and share. If you have any Linux / Unix questions please feel free to post them if you think it is something I might be able to help you with. That said here is what I got&amp;#8230; &lt;b&gt;Commands:&lt;/b&gt;// secure copy. This allows you to copy a file to another computer over SSHscp filename compname:~/. (exactly like this no spaces may occur anywhere in this) //if something is in the background or you accidently suspended it you//can bring it back to the front by typingfg (in the command line) //if you have sudo access you can do about anything on the systemsudo cmd (any command you want, then it will ask for your password) //to quickly view a fileless filename.txt //to open and edit a fileemacs filename //to add to your path and edit many other settings this in your home directoryemacs .cshrc //to get to your home directorycd (or sometimes cd $HOME) //FTP stuffftp domain.comftp&amp;gt; cd directoryftp&amp;gt; put filenameftp&amp;gt; get otherfileftp&amp;gt; quit //To add users to the systemsudo adduser //edit a users password if your root or can sudosudo passwd username //to change your users password while logged on the systempasswd //to give users sudo accessudo visudo//to run a program and keep the console availableprogram &amp;amp; //if you dont have the proper permissions for a filechmod 666 filename (this gives read and write access to everyone, so it isn&amp;#8217;t secure, man chmod if you need a specific file rights) &lt;b&gt;TomCat:&lt;/b&gt;To start tomcat run �bin/start-tomcat� from tomcats home directoryTomcat installs /var/tomcat/webappsTomcat really /usr/local/Jakarta-tomcat&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Java Resources</title>
   <link href="http://danmayer.github.com/2003/11/02/Java-Resources"/>
   <updated>2003-11-02T00:00:00-08:00</updated>
   <id>hhttp://danmayer.github.com/2003/11/02/Java-Resources</id>
   <content type="html">&lt;p&gt;This is a collection of various tips and things I use in Java. This is actually up on the web more as a refrence to myself than anything else. I keep learning this stuff, but since I dont use it all that frequently I tend to forget how to do something exactly the next time i need to. So here are little commands I use and some tiny descriptions. If you have some tips tricks or think i am doing something the hard way please feel free to comment and share. If you have any Java questions please feel free to post them if you think it is something I might be able to help you with. That said here is some java stuff&amp;#8230; First off i think the best way to work with java code and projects is using J Builder. It is available free for personal use. I highly recommend it. It is available for linux and windows. get it from &lt;a href='http://www.borland.com/jbuilder/'&gt;Borland&lt;/a&gt; If your going to develop web applications I also highly recommend apache tomcat. It is a free java (JSP) server. It is also available for both windows and linux which is great. get it from &lt;a href='http://jakarta.apache.org/tomcat/'&gt;Apache Tomcat&lt;/a&gt; If a java program keeps running out of memory, this is easy to fix. The java virtual machine is only given so much memory. So running:&amp;#8221;java -Xmx256m PROGRAMNAME&amp;#8221; should fix the problem by giving the virtual machine 256 mb of memory. You will see this error as a java.lang.outofmemory error. If your using J builder go to project-&amp;gt;run-&amp;gt;Java VM parameters: and add the -Xmx256m to the parameter line. Here&amp;#8217;s how you could rewrite that statement using the ?: operator: System.out.println(&amp;#8220;The character &amp;#8221; + aChar + &amp;#8221; is &amp;#8221; + (Character.isUpperCase(aChar) ? &amp;#8220;upper&amp;#8221; : &amp;#8220;lower&amp;#8221;) + &amp;#8220;case.&amp;#8221;); The ?: operator returns the string &amp;#8220;upper&amp;#8221; if the isUpperCase method returns true. Otherwise, it returns the string &amp;#8220;lower&amp;#8221;. The result is concatenated with other parts of a message to be displayed. Using ?: makes sense here because the if statement is secondary to the call to the println method. Once you get used to this construct, it also makes the code easier to read. &lt;b&gt;Files:&lt;/b&gt;One of the first Java projects I did the source and some info on a AOL Instant messenger (AIM) chatterbot. Built using simpleaim, megahal and some of my own work. Most of the work was in combining the programs learning how they worked and such though. I did add a nice logger to it as well. This still needs alot of work to be that impressive. download &lt;a href='./files/MegaDan.zip'&gt;MegaDan.zip&lt;/a&gt; A part of my machine learning, for project News Shaker. Text2SVM converts text documents into the proper format for use with SVMlight. It is fairly well commented and contains the full source code. This is a good easy way to learn to work with reading and writting files since it has alot of IO. Visit this projects own page, &lt;a href='http://www.deadawakemovie.com/ml/archives/000138.html'&gt;Text2SVM&lt;/a&gt;. My edited and improved version of weblech. Weblech is a web spider. I added many features and costumized it for my own purposes. This crawler uses google to find files that are relavant to whatever topics your working on. &lt;a href='http://programming.wastedbrains.com'&gt;Download the improved weblech from here&lt;/a&gt; Links:&lt;a href='http://sourceforge.net/projects/weblech/'&gt;A great starting point for building a java web spider (Weblech)&lt;/a&gt; &lt;a href='http://programming.wastedbrains.com'&gt;My edited and improved version of weblech&lt;/a&gt; &lt;a href='http://home.clara.net/robmorton/projects/wc/'&gt;A great Java Word Counter / dictionary builder&lt;/a&gt; &lt;a href='http://www.csd.abdn.ac.uk/~pgray/teaching/CS3011/prac4.html'&gt;Stop List&lt;/a&gt; &lt;a href='http://www.javapractices.com/Topic87.cjp'&gt;Parsing Text&lt;/a&gt; &lt;a href='http://www.javacoding.net/articles/technical/java-mysql.html'&gt;Java MySQL tutorial&lt;/a&gt; &lt;a href='http://www.ils.unc.edu/keyes/java/porter/'&gt;Java Porter Stemming Algorythm&lt;/a&gt; &lt;a href='http://www.comp.lancs.ac.uk/computing/research/stemming/paice/paicejava.htm'&gt;Java Lancaster Stemmer&lt;/a&gt; &lt;a href='http://www.airporttools.com/other/programming/hashsorting/'&gt;Sorting a hash table in java&lt;/a&gt; &lt;a href='http://jigsaw.w3.org/Doc/Programmer/api/org/w3c/tools/sorter/Sorter.html'&gt;Java sort class (sorts most types)&lt;/a&gt; &lt;a href='http://neuron.eng.wayne.edu/'&gt;a great java machine learning site&lt;/a&gt; &lt;a href='http://java.sun.com/developer/onlineTraining/JavaMail/contents.html'&gt;Pretty much everything you would need to work with java Email&lt;/a&gt; &lt;a href='http://www.ftponline.com/javapro/2004_01/online/javamail_kjones_01_28_04/default_pf.aspx'&gt;How to work with multipart email messages&lt;/a&gt; &lt;a href='http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/index.html#TextSamplerDemo'&gt;Great Java Swing Tutorials, especially the stuff on the grid bag layout&lt;/a&gt; &lt;a href='http://java.sun.com/j2ee/1.4/docs/tutorial/doc/'&gt;Great webservices and java XML info&lt;/a&gt; &lt;a href='http://www.manageability.org/blog/stuff/top-ten-truly-obscure-java-projects/view'&gt;The 10 best and unervalued least known about java libraries. some of these would be great to use in many projects without reimplementing there feautres yourself.&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 
</feed>
