First time here? Check out the site's "greatest hits" or read a post from the archives. Feel free to leave a comment or ask a question, and consider subscribing to the latest posts via RSS or e-mail. Thanks for visiting!
Page 1 of 66 in the Musings category Next Page

I was over at http://search.twitter.com earlier today and I noticed the Search Box in Firefox had a blue lit-up dealie:

image

Hm...OK. What's that? I hit another site and didn't see it. Weird. Ok, View-Source then, what drives you little blue thing?

<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Twitter Search">

Hey, that's not something I've seen before. What's in it...http://search.twitter.com/opensearch.xml...

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Twitter Search</ShortName>
<Description>Realtime Twitter Search</Description>
<Url type="text/html" method="get" template="http://search.twitter.com/search?q={searchTerms}"/>
<Image width="16" height="16">http://search.twitter.com/favicon.png</Image>
<InputEncoding>UTF-8</InputEncoding>
<SearchForm>http://search.twitter.com/</SearchForm>
</OpenSearchDescription>

Ah! I totally get it. Excellent. I shall make my own immediately! I added this file to my website and added a <link> line as seen in the first example above that pointed to it.

<?xml version="1.0" encoding="UTF-8" ?> 
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Hanselman Search</ShortName>
<Description>Search Scott Hanselman's Blog</Description>
<Url type="text/html" method="get" template="http://www.hanselman.com/blog/...snip...q={searchTerms}"/>
<Image width="16" height="16">http://www.hanselman.com/blog/favicon.ico</Image>
<InputEncoding>UTF-8</InputEncoding>
<SearchForm>http://www.hanselman.com/</SearchForm>
</OpenSearchDescription>

Bam.

image

I wonder if it works in IE7?

image

Pow! I wonder if Live.com supports it?

  image

Eek! FAIL. I'll mention that to someone at Live.com

OpenSearch is a really easy feature that you can add to your website in literally minutes. Seconds if you type fast. Check me out noticing this only three years late. :)

Give it a try!

IMPORTANT NOTES: Make sure you include the first line of the XML file (the XML declaration) or IE will ignore it and nothing will happen when you add it. Also, make sure you include the default XML namespace or Firefox will give you an error: "Firefox could not download the search plugin"

Technorati Tags: ,


iStock_000002684567XSmall Are you in King County/Seattle/Redmond/Bellevue Washington and surrounding areas? Are you a huge nerd? Perhaps a geek? No? Maybe a spaz, dork, dweeb or wonk. Maybe you're in town for an SDR (Software Design Review) or the ASPInsiders meeting. Quite possibly you're just a normal person.

Regardless, why not join us for some Mall Food at the Crossroads Bellevue Mall Food Court on Tuesday, July 22nd around 6:30pm?

Here's some links to help you remember and add this to your calendar, or head over to http://nerddinner.events.live.com. There's photos of previous Nerd Dinners up on Flickr thanks to Orcmid.

Add to your calendar

I hope to see you there!

NOTE: Even though I told Live Events this was an Open To Anyone Event, it seems to want invitations. Just leave a comment here and show up on July 22nd at 6:30pm! Everyone is welcome, Microsoft employee or not. The more the merrier.



I got a disturbing email today on Flo's mailing list (of Notepad2 fame). Florian Balmer is the author of the most excellent Notepad2. This is a great "it just works" editor. It's Notepad, but goes one better, I like to say. I've promoted it on my Tools List and in countless talks. Notepad2 has been developed over ten years and is in active, ongoing development. Florian has posted most recently about his adventures in Unicode.

Flo was surfing and discovered http://www.notepad3.org.

This is uncool for a number of concrete reasons.

UPDATE/CORRECTION: I screwed up the licensing so my only complaints to the author of Notepad3 is that the name makes for a tacky fork and that the changes appear to be not significant in their scope. I apologize.

Notepad3 is a fork of a older version of Notepad2, specifically the GPL'ed Notepad2 1.0.12 rather than the BSD Licensed Notepad2 2.1.19. The GPL'ed Notepad2 was released on June 25th, 2004. The BSD licensed version was released on April 7th, 2007.

