<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4575858551835702670</id><updated>2011-04-21T17:47:52.128-05:00</updated><category term='mobile'/><category term='Code'/><category term='sad'/><category term='iphone'/><category term='git'/><category term='software'/><category term='apple'/><category term='apology'/><category term='mac'/><category term='WTF'/><category term='UI'/><category term='backups'/><category term='Java'/><category term='google'/><category term='Web'/><title type='text'>Thinks In Code</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5329246269189843082</id><published>2008-04-14T11:53:00.003-05:00</published><updated>2008-04-14T12:23:07.386-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='backups'/><title type='text'>The importance of backups; the dangers of "rm -rf"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.wdc.com/global/images/products/frnt/300/wdfMyPassport_Essential.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 202px; height: 202px;" src="http://www.wdc.com/global/images/products/frnt/300/wdfMyPassport_Essential.jpg" alt="" border="0" /&gt;&lt;/a&gt;One can't truly appreciate the importance of backups until it saves you from certain doom. I can now say that I personally have been rescued by my backups.&lt;br /&gt;&lt;br /&gt;It all started innocently enough - I wanted to wipe out my build directory and start clean again. However, in this case, my build directory happened to have the same name as my Git repository.  My Git repository is located in &lt;code&gt;/Users/joe/devel/sipx/git_main&lt;/code&gt;. Meanwhile, my build directory is located in &lt;code&gt;/Users/joe/devel/sipx/build/git_main&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Some of you are already shaking your heads, knowing what comes next. Without double-checking my current directory, I typed:&lt;br /&gt;&lt;code&gt;$ rm -rf git_main&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;All right, now it's time to start a new build. I'll just go into my project root directory...&lt;br /&gt;&lt;code&gt;$ cd ~/devel/sipx/git_main&lt;br /&gt;-bash: cd: /Users/joe/devel/sipx/git_main: No such file or directory&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;My stomach churned.&lt;code&gt;&lt;br /&gt;$ pwd&lt;br /&gt;$ /Users/joe/devel/sipx&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I had just trashed my project root!&lt;br /&gt;&lt;br /&gt;After about 30 seconds of panic - I don't have permission to push my changes to our official repository, so I had lots and lots of changes that hadn't been submitted - I remembered that just the previous Friday, I had started backing up my Git repository to a &lt;a href="http://www.wdc.com/en/products/products.asp?driveid=393&amp;amp;language=en"&gt;WD Passport&lt;/a&gt; USB hard drive. This was first thing Monday morning, and I hadn't made any new changes yet.&lt;br /&gt;&lt;br /&gt;So, thankfully, I was able to restore my entire Git repository:&lt;br /&gt;&lt;code&gt;cp -R /Volumes/WD\ Passport/Projects/sipx/git_main .&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;My woes didn't end there, unfortunately. For compatibility across my different computers I use, the Passport was formatted as a FAT32 partition. The file permissions were all messed up, and apparently my sync software was too smart for its own good - it had changed the newline markers so now all the files appeared changed.&lt;br /&gt;&lt;br /&gt;So, when I tried to rebase my branch against the &lt;code&gt;master&lt;/code&gt; branch, I got hundreds of errors about "suspicious patch lines" and it wouldn't continue. My stomach started to churn again, but before giving up and tendering my resignation, I searched Google for this error message.&lt;br /&gt;&lt;br /&gt;I found a blog post with a strangely appropriate domain name: &lt;a href="http://www.dont-panic.cc"&gt;www.dont-panic.cc&lt;/a&gt;, entitled &lt;a href="http://www.dont-panic.cc/capi/2007/07/13/git-on-windows-you-have-some-suspicious-patch-lines/"&gt;Git on Windows: “You have some suspicious patch lines”&lt;/a&gt;. The solution was to edit &lt;code&gt;.git/hooks/pre-commit&lt;/code&gt; and comment out the following lines:&lt;br /&gt;&lt;code&gt;if (/\s$/) {&lt;br /&gt;bad_line("trailing whitespace", $_);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Although I am running a Mac, the trick still fixed my problem. After that, my rebase was successful and I was back in business.&lt;br /&gt;&lt;br /&gt;So, remember: Always make backups, and double-check your working directory before you wipe out its contents!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5329246269189843082?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5329246269189843082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5329246269189843082' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5329246269189843082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5329246269189843082'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2008/04/importance-of-backups-dangers-of-rm-rf.html' title='The importance of backups; the dangers of &quot;rm -rf&quot;'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-6932185979827734791</id><published>2008-04-02T14:02:00.002-05:00</published><updated>2008-04-02T14:04:49.613-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='sad'/><title type='text'>JavaOne :-(</title><content type='html'>Ahh, another year, another JavaOne coming up!&lt;br /&gt;And another year I can't attend because of the $1,500+ price tag! (And that's with the early bird "discount")&lt;br /&gt;&lt;br /&gt;I'd love to be able to go, maybe someday when I have an extra $1,500+ lying around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-6932185979827734791?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/6932185979827734791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=6932185979827734791' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/6932185979827734791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/6932185979827734791'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2008/04/javaone.html' title='JavaOne :-('/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-8481141390958811636</id><published>2008-03-08T18:52:00.003-05:00</published><updated>2008-03-08T19:07:47.431-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Java coming to the iPhone after all!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.iphonic.tv/java_iphone-thumb.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 158px; height: 285px;" src="http://www.iphonic.tv/java_iphone-thumb.gif" alt="" border="0" /&gt;&lt;/a&gt;A friend of mine pointed me to &lt;a href="http://www.infoworld.com/article/08/03/07/sun-iphone-java_1.html"&gt;this InfoWorld article&lt;/a&gt;, which describes Sun's plan to write a Java VM for the iPhone using the just-announced iPhone SDK, with availability after June.&lt;br /&gt;&lt;br /&gt;This is an exciting development, and I hope Apple doesn't try to interfere. Steve Jobs made his opposition to Java on the iPhone apparent with the "heavyweight ball and chain" remark. The only possible objection I can think of is that this could open up a way to get applications on the iPhone without going through the App Store, running on the Java VM instead of on the iPhone native platform.&lt;br /&gt;&lt;br /&gt;If Apple is smart, they should talk with Sun and work together to bring a great, well-integrated Java VM to the iPhone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-8481141390958811636?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/8481141390958811636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=8481141390958811636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8481141390958811636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8481141390958811636'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2008/03/java-coming-to-iphone-after-all.html' title='Java coming to the iPhone after all!'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-2143382266541181330</id><published>2008-03-07T11:39:00.003-05:00</published><updated>2008-03-07T12:02:28.035-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Some thoughts on the iPhone SDK</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.timeinc.net/popsci/images/2007/10/n95_04_web.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 257px; height: 337px;" src="http://img.timeinc.net/popsci/images/2007/10/n95_04_web.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm sure this has been done to death already on countless other blogs, but being a mobile device fanatic I had to sound off too.&lt;br /&gt;&lt;br /&gt;Like most people, I was very impressed with the iPhone SDK roadmap yesterday. The game demos, the App Store revenue sharing model, and the enterprise features are all very cool and I look forward to seeing them implemented.&lt;br /&gt;&lt;br /&gt;The App Store in particular seems like a really great setup, and I think Nokia/Symbian should learn a lesson from this. Freeware developers can have a difficult time getting a Symbian application signed to easily distribute, and there are only a select few applications available for over-the-air installation with Nokia's Download! client.&lt;br /&gt;&lt;br /&gt;It's still not enough to lure me away from my beloved Nokia N95, though.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;The game demos looked great. I'm not sold on the iPhone as a gaming device, though. First there's the battery problem. Games suck up a lot of battery power, and since the iPhone battery is not user-replaceable, it's not possible to carry a spare battery for extended gaming sessions. The other problem is the lack of tactile buttons. Touch and gesture control is great, but for many games you still need  your basic D-pad and action buttons. Anybody who has tried the NES emulator on a jailbroken iPhone can attest to the difficulty of playing Super Mario Bros. without feeling the D-pad or A/B buttons.&lt;br /&gt;&lt;br /&gt;I had a hope, however faint it may have been, that Apple would come to their senses and introduce a Java ME runtime. The iPhone still has the distinction of being the only consumer targeted smartphone missing Java ME. Steve's comment about Java being a heavyweight ball and chain that "nobody uses anymore" couldn't be further from the truth.&lt;br /&gt;&lt;br /&gt;My other complaints are not new ones, but I'll summarize them here anyhow: &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No MMS!&lt;/span&gt; You can't send a picture to a friend using MMS, something pretty much all basic level handsets have.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EDGE!&lt;/span&gt; Until there's a 3G iPhone (or even, wishfully, 3.5G), I can't see how the iPhone's Internet experience can be enjoyable. Unless you live in an area with citywide Wi-Fi, of course! The coverage is really good in the Boston area, and let me tell you, the difference between EDGE and a HSDPA connection is astounding.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No video! &lt;/span&gt;Most camera phones now have the ability to record video clips. I can't understand Apple's decision to leave out the capability to record videos, especially on a phone that has such an emphasis on multimedia.&lt;/li&gt;&lt;/ul&gt;If the next revision of the iPhone resolves these issues - it's a certainty that it will at least be 3G - I think it will really be a serious threat to the big mobile players. Or, at least, give them a run for their money.&lt;br /&gt;&lt;br /&gt;The next year or two will be very busy with new developments in the mobile space. We've seen peeks of the innovative touch features of the upcoming Windows Mobile 7, the S60 Touch demos from the Mobile World Congress last month, and the impending arrival of Android. At this point, it will be anyone's game!&lt;br /&gt;&lt;br /&gt;For now though, I'll keep loving my N95.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-2143382266541181330?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.macrumors.com/2008/03/06/apple-releases-iphone-sdk-demos-spore-instant-messaging/' title='Some thoughts on the iPhone SDK'/><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/2143382266541181330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=2143382266541181330' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/2143382266541181330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/2143382266541181330'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2008/03/some-thoughts-on-iphone-sdk.html' title='Some thoughts on the iPhone SDK'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5220542593421317764</id><published>2007-12-07T21:45:00.001-05:00</published><updated>2007-12-07T21:48:46.512-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apology'/><title type='text'>I'd like to apologize...</title><content type='html'>About 6 months ago I wrote &lt;a href="http://thinksincode.blogspot.com/2007/06/bluetooth-headsets-not-fashion.html"&gt;a rant about people wearing Bluetooth headsets&lt;/a&gt;. It was a poor attempt at humor, and if I offended anybody I'm truly sorry. I use my headset all the time, after all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5220542593421317764?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5220542593421317764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5220542593421317764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5220542593421317764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5220542593421317764'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/12/id-like-to-apologize.html' title='I&apos;d like to apologize...'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-8260044548286926404</id><published>2007-12-03T10:26:00.000-05:00</published><updated>2007-12-03T10:58:21.780-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>A double negative makes... a confusing user experience</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://laspoliticas.files.wordpress.com/2007/10/confused.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://laspoliticas.files.wordpress.com/2007/10/confused.jpg" alt="" border="0" /&gt;&lt;/a&gt;We all learned in school that a double negative makes a positive. "I don't have nothing" is really just a more confusing way to say "I have something". George Carlin once had &lt;a href="http://www.jbnickel.com/personal/pages/george3.html"&gt;a bit&lt;/a&gt; where he says  that, when asked how you are doing, he sometimes replies "I'm not unwell, thank you".  In both of these examples, the double negative version is somewhat confusing and unclear, especially to a non-native speaker of English.&lt;br /&gt;&lt;br /&gt;I've critiqued Troels Bay's &lt;a href="http://troelsbay.eu/software/reader"&gt;Google Reader Notifier&lt;/a&gt; here &lt;a href="http://thinksincode.blogspot.com/2007/03/always-give-your-user-choice.html"&gt;before&lt;/a&gt;. And again, I have to stress: It's a wonderful program that I use daily. It just has some UI quirks that sometimes give me a spark for a blog posting.&lt;br /&gt;&lt;br /&gt;Reader Notifier uses a few double-negative based options in its preferences:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Stwqa_tC5_A/R1Qi_OvMkJI/AAAAAAAAAEY/uHIvLeZEswU/s1600-R/ReaderNotifier-Screenshot2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_Stwqa_tC5_A/R1Qi_OvMkJI/AAAAAAAAAEY/eI-fdkKTqgg/s400/ReaderNotifier-Screenshot2.png" alt="" id="BLOGGER_PHOTO_ID_5139771544419733650" border="0" /&gt;&lt;/a&gt;For example, I have unchecked the "Don't show tooltips" checkbox, because I want to see the tooltips. This is essentially telling the program "Don't not display tooltips". Confusing, right? Sure, it doesn't take a genius to figure out the preferences, but it's still not as intuitive as it could be. A clearer option would be "Show tooltips". Of course, then the semantics of the checkbox would have to be reversed in the application logic.&lt;br /&gt;&lt;br /&gt;By changing the "Don't display items", "Don't show tooltips" and "Don't play sound" checkboxes to "Display items", "Show tooltips" and "Play sound" respectively, the UI will also be consistent. In its current state, it's inconsistent - there are three "negative" checkboxes ("Don't display items", "Don't show tooltips", "Don't play sound") and two positive checkboxes ("Show count in menu bar", "Check for updates on startup"). A consistent UI would use all positive (recommended!) checkboxes or all negative (bad idea!) checkboxes.&lt;br /&gt;&lt;br /&gt;Again, though, let me say - Google Reader Notifier is a great, useful app. If you are running Mac OS X and use Google Reader, you should check it out at &lt;a href="http://troelsbay.eu/software/reader"&gt;http://troelsbay.eu/software/reader&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-8260044548286926404?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/8260044548286926404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=8260044548286926404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8260044548286926404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8260044548286926404'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/12/double-negative-makes-confusing-user.html' title='A double negative makes... a confusing user experience'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Stwqa_tC5_A/R1Qi_OvMkJI/AAAAAAAAAEY/eI-fdkKTqgg/s72-c/ReaderNotifier-Screenshot2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5170270706230812937</id><published>2007-12-02T23:01:00.000-05:00</published><updated>2007-12-02T23:09:44.180-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Time and Date 2.0 published!</title><content type='html'>Today I finished version 2.0 of my Time and Date gadget for the Google personalized homepage. The main changes from the original are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can stop the blinking separator if you don't like it.&lt;/li&gt;&lt;li&gt;You can choose from several different formats for showing the date, or hide the date if you don't want it.&lt;/li&gt;&lt;li&gt;I removed the greeting feature, because I got a lot of negative feedback about it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The look and feel of the clock has been improved.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Below is a live preview of the gadget. If you want to add it to your iGoogle homepage, just click the &lt;img src="http://gmodules.com/ig/images/plus_google.gif" /&gt; button below.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gmodules.com/ig/ifr?url=http://hosting.gmodules.com/ig/gadgets/file/109810496796399416248/timedate2.xml&amp;amp;up_clockFormat=0&amp;amp;up_blinkSeparator=1&amp;amp;up_showDate=1&amp;amp;up_dateFormat=dddd%2C%20mmmm%20d%2C%20yyyy&amp;amp;synd=open&amp;amp;w=300&amp;amp;h=110&amp;amp;title=Time+and+Date&amp;amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;amp;output=js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5170270706230812937?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://hosting.gmodules.com/ig/gadgets/file/109810496796399416248/timedate2.xml' title='Time and Date 2.0 published!'/><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5170270706230812937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5170270706230812937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5170270706230812937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5170270706230812937'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/12/time-and-date-20-published.html' title='Time and Date 2.0 published!'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-7616963490015134616</id><published>2007-11-30T01:25:00.001-05:00</published><updated>2007-11-30T01:33:40.672-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>New version of my Google clock module on the way!</title><content type='html'>I've gotten lots of feedback, some positive and some negative, about &lt;a href="http://www.google.com/ig/directory?q=attardi&amp;amp;root=%2Fig&amp;amp;dpos=top&amp;amp;url=http://jattardi.googlepages.com/timedate.xml"&gt;my Time and Date module&lt;/a&gt; for the &lt;a href="http://www.google.com/ig"&gt;iGoogle personalized homepage&lt;/a&gt;. Tonight I finally started working on the long-procrastinated-on new version of my digital clock.&lt;br /&gt;&lt;br /&gt;I'm not sure yet when I will be done, but in the meantime here is a screenshot of the design in progress. As always, I would like to hear any comments - positive or negative - about the new design!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;The current version:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Stwqa_tC5_A/R0-uS-LXJkI/AAAAAAAAAEI/sRh7QkmDE5s/s1600-R/Clock1-Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_Stwqa_tC5_A/R0-uS-LXJkI/AAAAAAAAAEI/wytPkMRb2-Q/s320/Clock1-Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5138517340804556354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;The new (work in progress) version:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Stwqa_tC5_A/R0-tuOLXJjI/AAAAAAAAAEA/NAGd4KZPoTc/s1600-R/Clock2-Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Stwqa_tC5_A/R0-tuOLXJjI/AAAAAAAAAEA/jRydqP1jDTk/s320/Clock2-Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5138516709444363826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-7616963490015134616?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/7616963490015134616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=7616963490015134616' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/7616963490015134616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/7616963490015134616'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/11/new-version-of-my-google-clock-module.html' title='New version of my Google clock module on the way!'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Stwqa_tC5_A/R0-uS-LXJkI/AAAAAAAAAEI/wytPkMRb2-Q/s72-c/Clock1-Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-3968024168596715472</id><published>2007-06-14T14:18:00.000-05:00</published><updated>2007-06-14T14:31:44.004-05:00</updated><title type='text'>Bluetooth headsets: not a fashion accessory</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Stwqa_tC5_A/RnGWt26JEPI/AAAAAAAAADA/XgpiOQ01TQs/s1600-h/bluetooth-headset-3-757709.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_Stwqa_tC5_A/RnGWt26JEPI/AAAAAAAAADA/XgpiOQ01TQs/s320/bluetooth-headset-3-757709.jpg" alt="" id="BLOGGER_PHOTO_ID_5076003969600917746" border="0" /&gt;&lt;/a&gt;Bluetooth headsets are one of the greatest cell phone accessories. You get hands-free calling without being physically tethered to your phone by a long wire. They are fairly comfortable, although some are more so than others. But seriously, people. Do you really need to walk around wearing your Bluetooth headsets even when you aren't using them?&lt;br /&gt;&lt;br /&gt;As Bluetooth headsets get smaller and lighter, I see this more and more. People walking around wearing the headset as if it's a part of their fashion ensemble. Maybe some people think it's a status symbol, much like early cell phone users wore their phones in prominent bulky cases that just screamed, "Look at me! I have a CELLULAR PHONE!" Those days have past. A Bluetooth headset is not a status symbol. Wearing it all the time makes it look like a Borg implant.&lt;br /&gt;&lt;br /&gt;Surely you aren't so important and so busy that you can't spare six seconds or so to remove the headset from your pocket, place it on your ear, then answer the call? I don't know, maybe the callers will hang up after only one ring.&lt;br /&gt;&lt;br /&gt;The next time you go walking through the mall or the grocery store wearing your Bluetooth headset, pause for a moment as you pass by each person and come to the realization that in their head, they are laughing at you.&lt;br /&gt;&lt;br /&gt;Please, just take the headset off!&lt;br /&gt;&lt;br /&gt;(Image: &lt;a href="http://popscoff.com/?p=60"&gt;PopScoff.com&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-3968024168596715472?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/3968024168596715472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=3968024168596715472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/3968024168596715472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/3968024168596715472'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/06/bluetooth-headsets-not-fashion.html' title='Bluetooth headsets: not a fashion accessory'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Stwqa_tC5_A/RnGWt26JEPI/AAAAAAAAADA/XgpiOQ01TQs/s72-c/bluetooth-headset-3-757709.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-4782862775101151410</id><published>2007-05-09T09:21:00.000-05:00</published><updated>2007-05-09T10:13:44.487-05:00</updated><title type='text'>Adventures in Usenet!</title><content type='html'>The comp.lang.java.programmer Usenet group is a good source of help, and occasionally a good heated debate. You have your serious technical discussions, newbie questions, with a periodic sprinkling of homework help.&lt;br /&gt;&lt;br /&gt;My favorites, though, are the completely ambiguous requests. Take, for example, this post from early this morning:&lt;pre wrap=""&gt;&lt;blockquote&gt;hi everyone.. ı have a problem about j2me... how can ı write codes&lt;br /&gt;with jcreator for mobile phones? can anyone help me?&lt;br /&gt;thank you&lt;/blockquote&gt;&lt;/pre&gt;What's wrong with this request? First of all, as I mentioned, it's a completely ambiguous request. It'd be no different if someone posted asking, "how can I write a program in Java?" You need to be more specific when asking for help.&lt;br /&gt;&lt;br /&gt;Second, it shows no initiative on your part. Before posting for help, you should have at least read some tutorials or started reading a book. Your question should be about something in particular you're stuck on ("I keep getting this compilation error and can't figure out why") rather than an all-encompassing question like "how can I write codes with jcreator for mobile phones?".&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-4782862775101151410?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/4782862775101151410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=4782862775101151410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/4782862775101151410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/4782862775101151410'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/05/adventures-in-usenet.html' title='Adventures in Usenet!'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-7653161376779114859</id><published>2007-03-30T15:50:00.000-05:00</published><updated>2007-03-30T16:28:10.491-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTF'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>April Fools comes early?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/61/197687831_c3deb8516f_m.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 206px; height: 154px;" src="http://farm1.static.flickr.com/61/197687831_c3deb8516f_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;Of course, the title is a joke, but I've read a couple of threads over at TheServerSide.com today and yesterday that made me check the calendar to make sure April 1st had not yet arrived.&lt;br /&gt;&lt;br /&gt;First, we have &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=44803"&gt;Pure servlets: Designing Web UIs for Simplicity&lt;/a&gt;, a discussion about &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-pureserv/?ca=dgr-jw22PureServletGUI"&gt;an article posted at IBM developerWorks&lt;/a&gt; which attempts to argue that generating the HTML to be displayed directly within the servlet. The sample code in the article contains snippets such as:&lt;br /&gt;&lt;pre class="displaycode"&gt;if ("true".equals(request.getAttribute(P_SUCCESS)))&lt;br /&gt;out.printDIV("smallHeading", "Team picks were saved successfully.");&lt;br /&gt;out.printDIV("reminder", "(Reminder:  \"Pick 20\" represents the team you"&lt;br /&gt; + " think likeliest to win.  \"Pick 1\" is the least likely.)");&lt;br /&gt;&lt;/pre&gt;The author, Jason Van Cleve, says that JSP is too complex for web designers and Java developers apparently can't properly write HTML, so we might as well go back in time and re-invent the wheel. Of course, I'm paraphrasing here. What he actually says is:&lt;br /&gt;&lt;blockquote&gt;For Web pages with dynamic content, Java™Server Pages (JSP) technology is touted as a means of separating the developer's concerns from those of the UI designer. Unfortunately, JSP is too complex for many designers, so Java developers tend to handle the JSP code themselves, often with unsatisfactory results.&lt;/blockquote&gt;This pure-servlet approach is touted by Van Cleve as a means to &lt;span style="font-style: italic;"&gt;simplicity! &lt;/span&gt;&lt;span&gt;Uh, what? What we're essentially doing is taking presentation logic and business logic, pouring them into the blender together and hitting PUREE. Good luck separating them again!&lt;br /&gt;&lt;/span&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Next, there is an &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=44822"&gt;announcement of a new build tool called Schmant&lt;/a&gt;. Most of us use Ant, but OK - some people need more than Ant can do alone. That's what we have Maven for. If you don't like either of those, there's already &lt;a href="http://sourceforge.net/projects/remoteant/"&gt;Rant&lt;/a&gt;, &lt;a href="http://invicta.sourceforge.net/"&gt;Invicta&lt;/a&gt;, &lt;a href="http://jmk.sourceforge.net/"&gt;JMK&lt;/a&gt;, &lt;a href="http://krysalis.org/centipede/"&gt;Centipede&lt;/a&gt;, or &lt;a href="http://www.cpmake.org/"&gt;CPMake&lt;/a&gt;! But that isn't enough. Now there is &lt;a href="http://www.schmant.org/"&gt;Schmant&lt;/a&gt;. Its notable feature is that it uses the JDK 6 scripting engine for its build scripts. Of course, &lt;a href="http://ant.apache.org/manual/OptionalTasks/script.html"&gt;Ant already has scripting support&lt;/a&gt;, with the added benefit of not requiring Java 6, but why use something that's tried and tested and solid when we can start from scratch?&lt;br /&gt;&lt;br /&gt;(Photo: &lt;a href="http://flickr.com/photos/isriya/197687831/"&gt;isriya&lt;/a&gt;)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-7653161376779114859?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/7653161376779114859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=7653161376779114859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/7653161376779114859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/7653161376779114859'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/03/april-fools-comes-early.html' title='April Fools comes early?'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/61/197687831_c3deb8516f_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-6427175018661130106</id><published>2007-03-28T15:55:00.000-05:00</published><updated>2007-03-28T16:11:19.111-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Goodbye to VirtueDesktops</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.freemacware.com/wp-content/images/virtuedesktops.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 120px;" src="http://www.freemacware.com/wp-content/images/virtuedesktops.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's always sad when a great piece of software reaches the end of its life. Tony Arnold has announced that he is ceasing development of &lt;a href="http://www.virtuedesktops.info/"&gt;VirtueDesktops&lt;/a&gt;. This is a real shame, as VirtueDesktops is one of my favorite free Mac OS X applications.&lt;br /&gt;&lt;br /&gt;For those who aren't familiar, VirtueDesktops allows you to have multiple virtual desktops in Mac OS X like the various Unix window environments offer. It's a huge benefit for anyone doing development work; all the Mac users at my office all use it.&lt;br /&gt;&lt;br /&gt;The main reason, he says, is that the upcoming Mac OS X 10.5 "Leopard" has a virtual desktop capability, called &lt;a href="http://www.apple.com/macosx/leopard/spaces.html"&gt;Spaces&lt;/a&gt;, built right in. I only hope that Spaces has as strong of a feature set as VirtueDesktops.&lt;br /&gt;&lt;br /&gt;I can totally understand Tony's reasoning here. I myself have abandoned a software project, although it wasn't nearly as popular as VirtueDesktops, when Microsoft aquired Sysinternals and guaranteed that my humble &lt;a href="http://sourceforge.net/projects/winpstools"&gt;Windows Process Tools&lt;/a&gt; would never measure up to what is now a Microsoft tool, &lt;a href="http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/PsTools.mspx"&gt;Sysinternals PsTools&lt;/a&gt;. Of course, &lt;a href="http://sourceforge.net/forum/forum.php?thread_id=1208645&amp;amp;forum_id=435706"&gt;this message post&lt;/a&gt; should have told me that this was coming.&lt;br /&gt;&lt;br /&gt;Anyway, I'm rambling off point. My failed projects are a whole different subject. Best of luck to Tony in his future projects, and thanks for a great piece of software!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-6427175018661130106?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/6427175018661130106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=6427175018661130106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/6427175018661130106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/6427175018661130106'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/03/goodbye-to-virtuedesktops.html' title='Goodbye to VirtueDesktops'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-8225570334950813076</id><published>2007-03-26T12:22:00.000-05:00</published><updated>2007-03-26T12:35:01.565-05:00</updated><title type='text'>Call for Feature Requests</title><content type='html'>Recently, I decided to resurrect my long-time pet project, Log File Watcher, and get it under active development again. The previously released version, named FileWatch, was a mess. It was buggy, had too many features crammed in, and was just poorly executed.&lt;br /&gt;&lt;br /&gt;I've decided to start over from scratch, and rename it Log File Watcher. The name change is mostly to match the project's URL over at SourceForge: http://logfilewatcher.sourceforge.net/.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;About Log File Watcher&lt;/h3&gt;&lt;br /&gt;Log File Watcher is basically a cross-platform GUI version of the &lt;code&gt;tail&lt;/code&gt; utility. You open a file with it, and it watches the file for changes. When new lines of text get added to the file, they will appear in the GUI window as well.&lt;br /&gt;&lt;h3&gt;Feature Requests Wanted!&lt;/h3&gt;&lt;br /&gt;When I first started working on it, I thought of a few general features - the only real notable one was coloring lines from the log that matched user-defined patterns.&lt;br /&gt;&lt;br /&gt;So, the main purpose of this blog post is to ask any readers out there: What sorts of features would you like to see in a utility like this?&lt;br /&gt;&lt;br /&gt;You can send me ideas in one of three ways:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Visit the project page at &lt;a href="http://www.sourceforge.net/projects/logfilewatcher"&gt;http://www.sourceforge.net/projects/logfilewatcher&lt;/a&gt; and add it to the Feature Requests tracker. (&lt;b&gt;This is the preferred method.&lt;/b&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Leave a comment on this post.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Email it to &lt;a href="mailto:jattardi+logfilewatcher@gmail.com"&gt;jattardi+logfilewatcher@gmail.com&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-8225570334950813076?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sourceforge.net/projects/logfilewatcher' title='Call for Feature Requests'/><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/8225570334950813076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=8225570334950813076' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8225570334950813076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8225570334950813076'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/03/call-for-feature-requests.html' title='Call for Feature Requests'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-8598068967841504753</id><published>2007-03-12T09:00:00.000-05:00</published><updated>2007-03-12T09:13:18.213-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Always give your user the choice</title><content type='html'>I hate to pick on individual applications for examples of bad UI practices. I especially hate to pick on an application that I really like. But, sometimes these things can't be avoided.&lt;br /&gt;&lt;br /&gt;If you have a Mac, and use &lt;a href="http://reader.google.com/"&gt;Google Reader&lt;/a&gt;, then there is a great little application called &lt;a href="http://troelsbay.eu/software/reader"&gt;Google Reader Notifier&lt;/a&gt;. It works with &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt;, a notification system for Mac OS X, to notify you when there are new unread items in your reading list.&lt;br /&gt;&lt;br /&gt;I love this program, except for one thing. It periodically checks for an updated version, and when there is an update available, it lets you know via a message dialog. Unfortunately, it makes the assumption that you want to download the new version right now, and the only available button in this message dialog is "Thanks". So polite.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Stwqa_tC5_A/RfVfC8CdqWI/AAAAAAAAABI/A4hXOL-yKNk/s1600-h/grn_dialog.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_Stwqa_tC5_A/RfVfC8CdqWI/AAAAAAAAABI/A4hXOL-yKNk/s320/grn_dialog.png" alt="" id="BLOGGER_PHOTO_ID_5041039861991975266" border="0" /&gt;&lt;/a&gt;This is not usually a good idea. It's always good to download the latest version of an application, but it might not be convenient for the user at this moment. Most applications that perform update checking give the option of installing it now or waiting until another time. Later on, you would get another reminder of the new version.&lt;br /&gt;&lt;br /&gt;Let me reiterate - my intention is not to rip on Google Reader Notifier. As I said, I love it and use it daily. But every application can use some polishing here and there. This is one such area for this app.&lt;br /&gt;&lt;br /&gt;So, when developing your applications, please remember - always give your user the choice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-8598068967841504753?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/8598068967841504753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=8598068967841504753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8598068967841504753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/8598068967841504753'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/03/always-give-your-user-choice.html' title='Always give your user the choice'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Stwqa_tC5_A/RfVfC8CdqWI/AAAAAAAAABI/A4hXOL-yKNk/s72-c/grn_dialog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5857361613248384774</id><published>2007-02-25T23:31:00.000-05:00</published><updated>2007-02-25T23:33:20.210-05:00</updated><title type='text'>A couple of random updates</title><content type='html'>&lt;ul&gt;&lt;li&gt;One of my favorite Web sites, The Daily WTF, has been renamed to &lt;a href="http://www.worsethanfailure.com/"&gt;Worse Than Failure&lt;/a&gt;. While I will miss the old name, the new name is cool too. I've updated the link in my Recommended Reading list.&lt;/li&gt;&lt;li&gt;I got rid of the ads on this blog. There was no reason for them, really, and I apologize. Hopefully this will attract more readers. Yeah, maybe.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5857361613248384774?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5857361613248384774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5857361613248384774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5857361613248384774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5857361613248384774'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/02/couple-of-random-updates.html' title='A couple of random updates'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-1903694846715906261</id><published>2007-02-20T11:06:00.000-05:00</published><updated>2007-02-20T11:40:16.995-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Don't interfere with right-clicks</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/129/382344336_555d835068_m_d.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 222px; height: 166px;" src="http://farm1.static.flickr.com/129/382344336_555d835068_m_d.jpg" alt="" border="0" /&gt;&lt;/a&gt;Nobody likes their HTML, JavaScript, or images stolen for use on another site without permission. One of the common ways to prevent this, unfortunately, are JavaScript snippets that stop a user from right-clicking anywhere on the page. The rationale behind this is that if the user can't right click, they can't "Save Image As..." or "View Page Source", or even worse, "Copy Image Location" and steal your bandwidth.&lt;br /&gt;&lt;br /&gt;While it might work for casual image thieves, this approach (1) is not foolproof, and worse, (2) will annoy many of your site's users.&lt;br /&gt;&lt;br /&gt;Why isn't it foolproof? Well, there are several ways around this limitation (using a menu shortcut to view the page source or browsing through your Web browser's cache, for example), but the most obvious flaw is that it's written in JavaScript. All the Web browsers enable the user to disable JavaScript, rendering your efforts useless.&lt;br /&gt;&lt;br /&gt;The more important question, though, is why it annoys your users. Your users are the reason your site exists, so you don't want to annoy them. The right-click context menu contains shortcuts to common browser functions. For example, some people might right-click and select "Back" from the context menu instead of clicking the browser's Back button.&lt;br /&gt;&lt;br /&gt;Firefox users in particular will be annoyed by this practice. Many handy Firefox extensions are accessed through the right-click context menu. If you disallow right-clicking, all that functionality is lost for the duration of the user's visit to your page. I myself use a great &lt;a href="https://addons.mozilla.org/firefox/39/"&gt;mouse gestures extension&lt;/a&gt; for Firefox that is triggered by the right mouse button. This extension doesn't work either.&lt;br /&gt;&lt;br /&gt;So, for the love of your users, don't bother trying to block right-clicks. You will end up annoying users while having a minimal level of protection of your content.&lt;br /&gt;&lt;br /&gt;(Photo: &lt;a href="http://flickr.com/photos/herkamer/382344336/"&gt;herkamer from Flickr&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-1903694846715906261?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/1903694846715906261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=1903694846715906261' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/1903694846715906261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/1903694846715906261'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2007/02/dont-interfere-with-right-clicks.html' title='Don&apos;t interfere with right-clicks'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-1143014580796640442</id><published>2006-10-19T09:25:00.000-05:00</published><updated>2006-10-19T09:39:00.335-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Reader wishlist</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5518/558576483378381/1600/googlereader.0.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger2/5518/558576483378381/400/googlereader.jpg" alt="" border="0" /&gt;&lt;/a&gt;I really enjoy the new version of &lt;a href="http://reader.google.com/"&gt;Google Reader&lt;/a&gt;. The initial version was &lt;a href="http://thecommunityengine.com/home/archives/2005/10/google_reader_i.html"&gt;awful&lt;/a&gt;, but they've completely revamped it to behave like most other RSS feed readers.&lt;br /&gt;&lt;br /&gt;The one problem I have with Google Reader is categorizing my feeds. As far as I can tell, the only way to put a feed into one of your folders is to go to "Manage subscriptions", find the feed you want to change in the list, and use the "Change folders..." combo box.&lt;br /&gt;&lt;br /&gt;What I'd really love to see is drag-and-drop feed categorization. &lt;a href="http://websearch.about.com/b/a/217913.htm"&gt;Bloglines&lt;/a&gt; currently supports this; you can reorder and move feeds by clicking and dragging them.&lt;br /&gt;&lt;br /&gt;Another good place to set a feed's category would be in the "Feed settings..." combo box that is displayed while viewing the feed. Currently, the only option you get is "Unsubscribe". An option in this combo box to set a folder for the feed would be great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-1143014580796640442?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/1143014580796640442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=1143014580796640442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/1143014580796640442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/1143014580796640442'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2006/10/google-reader-wishlist.html' title='Google Reader wishlist'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-2010305826709246607</id><published>2006-10-17T11:32:00.000-05:00</published><updated>2006-10-17T11:47:42.085-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Are you sure you want to read this post?</title><content type='html'>You've been working on your TPS Report for hours, but you've finally finished. All too eagerly, you go to close Microsoft Word. A dialog pops up with a question:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5518/558576483378381/1600/confirmSave.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger2/5518/558576483378381/320/confirmSave.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Phew! That was close. Good thing you were warned, otherwise you would have just closed Word and lost all the changes since the last time you saved. You click "Yes", and your work is saved.&lt;br /&gt;&lt;br /&gt;One can see, from this example, how useful confirmation messages can be. Before performing an action that could potentially ruin your day, most applications are kind enough to say, "Hey buddy, are you sure you want to do that?". This is a Good Thing.&lt;br /&gt;&lt;br /&gt;Some applications, however, take this to a level that is beyond helpful and approaching madness. It's almost as if some programmers love dialog boxes so much that they make sure to insert one whenever they can. I once used an application that, when I added a new row to a table I was editing, it asked me, "&lt;span style="font-weight: bold;"&gt;Are you sure you want to add a new row?&lt;/span&gt;". Phew! That was close. Good thing I was warned, otherwise I might have to then remove the newly-added row (undoubtedly with another confirmation message) to undo that particularly disastrous change.&lt;br /&gt;&lt;br /&gt;Exaggerated examples aside, you don't really need to get confirmation from your user if the action he is about to perform has no ill or destructive effects. If I add a new row to a table, what's the big deal? Just add it. If I realize that I mistakenly added an extra row, I can just delete the extra row. No harm done. On the same note, removing an empty table row that I just added probably won't destroy anything I've done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-2010305826709246607?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/2010305826709246607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=2010305826709246607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/2010305826709246607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/2010305826709246607'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2006/10/are-you-sure-you-want-to-read-this-post.html' title='Are you sure you want to read this post?'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5289123250894002837</id><published>2006-10-16T08:52:00.000-05:00</published><updated>2006-10-16T09:05:13.146-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Advice to students (and people who help them)</title><content type='html'>All too often, I see a message on a message board or Usenet group asking for help, and upon reading the entire message find that it's a student, and his/her question is a homework assignment, verbatim, like &lt;a href="http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/fff5ac24b051570c/07a4ca44ad5c5946#07a4ca44ad5c5946"&gt;this one on comp.lang.java.programmer&lt;/a&gt;. As a recent student myself (I've only been out of college about 3 years now), this is an issue I feel strongly about.&lt;br /&gt;&lt;br /&gt;While the community of newsgroups and forum sites are certainly the best resource for newcomers looking for help, asking for a complete solution to get your homework done is only going to hurt you in the long run. Programming assignments such as these aren't intended only to get you to solve that particular problem, but to also learn and adopt the skills required to craft a solution. Getting someone on &lt;a href="http://en.wikipedia.org/wiki/Usenet"&gt;Usenet &lt;/a&gt;to code the whole thing for you only fulfills one of those requirements, and in my opinion it's the less important one.&lt;br /&gt;&lt;br /&gt;My advice to students in this situation? Of course you should ask for help. But before copying and pasting your assignment into a message, think about what part(s) of the problem you are specifically having trouble with, and make &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; the topic of your question. Not only will you avoid being &lt;a href="http://en.wikipedia.org/wiki/Flaming"&gt;flamed&lt;/a&gt;, you will also be more likely to get helpful replies.&lt;br /&gt;&lt;br /&gt;As the title of this post indicates, I also have advice for people who reply to these posts, offering help. Please don't give the full solution. Like I've said above, this will only hurt the student in the long run. You should be as helpful as you can (remember when &lt;span style="font-style: italic;"&gt;you&lt;/span&gt; had newbie questions?) but don't give the whole answer away.&lt;br /&gt;&lt;br /&gt;More information on this important topic:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mindprod.com/jgloss/homework.html"&gt;http://mindprod.com/jgloss/homework.html&lt;/a&gt; - A great article written by Roedy Green&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5289123250894002837?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5289123250894002837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5289123250894002837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5289123250894002837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5289123250894002837'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2006/10/advice-to-students-and-people-who-help.html' title='Advice to students (and people who help them)'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4575858551835702670.post-5603011809768787033</id><published>2006-10-11T14:16:00.000-05:00</published><updated>2006-10-11T14:22:13.072-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Time and Date module is back!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jattardi.googlepages.com/timedate-screenshot.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 261px; height: 143px;" src="http://jattardi.googlepages.com/timedate-screenshot.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: arial;"&gt;My Time and Date module, which apparently had become a very popular module for the Google personalized homepage, has been resurrected! Adam Sah and Ryo Takahashi from Google were able to recover the module from their caches.&lt;br /&gt;&lt;br /&gt;Its entry in the content directory has not yet been updated, but it can be directly added to a Google homepage. When adding content to your homepage, click "Add by URL" and enter the URL &lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;http://jattardi.googlepages.com/timedate.xml&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4575858551835702670-5603011809768787033?l=thinksincode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinksincode.blogspot.com/feeds/5603011809768787033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4575858551835702670&amp;postID=5603011809768787033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5603011809768787033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4575858551835702670/posts/default/5603011809768787033'/><link rel='alternate' type='text/html' href='http://thinksincode.blogspot.com/2006/10/time-and-date-module-is-back.html' title='Time and Date module is back!'/><author><name>Joe Attardi</name><uri>http://www.blogger.com/profile/14768726051631454126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp1.blogger.com/_Stwqa_tC5_A/R-H-UhlwCeI/AAAAAAAAAHM/WdhJpvmnLg8/S220/joe1.jpg'/></author><thr:total>0</thr:total></entry></feed>
