Thursday, December 27, 2007
First, I want to say that the documentation of the api is really good. Every time I was not sure how to do something I could easily find out the answer in the documentation. Second, the graphs produced look nice. Three, pie charts were very easy to create.
That said, I found it very difficult to do anything else. While trying to render a nice line graph I ran across a few problems. Well, not problems but challenges. The first one is that the api really isn't "smart". What I mean "smart" is if you have 5 data points, but 6 points on the axis, the api doesn't adjust the points to line up with the ticks. Also, the x,y axis scale from 0 to 100 so if you are charting negatives or numbers outside that scale, your application needs to do an algorithm that figures out what data point resolves to the actual data value. Another problem is the the axis do not scale themselves to the data. This requires yet another algorithm to determine the labeling of the axis. Oh, and be sure you do the scaling before you do the charting or else everything is a mess.
So, after working with the api I started to wonder if there was anything better. After going through all the tools that cost way to much, I found a handful of charting tools that were free. So I thought I would go through them until I found one I liked. I got lucky and the first one I tried was super easy to use. The tool was very configurable, yet able to do to basic things like scaling on its own, of course this could be overridden if needed. The labeling of the graph was better as well. The tool I found was called ZedGraph.
For example I create the same line graph with both apis. Using Google's api took me about 5 hours to get it right and maybe another hour or so making the graph pretty. Using Zedgraph I did the same graph in about an hour. That includes making it pretty.
All in all I am a little disappointed in the Google offering. I think maybe my expectations were high because all the other Google tools I use(see past blog posts here ) work very well, and are easy to integrate.
This brings me to another pondering, is Google doomed to fail because of there past success? People will expect nothing but the best from Google and if future Google products are good, but not great, will people will sour on them? I will save that discussion for another day.
Friday, December 21, 2007
- It is not always warm. I left the cold snowy state of Wisconsin expecting to get to L.A. and having sun and warm weather. Instead I found rain and mid to high 50s.
- I have been in many cities where I thought traffic was bad (New York, Toronto, Washington D.C., Las Vegas) None of those cities can touch L.A. We are talking 8 lanes of bumper to bumper at 10:00 am in the morning. Add to that the motorcycles that ride between cars in adjoining lanes and you have a recipe for disaster and mayhem.
- I can leave my Sirius radio on in my car for three straight days and it wont completely drain my car battery.
- I can sleep through anything. While in L.A. there was an earthquake that registered 4.0. I slept through it though.
- Everyone in L.A. seems to be in some way connected to the film industry. Everyone I spoke with has either been in a movie or connected to a movie in some way.
- The Denver airport is not all that great. It is just a long building that is not fun.
- TAS at LAX is perhaps the worst. It took us an hour and forty-five minutes to get through security. They had one xray line running during the middle of the day.
Thursday, December 06, 2007
First let's define duplicate code. I will take the definition right off of wiki....
Duplicate code is a computer programming term for a sequence of source code that occurs more than once, either within a program or across different programs owned or maintained by the same entity. Duplicate code is generally considered undesirable for a number of reasons. A minimum requirement is usually applied to the quantity of code that must appear in a sequence for it to be considered duplicate rather than coincidentally similar. Sequences of duplicate code are sometimes known as clones.
The following are some of the ways in which two code sequences can be duplicates of each other:
- character for character identical
- character for character identical with white space characters and comments being ignored
- token for token identical
- functionally identical
Let me give you an example I just came across in the last few weeks. I have been doing some work patching a website. There was an error that was occurring anytime two new products were added to the database and a customer was purchasing one of the new products. Do I had to debug the issue. Basically what happened was the developer who wrote the web page that was failing decided he was going to create two static arrays. One array would hold all the prices of products, and the other would hold the product descriptions. he then put he item in the array at the array index corresponding to the database product key. that way when the page was passed the product id, he could look in these arrays to get the info out. Well, what happens if you forget to update these arrays when adding new products, well you get index exceptions and pages crashing. I have know idea why the developer did this. I mean you have the product id why not just get the details from the database? This poor design and duplication cost real world dollars.
Please never duplicate code, data or logic in a software application. It is never good practice. Oh there are tools you can get to search for code duplication. The one tool that comes to mind is Simian. I have never used it, but I might start.
Friday, November 30, 2007
Writer's block is a phenomenon involving temporary loss of ability to begin or continue writing, usually due to lack of inspiration or creativity.
I am not sure that exactly fits me though. I have a lot of topics I would love to blog about, yet I haven't had the time to research them though.
Some of things I want to review...
VS 2008 new features and what not
More loose coupling techniques
So hopefully next month I will have some time to start attacking this list. If there is anything you would like me to talk about let me know. Just add a comment below.
BTW... I added ClustrMaps to my blog on the right.
Friday, November 23, 2007
Some quick notes.
- My Grandma was interviewed by the paper back home. She gives some great advice.
- I ate way to much yesterday. I heard a news report say that the average person eats 7200 calories on Thanksgiving. And you thought McDonalds was bad for you.
- The Packers are 10 and 1. So is Dallas. It should be a great game next week.
- I been thinking of dumping Time Warner Cable in favor of AT&T's U-Verse service. I think price wise it is better, plus I would no longer have to deal with TWC. Also I wouldn't need to put a dish up on my roof. What worries is some of the problems I have read about. One in particular was that it can only record one HD source at a time.
Thursday, November 15, 2007
See for some reason when using composite keys NHibernate has trouble telling if objects are new or if they are updates. This force you to have to call the insert method instead of the save. Not a big deal if you can tell when a page is doing an insert and when it id doing an update.
Another issue was getting many-to-one mappings and one-to-many mappings to work. see loading was not a problem but again when trying to update and save I ran into all sorts of problems. The quick solution was to all those mappings out of the mapping file and load them in my DAO layer. Not a big deal but when you are using to having a tool handle all that code for you it is upsetting.
All in all I was able to make the tool work. Now that I know the tricks, I wont feel as much pain the next time I have to map a composite key system.
Monday, November 12, 2007
I saw Spamalot first. Spamalot was shown at the Wynn Casino. I like Monty Python and have seen their movies. Spamalot is basically an adaption of the movie Search for the Holy Grail. In fact they turned it into a musical and even added a little Vegas to it. In all it was very entertaining and still had everything you would expect from a Monty Python production and a Las Vegas show. The Lady of the Lake had a terrific voice.
I saw Penn & Teller a day after I saw Spamalot. Penn & Teller was playing at The Rio All Suite Hotel and Casino. I have enjoyed Penn & Teller shows on TV, but was disappointed by the stage show. My disappointment comes from the fact that the show was exactly the same as their TV shows. Sure they might have had one or two differences, but they were not that entertaining.
To wrap up this post I would give Spamalot an A and Penn & Teller a B-. If you have never seen Search for the Holy Grail, or Penn & Teller on TV then you might enjoy both show even more.
Sunday, November 04, 2007
Anyways, some thoughts while I am here.
It is amazing how the casinos are using technology. From the time you check in to the time you leave you see computers and gadgets helping make your stay better. From being able to check out from your room, to watching the cleaning service use hand held device for keeping inventory and schedules up to date.
Tonight I am going to see Spamalot at the Wynn Casino. I hope the show is good.
Ad for my sports teams, the Badger played three good quarters of football before they ran out of gas and lost to the number one team in the nation. The Packers won and it was another amazing game. Brett Favre threw a couple more touchdowns and finally has a win against all thirty-one teams in the NFL.
I am not sure if I will have time to post again fron here but if I do I will try to get some pictures posted.
Tuesday, October 30, 2007
Thursday, October 18, 2007
Tuesday, October 16, 2007
Don't get me wrong I think Mike Titico does a really good job. His play by play call of the game is the only saving grace of the entire broadcast. The problems come any time Kornheiser opens his mouth. His commentary is usually pointless and it seems his only responsibility is to act like a fan and ask questions to Ron Jaworski.
I used to rip on Madden and Michaels, but they were way better than this crew. Monday Night Football is supposed to be the best the NFL has to offer any given week, shouldn't we expect the same from the Network that broadcasts the game?
Tuesday, October 09, 2007
I tend to use the PnP product as much as I can. I have been a backer of the Web Client Software Factory. Using the factory along with the Enterprise Library offering is close to Spring. But it still lacks. Features that NHibernate offer is completely missing. The other thing is I feel like I need to change the way I develop to fit into the PnP way, when I use Spring.Net or other opens source products, they tend to just work with me. The tools I use should not fight me.
I have had high hopes for the PnP team. I was hoping that the products they released would be ground breaking and innovative and truly help me in my day to day work. Instead they try to replicate other open source products and challenge me in how I use them. If the PnP team continues this practice they will always be one step behind.
Now playing: Nickelback - Animals
Friday, October 05, 2007
The Repository Factory is a lightweight O/R Mapper created by the Patterns and Practices team. It was part of the Web Service Factory but the team decided to pull it out and make it separate and usable by all.
Before I go much further I want to say I have never used an O/R Mapper on any application. Even though there are those here where I work who do use them, and they remind how disappointed that Microsoft does not include O/R Mapping in .Net. For a while MS promised us ObjectSpaces to be part of .Net 2.0 but it never made the final cut. Currently ADO.Net Entity framework is due to be released in .Net 3.5. This framework could serve as an O/R Mapper, but from what I here it might be a bit lacking.
Anyways back to the Repository Factory. There were some things i like and others i did not. First the items I found nice.
- It can generate all you business entities, and data access classes.
- It uses interface when creating repositories allowing for loose coupling.
- The mapping of interfaces to concrete classes is handled in the config file.
- It handles the mapping of entities to data classes.
- I didn't like the fact I was forced to use stored procedures. I used to be a huge fan of stored procedures, but after noticing how much extra complexity stored procs add to deployments.
- Entities same as database table. What if I have an entity that does not map back to one table, but multiple tables.
- Lack of complex entities.
So check out Repository Factory and the screencasts.
Now playing: Nickelback - Animals
Monday, September 24, 2007
Badger football is off to a 4-0 start. Although the Badgers haven't really played well and the Big Ten looks to be week they are still 4-0. Better than Michigan, Penn St. and Notre Dame. The Badger Defense look to be settling down and should be one of the better defenses in the nation. The offense still is inconsistent. Part of the reason is they are starting a new QB.
The Packers are off to a 3-0 start. This is surprising because many had thought they might start 1-3, or 0-4. The packer defense has played really well in all three games. They are pretty dominate. They shutdown a really good rb in week 3, and a good qb in week 1. All three teams they beat were playoff teams a year ago and many figured would be again this year. Oh and did I mention that Brett Favre tied the NFL record for touchdown passes.
The Brewers are 3 and a half games out with 7 to play. They are done, but still have a chance to finish above .500 for the first time since 92. They really did have a good season. Prince fielder could be MVP, and Braun should be the Rookie of the year.
At work I am still working on the same projects, so I really have nothing new there. I have been asked to lead a discussion on lose coupling. I said I would, but really haven't had time to put anything together.
Monday, August 27, 2007
So we were trying to come up with a way to make the game easier for begginners to understand, and allow advanced players a way to keep the game fresh.
So here is the SpiderLogic take on Sheepshead 2007.
- Specialized Sheepshead Cards
- We want a way to quickly understand what the cards mean in the game. So, we want specialized Sheepshead cards. Instead of the pictures of royalty and number patterns on the cards we want In the middle of the card, just a big picture of the suit, for example, a big heart for hearts, a big Club for clubs, a big spade for spades, and a big T for trump. This would cut down on confusion on if the Jack of clubs is trump or not. Along the top the cards print the point value (11, 10, 4, 3, 2, 0) and down the side you can put the trump order. Each card would also have a unique bar code on them. Why a bar code, see 2, 3, and 4.
- Computerized Help
- Each player has a card scanner that after dealing the player could scan his/her cards. Then during each trick, the player would scan the card being tossed, and a computer could beep a warning if the player was not going to follow suit and make a misplay. I guess you could program it for other things like optimal play so if you are a beginner it could help you play better.
- Computerized Point Totaling
- This same system then would also be able to know who partners are and be able to total points for the hand. This would save time allowing for more hands played during a lunch period. I know what you are saying good Sheepshead players should already know the point count, well true, but you still need to do a confirming count at the end of the game.
- Stats Keeping
- I am talking the mother of all stats keeping. Not just basic things like how many times I pick and win. I am talking like how often does called suit walk, how many times did I pick and who was my partner, do I have a better win percentage in three handed. Does one player tend to pick and pull down others. Of course all this would be displayed on the web for all to see. This can easily be done, using the scanning machine again and a nice website. You can tell the computer who picked, the called suit, or if playing Jack of diamonds it already knows the partner. Then off the play of scanned cards it would be able to automatically be able to keep these stats fresh in real time. Talk about bragging rights.
- Online Play
- Improved online play. I have tried to play Sheepshead online and really it is not that fun. First it is really hard to get a table going if you are not a rated player. I have been playing Sheepshead for13 years but because I never played online I have no rating and people wont let you on their tables. Then if you are lucky enough to get on a table be sure you can trust people, because I was at a table and all they did was pass so they could double points. they would do this for like 20 deals in a row just so the point totals would be big. If you picked to soon, even if you had the boss queens, two jacks, and a couple small trump they would get mad.
Now playing: Akon - Sorry, Blame It On Me
Now playing: Buckcherry - Crazy Bitch
Now playing: Bowling For Soup - Girl All The Bad Guys Want
Now playing: Blink 182 - All The Small Things
Now playing: Barenaked Ladies - The Old Apartment
Monday, August 20, 2007
Alright, I know what you are saying, what is Papapalooza. Well it is three local bands playing for free at Papas Social Club to benefit charity. There is no cover charge to get in. How it works is all money raised from raffles and a percentage of the bar goes to Penfield Children's Center.
The bands playing this year are Modern Giants, Single Barrel, and First Kiss. As an added bonus, yours truly will be playing cowbell with Single Barrel. That's right I will be making my first stage appearance and let me tell you I got a fever, and the only prescription... is more cowbell.
You can see the skit here.
Now playing: Sean Kingston - Beautiful Girls
Now playing: Red Jumpsuit Apparatus, The - Face Down
Wednesday, August 15, 2007
So you might have noticed that at the end of my last couple posts there was an inserted footnote of the music I was listening to when I posted the blog update. Well I use Foxy Tunes plugin for Firefox, and the latest update give the user the ability to attach that info in emails or blog posts or what not. I really don't use it in my email, however I thought it would be interesting to track what music I was listening to over time. Like five years from now when I am reading an old blog post and see I was listening to the Foo Fighters.
I recently bought NCAA 2008 for the XBox360. I haven't really put much time into the game yet, however here are my initial thoughts.
One, there are too many turnovers in the game. I have noticed that there are like 4+ fumbles a game and 4+ interceptions per game. This might not seem like a lot but I play 5 minute quarters, and you might only get 10 possessions a game. Plus on top of that sometimes the game cheats since the computer AI is poor. What do I mean by cheat, well the cool thing in the game is that you can view replay in super slow motion and watch when the football passes through the body of my defender and into a the arms of a wide reciever.
Two, I am upset the EA still hasn't added the create a school back to the game. It was present on the last XBox release but failed to make the cut in the two 360 releases after. It was one of my favorite parts of the game. When I play dynasty, i like being able to create a weaker school, join a small conference, build it up to a conference power, then jump up the chains of conferences and win at every level. It made the game fun. Anyone can take over the reins of a powerhous and lead them to glory.
Three, the graphics are awesome.
Now playing: Foo Fighters - My Hero
via FoxyTunes .
Now playing: Rihanna - Unfaithful
Now playing: Barenaked Ladies - Brian Wilson
Wednesday, August 08, 2007
<t> = List<t>.Find(predicate<t>) or for some code
String dogName = "Max";
List<Dog> dogs = some list of dogs;
Dog aDog = dogs.Find(delegate (Dog match)
That will return the first dog in the list that is named Max.
There are many operations you can do this way and none of this is all that new or really interesting, except I came across ForEach(Predicate<T>).
To use this, it is List<t>.ForEach(Predicate<t>).
So I found it interesting that they would include the ForEach on the list. I started a message post at work asking about this. When should you use the list ForEach vs. the regular foreach. Is one better than the other and what not.
Geoff shared that by using ForEach looping becomes a natural part of the list and it reduces the amount of code that needs to be written. Grant took it one step further in summing up Geoff's response.
He states "Imagine you want to be able to talk about solving problems using some sort of “natural” set based language. The chained delegates *do* this, and in doing so reduce boilerplate code. Still, the question of why do this at all, why bother, why does this exist, why solve problems this way exists. The answer is *list comprehensions*; and it is well worth the read."
You can find out more about List Comprehensions here.
I am not going to lie and say I understand List Comprehension fully, however my point of the story is I like that when I ask the people I work with a question about why use a ForEach instead of a foreach, the discussion ends with a lesson on list comprehension.
Now playing: Amy Winehouse - You Know I'm No Good
Friday, August 03, 2007
I knew the Cubs were playing well, but I thought the Brewers would be able to hold on to the lead. Don't get me wrong, I think the Brewers will come out of this slump and win the division, I am just surprised that is all.
here are some keys for the Brewers if they are to win the division (in no order of importance).
- Clean Sheets
- Ben Sheets needs to come back from injury and not miss a beat.
- Long Outing with the Guys
- Starters you need to start pitching seven inning and help your pen so they can help you.
- The pen needs to stop the leak and start pitching like they are capable.
- All Hail the Prince
- Prince Fielder needs to start producing like he did in the first half of the season
- Rookie of the Year
- Braun needs to continue his high level of play on offense, and improve on defense.
- Help the Prince and the Rook
- The Brewers need soem other players to get hot. It doesn't always need to be the same people, but they need six or seven people in the lineup that are producing daily. Hart, Hall, Hardy, Estrada, Graphy, Mench, Council and Jenks I am talking to you.
Now playing: Plain White T's - Hey There Delilah
Tuesday, July 31, 2007
One thing Dan and I came across as we were using the UpdatePanel of the AJAX.NET framework was for some reason it would not work with with RadioButtonList (RBL) control. We had no problems getting async post backs to work on control changes of DropDownList, CheckBox, and Button controls, but for some reason the RBL control doesn't quite work right.
I could go on to explain why but I think this post does the best job of describing the problem and the solution.... http://smarx.com/posts/the-case-of-the-radiobuttonlist-half-trigger.aspx
Other than that problem the AJAX framework has worked well.
Monday, July 30, 2007
Smallville is the TV show about how Superman became Superman, along with how Lex Luther became evil. I have only seen seasons 1 through 4 and I have to say that for the most part I really like the show.
What pulls me to the show is really the concept. I like the idea of seeing Clark Kent learn about his new abilities and how they relate to the people around them. I think the way the writers develop the characters is really good too. The other thing that is done well is the music selection. The use of new music along with older music and per haps songs that are not very common but yet go with mood of the show.
Another interesting aspect is how they bring in outsiders that we all know, like the Flash, or other Justice League of America heroes. Plus the use of one liners in the show are just great. My favorite so far is when Lex is returning from Egypt after finding the first stone, and Clark is flying to the jet to recover it, and the pilots see him on radar and give the old, "Is it a bird? Is it a plane?" line.
I actually created a Smallville Season One playlist on Yahoo Music.
I am looking forward to watching season five, but since my Dad has not finished it yet I won't get it until he is done. Season Six will be released on September 18th I think.
If you are a fan of Superman I would say you should check it out.
Monday, July 23, 2007
When we set up a project for a client we try to use a standard directory structure. We do this so that no matter what project we are working on we can easily move to another project to do work if the need arises. The structure looks like the following...
- client name
- Project One
- Project Two
Tuesday, July 17, 2007
So, where I work, we have a few clients that have reporting needs, and I usually recommend or push SQL Server Reporting Services if the client is a .Net Framework user.
Why do I push it?
Well, I really don't have a great reason other than it ties nicely to SQL Server and the .Net Framework. As a tech lead I usually can make this decision and let the developers figure out the really in depth details. Sounds great I can continue to learn what interest me while the work still gets done.
Here's the catch. When people ask me questions about Reporting Services or the developers ask questions or tell me an answer to a question I might have, I have know way of knowing what is correct. I trust my developers but at the same time people make mistakes, take short cuts, or don't follow best practices. So for the next few weeks I will be on a crash course of SQL Server Reporting Services learning.
If anyone out there knows of good resources like books, web casts, samples or whatever please let me know.
Monday, July 16, 2007
When a bug can't be reproduced in QA usually there a few reasons why.
The first reason could be that the version of application running in QA is different than in production. This is an easy test and if it is the case then then then next time you do a production promotion the bug should go away.
Another possibility for bugs in production and not QA are configuration settings of the application. Things like connection strings, web service urls and any other custom settings might not be configured properly for the production environment. Again this is an easy thing to check and correct.
These two solutions will probably fix most of the problems when a bug is not reproducible in a QA environment. But what do you do if it doesn't?
This was the case I just recently had. The client stated their users were reporting errors and they were having trouble reproducing them in their QA environment. So I started to look into the problem and saw the actual error on a user machine. The error the users were running into was a low memory error. The error was surprising since our development machines and QA machines were not having the same problem. Turns out the production devices were running on only 512mb of ram and the QA machines has 1gb. See the production devices need to be very strong and unbreakable, so to save money they purchased the base unit without the memory upgrade. Since in testing the devices aren't in the field they were using a different device, however thought the specs to be the same.
Errors like this is why it is very important to have QA and Production environments the same. Hardware, software running, and permissions should all be the same so that applications will react the same in both environments. There may be times that you can't set up both the same due to cost, time or whatever reason, but these differences should be documented and when testing the testers should try to determine the effects the differences will have.
Friday, June 29, 2007
I found that the using AD with either technology to be about the same, although with ASP.Net there were some additional steps needed to make it all work. The problem is these additional steps are not really obvious and took some trial and error on my part. I am now going to discuss what these additional steps are and why I had to take them.
First I am going to talk about the code itself. For both cases I used the DirectoryEntry object. The difference since our IIS server is sitting in the DMZ, I actually has to define the path to the AD server, something like this 'LDAP://ServerName/DC=corp,DC=DomainName,DC=com', and I also had to pass the proper credentials to the AD Server. So the whole think looked like this...
DirectoryEntry entry = new DirectoryEntry("LDAP://ServerName/DC=corp,DC=DomainName,DC=com", @"DomainName\UserName", "password");
If this was a windows forms application, you really don't need to pass the credentials or even a path, since it would use the default of the users machine. The funny thing is if this web application was hosted on a server inside the DMZ you wouldn't need this extra information either. I know this because in our Development environment the AD calls worked just fine, but once moved to the QC region, which happens to be in the DMZ, it failed with the following cryptic error..
Luckily there was some posts on the web about this error with AD.
Next in the web.config I had to make the normal changes shown below....
<authentication mode="Windows" />
<deny users="?" />
The final changes I had to make were in IIS. On the Directory Security Tab in the IIS properties form, you click the edit button for Authentication and access control. Then you need to un-check the Anonymous access check box. Check Integrated Windows Authentication. The cool thing here is if the user is using IE, the web application will automatically detect the user, and no login will be needed. This is not the safest way to protect an application, however for my application it is all that is needed.
So those are the steps I had to take to AD a web application. Hope this helps.
Monday, June 25, 2007
Sony struggling sales of it PlayStation3 along with the fact that stand alone Blu-Ray players still cost around $1000.00 and are not selling well shows that consumers are not ready to jump on the Blu-Ray technology. Also, since you can buy a HD-DVD player for around $300.00 and an increasing offering of games and movies is keeping Toshiba and it's partners in the competition.
I still am not sure if either format will win the DVD war. In fact both Blu-ray and HD-DVD offers consumers something more than regular DVDs and each has some advantages over the other. If I had to predict, my guess would be once one of the technologies starts to dominate the market, something even better will be made.
Friday, June 15, 2007
Ever since Apple moved to the Intel platform, and Macs can now run anything either on OS X or with any flavor of Windows running in emulation, I really have no excuse not to use a mac, except cost.
Well the cost myth has pretty much been debunked thanks to the following post... To add to that, now three people I work with have MacBook Pros. Every time I see them do demos with their macs or just work with them in general, I do get a little jealous.
The other reason I have held back is because I am worried, that although it is a mac that I would work emulated all the time. Since 90% of the work I do is .Net development would I benefit from the Mac part of the Mac. Will the emulation really slow down the development process? Do I have to use ITunes?
Friday, June 08, 2007
- Can it possibly rain anymore than it has. I think every other day we have had rain. I know it is my fault for buying a convertible, but lets be honest I would like to drive it once with the top down.
- The Brewers need to start playing better baseball. It seems that when they score a lot of runs, the pitching is bad and when they get a good start they waste it with terrible hitting. I did, make it to two game of the last series against the Cubs, and the crowd was 50%/50%. Also for the most part the Cubs fans weren't as annoying as they have been in the past.
- I really don't have any interesting use of technology stories. I have been keeping an eye out so I can do a little research but I have not found anything. At work we have been talking about ways to make our lunchtime sheepshead game better with technology. Maybe I will blog about our ideas.
- Yes it is true I turned 31 last weekend. How sad I know.
Tuesday, May 29, 2007
So first off I love the car. It is sonic blue, and has less than 5000 miles on it. The car has only been driven in summer so it has not seen snow or salt laden roads. I love the power the car has although I have yet to take over 80 mph. If I were to upgrade anything it would be the stereo. I am thinking about swapping out the shaker system and putting in something with navigation and Sirius compatible. I really miss my satellite radio.
I might upload some pictures to my website of the car, so check back if you are interested in what it looks like.
Friday, May 18, 2007
Silverlight is a new Web presentation technology that is created to run on a variety of platforms. It enables the creation of rich, visually stunning and interactive experiences that can run everywhere: within browsers and on multiple devices and desktop operating systems (such as the Apple Macintosh). In consistency with WPF (Windows Presentation Foundation), the presentation technology in Microsoft .NET Framework 3.0 (the Windows programming infrastructure), XAML (eXtensible Application Markup Language) is the foundation of the Silverlight presentation capability. (This was taken right from Microsoft)
So think .Net version of Flash.
So what does this mean to me.... Well since most of the web site projects I work on are internal or B2B I really never needed flash so I never wanted to invest the time into learning it. That said the fact that version 1.1 Alpha supports .Net, Ican take advantage of Silverlight since I know .Net. So that leaves the real question of will I use it?
The answer of that question is tough. All the examples that were shown to us were very cool uses of the technology. The thing is though all the demos were for sites that were more customer oriented. I am not saying that some of the things cant be brought into my development, for example I could see doing some interactive menus, similar to this. Or even maybe something like this.
I will be thinking of ways to try and use this technology more in my applications. What I wont do is use it just for the sake of using it. So if anyone out there can think of some possible uses of Silverlight let me know.
Thursday, May 10, 2007
Since his solution was one line, I decided that he is just like the old Perl hackers of the 90's. :) Just kidding James.
Anyways I decide to make my example complex. Overkill is never good, but hey I was on a roll. First I created a console application. In the solution I created a class called Calculator. This class had a public method that took two int types and a List
Here is what the total class looks like....
private int lower;
private int upper;
/// This method will calculate the sum of multiples below the toplimit, but starting at the lower limit.
/// the starting number
/// the top limit
/// the multiples to sum
public double GetMultiplesSum(int lowerLimit, int topLimit, List
lower = lowerLimit;
upper = topLimit;
multiples = passedMultiples;
private double CalculateMultiples()
double sum = 0;
for (curNumber = lower; curNumber <>
if (IsMultipleOfList(multiples, curNumber))
sum += curNumber;
private bool IsMultipleOfList(List
foreach (int multiple in multiples)
if (currentNumber % multiple == 0)
The console app then just created a calculator and then called the GetMultipleSum method. the app then displays the answer.
Here is that code....
static void Main(string args)
double sum = RunCalculation();
Console.WriteLine("sum = " + sum.ToString());
Console.WriteLine("Please hit a key");
private static double RunCalculation()
Calculator calc = new Calculator();
return calc.GetMultiplesSum(0,1000, multiples);
I could take this the next step and add a gui or ask the user to add multiples and ranges, but I really don't have the time.
Here is a quick list of things I found interesting and exciting.
- multi compiler support.
- What this means is that it will compile 2.0, 3.0 and 3.5 code. So you wont need to have multiple versions of Visual Studio installed. So if you have a client who is doing 2.0 and one doing 3.0 work, you can use the same tool for both code bases.
- Smart intellisence of .JS files.
- the ide will now support break points and debugging of JS files.
- AJAX .net is included in the templates.
- LINQ support is also included in the ide.
- LINQ is pretty cool, they showed some pretty basic examples.
Monday, May 07, 2007
In this post I am just going to recap my trip and the conference. In following post I will talk about specific things form the conference.
The conference was in Las Vegas and it was held at the Venetian. The Venetian is nice and they do a good job of taking care of you. The hotel rooms were very big and pricey. They were running $259 with the conference special. Each room had three areas, a sleeping area, a living room/work area, and a bathroom.
The first thing I did was check into the conference. I was given a bag of swag and directions to get some more. All in all I was impressed with what I got. I think there were full copy of vista ultimate, Studio express, orcas and some other things like a notebook, a pen, and memory drive.
The keynotes were very entertaining. The sessions for the most part were informative and well planned and presented. I will discus the opening keynote along with information I got from the breakouts in future posts.
Microsoft hosted a Silverlight part at Pure. They sprung for all the drinks and food. It also included a show by the Pussycat Dolls. At the show I met a project manager from Microsoft that worked on the .Net CLR for Silverlight.
As for the Vegas part of the trip, well I don't have much to tell. I did gamble some, and I ate well. I learned a lot and had fun what more could you ask for?
Tuesday, April 24, 2007
The policy injection block is Patterns and Practices way of dealing with crosscutting concerns and aspect oriented programming (AOP). I want to make clear that the Policy Injection block is NOT an AOP framework. One of the first questions asked is "What is a crosscutting concern?". A concern is a feature of the application. Concerns that implement features of an object within the application like business logic is a core concern. Crosscutting concerns are features that are common across different objects, like logging and instrumentation. Policy Injection separates the core concerns from the crosscutting concerns.
So lets say I have a business class Called Foo with a method A. Every time method A is called I want to log the time it was called and who executed the call and what data was given to the method parameters and what was returned. Well using policy injection I can apply a policy to the method that automatically executes before and after execution of A. This policy will handle all the logging of required data using the logging block of course.
How does it work? Well that is the interesting part. You see, when a client wants to consume Foo the client needs to call policy factory to get the Foo object. the factory then decides if the class has policies and if so it really creates a Proxy to Foo. The Proxy of Foo looks to the client just like the object Foo, however when the client calls A the proxy can fire all pre and post handlers of the policy, the logging information needed, along with calling A on Foo.
So that is policy injection in a nutshell. As you can see it is a very powerful tool. One problem however, is it makes the code a little more difficult to read. When reading a class a method will be tagged as having a policy, but there is no information on what that policy is. The developer is required to do some hunting to understand it all.
Monday, April 23, 2007
So I was narrowed my choices between the Archos 604, the 604 wifi, and the Cowon A2. There were a lot of features that all three of the players supported. They include the ability to play movies, and music, record off tv, browse photo slide shows, and read PDFs. Although the Archos supported a few more media types that the Cowon. All the players sported a 30gb drive. This is a little small by today's standards but large enough for my needs.
The reason I ended up picking the Archos players over the Cowon because I new for sure all my music and video would play on the player. I am not saying my music wouldn't play on the Cowon but I couldn't find all the file types I needed listed on their website.
So now I had to pick between the wifi version and the non wifi version. On the surface the wifi version jumped out at me. The unit could browse the internet and also act as a go between your tv and computer streaming media back and forth. These options sounded cool until I though a little more about it. First why would I need to browse the internet? I have a cell phone that can do that and I rarely use it. Plus on airplane you are not allowed to use your wifi. So I started thinking about the media streaming and decided I don't need that. I can already stream video and music through my XBox 360. Also; while reading reviews for both players I found the the screen on the wifi version did not have as dark of blacks.
After about a week of use, I have been satisfied. I use it with yahoo music anywhere, and have any song I could possible want. I haven't found a online video store that I like yet, but I have been recording TV programs and DVDs to the device. Playback is good, and with some trial and error I even got good sound levels.
Friday, April 13, 2007
Sheepshead is a trick taking game, played with a 32 card Deck. The cards are all suits 7 through Ace. Although there are many variations to the game the most common way to play is five handed with Jack of diamonds as the pickers partner.
What makes Sheepshead so fun is the game strategy. Know what cards to play and when to play them. In most trick games, the idae is to take tricks, but in Sheepshead the idea is to get points. To win a hand the picker and partner needs 61 points out of 120 total points. Points are won by winning tricks with the following cards:
Aces = 11
tens = 10
Kings = 4
queens = 3
Jacks = 2
every other card = 0.
What makes this more complex is cards that tend to have power to take tricks, usually are lower in points. for example, the most powerful card in the game is the Queen of Clubs, but it is worth only three points.
there are 4 suits in the game, Trump, Clubs, Spades, and Hearts.
There are 14 trump cards, and 6 cards of the other suits. The power cards are the trump cards and suits are all about the same. So the rankings are as follows:
QC, QS, QH, QD, JC, JS, JH, JD, AD, 10D, KD, 9D, 8D, 7D
For all other suits it goes...
A, 10, K, 9, 8, 7
Fail cards rank in power by type only, suit does not play a part in fail card rankings.
So the play goes as follows, each player is dealt 6 cards, with 2 cards going in the blind. The cards can be dealt anyway the dealer chooses as long as the bottom cards are not dealt to the blind. Usually cards are dealt two, or three at a time. Once the deal is complete, the person on to the left of the dealer gets first choice at the blind. If that person does not pick the next person has the chance. This goes on until the cards are picked or the dealer passes the pick. If this happens them commonly a leaster is played. I will not discuss leasters in this post. So once the cards are picked, the person who picks must now win 61 points to win the hand. Also the player holding the Jack of Diamonds is the pickers partner. At the start of the game no one knows who the picker's partner is. Once this is done the player to the left of the dealer leads. Everyone else must follow suit unless they don't hold that suit. The player who wins the trick always leads the next trick. The game is played until all tricks are won. Then the points of tricks are added up to determine if the picker won.
If the picker and partner got 61+ points the picker is awarded 2 point to his score, and the partner is awarded 1 point. All the other players will be minus 1 point. If the picker and partner does not get 61 points then the picker is minus 2 points, the partner is minus 1 point and all other players are plus one point.
If the picker and partner get 91+ points then they schneidered the opposition. If this happens all points won and lost are doubled. If the picker and partner no trick the opposition then points won and lost are tripled. This work in reverse also, so if the picker and partner does not get 30+ points then they lose double, and if no tricked they lose triple.
So as I said the game is easy it is the strategy that is tough. I will from time to time discuss hand strategy that comes up while playing at sheepshed.
Sunday, April 08, 2007
Last week Enterprise Library 3.0 was released.
Enterprise library is a package of eight application blocks. The blocks include Caching, Cryptography, Data Access, Exception Handling, Logging, Security, Validation, and Policy Injection. These blocks are small frameworks that implement enterprise patterns that help make developing enterprise applications easier. The Enterprise Library also includes a set of core functions, including configuration, instrumentation, and object builder services. These functions are used by all other application blocks.
Of all the new blocks the two that jump out at me are Validation, and Policy Injection. They are new to version 3.0.
Validation has many applications. For example, you can use it to prevent the injection of malicious data by checking to see if a string is too long or if it contains illegal characters. You can also use validation to enforce business rules and to provide responses to user input. It is often important to validate data several times within the same application. For example, you may need to validate data at the UI layer to give immediate feedback when a user enters an invalid data value, and again at the service interface layer for security
The Validation Application Block is designed to allow you to easily validate objects. In many situations, you can validate an object with a single line of code. The following example shows how to associate a validator with an object and how to validate that object.
using Microsoft.Practices.EnterpriseLibrary.Validation;Because the StringLengthValidator attribute is applied, the Validation Block checks that the length of the customer name is between 0 and 20 characters. The application creates a new Customer object and validates it using the Validation Block façade. In this case, the customer name is illegal because it is too long. The application throws an exception that notifies you of the error.
public class Customer
public string CustomerName;
public Customer(string customerName)
this.CustomerName = customerName;
public class MyExample
public static void Main()
Customer myCustomer = new Customer("A name that is too long");
ValidationResults r = Validation.Validate
throw new InvalidOperationException("Validation error found.");
The Validation Application Block has the following benefits:
- It helps maintain consistent validation practices.
- It includes validators for validating most standard .NET data types.
- It allows you to create validation rules with configuration, with attributes, and with code.
- It allows you to associate multiple rule sets with the same class and with members of that class.
- It can be integrated with ASP.NET, Windows Forms, and Windows Communications Foundation (WCF).
Friday, April 06, 2007
I thought I would add my two cents to the mix.
While I think a candidate for a developer position should be able to solve FizzBuzz questions, I don't think FizzBuzz questions are fare during an interview.
I think what is more beneficial is to ask a candidate about their past work projects. Get them to white board, and ask the candidate questions that will show if he/she really understood the business problem and the solution. Question them about why they did A, or if they thought about using B… and so on.
As developers we do have resources (Google, Msdn, Blogs, ...) that we can use to do our jobs, so why would we expect interviewees to know something that could be easily looked up. It is impossible to memorize everything and to judge someone by how fast they come up with an answer to a question is foolish. I know a co-worker even stated that when asked questions like this, usually the first thing he does is try to figure out if it is a trick question and he looks at the problem from a lot of different ways until he decided the easy basic answer is right. It takes him some time to do this but I think this process is better than someone just taking answering the question with the easy basic answer.
So there are my thoughts to it all.
Tuesday, April 03, 2007
Yesterday was opening day and the Milwaukee Brewers won 7-1.
Ben Sheets threw a two hit nine inning gem. Rickie Weeks got the first hit of the year and also scored the first run. Bill Hall collected the first RBI and HR of the season. He also had a web gem in center field robbing a sure hit in the gap on a diving catch.
Some thoughts about the Brewers.
1. I think they will win 87 games this year
2. I think 3H Hall, Hardy, and Hart are going to have solid production this year.
3. Estrada is going to open eyes here in MKE. Who new a catcher could swing a bat. He is going to be a solid addition to a lineup that at time last year struggled to hit in key situations.
4. Sheets looks healthy and throwing well.
5. Weeks' defense has improved
6. Fielder's deserves more credit on his defense. He made a couple nice plays yesterday.
7. Jenkins walk up to the plate music is Crazy Bitch by Buchcherry. Interesting only because the lyrics must be censored out and only the music is played.
8. Jenkins could have a good year if he only faces righties.
That is it for now. Go Brewers.
Wednesday, March 21, 2007
This conception this is a great idea. The implementation however is not very good. There are a few problems.
The control does not know how to shift characters. An example would be if the mask was $##,###.00 and we had the amount of 100 saved in the data base and we tried to fill the control with that amount the result displayed would be $10,0__.__ where _ is the prompt character. The same problem occurs when the user tried to enter the data. Lets use a format for time like ##:##. When the form loads, the control will look something like this __:__ again using _ as the prompt character. the cursor will be on the left most space so if a user is not careful, the time of 9:30 can be enter like 93:0_. If the user corrects the mistake and saves the value 9:30 the control will load 09:30.
Since most of things that require mask are numbers and things of that nature, it makes this control pretty mush useless.
I found a few posts on the web that discuss this problem and how they solved it.
Monday, March 19, 2007
So how it works is all the people chosen for duty show up at a predefined time and are checked into the system. I think there were about 150 people or so. Then we are shown a video that talks about the importance of jury duty and some rules of being on a jury.
After that you sit in a room waiting to hear your name called. The process is completely random. A computer picks names of people there and they are the ones assigned to a court room once it is determined a jury is needed. There is no guarantee you will even see the inside of a courtroom due to last minute plea bargains and what not. So I was lucky I only had to sit there for about 30 minutes before my name was called.
Once we were brought to the court room the judge gave us some information about the case and he then asked all 25 potential jurors some basic questions. Things like name, married or single, do you have kids, and where do you work. He then asked us if we knew any of the lawyers, or the defendant or plaintiff, or if we were involved in anyway with any part of the court case.
Then the plaintiff's lawyer asked us questions followed by the defendants lawyer. All the questions were to the entire group. Things like Have you ever filed a personal injury lawsuit, or have you ever worked for a law firm, that sort of thing.
Once this was completed somehow the two lawyers dwindled the 25 possible jurors down to twelve. I was one of the lucky 12.
Once the trial proceeded we were told by the judge some more details of the case and what is evidence and what was not evidence. We were not told however any laws or what we would be ruling on specifically. Also us jurors were not able to talk to each other about the case until we deliberated. We were told we would be determining damages but that was it. So far it was nothing like I had seen on TV or in the movies.
So once the judge was done we heard opening arguments of both sides. This is when the plaintiff sets up their case and explains why they are suing. In this case they were saying that a simple accident to a 90 year old women 2 years ago started a downward spiral of her health. Then the defense attorney explained why the defendant should only be liable for the accident and not the new ailments not caused by the accident.
Then we got to listen to the testimony(evidence) in the case. In this case we had three people in the court, and we had three other people with taped dispositions. It was actually a little boring since this case had very few facts and a lot of guesses. Because there were so few fact wrapped up in educated guesses this case was not very black and white.
Once both sides were done showing evidence, the judge then told us what we would be deliberating on. What laws pertained to this case and what damages we need to figure out. Then both sides gave closing arguments, and we were sent to deliberate. The first thing we were told is not to talk about the case when jurors were not present. Also we were told not to leave the juror's room for any reason other than bathroom. Food and beverages were sent to us. Also all the exhibits in the case were in the room.
Then the jury elects a leader and that person gets things rolling. It took us about two and a half hours to deliberate. We all agreed right away that the accident did not cause the additional health problems, but we had to figure out what damages were appropriate for the initial accident. We finally all agreed to use some simple formulas to determine damages.
In the end I am glad I served on a case. I learned a lot about the judicial process. Plus I think sitting in the room all day would have driven me insane.
Tuesday, February 27, 2007
I know I have already blogged about http://www.upupdowndownleftrightleftrightbabastart.com/ before, but it has just undergone a re-design and format change. Please check it out. It really made me laugh and the web host says content would be updated frequently.
My Badgers have hit a small little road bump here the last week. Two tough losses, one at Michigan State and one at Ohio state. In both games they played really poorly. To make matters worse it seems Brian Butch will be lost four to six weeks. I have full faith in Bo Ryan and the rest of the team to pick up the pace and finish the season strong.
Things on my current project are progressing nicely. We are going to deliver phase one in a few weeks. The Client seems very happy with our results. I will blog more about the project once I can. As of now I am not able to talk about the project in any general terms.
I have been summand for Jury Duty. I have never done this before, and so I have a chance to learn about the court system. The timing is not great since it will be in mid March. I plan on blogging about all my experiences after I am done. My guess is I wont even get picked.
Thursday, February 22, 2007
It was a new place. The bar had lots of flat screen TVs on the wall along with a nice internet jukebox, and some gaming machines. Behind the bar were fancy touch screen registers and some top shelf alcohol. I noticed on the bottles there were some weird pour caps, nothing I had seen before.
When I asked the bartender about them he explained they had little computer chips in them that talked to the cash registers. The chips would only allow the bottle to pour if the register said it was OK. The chip would also limit the amount of alcohol that was poured to the perfect shot. I did not believe him until he took out a full bottle and tipped it upside down and nothing came out. He then went over to the touch screen and put in my order and then tipped the same bottle and this time the rum came out. To prove his point, after the pour he tipped the bottle over again and nothing came out again.
The bar itself was a solid dark wood nothing to surprising, but all the tables at the place had a little built in touch screen. I was curious about it so I went over to a table where I saw some people using one and asked them about it. They told me, from the screen they could place drink orders or call over a waitress. Also they could use the screens for trivia, games, TV, internet, or even a little text chat with the people at another table. they even said these touch screen were spill proof. Although I did not test this feature for the pubs sake I hope it is true.
OK, so this place does not exist yet, but all these concepts are coming soon.
In England some computer science kids who were tired of waiting for a waitress at a busy pub and did not like standing up at the bar and waiting, thought it would be cool if they could just place and order from there table. They came up with the idea of the touch screens and the ability to do all sorts of things including ordering drinks for other tables, and yes even chatting. Currently the students have one system running at a pub in England where it is being product tested.
Here in the US I have come across the dreaded one pour shot pourer's. We all have a bartender who mixes drinks a little strong or gives out free ones to their buddies. Well with a new RFID system, bar operators can control how much alcohol gets poured. The system I ran into was the worst were they could only pour with money in the till. Some of these systems will actually allow you to pour without cash in the system, but it sends a signal to update a database with pour volume, and other tracking data. The manager then can compare the bar receipts with the amount of alcohol poured out. The best part is that employees can also be have an RFID tag on them so manger can see who poured well and who did not. Since the system tracks amount of alcohol served it can also help managers with inventory, or billing of special parties and banquettes.
So are the days of free drinks gone? Who knows, but somebody has to pay for all these improvements.
Monday, February 19, 2007
I have been using Google Analytics to monitor web traffic to my blog and website. Google Analytics anomalously tracks the number of visitors to your site along with where they are from and how many pages are viewed. It tracks what words on your site draws interest to the world outside, what browsers users use to access your site along with how they entered your site (from Google, direct or other means.
As you can see from the image above, the main page gives a very quick overview of your sites visitors. My favorite is the world map. As one would expect most of the traffic is from the greater Milwaukee area, since that is where I am from. But what is neat is to see that I have had visitors from South America, Australia, and Europe.
There are other tools, that are for web developers or marketers, but I haven't really used those tools. I am more interested in watching the growth of visits.
Thursday, February 08, 2007
So in my spare time I have been trying to find a solution to this problem, at least from the DotNet side of our practice. I came across a four software factories offered at Patterns & Practice website. The software factories are Smart Client, Web Service, Mobile, and Web Client. These factories use the composite patten for UI loading. It also forces a MVC Pattern or what they call a MVP pattern for creating and developing forms and web pages. The factories are also very extensible and supports many different frameworks like for example NUnit, and the VSTS tests. You can use all the other application blocks with the solutions.
I will be posting more about the factories as I start using them more in my spare time. I do know that in the few little test apps I did the wiring of UI and passing of events between forms, controls and other objects is simple.
Monday, February 05, 2007
First, if outside for a few minutes, coats freeze. By freeze I mean coats get stiff and while trying to move around there is fear you might crack your coat. If you have ever seen the experiment when you dip something in liquid nitrogen and the item freezes solid, and it makes it so brittle that the smallest shock would cause it to shatter. That is what I am talking about.
Second, car batteries become weaker. On Saturday I could not get my car to start. I got a neat gadget for Christmas that has a jumper cable system. So I tried to use it but it did not provide enough juice. I had to actually have someone come over and jump my car for real.
Finally, my furnace runs non stop. this is the one that bothers me most. I try to keep my gas and electric bill small, but this weather keeps my furnace running. I try to keep my house heated at 63 F, not to high, but my furnace runs non stop. all I think about is how much money I am wasting.
The solution would be for me to move somewhere warmer, but then I would just complain about how hot the sumer would be.
Thursday, February 01, 2007
I went to see him yesterday and he has curly blond hair. Bright blue eyes. I will add some pictures once I get some.
Tuesday, January 30, 2007
So the real reason I am posting this is I have been asked to run a series of Sheepshead games at place called Papas Social Club. It is a really nice bar that actually is set up nicely to accommodate five handed play. The only problem is I am not sure what type of commitment we could get since the thought would be to run the league over 16 weeks. I think if we could get 3+ games going at a time that would be great.
The other thing I am not sure about is how to play. I don't mean I don't know the rules, I just know how my family plays. I know some people enjoy playing Call an Ace, while others like Jack of Diamonds. Both games are fun and bring about different play. At the same time I am worried that novices would not want to play for fear of doing wrong. I want to run a game that is really more social than cut throat. I really would like to put the game on display and get some people my age more interested in Sheepshead.
So if anyone out there as any ideas or comments on how to make this work let me know.
Tuesday, January 23, 2007
What I did is I listed all 21 Bond movies with the actor who stared as bond. Then I ordered the movies based on how much I liked the movie. Now this was tough to do so I decided to re-watch all the movies with one exception. I did not re-watch Casino Royal. After ranking I assigned a point value to each film, 1 point to the worst and 2 for the second worst and so on. Then I totaled all the actors points for each film they did and I divided by the number of films. Since Craig and Lazenby only have done one film a piece my findings needed to be modified a bit to take into account for longevity. So what I did was add one point for each film the actor did to the average points.
So here is the data based on my opinion.
|From Russia with Love||Connery||7||15|
|You Only Live Twice||Connery||8||14|
|On Her Majesty's Secret Service||Lazenby||21||1|
|Diamonds are Forever||Connery||13||9|
|Live and Let die||Moore||17||5|
|The Man with the Golden Gun||Moore||12||10|
|The Spy Who Loved Me||Moore||14||8|
|For Your Eyes Only||Moore||3||19|
|A View to a Kill||Moore||18||4|
|The Living Daylights||Dalton||16||6|
|License to Kill||Dalton||10||12|
|Tomorrow Never Dies||Brosnan||11||11|
|The World is Not Enough||Brosnan||19||3|
|Die Another Day||Brosnan||20||2|
and the order I will rank the Bonds are....
|Bond||Average Points||Adjusted points|
So there it is. As like anything this my opinion and can be debated.