I don't know about others, but I noticed a sudden drop in the number of spams I receive daily starting last week. I used to get 600 to 1000 spams per day every day but now I am getting 150 to 250 per day. First I thought there might be some spammers' convention going on but now I think the news of this spammer crack down might have been leaked ahead and froze at least the US spammers. Are others seeing the similar drop in spams or did I somehow drop out of must-spam-this-guy list?
If you need a small yet fast embeddable scripting language engine, check out Lua. Lua 5 now has a formidable array of tools and libraries you can choose from and there is also a Lua wiki. Lua syntax is slightly funky but similar to Python. Yes, it handles COM just fine so you can use it inside an ATL/WTL module (i.e. IE or shell extensions) to easily manipulate COM objects without writing a lot of duplicate code one has to write when using COM. LuaPlus is a variation worth looking at also.
Some of you probably have seen this my wife showed me this video that has been going around among Korean-American mothers: a Chinese video showing how to fold a T-shirt in 2 seconds. The technique works for long sleeve shirts too but takes a couple of seconds longer. Although I am pretty much a typical male chauvinist pig when it comes to house chores, this video was so amazing it actually made me want to fold some T-shirts! Wow.
Hanni at BileBlog occasionally hits the nail and this time it's his rant against the flexibility fetish rampant among Java programmers. I suspect it was their obsession with the Design Pattern that lead Java programmers down this path. Design Pattern is a useful tool but you can hurt yourself if you pull on it too much.
Being able to mold and fuse everything in your software is good, but such flexibility isn't useful if it isn't actually used. I seriously doubt if more than 10% of all the extra flexibilities and abstractions being built into Java software are ever used. All that 'fat' makes the software bigger, slower, and more difficult to understand.
Dive into any popular open source Java code and you'll see lots of design pattern artifacts like Factories, Adaptors, Managers, and Observers most of which has only one or a couple of implementations. These sort of habitual abstraction often forces late comers to get lost in the abstractions to understand process and data flow.
I think the best example of flexibility is the mammal skeleton structure because flexibilities are like joints, points that can bend. Joints in our bodies don't bend in all directions. They also exist only where it's really needed. Each joint has cost associated with it so if the benefits don't outweight the cost of having a joint a a certain location, it shouldn't be there.
Evolution doesn't happen in anticipation; it happens in real time. Don't add flexibility in anticipation, but add it when you actually need it, where you need it, and no more than what you need. Based on my experience, I would add that real flexibility comes from preventing assumptions from leaking across component boundaries. Limiting surface areas between components will help in reducing the chance of such leaks.
Recent posts about LOAF, which uses Bloom filter, created a small surge of discussion about bloom filters, most notable being the Using Bloom Filters article at Perl.com by Maciej Ceglowski whom I like to remember as the fish guy (visit his blog to see why).
I went fishing for some bloom filter code but couldn't find a general library in either Java or C++. There was one for Perl but… Anyhow, it's probably because there isn't much code needed. Most of the Bloom filter works is finetuning the parameters and choosing the right hashing function so it doesn't really matter.
Beside Maciej's article, I found these pages useful:
- Bloom Filters – the math (obviously explains the math behind BF)
- Some Motley Bloom Tricks (does this and does that with BF)
- Compressed Bloom Filters (PDF – self-explanatory)
- Coding Bloom Filters (game developer's tuturial on BF)
BF is pretty simple stuff but useful in many areas. I am thinking of using it to detect 'access devices' (user name, password, SSN, credit card numbers, etc.) being submitted translucently (translucent as in Translucent Database) so I can throw up a dialog warning to the user.
Is it summer or late spring? It sure feels like summer here in the Bay Area. Anyhow, Steve Kirks shot his azalea for me, so I thought I should send him some of my flowers. I guess Tim Bray is too busy with his new job to take snapshots of his lawn.
I am rather embarrased to admit that I have no idea what this flower growing in my backyard is. The tag got lost you see and my head being filled with essentials like Boo leaves little room for flower names other than simple ones like the rose and the sunflower. It's the same with wine names so all I can manage is 'I'll have the, er, red.'
These are just catchy sentences floating in my head so I thought I should dump them here:
Best way to remove a threat is to make it worse.
Best way to protect a secret is to not have it.
If you don't know it, you don't have it.
Protection most appreciated is visible protection.
Invisible protection makes users more gullible.
Security is a scaaary business, Right Boo?
I am iffy about the 'best' part but they sound better than 'one of the' so there. 'Boo' is a god that looks like a hamster from the game Baldur's Gate. Go For The Eyes Boo, Go For The Eyes!