Happy Father's Day

posted on 2004-06-21 at 00:06:32 by Joel Ross

How did I spend Father's Day? Tending to my sick wife and daughter. And when they slept, I mowed the yard. Not the best way to do it, but when these things happen, I know I'm appreciated and needed.

I didn't want any kind of presents for Father's Day, and that's almost what I got. Actually, I ended up with the best gift I could have gotten. My daughter, who will be two in less than two weeks, has been in a bad mood for the past two days. She's wanted nothing to do with me. But tonight, shortly before she went to bed, I was laying on the couch, relaxing (hey, it is Father's Day after all), and she climbed up on the couch, covered us in a blanket, took my hand and put it across her, and we cuddled for about a half hour. Big deal? Probably not to most, but to me, it meant a lot. She doesn't cuddle much and never initiates it.

Anyway, happy Father's Day to all the dads out there, including my own!

Categories: General


 

Automated Build Process In Place

posted on 2004-06-20 at 23:57:49 by Joel Ross

Last week, I finally got a chance to implement an automatic build process. It was actually quite simple. We used Cruise Control.NET as the continuous integration tool, and Nant as the building tool. Our source control tool is Visual Source Safe. It all fit together nicely, and I got it set up in about half a day.

So what does that give us? Anytime someone checks in a file in the current code branch, a build is kicked off, and I get an email telling me what happened. If it breaks, the team gets an email, and when it's fixed, they get another email. Each email details what changes were made, and who made them. I also am using cctray, a tool provided with Cruise Control.NET, so I have a tray icon that changes color when the build status changes.

I did have a couple of challenges though. The development is divided between our team and a team in California. The team in CA is building their own application and a shared component (a business layer). We are using that business layer, along with our own business layer. The shared one contains items we both need. Right now, we just reference a DLL, which we'll overwrite as we get a new one from CA. Is this the best way to do it? Each person pulling the solution out of VSS has problems, and have to set a path in their csproj.user file to point to their location of the DLL (it's a relative path, but our websites reference it, and VSS puts that in c:\inetpub\wwwroot by default - and the DLL is put where ever they decide to put it). Kind of a pain, and I wish there was a better way (no, it's not going in the GAC).

The other challenge was the build file for Nant. When you build a Nant build file, do you specify each file that should be built, or do you specify the folders to look at, and build all files in that folder? Both have limitations. The first one is reliable, but every time you add a file, you have to modify the build file. The second (with VSS) can be dangerous. If I add a file called cutsomers.cs, realize I can't spell, and add Customers.cs and delete cutsomers.cs, the project file knows that the file isn't part of the solution, but VSS still has the file. That means that getting the latest version, and building, you'll get a Cutsomers class in your DLL. Not good. Our eventual solution? Go with the <solution> task. It takes out both of the above issues, and it keeps things in synch with how the developers work with VS.NET.

Eventually, I want to get this implemented for Tourney Logic, which will be using CVS for version control by the time I get around to getting CC.NET working. Right now though, the focus is on the next version of the bracket control, not the build process.

Now, I just need to get one of these on my desk.

Categories: ASP.NET, Consulting


 

DETROIT BASKETBALL

posted on 2004-06-18 at 00:46:21 by Joel Ross

Wow! The Pistons as world champs again! The parade is probably going on as I'm writing this. Expected turn out: 1,000,000 people! Detroit loves it's sports heroes!
 
I just read my last Pistons post - and I was pretty much dead on about quite a few things. The Pistons didn't stop Kobe and Shaq, but stopped everyone else. Proof? Not until game five did someone besides those two score in double figures. But they did play hard against Shaq and Kobe, making them work for their points.
 
Side note: Why the discrepancy in fouls between the Pistons and Lakers? The announcers in game five gave the answer pretty clearly. When you lead against the Lakers, there's no reason to play Hack-A-Shaq. When you are behind, you tend to play sloppier, trying to get back into it. And the Pistons either lead or the game was close the whole series. The Lakers "me against the world" thing was a bit over the top, if you ask me.
 
Anyway, I also mentioned Rip should run Payton all over the court. He did. Ben Wallace on Shaq was a good match up too. I loved Ben's big (goaltending) block at the end of game five! His head was even with the rim!
 
Like I said before, if Detroit beat L.A., then hiring Larry Brown was the right call. Well, I would say it obviously was the right call. And this team is young enough that they can get back to the finals again, especially if Rasheed decides to stick around (a good possibility if you ask me. Let's see here. I'm traded to a true team, I fit right in, and I win my first NBA Championship. Why wouldn't I come back?).
 
Now let's talk about William Davidson. He's a smart guy. He understands what it means to be a team owner. He puts people in place who know how to do their job. Joey D. is sharp. The GM of the Lightning is sharp. Both guys were able to build a core of young players, and then keep them together while adding the necessary pieces to push them over the top. And Davidson stays out of it all. He knows what he's good at, and where he needs help. That's why you hire sharp people. They fill in your gaps, and they don't need you constantly in their way. Mr. Davidson understands that.
 
Imagine owning a professional team. Now, imagine owning two (three, really). Now imagine winning the championship. Now, win one in two different sports in the same year! Amazing! Win the Stanley Cup, then win the NBA Championship. Oh yeah, he also won the WNBA Championship last year too! Now, if only he owned the Lions!

Anyway, congrats to the Pistons. They truly earned it this year.


Categories: General


 

Test from IntraVnews

posted on 2004-06-18 at 00:41:28 by Joel Ross

This is a test from IntraVnews.

Categories: General


 

Test From w.bloggar

posted on 2004-06-18 at 00:32:17 by Joel Ross

This is a test of w.bloggar. I'm trying a few tools to make blogging easier. I tried intravnews 1.1 beta 2, but no luck so far. Categories don't seem to work.

Oh yeah, I upgraded to .9.0.8 of b2evolution tonight too!

Categories: Blogging


 

Way Too Long!

posted on 06/17/04 at 01:53:16 pm by Joel Ross

Holy Crap! It's been 2 full weeks since I last posted an entry of any kind! Why? Well, since the last time I blogged, we built a porch on our house (among other things), went on vacation to Baltimore, and I changed projects.


Maybe at some point, I'll actually get everything out that I want to write about. So many things have happened in the past few weeks, and I keep thinking about writing, but never get around to it.


Why? 1000's of blog entries to read! My reading has gone down. I'm now down to just over 200 unread items, so I'm getting there. We were in Baltimore for a few days, and when I got back, I had just about 2000 unread items to go through. I'm slowly catching up.


Anyway, I'm still here. I was going to post about being gone, but I figured most wouldn't even notice. My trickle of posts (1-2 a week) probably wouldn't even go noticed if they weren't there.


Anyway, I'll get a few posts out there over the next few days...

Categories: Blogging, General


 

posted on 06/03/04 at 03:47:53 pm by Joel Ross

It's set! The Pistons have made it back to the finals, and will face the Lakers, who are back for the 4th time in 5 years.


At first glance, I don't really see how the Pistons can match up against the Lakers, but as I start to look deeper, I can see it happening. On a local radio show, I heard someone say that the Pistons should worry about everyone but Shaq and Kobe. Let them put up 30 points a game, but shut down everyone else. Good strategy? Yes and no. No, because you can't just let those guys go. They could each end up with 50 points a piece. That won't bode well for the Pistons. Yes, because if you can hold them to 30 points, the Pistons can score more than 60 points per game, despite the recent output.


Anyway, how do the Pistons match up against the Lakers? Who covers who? Do you use Rip Hamilton against Bryant? He's in good enough shape, but do you risk him getting into foul trouble? What about Shaq? Do you use Big Ben? Or will he get into foul trouble early? What about Rasheed? Could we see Eldon Cambell play Hack-A-Shaq? Here?s my "game plan." Use Rasheed on Malone. Malone is old, and Wallace's ankle will hold up enough to defend a 40 year old man. Use Campbell or Okur against Shaq. At least Campbell roughly has the same size as Shaq (still giving up 20 lbs.). That gives you two guys (and 12 fouls to give) for Shaq before you have to have Ben guard him. Then, use Ben to come over to block shots.


Use Prince or Billups on Bryant, unless you can get Bryant to guard Hamilton. I'll take that match up. If Bryant wants to chase Hamilton all night, fine. They can cancel each other out. Assuming that doesn't happen (unlikely), let Hamilton run Payton all over the place.


Watching the Pistons, they tend to play to the same level as their opponents. They played a very defensive type of game against the Pacers. The same style the Pacers played. So do I expect the Pistons to run and gun with the Lakers? Not exactly, but I think it will be more up tempo.


The Pistons have to win one of the games in LA - either Sunday or game 2 (that's in July right?). Then, they'll have a shot. I still don't think the series will end in Detroit (for either team), so that means the Pistons will have to win one or two more in LA at the end of the series.


My bold prediction is that the Pistons will lose in 6 games. Of course, I'll be thrilled if I am wrong, and the Pistons win it all. At least one Detroit team will bring home a Championship then!


Oh yeah. One last point. Since the Pistons made it to the finals, does that make hiring Larry Brown worth it, especially when you consider that Carlyle lost in the Eastern Conference Finals for the third straight year? I don't. I think the Pistons had what it takes this year - the grit and determination, and a front office (Dumars) with the ability to pull of the Wallace deal at the deadline. I don't give the credit to the coaching staff. They still play scary basketball - they look great, then they look horrible, like they lack motivation. Motivation is usually the result of coaching, although when it comes right down to it, it's up to the players. Either way you look at it (coach's fault or not the coach's fault), the same thing happened last year. This year, they just happened to have the talent to win some of the games they lost last year. I'm not ready to attribute that to coaching.


On the other hand, if they beat the Lakers, that's another story.

Categories: Sports


 

Finally Coming Home!

posted on 06/01/04 at 09:22:38 am by Joel Ross

I'm sitting in the airport, knowing my laptop will die soon. I'm in San Francisco, waiting to go home. I get to take the red eye (oh joy!), and hopefully get some sleep. Not sure how possible that will be. My last flight, I slept for about an hour. Same with my flight here.


It's a long flight from Detroit to San Fran. Especially if you are awake for it.


Anyway, we finished up another successful week out here. We changed their design the week before I came here. Instead of using typed datasets, which I wasn't completely comfortable with, we decided to go with custom objects. Something I'm much more comfortable with. Why did we make the switch? We weren't going to be using the power of them, so why deal with the overhead and the quirkiness of the dataset? When I say we wouldn't use the power, I basically mean we wouldn't be using the diff gram in it - no DataAdapter.Update() - all custom stored procedures and Command.ExecuteNonReader().


So we started Monday. We finished the database conversion, tested the script against "live data" and began creating objects. We modified a few Code Smith templates, and generated our data classes, collections and data access layer. Then we made the necessary mods to add collections where needed, as well as owners to the objects that needed them.


Do other people use owners? We had our reasons, but I typically do. That way, if I'm dealing with an OrderLine, I can just say OrderLine.Owner.Owner to get to the customer (assuming an Order owns an OrderLine and a Customer owns an Order). This way, you can move around the object model seamlessly. We had a few objects that we couldn't figure out what owned it - either it didn't make sense to have an owner, or there were multiple owners.


Then we came up with an object caching strategy, as well as a session expiry recovery scheme.


I like the session expiry scheme. Basically, the object (let's call it a customer), is cached. Then, on every page, if the object is still there, we use it. If it went away (they go away after 20 minutes), we have a way to rebuild it. Any page that deals with a Customer uses a custom base class. On (pre) render of the page, the Customer ID is shoved into viewstate. This is read from a StateManager. Then, when the page is posted back, the value in viewstate is checked against the StateManager. If they are different, then the viewstate value is put back into the StateManager.


Then we have our caching strategy. You get the CustomerId from the StateManager, and then we call the UI Process to get the Customer object. It attempts to read it from cache. If it's not there, it uses the ID to (re)build it. If it's there, it grabs it, and checks the modified date on the object to the modified date in the database. If it's different, it reloads it. If it's the same, then it returns it to the page.


By the way, I really like the idea of a UI Process Layer. More on that later.


Anyway, any sub objects on the Customer come along with it, and if they get updated, the modified date of the customer is changed. That means if you update a OrderLine, the customer's modified date is updated - this was the real reason for having an Owner object. Now, when the OrderLine is updated, the new modified date is returned by the stored procedure and shoved back into the Customer object - using the orderLine.Owner.Owner.ModifiedDate property.


On a side note, our objects aren't really a Customer, Order and OrderLine. It's completely different, and much more complex. And, we made the decision that if a sub object (even if it's way down the chain) is updated, the whole object should be invalidated. Why? The object will 99% of the time only be touched by one person at a time. The case when two people do, well, they'll just have to deal with the performance hit. And we eventually have to deal with concurrency, and how to handle that. Most likely, accessing anything related to a Customer will lock everything about that Customer.


We discussed the idea of locking a set of records (basically check-in and check-out of objects). How do you implement that? I mean, I know technically how. But logically, how should it work? Do you check it out, and if you don't touch it for a certain amount of time, then it's unlocked again? If someone else accesses it, are they denied, or just given read-only access? What if the process they are dealing with happens to take more than 20 minutes? Do they automatically get their lock back if it's not locked? What if it is now locked by someone else? What if two people use the same record, but only update different parts? This is why locking is so difficult. For now, or model is a "last in wins" model. But that will have to change.


Well, my flight is getting ready to load. Looks like a full one.

Categories: ASP.NET, Consulting


 

Ahh, The Stanley Cup Finals. Who Cares?

posted on 05/27/04 at 01:16:56 am by Joel Ross

Well, it's been a long time since I posted about hockey! When the Wings got knocked out, I kind of lost interest in writing about hockey, but I still watched as the Sharks bounced the Avs, got bounced by Calgary, and the Lightning reached the Finals. I even watched the Flames beat Tampa Bay in game one.


Which brings me to where we are right now. Watching the Pistons! They beat the Pacers again tonight, through the hard work of Ben Wallace, who is a monster. I saw more high arc shots from Indiana tonight because of the shot blocking of the Pistons than I've ever seen before.


Oh wait. We're talking hockey right? Is the matchup for the Cup good for the NHL? A southern hockey team and a Canadian team. Yeah, Canada is all over it, but if the NHL wants to become mainstream, they need America. The southern part of America is not a hotbed for hockey. Yeah, the Lightning are in the Cup Finals, and Florida is probably hopping. But is Michigan? Is Colorado? Is Nashville still watching hockey?


My guess is no. If it was Detroit, that might be different. Same with Colorado - those teams have national appeal. A Detroit vs. Toronto final would be hugely popular throughout both Canada and America, but alas, it was not to be.


Anyway, here's some random NHL stuff.


I read someone's comments that the NHL wanted Detroit to win because they suspended a Calgary player for running into Joseph late in a game when it was out of reach for Calgary. That's BS, and everyone knows it. Sutter has a reputation for "thuggin' it up" at the end of out of reach games. Don't think so? He was suspended this year for that same thing. And he was warned about it in the Vancouver series. But yeah, the NHL wanted the Wings to win.


Two years in a row the marquee teams (pre-season favorites) were knocked out in the same round (meaning they never faced each other) - the Wings and the Avs. The Avs offense was supposed to be unstoppable. The Wings defense was supposed to be impenetrable. They were the preseason picks to win it all by most "experts" - same as they were last year. But yet, neither has been able to make it in the playoffs.


Two years in a row, the team that bounced the Wings has made it to the Finals. And Calgary has a great chance to win it. I never thought the Ducks would win last year, but Calgary has been very good, and is playing the same style team they played all playoffs. Last year, the Ducks had to play a different style team once the reached the Cup. Tampa Bay is a lot like Detroit (but faster) and San Jose. Plus, Calgary has knocked out the three Western Conference division winners, which is quite a feat.


Bettmann is positioning for a lockout - or at least that's how it looks to me. Maybe it's a negotiation ploy to get the player's union to give in a bit. Both sides need to realize a lockout that takes away next season could cause irreversible damage. If the owners are losing money, then they need to stop paying like they are. If the players push too hard, they may be without a league, meaning they get nothing, not just reduced contracts. And no, I don't think the WHA is a viable alternative.


The Wings have some decisions to make this off season, starting from the top. It looks like they'll keep Dave Lewis, but nothing official (that I've heard). Remember, Bowman, who knows a thing or two about coaching, wanted Barry Smith to coach. He repeatedly positioned for Smith to be his replacement and oust Lewis. But Illitch stuck with him. Wonder if Mike is reconsidering that. Unfortunately, if Lewis is out, I doubt Smith would get the shot - they'd go with someone with experience. But who? Anyway, it looks like the Wings also want Chelios (offered one year contract), Yzerman (one year deal) and Shanahan (one year deal at a lower cost - possibly not picking up his option) back. That leaves Hull, Devereaux, and Thomas not coming back. Boyd was quick, but not that good. Thomas is old, and Hull didn't do much this year - no heart. He spent too much time circling for a one timer and not enough time doing the things that have to be done to win a hockey game.


Enough hockey for one night. Maybe even enough blogging for tonight. Three posts in one night?!?

Categories: Sports, Hockey


 

The Perfect Communication Software

posted on 05/27/04 at 12:32:01 am by Joel Ross

I've been thinking about the perfect piece of communication software. I come into work every day, and I fire up at least 3 pieces of software to "communicate" with the world around me. That seems excessive to me.


Now, what do I mean by communicate? Well, here's a list:


? Email
? Syndication Content

? IM
? VoIP

? Newsgroups
? Forums

? Contact Manager


I think that's about it - at least for now. But wouldn't it be nice if I had one program that did this all? Right now, I use Skype for VoIP, Trillian for IM - and I use Yahoo, AIM, MSN, and ICQ regularly (if you ever want to contact me, let me know. I'll give you my IM screen names). I use Outlook for email, contacts, and (formerly) RSS (IntraVnews was my RSS tool). Right now, I don't monitor newsgroups much because I don't want to open yet another program for that. And forums, well, they're pretty much web based right now for me.


I recently switched back to RSS Bandit since it supports Atom, and may support posting to newsgroups from within it.


Oh yeah - almost forgot. I want to track what blogs and forums I've posted on also. I constantly add comments (well, not constantly, but you get the idea), but never can remember where I did it. Right now, I resort to bookmarks to let me know what I've posted, but I have to go check the sites manually to know if someone replied to my comment or to see other comments.


And I want to use the same tool to post to my own blog, or create forum entries. Why hasn't that been done already? I don't use one program to read my email, and another to compose my email. Why should I read feeds in one program, and compose in another?


Now, one last request. Make it seemless. I don't care if I'm posting to a blog or a newsgroup, sending an email, or posting to a forum. I just want it to happen. Yes, I know I'll need to know it in some cases, but for the most part, those are the same. Obviously there's a difference between email and VoIP and IM, but that's fine. You want those to be different. But I want them all to come from the same address book. And that address book should be synchable with my Pocket PC. And my desktop should know that I'm available for VoIP or IM on my Pocket PC rather than the PC - well, it shouldn't just know, but I should be able to say, "I'm on my PPC now," and the change should be seamless.


I really don't think I'm taking this too far. And someday, I think this could be a reality. But I want it now. I'm sure there are other things that would be worthwhile to integrate, but that's all I can think of right now.

Categories: Blogging, General


 

<< 1 ... 114 115 116 117 118 119 120 121 122 123 124 >>