See, it turns out Netiquette CAN be subtle!

  • The distributor of Notepad3 did not include Florian's license. 
    • UPDATE/CORRECTION: The license still is intact in the .c source code files, just not in the main license.txt. The full copy of the original Notepad2 license.txt also appears in Notepad3's source zip in c165/license.txt.
    • Notepad2 is distributed with this license (I snipped the copyright all caps at the end for brevity) as its main license.txt.
  • Florian's name doesn't appear anywhere within the Notepad3 root license.txt, which appears to be an aggregate of a number of licenses of the sub-components.
    • UPDATE/CORRECTION: Flo's website is referenced in the license.txt's header.
  • The Notepad3 "creator" didn't make any attempts to include his changes in Notepad2 or give Florian a heads-up.

Now, these next reasons are my own opinions, and possibly subtle. You tell me. These are my opinions.

  • Mildly Tacky: They made up a new name and registered a new domain for the project. The new source can be only by found by digging around the main site. Can you find it?
    UPDATE/CORRECTION: I think the source should be linked directly to from the main page. Rather, it's under download/src using the navigation on the left of their site.
  • Tacky: The new entity, Notepad3, arguably doesn't contain substantive improvements, certainly not enough to be called an entirely new version, and definitely not Notepad3. You can see the sum total of the changed lines on Flo's post.
  • Rather Tacky: They took the time to put the new entity has been put up on Softpedia and promote it without a single reference to Florian or Notepad2.

It's not that Florian doesn't appreciate improvements. He has put a number of modified versions his side, including a very minor update by Wesner Moise and I. If he wanted to incorporate these changes into the mainline he could easily. I included a source diff for him, but most importantly I didn't make it look like his work was mine!

Modified Versions of Notepad2

When people do Open Source work, one of the things that is almost universal is the natural human need for appreciation. For attribution. One overarching intent of the whole Creative Commons with Attribution license and most Open Source Licenses is "just don't remove the part that says *I did this!*"

Flo says it well, albeit with some understandable passion:

Nonetheless, the author has chosen the name "Notepad3". Compared with the original Notepad, Notepad2 represents an evolution with new features. "Notepad3" implies the same, but with even less features, without any new development. Seems that the play on words is used to fool users into believing that "Notepad3" is something more advanced. The popularity of Notepad2 is being taken advantage of to attract some attention ― I have no idea what else might be the motivation of the author.

The author justifies the publication of "Notepad3" with the added installation and documentation (which is actually my documentation, and has always been there). Innovation equals zero. This causes confusion about the different versions available, and the reputation of my software is harmed when associated with that kind of sloppy, offending descendants (and, it makes me think how indiscriminate some well-known software sites are concerning additions to their repositories).

I have no problem with new versions of my software being released, even with minor changes ― my licensing conditions are fully met. The problem here is that the author made minor changes to the code and branded it in a very disingenuous and deceiving manner.

Perhaps this is just a faux pas, a minor misunderstanding. However, I would encourage Readers who are interested in getting into Open Source to think about these issues when getting involved in projects.

My Own Experiences in Open Source

I've had a lot of great experiences and one speed bump.

WatirMaker

When I wrote WatirMaker and released the source, I had written it from scratch. Each time it got forked or written again or modified, the folks who did it let me know! They asked for help! I offered help! It was a lovefest - the kind of lovefest that I think Open Source should be.

The email conversations usually went like this:

Dude, heads up, I want to do _____

Sweet! Rock on, let me know if you want help with ____ or if/when/how we can put _____ back into the source. Wanna join the project!

Sweet! Dude! Rock on!

Yay! <Hugs.>

And the results were cool.

Notice how everyone is genial, chatting, and attributing? Even in Richard's WatinRecorder post, by now likely a complete re-write of my stuff, was thoughtful enough to thank a bunch of folks.

DasBlog

DasBlog, now the work of dozens, originally came from Clemens Vasters, who originally got it from Chris Anderson's BlogX had a similar issue happen when a gentleman forked our Source Code and created an entirely different project out of it with an all new name. This happened two years ago and he's since changed/refactored the project pretty substantially, but it still felt crappy at the time and the team was rightfully torqued. At the time, all that had been done was a recompile under VS2005 and a check-in as a new project with a new name.

Justice Gray blogged about it soon after:

