Defeat Unwanted Spam with SpamSieve
About a month or so ago, the amount of spam that I receive on a day to day basis seemed to have dramatically increased. As an effort to fight off these unwanted messages, I started searching for an advanced spam filtering plugin for Apple Mail. After 2 weeks of trying out SpamSieve, I'm about to make this configuration permanent. Here are the stats for my first couple weeks. Keep in mind, this includes training the software so as time goes on the filtering gets better and better.
Filtered Mail
299 Good Messages
2369 Spam Messages (89%)
135 Spam Messages Per Day
SpamSieve Accuracy
47 False Positives
21 False Negatives (31%)
97.5% Correct
Corpus
299 Good Messages
552 Spam Messages (65%)
46670 Total Words
Rules
44 Blocklist Rules
201 Whitelist Rules
Showing Statistics Since
3/14/05 9:25 AM
Code Reading Rebuttal
I disagree 100% with the statements made in Dion's blog entry. Computer Science is not about solving real world problems; it's about theory and learning how to think. In my CS program, I enjoyed writing programs to solve the Towers of Hanoi, 8 Queens Problem, and The Sieve of Eratosthenes. These problems were much more enlightening than adding a feature to a piece of otherwise working code. If "good schools" were to take this approach, they would become more like trade schools and that would be disappointing.
With that being said, I don't think that offering a course on the practical application of Software Development would be a bad thing. It just shouldn't be the driver of the program.
Can you say WTF?
The following post was inspired by the following site: The Daily WTF
During a quick review of some legacy code today, I stumbled upon this gem of a method. I can't believe how many different ways this design, or lack thereof, gets under my skin. All comments were sprinkled in for demonstration purposes only. All javadoc that existed(none) is not shown to protect the guilty.
1:// by the method name, would you expect the return value to be a boolean?
2:// Also, way to pass in a Date as a string and also the format. Passing
3:// in a simple date would have been a bit too convenient
4:private boolean dateDifference(String fillDate, String format) {
5:
6: boolean result = false;
7: try {
8: Date current = new Date();
9: SimpleDateFormat sd = new SimpleDateFormat(format);
10: Date filldate = sd.parse(fillDate);
11: if (current.compareTo(filldate) > 0) {
12: double msdiff = (current.getTime() - filldate.getTime());
13: // for those of you that don't know, this value is the meaning of Life,
14: // the Universe, and Everything. Or was that 42. I forget.
15: double msd = 3888000000.00;
16: if (msdiff <= msd) {
17: result = true;
18: }
19: }
20: } catch (ParseException e) {
21: //Excellent Handling of Exceptional cases :)
22: logger.error("ParseException while getting the dateDifference " + e.getMessage());
23: }
24:
25: return result;
26:}
MysteryGuestInc.com
Several months ago, a friend told me about MysteryGuestInc.com (MGI). In a nutshell, restaurants hire MGI to provide feedback about the service, quality and atmosphere at there establishment. For this valuable feedback, MGI picks up your bill (at least a portion of it). It's a win/win situation for everyone involved. As a consumer, you get to dine out several times a year (4-6) and someone else picks up the majority of the bill.
I got my first call from MGI last night so my wife and I will be visiting a BBQ place called Smokey Bone's this weekend.
Gateway Software Symposium - Day 3
Java Collection Power Techniques
By: Glenn Vanderburg
Glenn's talk covered many of the methods that live on the Collection interface which many programmers end up implementing themselves. He also showed many code examples of advanced way's to utilize decorators and adapters with Collections. I've done some of this in the past so I was pretty familiar with the concepts. Unfortunately, many of the problems he solved after this seemed to be very academic in nature and I can't say that I've run across them in the real world. That's not to say I will never, but at this point I will take them for what they are worth. The best take away from this session is to look around before implementing something yourself.
Introduction to Spring
By: Bruce Tate
I'm typically not a big fan of Bruce Tate's presentations since they are very slideshow driven but since there was nothing else of interest, I attended anyway. I've been looking at Spring for sometime now so I'm fairly well versed with what it can do. My goal was to gain some insight for his presentation and apply it to one that I will be giving soon. All in all, he did a pretty good job describing the benefits of Spring. One thing that scared me was he made the comment that Spring is similar to the BASF marketing spiel "We don't make a lot of the products you buy, we make a lot of the products you buy better". I've said this very thing several times in the past couple months. Weird!
Javascript Exposed
By: Glenn Vanderburg
All I can say is Wow. I never knew Javascript was as robust a language as Glenn portrayed. The talk started off talking about how Javascript got a bad name back in the early days of Netscape and Internet Explorer. Neither did a very good job of supporting it. The other downfall was that developers were not really learning the language either. Instead of starting from the ground and working their way up, they performed copy/paste/modify routines that quickly spread bad or inferior code world wide. The next 30 minutes or so went over the language constructs followed by a demonstration of how dynamic typing works. I got pretty lost from this point forward. The one take away I had from this was that if I ever need to do anything in Javascript moving forward, there will be a learning curve. Im interested in the upcoming release of Tiger that will introduce Dashboard widgets. These are small javascript modules do quite useful things. Looks like I will be face down in the books Glenn suggested in the near future.
Gateway Software Symposium - Day 2
Cryptography for Programmers
By: Stuart Halloway
This talk focused on everything crypto and I would recommend that anyone not familiar with it attend this session. All and all this session was par for the course for Stuart. A fantastic presentation on good detailed content. Topics covered included hashes, secret key cryptography, public key cryptography and digital signatures. OpenSSL and Java Code were both used in examples. We also discussed how many products claim to have a 128 bit hash, or 256 bit encryption, or 64 bit block cipher, but the only number that really matters is the number of bits of security. This becomes basically the lowest common denominator of your security. In other words, your system is only as secure as it's weakest link. In a nutshell this talk was everything programmers should know about security.
Test First Development
By: Venkat Subramaniam
The best part of Venkat's presentation was that there was almost no presentation at all. What I mean is that when I went to grab copies of the slides, there were only two pages. This entire session was done within IDEA and coded based on user interaction. While I appreciated the energy put forth, I think I would have better spent my time elsewhere. I've presented these kinds of things in the past to groups at work. I kind of knew this ahead of time but there wasn't much else offered during this time-slot that caught my eye. I hope to catch a more advanced session by Venkat tomorrow. He is a really good speaker.
The Fallacies of Enterprise Systems(Architecture)
By: Ted Neward
Ted's talk covered the ten fallacies of distributed computing. Upon hitting each one, he shared personal experiences where he or his team may have fallen into this trap. He also encouraged group participation around the topics. All in all it was a good interactive session.
- 1) The network is reliable
- 2) Latency is zero
- 3) Bandwidth is infinite
- 4) The network is secure
- 5) Topology doesn't change
- 6) There is one administrator
- 7) Transport cost is zero
- 8) The network is homogeneous
- 9) The system is monolithic
- 10) The system is finished
Gateway Software Symposium - Day 1
As with every other year, I started off the event with a predetermined list of which sessions that I would attend. Only time will tell if this list will remain accurate. Typically I tend to stray off and see other sessions, spur of the moment.
Classloading in Java - Building Dynamic Systems Without Pain Sessions 1 & 2
By: Stuart Halloway
Part 1 of this presentation was the same one gave last year, but since there wasn't much else at this timeslot, I ended up repeating part 1. As always, Stuart's presentation was given with much energy and most importantly with IDEA on the screen half of the time. I'm not a big fan of the PowerPoint only presentations. Most of what was covered was above the virtual machine layer but below the application layer. The difference between explicit and implicit classloaders was expounded upon. The way certain applications like JUnit, ANT, and just about every application server violate the classloader delegation rule was discussed in depth. All in all it was a session all Java Programmers should see.
Ruby for Java Programmers
By: Dave Thomas
Since I've been interested in Ruby lately, I figured I'd give Dave Thomas's talk a shot. I'm glad I did and now I'm even more eager for the Ruby group to get productive. Dave was his usual entertaining self walking around in his socks and never running out of puns. In this talk, Dave covered some basic syntax that probably seemed bizarre to most people, I know it was the first time I came across it. Other things that were covered included, writing some code to pull web service data from Amazon to show book rankings. He had to mock up the Amazon web service since there was no internet connectivity. The final demonstration was storing this web service data into a mysql database using ActiveRecord.
Dinner was served around 6:30 and Dave Thomas's Keynote address followed. As with last year, there were not many food choices that were Lent aware, so I stuck with potatoes and bread. Oh well, no big deal. At Dave's keynote, the topic was the Art of Programming. Similarities between Art and Engineering were discussed. Concepts such as modularity were discussed in the context of writing software and how Michael Angelo painted the Ceiling of the Sistine Chapel. Both are made attainable by a divide and conquer mentality of breaking large tasks into small sub tasks. Other trials and tribulations of his work experience were touched upon. Several funny situations were discussed that i could not do justice for here so I won't even try. All in all, the Keynote rocked!
St. Louis Ruby User Group
Last night was the official kick off of the St. Louis Ruby User Group. The kickoff meeting was held at Regatta Bar and Grill on Maryville Centre Drive where our small group had dinner with Pragmatic Dave Thomas. The focus of the last nights meeting was to come up with an approach or plan for the group. There were several ideas kicked around but nothing set in stone. Our group ranges from zero Ruby experience to fairly proficient. I'm one of the zero guys :)
Thanks to Curt Hibbs for making this happen and to Dave Holsclaw for assuming the organizer role to see that the rubber meets the road. I look forward to participating in this group.
Donald Knuth, Founding Artist of Computer Science
NPR is doing a section this week called "Where Science Meets Art" and today they have an interesting interview with Donald Knuth. Audio available at here.
NoFluffJustStuff Gateway Software Symposium
Well it's that time again. Jay Zimmerman will be bringing the big dogs of software to St. Louis this coming weekend for the NoFluffJustStuff tour. I have attended every occurrence in St. Louis so far(2 to be exact) and will be attending this one as well. For those of you that find it difficult to stay current with the technology landscape, this tour has a lot to offer. With all that being said, I'm a bit disappointed with this year. First and foremost, some of my favorite speakers(Erik Hatcher, Robert Martin, and Mike Clark) are missing the St Louis offering. My impression is that every year there have been more and more local speakers and less of the traveling speakers. While I applaud the local guys participation in such an event, in many cases I could have seen their presentation for free at the local Special Interest Groups. Oh well, there is plenty to see still.
My tentative calendar can be found in HTML form here.
For those of you fortunate enough to be running OS X, an iCal feed can be found here.
One of the bright spots this year is that Dave Thomas and Stuart Halloway will be making their 3rd appearances in St. Louis. Both of them are nothing short of awesome. There won't be any heavy eyes in any of their talks. My biggest mistake to date was missing all of Stuart's presentations in 2003. What was I thinking!
Another gem for this year is that a small number of us are suppose to have dinner with Dave Thomas on Thursday night to discuss Ruby. Can't wait for this to kick off an already jam packed weekend.