Happy Birthday To Me!!

Today I turn the ripe old age of three cubed.

Brief history of life since college:

Worked, partied, unemployed for a few months there, worked more, partied, made some trips to places like Cleveland and Delaware and Rochester, worked, had a few girlfriends in there, did some side work, wrote some software, learned some things, lived in a few places, worked at a few places, met a lot of people, made a few friends, then BAM I'm three cubed.

Although, I can only hope the rest of my life goes that slow. I know one day I'll wake up and be four cubed! So, today I ask, "Will you still need me, will you still feed me, when I'm four cubed?" That's how John and Paul really wanted the lyrics to go.

This part of the year is always the worst, health-wise. Last week, St. Patrick's Day, then six days later, my birthday. I'll be in downtown Philly this Friday... 19th & Chestnut. Supposedly they're going to have $3 SoCo & Lime. Should be rediculous, but it will definitely make me feel like death for the rest of the weekend. It took me until Monday to recover from St. Patty's Day, I'm sure this will be three cubed times worse.

Round 2

Ahh, March Madness. I entered a tournament over at the local sports radio station (perhaps you've heard of it)... 1700+ people. It's round two. I'm in 16th place. Really it's like I'm in 4th, because of the grouping. (Drexel Hill Voodoo REPRESENT!!)

The rules are as follows: 1st round, 4 points each game. 2nd round, 2 points each. I think the rest are 2 except for the final game. That sucks too because that one team (The Minutemen) went 16/16! They'd be up there but, instead they're tied with me. First place gets $3000.

This bracket started Thursday at noon, you had to have your picks in by then or you weren't playing. I signed up for the site at 11:53 PM that day, then noticed a clock ticking down. It had 3 minutes left. It was the time you had to have half of your first round picks in! I panicked. But I got them in and went 25/32 in the first round. Fun stuff.

The Day of Recko... err... Drinking is Upon Us

St. Patty's Day Ahh, St. Patrick's Day. On a Friday. When does that ever happen?!?

I was going to bring in my flask filled with Irish Whiskey and go to town during work, but decided against it because I'd be going to the bathroom all day :-P Honestly, I don't have a flask or Irish Whiskey, so I fibbed. But you know what I mean.

We're having an Irish dress contest in work. I wore blue jeans and a blue shirt. I was going to get a green jeff cap and an orange beard (my beard grows in orange for some reason anyway...), but I ran out of time. It won't be the first time I don't win something :)

During St. Patty's Day, I'm always reminded of the time that I had the chance to spend a month in Ireland. For work no less. I ended up not going because they wanted to bring back the other guy who was already there. Scott, a good friend of mine... the bastard. So I didn't go.

I'm bringing my camera tonight. I want the world to see what the Irish beer garden is. Holy crap I can't wait! Plus, listening to Blackthorn is always the best. It's music that you can't help but just go crazy to. I remember the first time I saw them. I was like "Ummm... yeah." But the NEXT time... hoo boy. I've seen them a ton of times; twice sober. The one time they played at a big park near us, and the other time at the high school. I don't recommend seeing them sober.

Happy St. Patrick's Day! Go Flyers!! This is gonna rock.

Computer Programs are stupid

I disabled the polls for now since apparently a computer program has been voting. And I've been getting random comments that are obviously attempts at spam, which might also be done with a computer program. Or it could be someone I know trying to fool me into thinking a computer program is doing it. If that's the case.. STOP!!

Not to mention spam mail. They found me. I had jumped ship on hotmail because I was getting loads of spam. Last night, I empty my gmail spam folder and go to bed. Around eight hours later, I check gmail... 31 new spam messages, all with the raunchiest, most disgusting titles. I'm going to put in a request to gmail to have an option to hide the fact that I have new spam mail. I don't need to know it's there.

Report to Gmail

I get tons of spam now for some reason. However, I can't avoid knowing about it. You know the old saying, Out of sight, out of mind. Gmail currently displays the amount of unread spam messages as bold text, along with the word "Spam". Is there a way I can not let Gmail let me know that I have Spam? An option to automatically mark it as "Read" or possibly not even have a spam folder, and just delete it, letting spammers know that their efforts are futile when sending to a Gmail account.

Thank you. I appreciate the excellent spam filter immensely. I would just rather not have to delete them every day and sometimes not even read the titles of these spam messages.

Another spam story! This one was by me. I was writing this program in work that would send an email from command line because apparently Microsoft doesn't have one built into their SMTP server... you have to have Exchange Server installed. But, it was to go along with "Performance Monitor" (perfmon.exe), as an action to take as part of an alert. Well, I tried to get it to work, and it just wasn't working. (My program was working, but it wasn't getting called by the performance monitor action... and NOTHING works when it's not running :p). I had it set up to email me and my coworker who works out of North Carolina, checking a system performance metric every 20 seconds. But, the metric was like "When CPU usage is over 2 percent", which is like all the time. So basically, if it had worked, we'd be getting emails every 20 seconds. But it DIDN'T work! So, I went home, blah blah blah, came in this morning, opened email, and found 4000 new emails!! Apparently the server restarted last night and that was what it needed to work. We were cracking up about it!

I'm going to this on Friday

This year, Blackthorn will host the biggest St. Patrick's Day celebration in the tri-state area. Authentic Irish beer, food, and plenty music and craic. The Springfield Country Club will be magically transformed into a bustling street festival in Ireland. Stroll around with friends, visit different pubs, equipped with your favorite Irish beers, pub-style tables and seating, Irish beer garden, Irish food, and to make sure you don't miss a thing, we'll have it all broadcast on Phantavision.


Easy to get to from anywhere! Only minutes from the Blue Route, I95, and Route 1 ! ! !

(I can't wait to find out what an "Irish beer garden" is... you know what I picture... something out of Willy Wonka)

Blackthorn is a local Irish band. You can read about them here. They used to have an Irish (from Ireland) lead singer but he quit. They're awesome though.

I recently chatted with Zatko about it... he didn't think I was Irish!

Mike: you're not irish
me: "Connell" isn't irish?
Mike: i thought it was dutch
me: I'm more German but I have an Irish name
me: It's like "O'Connell" without the "O"
Mike: i thought it was Von Connell
me: see, even people with the same name as me are obviously Irish
Mike: ha

God Bless Gentoo

I go to install OpenOffice.org (Commonly just referred to as "OOo"), and the install package for Linux is in RPM format, which is a RedHat invention, basically an installation package (usually you're just compiling source :p). I type in "which rpm" to see if I have rpm to install this thing. It says "No rpm in $path". "F@#%@#$#. I can't install OOo 2.0?!?!"

Ahh, but then I type in "emerge rpm". Gentoo has a software management tool called "Portage", and how you use it is to simply type in "emerge" followed by the software that you want. F@#*^ing A!! It takes a little while, since it checks for the dependencies, downloads all the source code, compiles it, and then cleans it. But, I'm talking 10 minutes ago I started this thing, and it's almost done. There were 2 dependencies to install before RPM. Take that Windows!!

Other times I've needed stuff on other Linux distributions, I'd have to search the web... pfff. That's like 2005 technology.

After 12 minutes, I try again...
which rpm

It's miraculous

Wow, on another topic... OOo 2.0 is pretty sweet. I was using 1.1 or something forever. It has definitely improved, interface-wise. And I saved my first "OpenDocument" file!! I just opened my "Attachments" document and saved that as an ".odt", or "OpenDocument Text". Free, awesome stuff kicks ass.


First off, it's like a bazillion degrees out

A bazillion degrees

Second, I want to take off for my birthday, but it's on a Thursday so I wanted to then take off Thursday AND Friday. Is this generally acceptable? I can see if I say I'm taking off for my birthday, the majority of thought might conclude that I'm taking off one day. But, if I just say that I'm taking off Thursday and Friday, without specifying that it's for my birthday, then it seems more justified.

We're at a slow time in work, hopefully the client signs off on the next stage so we can get to work and I don't get finished everything given to me for one week at 3:38 PM on that Monday.

Moving On

I'm extremely disappointed to inform everyone that stringed.org has been treated to a significant upgrade... a security system. Well, I simply use the same security system as I had for this site, made no modifications to the inner code (since it's perfect), and now I have a per item per operation security system in place for stringed.org.

That "per item per operation" bit might be confusing. Basically, say I want to allow someone to edit News but not be able to delete it. Or to have full permission for News, Photo Albums and Polls but not for Downloads. I can do all that and I didn't have to change the old security system that I built. Why? Well, I would start out by saying I've seen quite a few hand built security systems in my 4-5 years in the professional business of software development to know what works and what doesn't. Or to pick the pieces that work from other security systems that might not be that great overall. As Picasso says, "Good artists copy, Great artists steal."

So what else is new with it, you ask with desperate anxiety... Hmm. I have listeners in there for when objects are saved and deleted. This is more for editing the security system, since it's kept, for quick lookup, in the application map. If I don't reload the registry after making a change, that change never takes place, as far as the security system is concerned. Also, it will be an important piece behind "Attachments". Although, I might just write a new engine for that.

Also, since you're dying to know, there was a bug on the form when I had two dual-select lists. Fortunately, this bug never made it off of my computer, as my wicked javascripting skills extinguished it when I found it. I have two dual-select lists on a "SecurityGroup" object, since Groups have a list of Privileges and also a list of Users. I've said too much :p

I had debated trying to create a new security system. This would be so I wouldn't have to create a new menu system, as the menu system relies heavily on the current security system. So, since I didn't want to write a new menu system, and a new security system, I was forced to think brilliantly into the current solution that doesn't change anything and does not restrict anything either. The menu will work, the forms will work, and the rest of the site will work just as it's supposed to, as you can see by going to this page. You will see "You are unauthorized to see this page." or something.

One other helpful change is for the lists that list an object that might have the same name as another object in the list, but have a foreign key "parent" that will be different. On the old version of the site, if you go to add a library, it lists books with just their title. But, you can't tell who wrote those books without first going to the book list and seeing. Now, they are listed with their "parent", in a book's case, Author. So, my book shows up as "Jason Connell - Orientation of Objects". You can see this illustrated here, along with the two dual select lists on Group. Basically imagine the list being "view add delete edit view add delete edit view add delete edit". That's why I added that :) But also, you can see it in my User list... A User for stringed.org has a foreign key to Author, making Author it's "parent", so now, the User will display "Author Name - Username".

It's pretty sweet. I am trying to think of other stuff that I did for it. I didn't have that much time this weekend with my neice Megan's Christening, hanging out with Kira, Caden, Ethan and Danny, and my brothers, watching lots of college basketball, etc. This week should be a big time of productivity, since I can finally start on Attachments!! They'll be neat.

I f@#%@#ing OWNED that S@#%

You Passed 8th Grade Science
Congratulations, you got 8/8 correct!

* Pats self on back *

Of course, this comes as no surprise to me. I just saw this thing here and had to see how much I totally ROCK at science. Not joking though, I subscribe to "Scientific American", and I regularly watch The Discovery Channel and the Learning Channel. Another reason for the complete devastation I razed on the 8th grade Science Quiz is that Math and Science were my favorite topics in school. NO WAY am I not ACING 8th grade science.

Oh, and possibly one more reason. My degree is in Science. I am a "scientist"... a "computer scientist", officially.

I never do those things, but I had to do this one... too much dedication to Science to ignore it. Like, if a show is on about Einstein, you bet your ass I'm watching it :)

Like anyone really noticed (or cares) :D

My site's been on and off very randomly. Today I went to add this awesome, funny, crazy news post, and my site was down, and now I forget what I was gonna say... but, I go to the website of my host, Nexpoint, and go to log an error, and I get this message.

And I'm like "Dang"... I tried to write down what I was going to write about, but all I could muster up was the following

So, as you can see, I'm distracted easily and apparently had nothing funny to add to the internet... nothing worth remembering for 9 minutes, anyway.

Slow service sucks

We have this cafe downstairs at work. It's not affiliated with our office in any way, other than the fact that we're by far it's biggest customer, considering this company rents 2 floors out of the three in the building. The guy who owns the cafe is overweight and lazy, a destined-for-failure combination. He's alright though when he's not pissing me off, and when he's there helping his helper. They always have way too many people coming to order for the number of people they employ. Two people to serve 10 is not enough, especially when one is a lazy bastard. I have a few peeves about this guy...

Today, I go down to order, really early before anyone else gets down there, but I was too late... there were already 3 people in line... this normally equates to at least a 10 minute wait. And these people are getting wraps and other cold things... hardly does anyone get anything hot, they know better. Unless it's a hot special, which is already made. The kicker about today was there was only the dude's helper working! I knew I was in store for a wait. It took me 20 minutes to get my food. One person cannot do it, so where was the other guy?

I really don't know. But when it's him and his helper, it really doesn't make a difference. The dude will take your order while he's making someone else's sandwich. A few minutes later, when he's ready to make yours, he'll completely forget what you ordered and ask you again. Then he starts making it, then asks the next person what they want. The worst part about it is, he'll get your sandwich all packaged and ready to go and give it to you at the cash register. You get your money out, ready to pay and get the f#@%@# out of there, and he'll go take the next person's order (again, since he forgot) and start making it.

If it's just you, it's fine, but even if it's just you and people come in after he starts making your order, you can expect a delay. I'm betting another helper would work wonders... one to work the cash register.

Yes, of course, I still go there because it's a short walk away, I'm not gonna go out and spend $10 for lunch when I can go down the stairs and spend $6 for lunch... oh, and they have some kickass rye bread :)

It's a beautiful thing

I took out the "Book" form for now, otherwise it would be a gigantic cluster@#%@@#, and I limit the file size to 1000 bytes (less than 1KB). Other pictures here and here.

And with that, stringed.org's underlying software is ready for some major overhauls!! There's this whole huge thing I want to do to it yet.

New Games

I also got some movies, namely "Walk the Line". Who knows... deep inside I might be a Johnny Cash fan and not even know it!

And who the F@#%@# voted on my poll? There's 25 votes but only 7 or so people, two of which selected every option before submitting...

Progress rocks the mother f@#%@#ing house

Check out stringed.org NOW!! Updates include:

Customizeable actions - specify what a user can do with an object (add, edit, delete, view). You can see this in the book list, it shows a "view" link. If I don't specify "edit" for an object, the whole site has been updated to account for this, so you won't be able to trick the site into being able to edit something that isn't editable (or edible :-p )... or deleteable for that matter.

Lists are perfect - As well as the below mentioned "many to many problem" (which you can see at work on the "Library" form), all lists that are sequenceable can be sorted (See Chapters on a book and Books in a library). You can add a list to an object that hasn't been saved yet. (This was more of an "uncomfortable with the greatness of 'dumb'" situation, as I just had a line of code that said "if the object hasn't yet been stored into the database, don't process lists". You would have seen those repercussions yesterday if you logged on, but not anymore). Obviously, also, the subforms work perfectly.

Bitmasked int field - This can be seen at work on the "Library" form also. Right now it takes parameters for the values, but I will write plugins for it that it gets it from the database and shows them as checkboxes like they are now. There's also a corresponding output component for bitmasked integers.

Still a lot to do... I have to have it so you can specify something's a file field, and make a cool control for that, and there's probably other types of fields that I haven't accounted for yet.

Also, I registered the domain name that Salzburg will be found at later, but I can't tell you it. Secrets rock even more than progress.

Of Course!!

Some things you are so used to thinking about one way, that to think about it another way IS considered to be "thinking outside the box". Even if you were thinking about it wrongly before, and now are thinking about it correctly.

This happened to me sorta. It was more of a case of not making the obvious conclusion about something. All the facts were presented, sugar coated, with arrows pointing to a conclusion, but I only came to it through trial and error last night.

Databases are merely containers for data, and we have to use the tools that they provide (foreign keys, primary keys, indexes, unique constraints, SQL statements, etc) to really find out the meaning of the universe. Well, I didn't get to that point yet, but it was something close. The dreaded "many to many relationship" problem. I'll explain.

The simplest way to put it is that a many to many relationship is when one single object (we'll call it Object A) has many of some other object (Object B), but one of Object B can "be in" many of Object A. The best real world example I can give, using my "Library" model on stringed.org, is Book (Object A) and Word (Object B). A book will have many words in it, and a single word can "be in" many books (and in the case of Words, it can be in a book many times).

The simplest way to portray this in a database is having a Book table and a Word table, and then you have a "link" table (probably called BookWord) that has foreign keys to both a Book and a Word.

The way "dumb" was originally created, I had no functionality to handle "many to many" relationships. I had thrown in some XML to be able to handle it in the future, but never did anything with it. (Originally, I'd get lists of the "link table" object, with the references loaded, and then populate the list that was part of "Object A" with the list populated full of "Object B" objects, all manually, everytime I needed it. My News object has many categories, and a category has many News, so I'd get a list of the link table "NewsCategoryNews", and then grab the "Category" part of that object, and my News object actually had a list of "NewsCategoryNews" objects, instead of simply a list of "Categories", which it should).

Then last night, as I was creating a control and adding functionality to potentially handle "many to many" relationships, it dawned on me. With previously created tools in "dumb" (namely a MappedListProperty which says a certain object has a list of objects, as an Author can have many books [a one to many relationship unless you include functionality to have many authors write a book, which the model doesn't include]), the conclusion was obvious. A book has a list of Words!! I know, it doesn't seem brilliant, but now it all works. See, even if they are many to many, a book still just has a list of words, and a word has a list of books that it is in. All I had to do was simply add functionality to handle this, which basically meant to add some attributes to a MappedListProperty XML node, and override some functionality used when saving and loading a ListProperty. It was easy.

Now, a News object can have a list of "Categories", instead of a list of "NewsCategoryNews" (the link object). "NewsCategoryNews", the table and the object, still have to exist, however, because "dumb" still uses it to populate the "Categories" list for a News object.

I don't have that latest uploaded yet, but I will tonight. It works beautifully. Right now I have the model set as "Books can have many Genres" (a genre is like "Suspense", "Horror", etc), and "A Genre can have many books". All I do is specify, in books, and actually in the "Genres" list property, is that a book can have many Genres, but also a Genre can "be in" many books. I specify the "link table" to use for the many to many relationship, and it's smooth sailing after that.

So to review: Many to many relationships cannot be handled with just 2 tables. You need 3. The two tables to be linked, and the link table. So to represent it in software, you just need to specify that there's a link table, and handle it accordingly. Side effect: Never write unnecessary code again :)