Saying that "in the long term, ThinkJot will move away from the original dasBlog source code",  implies that all you've done is make some minor project ports, throw in a new DatePicker and call this your own project.  For sure, it's probably legally fine given the terms of the open-source license, but it leaves a bad taste in my mouth.  How would you feel if you worked on something for a long time and then someone just took all the work you did, rebranding it and called it their own?  I mean, c'mon!

Fortunately the author posted about this later and admitted this most important point:

"My biggest mistake has been that I never talked to the dasBlog team previously about this. I admit it, and apologize."

And I give him full credit for that simple admission. Folks that copy/fork are rarely evil or malicious. We're all just trying to move the ball forward, and perhaps that's the same in the case of Notepad3. However, that doesn't change the fact that talking to folks up front can make all the difference.

Unfortunately, at this point, this issue has soured Florian considerably:

I have been working on Notepad2 over more than 10 years, altogether. The above hacks may have been done in a few minutes.

There have been similar cases in the past, already, but this one really beats everything. I'm not sure if I'm going to release any more open source versions of Notepad2, in the future. Ain't fun like that.

Let's encourage Florian to keep up the great work and as we go about our lives as members of the Open Source community, let's remember to appreciate all the hard work that folks put into their various projects and that just because Copy/Paste is easy doesn't make it right.

My Tips? When in Doubt...

If you're doing Open Source and you're unclear about Netiquette, then:

  • Just ask.
    • Ask someone working on a project how they do it.
  • Err on the side of attribution.
    • You can't attribute or thank too many people, especially if you've copy/pasted something.
  • Reach Out.
    • Email the authors. Talk to people, join mailing lists and for goodness sake, avoid working in a vacuum.
    • I still get emails about GlucoPilot, a shareware app I wrote almost 8 years ago. If I had the rights to the source, I'd give to the world. (Still working on that, actually)
  • Appreciate your peers and everyone that contributes to the community.

What do you think?



imageI posted a little rant against the Northwind Database a few weeks back, and suggested that we, the community, create a better demo database than Northwind.  I proposed the name NotNorthwind.

There were some varied and interesting responses.

From Scott Mitchell:

Yes, it is far from perfect and could use some updating with regards to the date/time values and the category pictures, but those warts aside, it does a good job at what it was designed to do.

From Brian Sullivan:

I feel the same way. I have to stifle a groan whenever I hear the word "Northwind" come out of presenter's mouth. I've even jokingly said that Microsoft ought to have an internal metric for new technologies called "TTN", "Time to Northwind." In mathematical terms:
Product Coolness = 1 / TTN

From Duncan Smart:

We don't a need a new one! Pubs FTW! :-)

Steven Smith says Whither Northwind?

Enter NorthWind, the HTTP standard of databases, understood by virtually all Microsoft developers without need for preamble.  It just works.  With the words, "I'm using Northwind for my database." I now have the complete understanding of 95% of the people in the room - we're all on the same page - and I can continue with the actual point of the presentation or demo, which is not, has not, and probably will never be, "why this database isn't Northwind."

And Jeff Atwood from Twitter ;)

@shanselman rejects the standard MSFT Northwind database. What next? "Hello World" isn't good enough for you? Snob!

There were also a lot of great comments and ongoing discussion the CodePlex site's Discussions tab and project comments. We brainstormed alternative domains like Medical, Insurance, Media, and many others. Others suggested that AdventureWorks was a fine replacement.

ASIDE: Some folks suggested just updating the dates in Northwind to the present, but as attractive as the idea of adding ELEVEN YEARS to these columns is, I just didn't feel like doing this (Thanks to the folks on Twitter for their ideas, though!).

use Northwind
update Employees set BirthDate = dateadd(yy, 11, BirthDate)
update Employees set HireDate = dateadd(yy, 11, HireDate)
update Orders set OrderDate = dateadd(yy, 11, OrderDate)
update Orders set ShippedDate = dateadd(yy, 11, ShippedDate)
update Orders set RequiredDate = dateadd(yy, 11, RequiredDate)

We had a SkypeCast call today at noon and it was agreed that Northwind does have some redeeming qualities. It's simple, it works, it's understood and there's a pile of demos written against it. We rethought the requirements.

