tag:blogger.com,1999:blog-287950472008-07-16T16:32:39.725-06:00TooneTown BlogNathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-28795047.post-29305613634659708712008-04-03T12:45:00.001-06:002008-04-03T12:45:14.323-06:00Great News!I was told yesterday afternoon that I had been nominated to become a dojo committer! I was really excited. It was something that I'd been interested in possibly doing, but didn't really think that it would happen as quick as it did.<br /><br />The guys in the dojo community are very easy to work with and helpful. I'm very excited to be a part of this project.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-83358019312313161302008-03-31T07:18:00.001-06:002008-03-31T07:18:36.802-06:00Dojo 1.1.0Looks like the <a href="http://www.dojotoolkit.org">Dojo</a> guys have finally released version <a href="http://www.dojotoolkit.org/downloads">1.1.0</a> of their toolkit.<br /><br />I'm pretty excited for this release - since it has some of my form widgets (in dojox.form) in it. The community has been really great, and I love helping out with it. It feels good to contribute back.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-59208670318259405772008-02-20T08:59:00.001-07:002008-02-20T08:59:57.111-07:00Cool OSX (Leopard?) ShortcutOK - so I'm waiting for people to yell at me saying that this is completely old news, but I found a really cool (and useful) shortcut recently. Completely by accident.<br /><br />Holding down the Apple key while clicking on an application in the Dock will reveal that application in the Finder. This is really useful - and guess what? It even works in spotlight! The only reason that I was keeping quicksilver around was so that I could quickly "reveal" items in the finder, but now, all that's needed is to activate spotlight, type in the item you want, and hold the apple key when pressing enter on the item.<br /><br />I think it's cool, at least...that's all that matters, right?Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-75534423368514840472008-02-07T16:47:00.001-07:002008-02-07T16:47:13.251-07:00Microsoft/YahooI was reading an article at Roughly Drafted today (<a href="http://www.roughlydrafted.com/2008/02/07/why-does-microsoft-really-want-yahoo/">http://www.roughlydrafted.com/2008/02/07/why-does-microsoft-really-want-yahoo/</a>) - and one thing totally hit me that I hadn't thought about before. If Microsoft is actually successful in their bid to buy Yahoo!, then what *is* actually going to happen with all their duplicate services? Do we get Hotmail or Yahoo! mail? Who's search backend will actually be used to power both sites? Will they continue to maintain differently branded portals?<br /><br />It seems to me like it's a horrible waste of resources to keep both systems going separately - however, at the same time, it would be a waste to discard the brand positioning of either company.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-72063133348980210192008-01-23T23:29:00.001-07:002008-01-23T23:29:53.065-07:00Dojo Book Dashboard Widget (for Mac OSX)I have been wanting a dashboard widget that indexes the pages for the <a href="http://www.dojotoolkit.org/book/dojo-book-0-9-0">Dojo Book</a> so that I can quickly access items without needing to pull up the pages...well, I finally caved and wrote one myself. You can get it from <a href="http://www.toonetown.com/projects/downloads/DojoBook.zip">http://www.toonetown.com/projects/downloads/DojoBook.zip</a><br /><br />This was thrown together, quite literally, in about an hour - using Dashcode. I even used a custom-built version of dojo to generate the tree widget in the dashboard widget. I was pretty impressed with how easily it all came together - the biggest pain was getting the list of links in to the tree.<br /><br />Now, the hard part will be keeping it up to date.<br /><br />Let me know if you find this useful - and if you have any suggestions for improving on it.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-7003770112983783662008-01-14T19:40:00.001-07:002008-01-14T19:40:48.088-07:00TelecommutingI just read an article which talked about benefits of telecommuting - for the telecommuter...but not for <a href="http://arstechnica.com/news.ars/post/20080113-study-telecommuting-makes-work-worse-for-non-telecommuters.html">the ones left behind</a>.<br /><br />I can't agree with this more. I have been telecommuting for nearly 2 years now, twice per day - and I can totally see the benefits. Many of the others in the office are also starting to telecommute (I am proud to say I was among the first in our office to do it, though!)<br /><br />At first, I was afraid that it would be *me* who ended up being "left out" - but once more and more of us have been working at home, it has not been as bad as at first imagined.<br /><br />One thing that is vital to being able to successfully telecommute is having everyone available at all reasonable times via some kind of instant messenger. This includes those who are in the office as well as out of the office. I can't count the number of times that I needed to get a hold of someone, and they weren't online. Email is just too slow!<br /><br />Another thing is a reliable VPN connection and a fast Internet connection at home. On my mac, I have found that the best thing to do is to set up some ssh tunnels...and I have written a couple of scripts to automate that process. One day, when I'm feeling particularly ambitious, I might build it into a "real" application instead of a bunch of shell scripts. I have just found that the Cisco VPN doesn't quite work as advertised...and it messes up a bunch of other things when your network connection gets dropped. In the spirit of the "Mac way" of doing things, I expect things to "just work".Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-16170292261000900062007-12-06T09:59:00.001-07:002007-12-06T12:01:07.936-07:0010 steps to a multi-protocol iChat.<h2>Problem:</h2><br />I know that setting up iChat to communicate with MSN, Yahoo, AIM and other users has been discussed in <a href="http://www.beckysweb.co.uk/beckysblog/2007/11/access-yahoo-messenger-msn-messenger.asp">many</a> <a href="http://cavemonkey50.com/2006/08/add-gtalk-msn-and-yahoo-mutiple-accounts-to-ichat/">other</a> <a href="http://lifehacker.com/software/hack-attack/chat-with-aim-msn-yahoo-and-other-contacts-over-google-talk-289097.php">places</a>. There are a couple of issues, however, that I have with this process:<br /><ol><li>Security - you are trusting 3rd-parties with your login information</li><br /><li>Stability - the transports many times go up and down</li><br /><li>Consistency - sometimes, you're required to sign up for transports from different servers - I don't like that</li></ol>Up until now, my solution on Mac has been to use <a href="http://www.adiumx.com">Adium</a> for chat. It is an excellent program - and I love everything about it. However, there are a couple of things that I think iChat does a bit better. Since it's integrated with the OS, it has a more consistent look-and-feel across all the other applications. I also like the way that it integrates with Mail.app (you can see who is online from within your mail messages). It's just a more "polished" solution, in my opinion.<br /><br />I've always thought that the way to go would be to run a jabber server locally, and connect to it with my own transports. This would solve all my issues (Security, Stability, and Consistency), and at the same time, allow me to access all my contacts via iChat (giving me the nice integration). However, up until now, I have not had time, and setting up a jabber server is not the easiest thing to do.<br /><br />Enter <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">Openfire</a>. I don't know where this program has been - it's by far the easiest jabber server to set up - and it has excellent Mac OS Integration (It uses LaunchDaemons and has a PreferencePane). Below, I list instructions on how I got my iChat to communicate multi-protocol, using Openfire.<br /><br />These instructions are taken from my installation process on a MacBook Pro running OSX 10.5.1 (Leopard). It should work for previous versions - but the prompts may be somewhat different.<br /><br /><h2>Instructions:</h2><br /><h3>1 - Install Openfire</h3>Download Openfire for Mac from <a href="http://www.igniterealtime.org/downloads/index.jsp#openfire">here</a>. The version I used is 3.4.1. Mount the disk image and run the installer. It's really that easy!<br /><br /><h3>2 - Configure Openfire</h3>Open your System Preferences and choose the Openfire preference pane. Make sure that Openfire's status is listed as "Running". Check the box to "Start Openfire When System Turns On". Then click the button to "Open Admin Console".<br /><br />The Admin Console for Openfire is web-based - it is very easy to use, and very powerful. The first time you open the console, it will ask you some initial setup questions.<br /><ul><li>Choose the language you want</li><br /><li>For server settings, set your "Domain" to be "localhost". This will simplify adding contacts later. You can leave the other settings as they are.</li><br /><li>Choose to use the "Embedded Database". Since we will not be exposing our server to other users, we don't really care about the performance level - there will generally be just a single user logged in at once, and it greatly simplifies the setup process.</li><br /><li>Keep "Default" selected for how to store user and group profiles. We don't want to set up LDAP.</li><br /><li>Enter in a valid email address and an admin password. <b>REMEMBER THIS PASSWORD</b></li><br /></ul>Setup is now finished - you can go ahead and log in to the admin console (the username is "admin" - the password is the one you just set up).<br /><br /><h3>3 - Secure Openfire</h3>We don't want to let other people connect to our jabber server - just those who are on the computer we are setting this up on. That is one of the reasons (security) that we wanted to run our own jabber server.<br /><br />Under "Registration & Login" set "Inband Account Registration" and "Anonymous Login" to "Disabled". Then click "Save Settings"<br /><br /><h3>4 - Create a jabber user (or users)</h3>You now need to create a user for your jabber server. This is the user that you will use to log in to the jabber server. I suggest you create an account for every account that exists on your Mac. Do the following:<br /><br />Click on the "Users/Groups" tab at the top of the management console. Choose "Create New User" on the left. Enter in a username and a password (Name and Email are optional). It is called your "JID" (Jabber ID), and is the username and password you will use in iChat. I use the same username as my Mac user name. Then Click "Create User"<br /><br /><h3>5 - Install the IM Gateway Plugin</h3>In order to communicate with other services, we need to install the "IM Gateway Plugin". Do the following:<br /><br />Click on the "Plugins" tab at the top of the management console. Choose "Available Plugins" on the left. Click on the "plus" sign under "Install" for the "IM Gateway". You can ignore the other plugins - they are more useful for a "real" jabber server. We are only using our server for the transports.<br /><br /><h3>6 - Configure the IM Gateway Plugin</h3>We want to secure the services for our IM Gateway plugin. For each of the third-party services you want to connect to (AIM, MSN, Yahoo, Google Talk, etc.), you need to do the following:<br /><br />Click on the "Server" tab at the top of the management console. Choose "Settings" under the "Gateways" section on the left. Check the services you wish to use. For each one of them, you can choose "Options" and uncheck mail notifications if you like. Mail notifications BOTHER ME! Under the "Permissions" for each of the services, select "Manual registration only". This will simplify the registration process (and eliminates the need to download or use Psi, as other tutorials have you do. Remember to click "Save Permissions" after each one you change. You can also test your connection to the services, if you want.<br /><br /><h3>7 - Register for your "multi-protocol" services</h3>We now need to enter in your login information for the various multi-protocol services. This information is stored locally on your computer, so it's somewhat secure, but you should be aware that anyone who has physical access to your computer and enough know-how can still find out your login information if they dig enough. This is, however, not any less secure than storing your passwords in your keychain for iChat or Adium anyway. Do the following for each service:<br /><br />Click on the "Server" tab at the top of the management console. Choose "Registrations" under the "Gateways" section on the left. Click on "Add a new registration". Enter in your "user (JID)" that you use to connect to jabber, the gateway you want to use (MSN/AIM/Yahoo/etc), the username and password that you use to log on to that service, and an optional nickname. Click on "Add". <b>NOTE:</b>On my system, clicking "Add" says that the registration was added, but it doesn't show up in the list until I refresh the web page. I found, however, that you can add all your registrations at once (even if they aren't showing up in the list) and then hit "refresh" at the end to verify that they are all there. After logging in to iChat (below), you can come back here and verify that the "Last Login" reflects that you have correctly logged in to the service.<br /><br /><h3>8 - Set up iChat</h3>Now we have all the information that we need. You can now set up iChat to connect to your jabber server. Do the following:<br /><br />Open iChat and set up a new jabber account. For "Account Type" choose "Jabber Account", "Account Name" should be <i>jid</i>@localhost - where <i>jid</i> is your jabber ID that you set up above. The password is the password for your jabber id.<br /><br /><h3>9 - Connect!</h3>The first time you connect to your jabber server, you will get a certificate error - this is because the certificate that Openfire uses is a self-signed certificate. You will probably want to click "Show Certificate" and choose to "Always trust localhost when connection to localhost" so you won't get that warning every time you connect.<br /><br /><h3>10 - Add Contacts</h3>OK - so this really isn't a step - but I thought that "10 steps" is better - and it's a bit odd how you need to add contacts. When you want to add a contact to iChat, you need to format it in a way that jabber will know what service to add that chat with. Add your contacts in the form <i>serviceusername</i>@<i>service</i>.localhost - where <i>serviceusername</i> is your contact's name, and <i>service</i> is one of "aim", "gadugadu", "icq", "irc", "msn", "yahoo", "gtalk", "sip", or "xmpp". If your contact's name contains an @ sign (as do MSN and GTalk accounts), you need to replace the "@" in the username with "\40" - so, user@hotmail.com on the msn account would be added as user\40hotmail.com@msn.localhost .<br /><br /><h2>Suggestions/Comments:</h2><br />I would love to hear feedback, suggestions, and/or comments. Please leave some below!Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-4130161125925736072007-11-15T16:07:00.001-07:002007-11-15T16:07:44.901-07:00Styleable Dropdown - Part IIAfter blogging about the <a href="http://toonetown.blogspot.com/2007/11/dojo-widget-part-1-styleable-dropdown.html">Styleable Dropdown</a>, I decided that it appeared a bit too complicated - so I decided to simplify it a bit (and also reuse more of the built-in functionality of Dojo).<br /><br />Here is the new class:<br /><pre><br />dojo.provide("toonetown.dijit.form.DropDownSelect");<br /><br />dojo.require("dijit.form.Button");<br />dojo.require("dijit.form.FilteringSelect");<br />dojo.require("dijit.Menu");<br />dojo.require("dojo.data.ItemFileReadStore");<br /><br />dojo.declare("toonetown.dijit.form.DropDownSelect", dijit.form.DropDownButton, {<br /> store: null,<br /> dropDown: null,<br /> hasDownArrow: true,<br /> _isPopulated: false,<br /> _lastValue: "",<br /> onChange: function(){},<br /> _getValueField: function(){ return "value"; },<br /> _getItemByValue: function(value){<br /> var ret = null;<br /> this.store.fetch({query: {value: value}, onComplete: function(i, r){<br /> if (i.length && i[0]) ret = i[0];<br /> }});<br /> return ret;<br /> },<br /> postMixInProperties: function(){<br /> this.inherited(arguments);<br /> dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);<br /> this.dropDown = new dijit.Menu();<br /> dojo.place(dojo.doc.createElement("span"), this.srcNodeRef, "first");<br /> },<br /> postCreate: function(){<br /> this._menuItemClick(this.value);<br /> this.inherited(arguments);<br /> },<br /> _menuItemClick: function(item){<br /> var str = (typeof item == "string"),<br /> i = str ? this._getItemByValue(item) : item,<br /> val = i ? i.value : null;<br /> if (!val || val == this._lastValue)<br /> return;<br /> this.setValue(val);<br /> this.setLabel(i.name);<br /> this._lastValue = val;<br /> if (!str) this.onChange(val);<br /> },<br /> _toggleDropDown: function(){<br /> var _this = this, dropDown = _this.dropDown;<br /> if (dropDown && !dropDown.isShowingNow && !_this._isPopulated)<br /> {<br /> _this.store.fetch({<br /> onItem:function(i){<br /> dropDown.addChild(new dijit.MenuItem({<br /> label: i.name,<br /> onClick: function(){ <br /> _this._menuItemClick(i);<br /> }}));<br /> }, <br /> onComplete: function(){<br /> _this._isPopulated = true;<br /> toonetown.dijit.form.DropDownSelect.superclass._toggleDropDown.call(_this);<br /> }<br /> });<br /> return; <br /> }<br /> this.inherited(arguments);<br /> }<br />});<br /></pre><br /><br />Isn't code reuse nice? :)Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-68843130742319754722007-11-14T21:05:00.001-07:002007-11-15T09:10:05.853-07:00Dojo widget - Styleable DropdownI guess it's official now - we need to be using <a href="http://www.dojotoolkit.org">dojo</a> for our development at work, so I've been trying to learn it. There are quite a few things that I like about it, and so I thought I'd start posting some of my findings as I come across them.<br /><br />Today's topic - a Styleable Dropdown.<br /><br />At <a href="http://ajaxexperience.techtarget.com/">the Ajax Experience</a> this year, there was a presentation by Aaron Gustafson from <a href="http://www.alistapart.com">A List Apart</a> where he discussed various techniques for styling forms. Most form elements can be styled just fine using CSS, however, the <code><select></code> tag is not selectable. In order to do such a thing, you need to use some kind of javascript-based solution which uses elements *other* than a select.<br /><br />Dojo is great at creating widgets - it's probably what it does the best, so I thought it would be a great exercise in learning dojo to create a widget that turns something like this:<br /><br /><pre><br /><select dojoType="toonetown.dijit.form.StyleableDropdown><br /> <option value="opt1">First Option</option><br /> <option value="opt2">Second Option</option><br /></select><br /></pre><br /><br />Into something that can be styled. This should be something fairly easy to do using "Dojo Magic" (Majik? Mojo? Dojic?)<br /><br />The first thing I tried was to use some existing dojo widgets (dijits). First off, I tried using a dijit.form.FilteringSelect. It did one part of what I wanted by taking a <code><select></code> as its input. The problem is that it's not very stylable, and is more geared to the "ComboBox" style of doing things (allows for text entry).<br /><br />What I really wanted was a dijit.form.DropDownButton - that's styleable just like I would want it, however it didn't take a <code><select></code> tag as its input. (It's kind of picky in how its input needs to be structured).<br /><br />So, I ended up creating a custom widget - extended from dijit.form.DropDownButton. Efforts to make it extended from dijit.form.FilteringSelect proved too complex. The final result follows.<br /><br /><pre><br />dojo.provide("toonetown.dijit.form.DropDownSelect");<br />dojo.require("dijit.form.Button");<br />dojo.require("dijit.Menu");<br />dojo.require("dojo.data.ItemFileReadStore");<br />dojo.declare("toonetown.dijit.form.DropDownSelect", dijit.form.DropDownButton, {<br /> store: null,<br /> dropDown: null,<br /> _isPopulated: false,<br /> _lastOption: "",<br /> onChange: function(){},<br /> postMixInProperties: function(){<br /> this.inherited(arguments);<br /> var span = dojo.doc.createElement("span"), selItem = null;<br /> if (!this.store)<br /> {<br /> var items = dojo.query("> option", this.srcNodeRef).map(function(node){<br /> node.style.display="none";<br /> return { value: node.getAttribute("value"), name: String(node.innerHTML) };<br /> });<br /> this.store = new dojo.data.ItemFileReadStore({data: {identifier:"value", items:items}});<br /> if(items && items.length && !this.value)<br /> {<br /> selItem = items[this.srcNodeRef.selectedIndex != -1 ? this.srcNodeRef.selectedIndex : 0];<br /> }<br /> }<br /> this._initSelect(selItem, span);<br /> if (!this.dropDown)<br /> {<br /> this.dropDown = new dijit.Menu();<br /> }<br /> dojo.place(span, this.srcNodeRef, "first");<br /> },<br /> _initSelect: function(item, span){<br /> if (item)<br /> {<br /> this.value = item.value;<br /> span.innerHTML = item.name;<br /> }<br /> else if (this.store)<br /> {<br /> var _this = this;<br /> this.store.fetch({onComplete: function(i, r){ <br /> if (i.length && i[0]) _this._initSelect(i[0], span);<br /> }});<br /> }<br /> },<br /> _menuItemClick: function(item){<br /> var val = item.value;<br /> if (this._lastOption != val)<br /> {<br /> this.setValue(val);<br /> this.setLabel(item.name);<br /> this._lastOption = val;<br /> this.onChange(val);<br /> }<br /> },<br /> _loadCallback: function(items, request){<br /> var dropDown = this.dropDown, _this = this;<br /> if (!dropDown) { return; }<br /> dojo.forEach(items, function(item){<br /> dropDown.addChild(new dijit.MenuItem({<br /> label: item.name,<br /> onClick: function(){ _this._menuItemClick(item);}}));<br /> });<br /> _this._isPopulated = true;<br /> toonetown.dijit.form.DropDownSelect.superclass._toggleDropDown.call(this);<br /> },<br /> _toggleDropDown: function(){<br /> var dropDown = this.dropDown;<br /> if (dropDown && !dropDown.isShowingNow && !this._isPopulated)<br /> {<br /> this.store.fetch({onComplete:dojo.hitch(this, "_loadCallback")});<br /> return; <br /> }<br /> this.inherited(arguments);<br /> }<br />});<br /></pre><br /><br />This fulfills all my requirements - now I just need to work on styling it - and probably marking it up too... :) I just figured I'd post it to my blog, as was also suggested at the Ajax Experience.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-58241313732295454352007-04-20T21:01:00.001-06:002007-11-15T09:09:45.741-07:00Amana Refrigerator Rebate WoesLast summer, my wife and were in the market for a new refrigerator. We didn't *want* to buy a refrigerator - our Maytag one went out after only 3 years of use . . . and repairing it would have cost more than getting a new one. We really weren't excited to buy yet another major appliance, as we had just replaced our 3-year-old Maytag washer just 2 months earlier. Coincidentally (or not), my parents' refrigerator (Maytag) died at about the same time, and just weeks before that, their dryer (care to guess which brand?) also bit the dust.<br /><br />Needless to say - Maytag wasn't very high on our list of potential products.<br /><br />After consulting with Consumer Reports, we decided to get an Amana. Now, yes - Amana *is* owned by Maytag - but all the reports that we had read mentioned that they were among the most reliable.<br /><br />We purchased our new refrigerator on July 25, 2006. At the time, Amana was running a promotion - the "Amana Bottom <del>Feeder</del> Freezer Summer Rebate Offer". With the purchase of our refrigerator, we would get a $100.00 rebate . . . at least, that was the idea. Although we sent in the rebate the day after the purchase, 3 months later, we still had not received confirmation. A quick call to the Parago Rebate Processing Center (the company which Amana contracted to handle the rebates) turned up that they "hadn't received our rebate information" - and basically, we were S.O.L.<br /><br />Well, 100 bucks is enough to get you motivated - so we called the store where we made the purchase. The Amana rep at the store called the rebate processing company and "magically" our rebate showed up the following day. We started tracking it at <A href="http://www.rebatetrack.com/promocenter/parago/trackdetails.html?track_number=209141794">http://www.rebatetrack.com/promocenter/parago/trackdetails.html?track_number=209141794</A><br /><br />It was received 10/27/2006 - nearly 7 months ago . . . and 3 months after the initial purchase. However, we were hopeful because the tracking site said that the rebate is "valid and scheduled for final processing."<br /><br />Come the end of February, we realized we still didn't have our rebate. A quick call on February 22nd turned up an apology, and we were promised to receive a check within the next 15 business days - by March 15th. Well, still nothing by the 19th of March, we called again, and were told that they were "unsure of why the delay was happening." Our rebate was "expedited" for a second time - "Please allow 7 business days to receive your check."<br /><br />March 30th - Spoke to the supervisor, and were told that they were going to expedite it one more time . . . and they gave us another 14-day window.<br /><br />OK - a summary for those who are keeping score:<br /><ul><br /><li><b>July 25, 2006</b> - Purchased refrigerator</li><br /><li><b>July 26, 2006</b> - Sent in rebate (expecting standard 90-day turnaround)</li><br /><li><b>October 26, 2006</b> - Called rebate fulfillment company to find that our rebate "never arrived"</li><br /><li><b>October 27, 2006</b> - Rebate "magically" shows up on fulfillment tracking website - marked as "valid"</li><br /><li><b>February 22, 2007</b> - Told that we would be "expedited" and would get rebate in 14 business days</li><br /><li><b>March 15, 2007</b> - Told that we would be "expedited" and would get rebate in 7 business days</li><br /><li><b>March 20, 2007</b> - Told that we would be "expedited" and would get rebate in 14 business days</li><br /></ul><br /><b>April 20, 2007 -</b><br /><br />Today we called again - this time we wanted a real answer. We were sick of being "expedited" - and wanted to know what was going on. This time, we asked to be routed directly to a supervisor. Our first supervisor was Jeff. He told us that there had been "overwhelming response to the rebate" and they were "aware of the problem" - but they were <b>unable to give us a timetable for the receipt of our money</b>. Now - isn't that a step *backwards*???<br /><br />We asked to be escalated to *his* supervisor - and ended up speaking with Oscar at Parago, who reiterated the "overwhelming response" line. He also refused to give an expected date for when we would get our check. He also promised to forward our information to *his* supervisor . . . moving on up the chain.<br /><br />Now, we hold no fault with Parago - they are merely the fulfillment company for Amana - so we asked Oscar for any contact information for someone at Amana. He informed us that he did not have that information. Feeling that we had hit a dead end, we tried to push for more information. He indicated that "per company policy" he was not allowed to verbalize the reason for the delay himself. So my wife (who is wonderful and has spent hours of time trying to track down this issue) tried to "guess" at the reason. What follows is more-or-less how it went down:<br /><br /><b>Brenda:</b> "Is your company a contractor for Amana?"<br /><b>Oscar:</b> "Yes"<br /><b>B:</b> "So your company acts as a contractor for Amana - is it the fault of your company for failing to fulfill your obligations to your customer, or is it the fault of Amana for not providing sufficient funds to satisfy the rebates?"<br /><b>O:</b> "As a matter of company policy, I am not allowed to verbalize to you the exact nature of the problem, but I can tell you that you are on the right track."<br /><b>B:</b> "So you're telling me that Amana has not provided the money to send to their customers."<br /><b>O:</b> "You've guessed correctly."<br /><br /><b><font color="red" size="+1">WHAT?????!!!!</font> Amana doesn't have the money to pay their obligations?</b> That is ridiculous! I don't know what is going on - but that is not right. I wonder if Whirlpool knew about this situation when they were merging with Maytag/Amana. I wonder if Whirlpool is the <b>*cause*</b> of all this. Has anyone else had a similar problem with Amana/Maytag/Whirlpool? Is there anyone out there who might be able to shed a little light on what might be going on? Please post a comment and fill us in . . .<br /><br />All told, we still don't have our money. Ironically, we received in the mail an invitation to extend our warranty with Amana . . . since we are nearing the 1 YEAR MARK of owning our refrigerator.<br /><br />I wonder if I should send it in . . .Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-17341552446541680312007-01-04T17:20:00.000-07:002007-11-15T09:09:33.759-07:00Email Posting It Is!It appears that Google has gone and broken their dashboard widget.<p>BAD Google! I expected better of you.<p>One would think that they would be able to make sure that the blogger <br>dashboard widget that they use works with the blogger site that they <br>run - but since they upgraded the site, the widget doesn't work anymore.<p>And I'm sad.<p>So I think that I am going to try and do email postings from now on <br>instead - I'm getting tired of having the blogging software that I'm <br>using keep going belly-up.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1164936649434274772006-11-30T18:30:00.000-07:002007-11-15T09:09:26.451-07:00It's been a while...I haven't written in a while - because dashblog hasn't been working for me, and I haven't had time to try and get it going.<br />I haven't done much anyway, except for edit the page at <a href="http://toonetown.blogspot.com/2006/07/java-readline-on-mac-os-x-update.html">http://toonetown.blogspot.com/2006/07/java-readline-on-mac-os-x-update.html</a>.<br /><br />People are coming to the blog and asking questions, though - so maybe that will inspire me to keep it a bit more up-to-date...Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1159816602222510132006-10-02T13:16:00.000-06:002007-11-15T09:09:06.504-07:00Optimizing Virtual PC for MacI haven't really found a single "good" repository for details on how to optimize Windows XP for running within Virtual PC for Mac - so I thought I'd create my own list here (for future reference) This will make windows as ugly as possible (but who needs "pretty" when running OSX?, and "potentially insecure" (but, then again, you're running windows...so no big deal, right?). I also don't care about sound or printing from within my VM - so you may not want to trim as hard as I do... I do the following after a clean install of Windows XP:<br /><br /><ol><li>Deactivate sticky keys - this drives me nuts! Under accessibility Options, shut off sticky keys, filter keys, toggle keys, and everything else annoying.</li><br /><li>Uninstall everything that is not going to be used - this includes all components and accessories that are atuomatically installed with windows. You don't need to use a calculator within a virtual machine... :)</li><br /><li>Install VPC additions</li><br /><li>On Start | Run... | Sysdm.cpl, do the following:<br /><ol><li>Advanced | Settings | Performance - set "Adjust for best performance"</li><br /><li>System Restore - turn off system restore</li><br /><li>Automatic Updates - turn off Automatic Updates</li><br /><li>Remote - uncheck remote assistance invitiation</li><br /><li>Hardware | Device Manager - disable the sound card (Sound Blaster 16), Standard Game Port, COM1, COM2, and LPT1 (I don't connect anything to my VM, and I don't like sound coming from it - so why burden it?)</li><br /></ol></li><br /><li>Under Start | Run | Desk.cpl do the following:<br /><ol><li>Themes - Choose "Windows Classic"</li><br /><li>Desktop - Choose "None" for the background</li><br /><li>Screen Saver - choose "None"</li><br /><li>Screen Saver | Power - Set to never shut off</li><br /><li>Appearance | Effects - Uncheck everything except to underline letters</li><br /><li>Settings - Set resolution as low as you can handle - I personally think that 1152x768 works really well on my PowerBook G4...</li></ol></li><br /><li>Right-click start menu and choose "Properties", then:<ol><li>Start Menu - Select "Classic Start Menu</li><li>Start Menu | Customize - Uncheck "Use Personalized Menus"</li><li>Toolbar - Uncheck "Hide inactive icons"</li></ol></li><br /><li> Start | Run | Wscui.cpl and do:<ol><br /><li>Shut off firewall</li><br /><li>Resources | Change the way security center alerts me - uncheck everything</li></ol></li><br /><li>Under c:\ | Tools | Folder Options:<ol><br /><li>View - Uncheck "Automatically search for network folders" and "Remember each folder's view settings"</li><br /><li>Click "Apply", then "Apply to all folders"</li></ol></li><br /><li>Open "My Computer" | Search | Change Preferences and turn off animated assistant</li><br /><li>Turn off fast user switching and welcome screen</li><br /><li>Start | Run | Services.msc, and stop and set to manual each of the following:<ol><br /><li>Application Layer Gateway Service</li><br /><li>Automatic Updates</li><br /><li>Cryptographic Services</li><br /><li>Distributed Link Tracking Client</li><br /><li>IPSec Services</li><br /><li>Logical Disk Manager</li><br /><li>Network Location Awareness</li><br /><li>Print Spooler</li><br /><li>Protected Storage</li><br /><li>Remote Registry</li><br /><li>Secondary Login</li><br /><li>Security Center</li><br /><li>Shell Hardware Detection</li><br /><li>Task Scheduler</li><br /><li>TCP/IP NetBIOS Helper</li><br /><li>Themes</li><br /><li>WebClient</li><br /><li>Windows Audio</li><br /><li>Windows Firewall/ICS</li><br /><li>Wireless Zero Configuration</li></ol></li><br /><li>Cleanup and defrag c:\</li><br /><li><b>Backup this VM - it's a good starting place</b></li><br /></ol><br />I also allocate as much RAM as possible to my VM, and shut off all the extras (sound, network, etc) in my VPC settings.<br /><br />It works for me. Now VPC is usable...Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1158107212448359902006-09-12T18:26:00.000-06:002007-11-15T09:08:50.788-07:00GLib Universal Binary FrameworkOK - so in the spirit of "If you can't find it, build it yourself", I finally got around to setting up a universal binary build of glib. It builds into a mac os framework.<br /><br />Just download the file http://www.toonetown.com/projects/downloads/GLibFramework-2.12.3.zip, as well as version 2.12.3 of glib from gtk.org. Unzip the framework file and you will have a "macos" folder. Place that folder at the top level of the untarred glib sources and open up the file macos/GLibFramework/GLibFramework.xcodeproj in xcode and build!<br /><br />This is the first step to my ultimate goal of getting WireShark to compile natively - as a universal binary. :)Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1157512304674921722006-09-05T21:11:00.000-06:002007-11-15T09:08:30.964-07:00Archiving AND compressing Mail.app messagesOK - so I was wanting to compress and archive my old messages - but I wanted to still have fairly easy access to them. I think I found a really nice way of doing this. I just put all the messages that I wanted to archive into their own folders (I did it by year - messages from 2000, 2001, etc). Then, for each folder I wanted to archive, I did the following:<br /><br /><ol><li>Open ~/Library/Mail/Mailboxes/[ARCHIVEFOLDER].mbox in BOTH finder and terminal</li><br /><li>In the Finder window, I copied the "Messages" folder to the desktop - and renamed it something a bit more descriptive (ie. "MailArchive-2000" or "MailArchive-2001")</li><br /><li>In the terminal window, I entered: <code>ln -s /Volumes/[DESCRIPTIVENAME] Messages</code>, ie. <code>ln -s /Volumes/MailArchive-2000 Messages</code></li><br /><li>I opened DiskUtility, and created a New disk image from the folder on my desktop (File | New | Disk Image from Folder...). I made sure it was compressed.</li></ol><br />Now, what this ended up doing was put all my messages in a compressed disk image on my hard drive. In Mail, the folder still shows up, and the message headers are all there cached - so I can even still search for messages based on "From", "To", or "Subject"... When I try to open a message in an archived folder, I get a message saying that I need to take the account online in order to read the message. When this happens, I simply double-click the corresponding image file, and it gets mounted, and I can access my messages easily.<br /><br />Pretty Slick! If it weren't for Mail's smart way of handling offline folders, I think it would have been quite a bit harder. In addition, since I use compressed disk images, my old email messages end up taking up less than 50% of the original space on my disk....emails - being plain text - compress very nicely!<br /><br />Maybe one day, if I'm REALLY ambitious, I'll write some kind of applescript that can do the whole thing for you....shouldn't be too hard. But I just don't have the time for it right now.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1157496070332866712006-09-05T16:41:00.000-06:002007-11-15T09:08:18.507-07:00Converting kmail messages to Mac Mail.app messagesI wasn't able to find an easy way to convert Kmail messages to mac os Mail.app - without having to export to mbox format. For me, that wasn't an option.<br /><br />I did, however, find a workaround.<br /><br /><ol><li>Create a new mailbox in mail.app (ie "Import"</li><br /><li>move your mail messages from kdemail/cur into ~/Library/Mail/Mailboxes/Import.mbox/Messages</li><br /><li>run the following: <code>let num=9999; for i in `ls`; do cat $i | wc -c | sed -e 's/\t//g' | sed -e 's/ //g' > $num.emlx; cat $i >> $num.emlx; let num=$num+1; rm $i; done</code> in a terminal window within the new "Messages" directory you have</li><br /><li>in Mail, choose to Rebuild the mailbox (Mailbox | Rebuild)</li></ol><br />This seems to work because mail just stores its information in a modified maildir format (I'm guessing this only works for Tiger).Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1156491437175113602006-08-25T01:37:00.000-06:002007-11-15T09:08:00.388-07:00ffmpegXI have been working on getting videos up for K9 Web Protection media coverage, and found that ffmpegX is a really easy-to-use program. It was able to convert my files to flv (flash video) pretty quickly. The one thing it didn't do was add the metadata - but flvtool2 did a great job of that.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1155450962848885032006-08-13T00:31:00.000-06:002007-11-15T09:07:41.656-07:00Back to NormalWell, it looks like I'm back up now. Finally.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1155052196116781362006-08-08T09:49:00.000-06:002007-11-15T09:07:32.349-07:00Mac Java = Messed up computer :(My java got corrupted - so I had to reinstall my mac... :(<br /><br />One thing I found - expat is already installed with X11 - so installing XML::RSS just requires running these two commands previous:<br /><br /><code>cpan> o conf makepl_arg 'EXPATLIBPATH=/usr/X11R6/lib EXPATINCPATH=/usr/X11R6/include'<br />cpan> o conf commit</code><br /><br />Pretty nice.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1152730252333112112006-07-12T12:26:00.000-06:002007-11-15T09:07:23.851-07:00Java-Readline on Mac OS X Update<font color="red"><b>EDIT 11-30-2006:</b> The binary files linked below are now compiled as Universal Binaries. I have no access to an Intel machine, so I would appreciate it if someone could test it and post a comment on how it worked. In order to compile as universal binaries, you must have the latest version of XCode installed, and follow the instructions in red below</font><br /><br />DarwinPorts is a great project, but I hate using when I don't have to. Mac OS X (at least Tiger does) comes with a readline compatibity already installed - so I have updated these instructions so that you can create a java-readline installation WITHOUT installing DarwinPorts.<br /><br />The steps are a bit more involved...but here they are:<br /><br />Download the libreadline-java source from <a href="http://sourceforge.net/project/showfiles.php?group_id=48669">the project site</a>.<br /><br />Unpackage.<br /><br />In the source root, edit <code>Makefile</code> and make the following changes:<ul><li>Add <code>JAVA_HOME = /Library/Java/Home</code> below the line <code># Operating system dependent</code></li><li>Make the <code>JAVANATINC</code> variable read <code>$(JAVA_HOME)/include</code></li><li>Change <code>LD_LIBRARY_PATH</code> to be <code>DYLD_LIBRARY_PATH</code></li></ul><br />Now, edit <code>src/native/Makefile</code> and change the following:<ul><li>Change the <code>LIBPATH</code> variable to be empty</li><li>Change the <code>CFLAGS</code> to <code><font color="red">-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc</font> -fno-common -DMAC_OS</code></li><li>Change <code>$(CC) -shared (OBJECTS) $(LIBPATH) $($(TG)_LIBS) -o $@</code> to <code>$(CC) -bundle -flat_namespace <font color="red">-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc</font> $(OBJECTS) $(LIBPATH) $($(TG)_LIBS) -o $@</code></li><li>change the <code>JavaReadline_LIBS</code> variable to be <code>-lreadline -ltermcap</code></li></ul><br />Now, you need to edit <code>src/native/org_gnu_readline_Readline.c</code> and make the following changes:<ul><li>On lines 98, 114, 213, and 224, change <code>#ifdef JavaReadline</code> to <code>#if defined JavaReadline && !defined MAC_OS</code></li><li>On lines 216, 235, and 475, change <code>#ifdef JavaEditline</code> to <code>#if defined JavaEditline || defined MAC_OS</code></li></ul><br />Now, you can run <code>make</code>, and you will end up with <code>libJavaReadline.so</code> and <code>libreadline-java.jar</code>.<br /><br />Rename <code>libJavaReadline.so</code> to <code>libJavaReadline.jnilib</code>.<br /><br />Move <code>libJavaReadline.jnilib</code> and <code>libreadline-java.jar</code> to <code>/Library/Java/Extensions</code> to install it and have it available to all java processes.<br /><br />To test, run <code>java test.ReadlineTest</code> from the command line.<br /><br />Have fun! Now, you can install <a href="http://henplus.sourceforge.net">HenPlus</a> on Mac OS X easily!<br /><br />If you are lazy, you can try out the pre-compiled binaries that I have available <a href="http://www.toonetown.com/projects/downloads/javareadline.zip">here</a> - after unzipping, just move the two files (not the entire folder) into your <code>/Library/Java/Extensions</code> directory. <b>NOTE:</b> these *may* only work on OS X 10.4 and up - I have only tested them on that platform, and they are *not* universal binaries - PPC only.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1152643786190835442006-07-11T12:45:00.000-06:002007-11-15T09:07:05.416-07:00Java-Readline on Mac OS X Howto<B>EDIT:</B> I have updated these instructions so that you can build using the already-installed readline libs that come with OS X (at least Tiger). See the new instructions <a href="http://toonetown.blogspot.com/2006/07/java-readline-on-mac-os-x-update.html">here</a>.<br /><br />I have been trying to get java-readline compiled on mac os, and there were references to a blog entry on it, but the entry is now gone. I found it on archive.org, and here are the instructions I used to get it running:<br /><br />Using darwinports, do: <code>port install readline</code><br /><br />In the source root, edit <code>Makefile</code> and make the following changes:<br /><ul style="text-align: left;"><li style="text-align: left; ">Add <code style="">JAVA_HOME = /Library/Java/Home</code> below the line <code style=""># Operating system dependent</code></li><li style="">Make the <code style="">JAVANATINC</code> variable read <code style="">$(JAVA_HOME)/include</code></li><li style="">Change <code style="">LD_LIBRARY_PATH</code> to be <code style="">DYLD_LIBRARY_PATH</code></li></ul><br />Now, edit <code style="">src/native/Makefile</code> and change the following:<br /><ul style="text-align: left;"><li style="text-align: left;">Add <code style="">-I/opt/local/include</code> to the end of the <code>INCLUDES</code> variable.</li><li style="">Change the <code style="">LIBPATH</code> variable to be <code style="">-L/opt/local/lib</code></li><li style="">Change the <code style="">CFLAGS</code> variable to <code style="">-fno-common</code></li><li style="">Change <code style="">$(CC) -shared $(OBJECTS) $(LIBPATH) $($(TG)_LIBS) -o $@</code> to <code style="">$(CC) -bundle -flat_namespace $(OBJECTS) $(LIBPATH) $($(TG)_LIBS) -o $@</code></li></ul><br />You should now be able to run <code style="">make</code> and get <code style="">libJavaReadline.so</code> and <code style="">libreadline-java.jar</code>. You'll need to rename <code style="">libJavaReadline.so</code> to <code style="">libJavaReadline.jnilib</code>. <br /><br />I put both of these in <code style="">/Library/Java/Extensions</code>, which makes the library available to all Java processes that are started as you. Make sure everything works by running <code style="">java test.ReadlineTest</code> from the command line.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1152044646784387282006-07-04T14:20:00.000-06:002007-11-15T09:06:49.465-07:00Syncing iTunes library between Mac and PCI searched around quite a bit on Google to try and find a way to sync my iTunes library between my laptop (Mac) and my desktop (PC). After reading quite a bit about messing with the Library.xml file and stuff that I didn't want to deal with (I just wanted it to work quickly - something that I could script, and maybe use something like rsync), I decided to just play around a little bit...<br /><br />What I found was really interesting - it's quite easy to sync your iTunes library, if you have things set up just right.<br /><br />If you have both your Mac and your PC set to "Keep iTunes Music Folder Organized", then most of the work is done for you.<br /><br />All you need to do is copy the "iTunes Music" folder from the Mac to the PC, and copy the "iTunes Library" file from the Mac to the PC, but rename it as "iTunes Library.itl"<br /><br />To make things even easier, you can rename the "iTunes Library" file to "iTunes Library.itl" on your mac, and it will work just fine - then you can do a simple rsync and get everything you need synced across.<br /><br />The rsync command I use is:<br /><pre>rsync -avz --force --delete --stats --size-only -e ssh --exclude="iTunes Music Library.xml" --exclude=".DS_Store" ~/Music/iTunes/* user@desktop:'~/My\ Music/iTunes/'</pre><br />You can modify your rsync command yourself. Of note, DO NOT copy the xml file (it's "--exclude"ed), because iTunes on Windows will just recreate it based off of the .itl file. Also, I didn't want to mess up my Windows file structure with all the .DS_Store files (so they are "--exclude"ed as well)<br /><br />Since I don't care about two-way synchronization (I just want my Windows machine to be a clone of my Mac), this works for me. Hopefully, it's helpful for someone else as well.Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1152041811808997342006-07-04T13:32:00.000-06:002007-11-15T09:06:17.078-07:00CougarFan - FinallyYesterday, I finally had some time to work on the <a href="http://www.cougarfan.com">CougarFan.com</a> website.<br /><br />I didn't get to do too much, but I was able to get the DB schema in place and ready to go. We'll see how much more time I can find in the next few days...Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1151700662053315092006-06-30T14:47:00.000-06:002007-11-15T09:06:06.449-07:00CallistoYeah - I'm finally downloading the newest version of <a href="http://www.eclipse.org">Eclipse</a> - <a href="http://www.eclipse.org/callisto/">Callisto</a>!<br /><br />I'm so happy!Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.comtag:blogger.com,1999:blog-28795047.post-1151680648518723562006-06-30T09:13:00.000-06:002007-11-15T09:05:52.384-07:00New blogging applicationOK - so I was poking around <a href="http://labs.google.com">Google Labs</a>, and found a <a href="http://www.google.com/macwidgets/index.html">dashboard widget</a> that allows blog posting to blogger. I thought I'd give it a try.<br /><br />I might not be using BlogWorkz anymore - this seems to be working pretty well...Nathan Toonehttp://www.blogger.com/profile/09346454012925438396noreply@blogger.com