As a small group, we've decided to extend Northwind. We'll still call it NotNorthwind (although Super Northwind 2000 and "Microsoft Visual Northwind Enabler SP2 RC0 Beta1 July Refresh Plus Pack" were also possibilities), though, but we want to add a bunch of features that should make it a more interesting database for demos/prototyping/experimenting.

It's worth pointing out that I (and we) are not interested in showcasing the shiniest, latest new thing in SQL2008 with this small effort. We're just trying to have a little fun, while updating a very old database with some interesting and fun features in the hopes that our demos/prototypes/experiments/whatever that use Northwind could possibly become more interesting.

  • Product Reviews and Ratings
    • This new area should introduce a number of interesting, but easily understood concepts that can be used to showcase everything from whatever cool AJAX toolkit you're demoing to how flexible your CodeGenerator or ORM is.
    • Perhaps extending reviews to "x people found this review helpful" as well. Also, wish-lists, etc.
  • Tagging
    • In parallel to, and juxtaposed against the existing Product/Category relationship, tagging, and social tagging, introduces some interesting DB issues as we'll want to tag anything not just products, resulting in a many-to-many heterogeneous situation.  It also makes for some potentially interesting User Interfaces.
  • Compatibility
    • We're going to pretend that the existing database can't be changed, but only extended.  This way folks with existing Northwind Demos will "just work" against NotNorthwind. This plug-ability should also encourage people with demos to extend their existing those of things like web frameworks but are just using the database as a place to find scenarios.
    • We'd like it to support (either via creative SQL or multiple versions) multiple databases like mysql, SQLite, Oracle, etc.
    • We'd like it to be an existing "legacy" database that ORM tools could each build on top of so we could compare apples to apples.
  • Sample Data
    • At some point it'd be cool to make the database REALLY HUGE to test the scale of both it, and the things folks build on top of it.
    • We'd like pluggable Sample Data, so we'll make the structure file separate from the sample data. Basically Database "Themes" as not everyone wants the standard Microsoft "scrubbed" names.
  • Alternate Domains
    • We also think that the Northwind world could be explored with more "Vertical" things like these. These could also be done without changing the core database.
      • Expense Tracking and Approval
      • Accounts Receivable and Payable and Payroll
      • Business Intelligence - Warehousing, Sales, Trends

That's about it. I'll update the Issue Trackers and we'll try another SkypeCast same time next Thursday around noon. I'll announce the SkypeCast URL on Twitter. (AYNABTU)



Jeff Atwood has one of his best posts in months that was inspired by Alastair Rankine's post "Blogging Horror" explaining why he's unsubscribed from Jeff's blog. I too, have been less compelled to read Jeff's blog lately, but he's an excellent writer and he's consistent, so I read it at least a few times a week. Kudos to Jeff for keeping up the pace and for inspiring conversation.

Alastair says:

"In other words, Atwood seems to be setting himself up as an authority figure on software development and, well, I have some issues with this."

This is something I've struggled with as I've been blogging. I mean, it's just a blog. Look at my first post. Once while presenting in the Midwest a gentleman asked me a question along the lines of "how did you get so good?"

I said, "What gave you that idea? Don't mistake loud with good. Start writing and talking, you can be loud, too."

I like what Dave Winer said that Jeff quoted:

"Blogging is an amateur activity. It's users writing about what they do, not professionals writing about what users do."

I'm definitely not an authority figure on software development. I'll go so far as to put words in the mouth of Martin Fowler (we'll see if he comments), but from my interactions with him, I'd venture to say he wouldn't consider himself an authority either. He's a traveler on the path, as are we. He thinks, shares, asks good questions and starts interesting conversations. What more could one ask from a member of the community?

We're all just learning together. I started blogging so I could Google myself later, that's all. I taught as an adjunct professor so I could know the topics better as there is no better way to learn a thing deeply than to teach it. I worked on a few books so I could really dig deep, but I'm the first guy to say "dude, I have no idea." My brain bit-rots as yours does.

None of us (in software) really knows what we're doing. Buildings have been built for thousands of years and software has been an art/science for um, significantly less (yes, math has been around longer, but you know.) What just know what's worked for us in the past.

There was an interesting conversation in the second ALT.NET podcast (not my show) where the folks in the conversation were disparaging Database Driven Development over Model/Domain Driven Development. It may not be pure, but it must have worked for someone or it wouldn't exist, just like the Scrummerfall Project Management Methodology. ;)

Once years ago when working at a large NW Bank I was in a meeting with a young man who had been hired by a consulting company and had only worked at that one company. He was a "college hire" and had no experience other than "whiteboarding for money." I really don't like to get into measuring contests but I was weak in this instance. I took the bait and said "well, I like to use success as my metric, what have you shipped lately?" It was a nasty room-quieting thing to say and I'm not proud of it. But, I was really frustrated and I didn't know what it was going to take to get it across to this gentleman that we were more interested in shipping software than his brand of architecture astronomy. If you're in college, definitely ship some software or work on some open source applications to get some really good failures under your belt, before you enter the workforce.

One of the things that I enjoyed so much about my recent show with Richard Campbell is that we've both being doing this for so long (15,20 years respectively) that we've go so many stories of failure. Folks are really teasing Twitter for being down all the time. People blame Rails, the blame the team, but think of what they are learning! Even better if they share it with us in detail.

I respect failure a great deal. So does Jeff. Success is a good metric but failure is pretty useful as well - certainly more useful than putting MCSE, MCSD, MC*.* after your name. When I hear that someone has a lot of experience, I'm most interested in their horrible failures and how they dealt with it. My best blog posts have been pulling about success out of crap, fixing bugs, slinging code, fighting with the machine.

Jeff says about himself:

"But I have an ace up my sleeve that most don't: what I lack in talent, I make up in intensity."

Not only am I in no way an expert in software, Microsoft or otherwise, I explicitly assume that you aren't either. I have had conversations with high level VP types at banks who have said things like "I read on this guy's blog blah blah blah, it sounds good. What do you think?" and my questions back at them are "Have you tried it? What do you think?"

The blogosphere is a network of trust, so certainly there are some people that I trust because they make sense and other folks think they make sense also.

Still, ultimately, it's about thinking, talking to each other, and thinking some more. The real content in any blog, this one included, is in the comments, and that's why I like you all so darn much, Dear Readers.

If you've got experience, share it. If you don't, then do some work and fail fast so you can gain experience. Read, write, talk and test. Have fun, write code.

"Talk is cheap, show me the code" - Linus

Related Links



northwind_thumbI'm just sick of Northwind. Sick to death of the Northwind Database. You know, this is the Products, Categories, Suppliers, yada yada yada sample database that you've been seeing in Microsoft demos since the beginning of time. (FYI, the beginning of time was about 1997. ;) )

Why do we use it? Because it's there. Because it's easy, it exists, and it takes two seconds to install. It's full of good sample data that has international characters. It has a few views and a few sprocs and it's wholly harmless.

Now, some folks don't like Microsoft's (often) focus on "Database Driven Development," and I'm basically Switzerland at this point. Consider me neutral because I've done it both ways, both Domain Driven and Database Driven. With an ORM and without. I'm not 100% convinced either way and I like to have choice.

Plus, when I'm showing some technology that is talking to a Database or to POCO (Plain Ol' CLR Objects) I still need good sample data to pull from. Thus, the Northwind Virus continues.

And I hate it with the heat of a thousand suns.

There are others I could use, like AdventureWorks and its variants and specifically the AdventureWorksLT example is pretty lightweight, but still it doesn't quite turn me on.

I suspect, though, that if we (the community) took a few weeks, did some Skype conference calls, assigned some tasks, brainstormed and did it, we could come up with NotNorthwind. The Lazy Web, the Web of Clay Shirkey, .NET Flash Mobs included, could create a sample database, (we can argue about whether to start in the middle or in the db in the first meeting) as well as some good examples of things like NHibernate, LINQ to SQL or Whatever,

Requirements

  • Complex enough to be called Real World but simple enough that someone could "get it" in 5-10 minutes
  • In a familiar Domain Space that makes sense to folks all over the world
  • Has a decent amount of sample data with strings that are more than just [a-z|A-Z|0-9]

Deliverable(s)

  • Have a single .SQL file that one can run and immediately get a working database
  • Sample Code for any of a number of Database access patterns, ORMs, whatever. This might require a few subtle versions.

I'm making http://www.codeplex.com/notnorthwind and I want:

  • A Project Manager (probably best if it's not me)
  • Modelers, Sample Code Writers
  • Sample Data Creators
  • Documentation Person
  • Release Manager

Who's with me? Leave a comment with your CodePlex Username, Skype Username, your TimeZone offset, and your level of interest and let's do a Skype call to kick this off and be rid of Northwind. Also, if you think this is a stupid idea, why?

Oh, by the way, if you're at TechEd US this next week, be sure to say Hi if you see me, and let's talk about this project, because most of my demos at TechEd 2008 are <gulp> Northwindian in their heritage.



I hope this helps someone because it totally freaked me out this evening. I rebooted this evening, the first reboot since March, in fact, and blue-screened (BSOD) upon startup. At this point I was in a blue screen "loop" with the ominous message "INTERNAL_POWER_ERROR" on the blue screen. I started cussing Vista out and panicking, but this machine has been exceedingly stable since I built it last year and I reboot only every few months. I built it to be stable and I trust the machine.

Working backwards, the last and only interesting thing I installed was VMWare Player for Windows. I had some trepidation at the time of the install because I am not a fan of the way that VMWare adds virtual network devices that are listed in Network Connections, but it came highly recommended from respected power users I know and I needed it to install a prepared Suse VM from the Mono folks.

However, when it's installed my 64-bit machine blue screens, and it's very difficult to get uninstalled, actually. Needless to say this scared the crap out of me.

I looked all over and checked out the VMWare Forums and no one at VMWare has acknowleded the problem in a Googl-eable way. I can tell you this, however. I am using a Quad-proc machine with an MSI motherboard with the latest BIOs and a buttload of USB devices. The only way I could get the system to boot up was to remove ALL the USB devices. ALL of them, to be clear, save one wired USB Keyboard that I used to log in and remove VMWare.

My guts says that this is a bug in the VMWare USB bridging code (the stuff in VMWare that lets you use USB devices inside a VM) or it's somewhere in the USB drivers in Windows. I have the Crash Dumps if you work for VMWare and you're interested. I'll WinDBG them later this week.

I hope this post helps someone having this same issue.

UPDATE: Installed Windows Debugging Tools (WinDbg.exe) and analyzed the crash dump and it's the VMWare Keyboard Driver, of all things. Perhaps VMWare doesn't like my Wireless USB Keyboard? Mental note, relearn WinDbg'ing.

BugCheck A0, {101, 7, fffffa6001dc8b10, 0} 

*** ERROR: Module load completed but symbols could not be loaded for VMkbd.sys
Page 9bda8 not present in the dump file. Type ".hh dbgerr004" for details
Probably caused by : VMkbd.sys ( VMkbd+15da )

Followup: MachineOwner
---------

1: kd> !analyze -v
*******************************************************************************
*                        Bugcheck Analysis                                    *
*******************************************************************************

INTERNAL_POWER_ERROR (a0)
The power policy manager experienced a fatal error.
Arguments:
Arg1: 0000000000000101, Unhandled exception occured while processing a system power event.
Arg2: 0000000000000007
Arg3: fffffa6001dc8b10, ExceptionPointer.  To debug this, in the debugger type:
    'dt nt!_EXCEPTION_POINTERS <argument>'.  Then type:
    '.cxr <value of context record from the previous command>'.
    All subsequent debugger commands will show you the actual
    source of the error.  Start with a stack trace by typing 'kb'.
Arg4: 0000000000000000

Debugging Details:
------------------
Page 9bda8 not present in the dump file. Type ".hh dbgerr004" for details
BUGCHECK_STR:  0xA0
DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT
PROCESS_NAME:  System
CURRENT_IRQL:  0
EXCEPTION_RECORD:  fffffa6001dc99a8 -- (.exr 0xfffffa6001dc99a8)
ExceptionAddress: fffff80002477af1 (nt!IofCallDriver+0x0000000000000051)
   ExceptionCode: c0000005 (Access violation)
   ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: 00000000000000e0
Attempt to read from address 00000000000000e0
---------

Weird.

Technorati Tags: ,,



Page 1 of 66 in the Musings category Next Page

Contact

Sponsors

On this page...

Tags

Calendar

<July 2008>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Archives

Google Ads