OK, I had a Soylent Green moment a few minutes ago (use your best Charlston Heston voice and scream "Soylent Green is people...its PEOPLE!") .
I just realized the shinny new Vista Gadgets are JavaScript. Not using some language like JavaScript, but JavaScript. Oh, and there is some HTML mixed in there as well.
See more here: http://microsoftgadgets.com/Sidebar/DevelopmentOverview.aspx
You can see what other people have done here: http://microsoftgadgets.com
This is was a jaw dropping moment for me. Hard to believe, if you will. "You mean you can modify the Windows Desktop with JavaScript? Not VBSCript, not some unknown .NET library, or a Win32 api hidden so far down in the bowels of the OS that you would need a spelunker with a love of dark, cramped places to find?" Yup, just JavaScript and HTML.
Then I stopped, drank some green tea, and closed my Slashdot browser tab. Deep breath. (Did I really close Slashdot? No way! Next time I'll try closing Digg.)
OK, so if you create some new shiny feature in your beloved, money maker operation system, there are reasons to make it as approachable as possible. Mainly, so every two-bit web developer can make some cool (and probably worthless) to show off. Then your side bar can be even more shiny! But I digress.
Personally, I don't have a love-love relationship with JavaScript. I view it as you would the ugly daughter of the rich guy at school. Not much brains, but she is rich, and she has a lot of friends.
Most of the time when I need to do something with JavaScript, the first place I turn is Google. Then, if need be, I will write it myself. C#, VB.NET, Delphi, SQL, MDX, C++: no problem, I'll dive right in. We are swapping phone numbers, trading IMs, and sharing milk shakes. JavaScript? Where did I put that 10 foot pole? OK, not that bad...2 foot pole.
But, considering the problem, JavaScript probably is the right solution. JavaScript is well known, lots of developers already know it, and it is very free for the average SlashDot whiner. Hey, even an ugly rich girl needs a bit of love from time to time.
But...what about code security? If these things are JavaScript, and you create the worlds shiniest gadget EVAR that everyone is going to want...how exactly do I charge for it and turn myself into a billionaire? Hey, I'm a pro and I don't code for free. Well, maybe just once, but that was for a really good cause.
Next, how do I hack into that Windows API thing that I keep hearing about. Vista ships with a couple of cool gadgets already, like a CPU and RAM performance gauge. Very nice. And I think you would need to hack that Win32 thingy to get there...but I don't remember JavaScript having those hooks.
Unless there is a second API that Microsoft isn't telling us about! Some secret API only available to its own wizards and otherwise locked away in the basement of the tallest, darkest tower filled with trolls and dragons (the trolls are dragon food). Meh, probably not. Sounds like I have another reason to brush off my JavaScript book and start reading.
I should have started doing that a long time ago anyway.
Update: The default gadgets can also be found on the hard drive, and they are written in JavaScript and HTML. You can find them at C:\Program Files\Windows Sidebar\Gadgets
December 20, 2006
December 14, 2006
Vista is working...mostly
OK, I have Vista working on 2 of my 3 machines (I still haven't installed it on my laptop, that just scares me for some reason) and it is working mostly fine.
The only issue I have is on my big gaming/dev machine. The SATA drive will not work and neither will the 3com onboard nic (but the nvidia nic does work). It is an nForce2 motherboard from ASUS, but nVidia makes the drivers. And they have discontinued support for that chipset.
I can still get drivers for a TNT2 video card, but not my motherboard chipset - and the motherboard is years newer. That bites.
The only issue I have is on my big gaming/dev machine. The SATA drive will not work and neither will the 3com onboard nic (but the nvidia nic does work). It is an nForce2 motherboard from ASUS, but nVidia makes the drivers. And they have discontinued support for that chipset.
I can still get drivers for a TNT2 video card, but not my motherboard chipset - and the motherboard is years newer. That bites.
November 20, 2006
Boise Code Camp 2.0
OK, we can officially say Boise Code Camp 2.0 is coming.
Feb 10, 2007 at Boise State University.
See BoiseCodeCamp.org for details of the event.
The cool part is we already have people lining up to speak, and it is being very well received in the community. Last year we had over 130 people show up (many from outside of Idaho). This year we are gunning for 400 -- which might be a pipe dream, but you have to have goals!
Actually, I'd be happy with 130 again. Heck, I don't care how many people show up, so long as there is something interesting for me to see. Yes, I'm selfish, but why else would I donate time to a free developer event.
Anyway, it should be fun and I hope everyone can attend.
Feb 10, 2007 at Boise State University.
See BoiseCodeCamp.org for details of the event.
The cool part is we already have people lining up to speak, and it is being very well received in the community. Last year we had over 130 people show up (many from outside of Idaho). This year we are gunning for 400 -- which might be a pipe dream, but you have to have goals!
Actually, I'd be happy with 130 again. Heck, I don't care how many people show up, so long as there is something interesting for me to see. Yes, I'm selfish, but why else would I donate time to a free developer event.
Anyway, it should be fun and I hope everyone can attend.
October 20, 2006
Anyone install IE7 yet?
Let me be the first to raise my hand on that one.
A recent new policy, outlawing Firefox, at the company I'm working has created a perfect storm for me to install IE7. So I did.
In case you missed it: IE7 was released yesterday. See msdn.microsoft.com for download details.
The good:
A recent new policy, outlawing Firefox, at the company I'm working has created a perfect storm for me to install IE7. So I did.
In case you missed it: IE7 was released yesterday. See msdn.microsoft.com for download details.
The good:
- Memory usage isn't as bad as Firefox
- The new Favorites menu works really well, open in new tab is a nice feature
- Quick Tabs is also really cool*If you middle-click on a link on a page, it opens the page in a new tab right next to the tab you are one.
- Popup blocker is built in
- Takes 15-20 minutes to install, and requires a reboot.
- It is slower to display than FireFox (I dont have any metrics on that, purely anecdotal)
- I've seen some issues with Fonts (they jump around from time to time, I last saw this while looking at Digg.com
- The Find (ctrl-F) still uses the old IE style. I miss the FireFox find.
- no built in ad-block.
October 09, 2006
I installed Vista RC2 last night...
First thing I can say about it: it is pretty. Very pretty. So pretty even my wife liked it.
From the installation, to the setup, to running the OS, it is pretty.
First things I saw: solitaire -- much better looking now. Sizes well. Also, I won the first game, so I got to see how the end game sequence looks. Nice, the card fall off of the decks like before, then explode once they hit the bottom.
Note: I still have to check out MineSweeper. I have to see if my geek skills are still working.
Mahyong (sp?) is now included.
Non-gaming: the start menu has changed. It is very similar to the WinXP version, but without the "All Programs" popup menu. I'll have to try this again with a fuller menu.
Also note: I'm running this on a 2-3 year old machine with 1 gig ram and a 128 MB Nvidea video card. It runs very smoothly.
Next step: hook it up the the internet.
From the installation, to the setup, to running the OS, it is pretty.
First things I saw: solitaire -- much better looking now. Sizes well. Also, I won the first game, so I got to see how the end game sequence looks. Nice, the card fall off of the decks like before, then explode once they hit the bottom.
Note: I still have to check out MineSweeper. I have to see if my geek skills are still working.
Mahyong (sp?) is now included.
Non-gaming: the start menu has changed. It is very similar to the WinXP version, but without the "All Programs" popup menu. I'll have to try this again with a fuller menu.
Also note: I'm running this on a 2-3 year old machine with 1 gig ram and a 128 MB Nvidea video card. It runs very smoothly.
Next step: hook it up the the internet.
October 03, 2006
Golden Rules of OLAP
I've been meaning to say this for a while now...
When working with an OLAP tool (say Microsoft Analysis Services 2005 -- or 2000 -- or Hyperion -- or any OLAP tool under the sun) there are three guiding principles.
#1: Know your data. It doesn't matter how snazzy your tools are, how good looking your web site/reports are if all the data is meaningless to you. Yes, it might mean something to your customer, but until it means something to you, you are going to have a hard time really helping the customer.
#2. Know your display tools. Depending on what tool your customers are going to use to see the data, it will change how you construct your cubes and dimensions. There are things you can get away with when your client is ProClarity that are a bad idea for Reporting Services, and a terrible idea for Excel.
Case in point is the naming of attribute dimensions. You might have a dimension named Project with an attribute hierarchy named "Name". Seems logical. Then you also have a Customer dimension with a "Name" attribute hierarchy. So in ProClarity or Reporting Services you will see the nice Project.Name and Customer.Name hierarchies. In Excel (via pivot , you will see "Name" and "Name". Not very helpful. So you have to name your attribute hierarchies "Project Name" and "Customer Name" to keep the Excel Pivot table people off of you back.
#3. Regardless of what tool your customer says they are going to use, always test the data in Excel -- especially Date dimension data. Why? Because some customer will always want to see the data in excel. They don't care that all the data is already in some other tool nice and formatted and pretty, if the data isn't in Excel it isn't useful to them. Just deal with it, you can't cant change their minds.
Also, be sure to test how your date dimension data looks when exported to excel. Excel has this helpful habit of looking at your data, seeing a date, and then formatting it incorrectly. What starts out as April 02 (for April 2002) is suddenly transformed into April 2, 2006. And you will be blamed for this. Not Excel. No, not our precious Excel that can do no wrong (quiet next time, it might hear you). You are in the wrong and must fix this error. And the fix is a four digit year which will anger someone else -- but you will get used to that.
I hope this becomes helpful to someone, it was a painful process for me to get to this point myself.
When working with an OLAP tool (say Microsoft Analysis Services 2005 -- or 2000 -- or Hyperion -- or any OLAP tool under the sun) there are three guiding principles.
#1: Know your data. It doesn't matter how snazzy your tools are, how good looking your web site/reports are if all the data is meaningless to you. Yes, it might mean something to your customer, but until it means something to you, you are going to have a hard time really helping the customer.
#2. Know your display tools. Depending on what tool your customers are going to use to see the data, it will change how you construct your cubes and dimensions. There are things you can get away with when your client is ProClarity that are a bad idea for Reporting Services, and a terrible idea for Excel.
Case in point is the naming of attribute dimensions. You might have a dimension named Project with an attribute hierarchy named "Name". Seems logical. Then you also have a Customer dimension with a "Name" attribute hierarchy. So in ProClarity or Reporting Services you will see the nice Project.Name and Customer.Name hierarchies. In Excel (via pivot , you will see "Name" and "Name". Not very helpful. So you have to name your attribute hierarchies "Project Name" and "Customer Name" to keep the Excel Pivot table people off of you back.
#3. Regardless of what tool your customer says they are going to use, always test the data in Excel -- especially Date dimension data. Why? Because some customer will always want to see the data in excel. They don't care that all the data is already in some other tool nice and formatted and pretty, if the data isn't in Excel it isn't useful to them. Just deal with it, you can't cant change their minds.
Also, be sure to test how your date dimension data looks when exported to excel. Excel has this helpful habit of looking at your data, seeing a date, and then formatting it incorrectly. What starts out as April 02 (for April 2002) is suddenly transformed into April 2, 2006. And you will be blamed for this. Not Excel. No, not our precious Excel that can do no wrong (quiet next time, it might hear you). You are in the wrong and must fix this error. And the fix is a four digit year which will anger someone else -- but you will get used to that.
I hope this becomes helpful to someone, it was a painful process for me to get to this point myself.
September 21, 2006
Analysis Services annoyances
OK, I've been running up against a number of annoyances with Analysis Services, Reporting Services, and Integration Services. These are not show stoppers, but annoying non-the-less.
1. Colors coming from the cube (cell property back_color is a good example), through adomd.net come in the following format: BGR. Not RGB like every other programming system known to man, but with the Red and Blue swapped for no apparent reason.
Here is my conversion code:
uint iColor = (uint)prop.Value;
int i = (int) iColor;
Color c = Color.FromArgb( i);
backColor = Color.FromArgb(c.B, c.G, c.R);
2. When building a cube, and you happen to need another column in a fact/dim table. So you add the column to the table, then go back to the DSV (Data Source View) and -- where is my column?! While the editor gives you no indication that anything is missing. You can either: Refresh ever table in the DSV, or convert the table to a Named Query, then replace the Named Query with the original table. Aint that one fun.
3. Reporting Services. You can only have Measures on the Columns. BTW: nothing but Measures can go on the columns. I understand the reasoning, but really freaking annoying.
4. Integration Services. You can debug scripting tasks -- unless your scripting task is in a data flow. Then not so much.
5. Reporting Services. If you rebuild a cube while creating/editing a report, you have to close the report creation tab and reopen it to continue editing the report. If you don't, Reporting Services will complain and send you warning messages galore until you do.
6. Reporting Services. On the Data tab is a drop-down called "Dataset:". When you move to the Data tab, this drop-down is selected by default. So now, regardless of where your mouse is (say, over the MDX/SQL script I've been writing), when you use the scroll-wheel the items start to scroll through. This is compounded by the fact that it takes the Data tab 2-3 seconds to initialize a dataset...now it is doing that for however many datasets you have in your list (about 10 for me). I really want to slap whomever made that decision. Hard.
7. Reporting Services. In a standard MDX query, adding a parameter to an existing query can break the entire report. No problem, remove the parameter and re-add it. Oh, you were writing custom MDX for your query instead of using our (brain-dead) editor. Well, you are on your own. Good luck with that one and let me know how it goes.
1. Colors coming from the cube (cell property back_color is a good example), through adomd.net come in the following format: BGR. Not RGB like every other programming system known to man, but with the Red and Blue swapped for no apparent reason.
Here is my conversion code:
uint iColor = (uint)prop.Value;
int i = (int) iColor;
Color c = Color.FromArgb( i);
backColor = Color.FromArgb(c.B, c.G, c.R);
2. When building a cube, and you happen to need another column in a fact/dim table. So you add the column to the table, then go back to the DSV (Data Source View) and -- where is my column?! While the editor gives you no indication that anything is missing. You can either: Refresh ever table in the DSV, or convert the table to a Named Query, then replace the Named Query with the original table. Aint that one fun.
3. Reporting Services. You can only have Measures on the Columns. BTW: nothing but Measures can go on the columns. I understand the reasoning, but really freaking annoying.
4. Integration Services. You can debug scripting tasks -- unless your scripting task is in a data flow. Then not so much.
5. Reporting Services. If you rebuild a cube while creating/editing a report, you have to close the report creation tab and reopen it to continue editing the report. If you don't, Reporting Services will complain and send you warning messages galore until you do.
6. Reporting Services. On the Data tab is a drop-down called "Dataset:". When you move to the Data tab, this drop-down is selected by default. So now, regardless of where your mouse is (say, over the MDX/SQL script I've been writing), when you use the scroll-wheel the items start to scroll through. This is compounded by the fact that it takes the Data tab 2-3 seconds to initialize a dataset...now it is doing that for however many datasets you have in your list (about 10 for me). I really want to slap whomever made that decision. Hard.
7. Reporting Services. In a standard MDX query, adding a parameter to an existing query can break the entire report. No problem, remove the parameter and re-add it. Oh, you were writing custom MDX for your query instead of using our (brain-dead) editor. Well, you are on your own. Good luck with that one and let me know how it goes.
August 29, 2006
What I've been up to this summer
OK, it has been a while, I'm sure that the few reader I have left are wondering what happened to me.
1. I got a new job. I left HP (I was still a contractor after 3.5 years) and just started as a contractor for another company. So, new job, new toys. I have a lot of posts planned about the things I've found.
2. Summer. Things happen. Air conditioners break (right when it hit 110 in the valley, a month ago, will be replaced next week -- been a month with no AC)
3. Family Reunion. All the dutch boys and girls headed up north (except for my Canadian relatives, they went south) to Coeur D'Alane, ID to play all our dutch games, dutch food, dutch stuff, dutch etc.
4. Summer projects....here was a big one.
1. I got a new job. I left HP (I was still a contractor after 3.5 years) and just started as a contractor for another company. So, new job, new toys. I have a lot of posts planned about the things I've found.
2. Summer. Things happen. Air conditioners break (right when it hit 110 in the valley, a month ago, will be replaced next week -- been a month with no AC)
3. Family Reunion. All the dutch boys and girls headed up north (except for my Canadian relatives, they went south) to Coeur D'Alane, ID to play all our dutch games, dutch food, dutch stuff, dutch etc.
4. Summer projects....here was a big one.
June 29, 2006
Now with less ugly!
It was long overdue, but I finally got around to redesigning my site.
So here it is again, but with less ugly than before.
So here it is again, but with less ugly than before.
June 15, 2006
New term for English language: The Roethlisberger
I think we have just seen the emergence of a new English term: The Roethlisberger!
What is a Roethlisberger? A motorcycle wreck that nearly ends your career. I'm sure that definition will morph over time, maybe to just a motorcycle wreck, but that is the general idea. Basically, I have heard in general conversation, when talking about motorcycles, "Don't do a Roethlisberger." Admittedly, I said it once, but I have heard others say it as well.
Where did this term come from? Big Ben Roethlisberger, quarterback for the Pittsburgh Steelers, got into a motorcycle wreck this week. See this link: http://www.msnbc.msn.com/id/13318458/ This is now the most well-known motorcycle wreck in known history (bigger than Kellen Winslow Jr). Mostly because Big Ben got EXTREMELY lucky. He only hurt his face (he wasn't wearing a helmet), not his legs or arms, and he will heal up before the beginning of the season.
But he as also slightly stupid; he wasn't wearing a helmet, and he was riding the motorcycle thinking, "I know what I'm doing, as long as I'm smart I'll be OK". As if every every safe driver has a perfectly clean record -- it isn't all about how safe you are, it is also about how safe all the other drivers are.
So, maybe a better definition for "don't do a Roethlisberger." would be: "Don't think you're safe on a morocycle because you're smart."
What is a Roethlisberger? A motorcycle wreck that nearly ends your career. I'm sure that definition will morph over time, maybe to just a motorcycle wreck, but that is the general idea. Basically, I have heard in general conversation, when talking about motorcycles, "Don't do a Roethlisberger." Admittedly, I said it once, but I have heard others say it as well.
Where did this term come from? Big Ben Roethlisberger, quarterback for the Pittsburgh Steelers, got into a motorcycle wreck this week. See this link: http://www.msnbc.msn.com/id/13318458/ This is now the most well-known motorcycle wreck in known history (bigger than Kellen Winslow Jr). Mostly because Big Ben got EXTREMELY lucky. He only hurt his face (he wasn't wearing a helmet), not his legs or arms, and he will heal up before the beginning of the season.
But he as also slightly stupid; he wasn't wearing a helmet, and he was riding the motorcycle thinking, "I know what I'm doing, as long as I'm smart I'll be OK". As if every every safe driver has a perfectly clean record -- it isn't all about how safe you are, it is also about how safe all the other drivers are.
So, maybe a better definition for "don't do a Roethlisberger." would be: "Don't think you're safe on a morocycle because you're smart."
June 06, 2006
Biz# = Office PerformancePoint Server 2007
Microsoft has finally announced the existence of Biz#, now to be called Microsoft Office PerformancePoint Server 2007.
For those of you who feel left out, don't worry, you've probably already been using some of it.
So what is this new product? It is the integration and rebranding of a couple of old technologies, and the addition of one.
Take ProClarity (newly purchased by Microsoft and needing to do something with the investment), mix in Business Scorecard Manager, throw in bits of Microsoft SQL Server 2005, Microsoft Analysis Server 2005, SharePoint 2007, Outlook 2007, and Excel 2007 -- let some developers stir things around, and there you have it.
This is not to say there is nothing new in there tho. Forecasting is new, and could be a big win for everyone if they get it right. Also, they seem to have a mechanism to create new cubes on the fly. That could also be really cool. Also it has its own API that is web service based which could make for some very interesting integration opportunities.
At this point, this product is being sold as a one-stop-shop for data analysts...and that has been said before by other players.
But this was only a one hour demo, and leaves a lot of questions to be answered.
Microsoft Office PerformancePoint Server 2007 is due in mid 2007.
Links:
Performance Point Official site: http://office.microsoft.com/en-us/FX101550371033.aspx
Office Business Scorecard Manager 2005: http://office.microsoft.com/en-us/FX012225041033.aspx
ProClarity: http://www.proclarity.com
For those of you who feel left out, don't worry, you've probably already been using some of it.
So what is this new product? It is the integration and rebranding of a couple of old technologies, and the addition of one.
Take ProClarity (newly purchased by Microsoft and needing to do something with the investment), mix in Business Scorecard Manager, throw in bits of Microsoft SQL Server 2005, Microsoft Analysis Server 2005, SharePoint 2007, Outlook 2007, and Excel 2007 -- let some developers stir things around, and there you have it.
This is not to say there is nothing new in there tho. Forecasting is new, and could be a big win for everyone if they get it right. Also, they seem to have a mechanism to create new cubes on the fly. That could also be really cool. Also it has its own API that is web service based which could make for some very interesting integration opportunities.
At this point, this product is being sold as a one-stop-shop for data analysts...and that has been said before by other players.
But this was only a one hour demo, and leaves a lot of questions to be answered.
Microsoft Office PerformancePoint Server 2007 is due in mid 2007.
Links:
Performance Point Official site: http://office.microsoft.com/en-us/FX101550371033.aspx
Office Business Scorecard Manager 2005: http://office.microsoft.com/en-us/FX012225041033.aspx
ProClarity: http://www.proclarity.com
May 25, 2006
How not to lead geeks
I'm on a role today with posts, but I liked this article: How not to lead geeks.
http://positivesharing.com/2006/03/how-not-to-lead-geeks/
I would say I agree with almost everything.
http://positivesharing.com/2006/03/how-not-to-lead-geeks/
I would say I agree with almost everything.
Script#
This is a new set of bits that just came out from a guy at Microsoft named Nikhil Kothari.
It is a C# to JavaScript compiler. As such it doesn't take full advantage of either language, but it does allow entrenched C# developers like myself to create some JavaScript a bit faster.
That said, I'm still not completely on board with this type of idea. Using a language to write another language. Optimization seems like it would be a constant problem. It would be a nice way to get the basic functionality you want done, so you can optimize it after the compile, but that also seems wrong. If you want to generate your code, then generate your code, but dont modify what you generated. But if optimization doesn't matter as much, I'm all for it.
Sigh, how many languages are we supposed to know now anyway? C#, VB.NET, Java, Delphi, C++, VB, JavaScript, VBScript, Ruby, PHP, Perl, SQL, MDX, HTML, CSS, XSL, .... "Jack of all trades, master of none." Unfortunatly, this is the world we live in to be productive -- expecially in web development.
It is a C# to JavaScript compiler. As such it doesn't take full advantage of either language, but it does allow entrenched C# developers like myself to create some JavaScript a bit faster.
That said, I'm still not completely on board with this type of idea. Using a language to write another language. Optimization seems like it would be a constant problem. It would be a nice way to get the basic functionality you want done, so you can optimize it after the compile, but that also seems wrong. If you want to generate your code, then generate your code, but dont modify what you generated. But if optimization doesn't matter as much, I'm all for it.
Sigh, how many languages are we supposed to know now anyway? C#, VB.NET, Java, Delphi, C++, VB, JavaScript, VBScript, Ruby, PHP, Perl, SQL, MDX, HTML, CSS, XSL, .... "Jack of all trades, master of none." Unfortunatly, this is the world we live in to be productive -- expecially in web development.
May 12, 2006
Da Vinci Delusion Event
I would feel remiss if I did not mention this. On Wednesday, May 17 from 7:00 pm to 8:30, there will be a screening of Da Vinci Delusion at the Cloverdale United Reformed church.
This is a good event for people who are wondering about the Da Vinci Code, what is actually true and what is false.
This event is being sponsored by the Idaho Values Alliance.
This is a good event for people who are wondering about the Da Vinci Code, what is actually true and what is false.
This event is being sponsored by the Idaho Values Alliance.
May 10, 2006
VS 2005 Web Application Project V1.0 Released
I've only seen this posted in one place, but VS 2005 Web Application Project V1.0 Released.
The biggest, baddest, must havest, we needs it feature added: Edit and Continue for ASP.NET 2.0.
What they have done is added a ASP.NET 1.1 style project to VS 2005. So if you create a project using that project type, you get edit and continue.
Other nice feature/side effect, this will make upgrading from ASP.NET 1.1 to ASP.NET 2.0 much simpler.
Read more at ScottGu's Blog:
http://weblogs.asp.net/scottgu/archive/2006/05/08/445742.aspx
The biggest, baddest, must havest, we needs it feature added: Edit and Continue for ASP.NET 2.0.
What they have done is added a ASP.NET 1.1 style project to VS 2005. So if you create a project using that project type, you get edit and continue.
Other nice feature/side effect, this will make upgrading from ASP.NET 1.1 to ASP.NET 2.0 much simpler.
Read more at ScottGu's Blog:
http://weblogs.asp.net/scottgu/archive/2006/05/08/445742.aspx
April 28, 2006
Shoshone Falls running full
April 20, 2006
Thoughts for the day
Here are my thoughts for today.
*Transitions are transparent like a fart is transparent -- but still noticeable.
*Hemorrhoids and jalapeños do not mix well. (Note, this one is not mine, but I have that one on good authority)
*I had another thought, but it got lost in the shuffle.
*Transitions are transparent like a fart is transparent -- but still noticeable.
*Hemorrhoids and jalapeños do not mix well. (Note, this one is not mine, but I have that one on good authority)
*I had another thought, but it got lost in the shuffle.
April 19, 2006
SQL Server 2005 SP1 is out
For those of you who wait until the first service pack for any Microsoft technology is out, wait no longer for SQL Server 2005!. SP1 has been released.
http://www.microsoft.com/downloads/details.aspx?FamilyID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc&DisplayLang=en
As with many service packs, Microsoft is sneaking in new features, you can see what is new here.
One of the promised features for SQL Server 2005 Express is in SP1: Text Search.
And something I had not noticed before: Microsoft SQL Server 2005 Express Edition Toolkit
http://www.microsoft.com/downloads/details.aspx?FamilyID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc&DisplayLang=en
As with many service packs, Microsoft is sneaking in new features, you can see what is new here.
One of the promised features for SQL Server 2005 Express is in SP1: Text Search.
And something I had not noticed before: Microsoft SQL Server 2005 Express Edition Toolkit
April 12, 2006
ADOMD: GetSchemaDataSet musing and aggravation
I made a rediscovery today in ADOMD.NET: GetSchemaDataSet. This is a function that is callable from the AdomdConnection object and returns a DataSet, and a very useful function it is.
First off, what does it look like? Go here. If function complexity were judged by number of overloadable options, this guy should be awarded a medal at minimum.
You want a list of Catalogs/Databases on the server? Call GetSchemaDataSet. Like this:
AdomdConnection oConn = new AdomdConnection("Provider=MSOLAP;data source=local;"); DataSet ds = oConn.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, new object[0]);
OK, so where does that get us? What GetSchemaDataSet returns is a standard DataSet with one Table. The columns in the table are as follows: CATALOG_NAME, DESCRIPTION, ROLES, and DATE_MODIFIED. The values we are most interest in are in the first column: CATALOG_NAME.
Now, retrieving the list of Catalogs is just one trick that can be performed by this function, you can get a taste of that by looking at the static AdomdSchemaGuid class. Browse to this page to see all of the possibilities. Using GetSchemaDataSet with the AdomdSchemaGuid you can get all sorts of data out of your cubes that is not available anywhere else in the API.
unfortunately, this isn't all of the story. Retrieving the list of catalogs is an easy task, same with retrieving a list of cubes, dimensions, kpis, measures, and members. But what if you only want a select group of members? Well, time to introduce yourself to the second parameter: restrictions. A entirely different beast there, and there is a reason it takes an array of objects.
The nice thing for the API designer about an array of objects is that it can take anything. The bad thing about an array of objects for the developer using the API is that it can take anything. And without documentation as to what can go there...oh yes, that is right were we are. Plus, there are some interesting compromises that were made as part of this.
When calling GetSchemaDataSet you can pass in a string and a AdomdRestrictionsCollection OR a GUID and a object array (there are some other options, but this is the basics of the dilemma). Also, the AdomdSchemaGuid thing I was talking about earlier, it is a static class with a bunch of properties that all return Guids. It is not, I repeat, NOT an enumerated type. Why is it not an enumerated type when you clearly treat it like an enumerated type? I have no idea.
Now the other part that sucks. If you want to use the AdomdRestrictionsCollection you have to pass in a string based schema -- but for the life of me I cannot figure out what format of string the thing wants! So as of right now I can't use the AdomdRestrictsionsCollection. Oh well I guess.
Furthermore, setting up the object array is not exactly trivial either. OK, technically creating an object array is easy. But getting it to return the data you want, not as easy. Here are the basics: for every value you want to pass in as a restriction you create two spots in the array. The first value is the column name, the second value is the value to filter by.
So technically, if you want to filter Dimensions by CATALOG_NAME, it should look something like this:
object[] oValues = new object[2]; oValues[0] = "CATALOG_NAME"; oValues[1] = "Adventure Works"; DataSet ds = oConn.GetSchemaDataSet(AdomdSchemaGuid.Dimensions, oValues);
At least that is what it would look like if it worked. But it looks like there is actually a bug report out on that feature (see here) and a fix, but not until SP1.
First off, what does it look like? Go here. If function complexity were judged by number of overloadable options, this guy should be awarded a medal at minimum.
You want a list of Catalogs/Databases on the server? Call GetSchemaDataSet. Like this:
AdomdConnection oConn = new AdomdConnection("Provider=MSOLAP;data source=local;"); DataSet ds = oConn.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, new object[0]);
OK, so where does that get us? What GetSchemaDataSet returns is a standard DataSet with one Table. The columns in the table are as follows: CATALOG_NAME, DESCRIPTION, ROLES, and DATE_MODIFIED. The values we are most interest in are in the first column: CATALOG_NAME.
Now, retrieving the list of Catalogs is just one trick that can be performed by this function, you can get a taste of that by looking at the static AdomdSchemaGuid class. Browse to this page to see all of the possibilities. Using GetSchemaDataSet with the AdomdSchemaGuid you can get all sorts of data out of your cubes that is not available anywhere else in the API.
unfortunately, this isn't all of the story. Retrieving the list of catalogs is an easy task, same with retrieving a list of cubes, dimensions, kpis, measures, and members. But what if you only want a select group of members? Well, time to introduce yourself to the second parameter: restrictions. A entirely different beast there, and there is a reason it takes an array of objects.
The nice thing for the API designer about an array of objects is that it can take anything. The bad thing about an array of objects for the developer using the API is that it can take anything. And without documentation as to what can go there...oh yes, that is right were we are. Plus, there are some interesting compromises that were made as part of this.
When calling GetSchemaDataSet you can pass in a string and a AdomdRestrictionsCollection OR a GUID and a object array (there are some other options, but this is the basics of the dilemma). Also, the AdomdSchemaGuid thing I was talking about earlier, it is a static class with a bunch of properties that all return Guids. It is not, I repeat, NOT an enumerated type. Why is it not an enumerated type when you clearly treat it like an enumerated type? I have no idea.
Now the other part that sucks. If you want to use the AdomdRestrictionsCollection you have to pass in a string based schema -- but for the life of me I cannot figure out what format of string the thing wants! So as of right now I can't use the AdomdRestrictsionsCollection. Oh well I guess.
Furthermore, setting up the object array is not exactly trivial either. OK, technically creating an object array is easy. But getting it to return the data you want, not as easy. Here are the basics: for every value you want to pass in as a restriction you create two spots in the array. The first value is the column name, the second value is the value to filter by.
So technically, if you want to filter Dimensions by CATALOG_NAME, it should look something like this:
object[] oValues = new object[2]; oValues[0] = "CATALOG_NAME"; oValues[1] = "Adventure Works"; DataSet ds = oConn.GetSchemaDataSet(AdomdSchemaGuid.Dimensions, oValues);
At least that is what it would look like if it worked. But it looks like there is actually a bug report out on that feature (see here) and a fix, but not until SP1.
April 04, 2006
Oracle SQL Developer Review
So the Oracle SQL Developer has been out for at least a week now, and I have given the week to try to convert from TOAD to this new shine collection of bits.
Where to get it: http://www.oracle.com/technology/products/database/sql_developer/index.html
What is the Oracle SQL Developer? It is a TOAD replacement. Think of Query Analyser that comes with Microsoft SQL Server.
So, the good parts:
I guess the final point: if you cant get TOAD, Oracle SQL Developer is a fine product. It beats the heck out of SQL+.
Where to get it: http://www.oracle.com/technology/products/database/sql_developer/index.html
What is the Oracle SQL Developer? It is a TOAD replacement. Think of Query Analyser that comes with Microsoft SQL Server.
So, the good parts:
- Free (http://www.oracle.com/technology/products/database/sql_developer/index.html)
- Easy install.
- Syntax Highlighting
- Snippets containing commonly used functions
- Nice Connections tree that expands to tables/views/etc
- Drag and drop functionality
- Tabbed interface. So you can run multiple queries at once.
- Very nicely organized right-click menu (compared to TOAD anyway)
- Pretty to look at (interface is light blue)
- Works with Oracle 9.2 and above
- Written in Java. Not a condemnation in itself, but does make the app a bit slow. Takes a good couple of minutes to load up, and the refresh rate is terrible.
- 27 MB download (without Java 1.5 bundled in)
- The Connection tree: I like it, but it lists all Oracle connections in one tree, and all of the Aliases are part of the connection. So if you are working with multiple databases, and you have the connections expanded for both connections, you can end up doing quite a bit of scrolling. But, I still like it better than how toad does things.
- Memory usage -- it wants a lot of it. Just booting up, with no queries run, it is using 60 MB.
- Did I mention the refresh was slow -- oh ya, I did. Just checking.
- Had some problems with my TNSNames file (I have multiple homes)
I guess the final point: if you cant get TOAD, Oracle SQL Developer is a fine product. It beats the heck out of SQL+.
April 03, 2006
Microsoft buys ProClarity
Microsoft has agreed to buy ProClarity (very big news here in Boise).
As a former ProClarity employee, and a current user/customer, I do have some hope that this will be a good thing for both ProClarity and Microsoft, but we will have to wait and see how Microsoft adds ProClarity to their portfolio.
My hope is that ProClarity get sold along side the SQL Server product and gets encorporated into the MSDN Subscriptions. This would be very helpfull because it might finally open up some corporate lisencing of ProClarity.
Speaking selfishly, this would help me out quite a bit as well, as I do a lot of development with the ProClarity SDK...and I am very open to getting more customers.
Speaking REALLY selfishly, maybe now I can start working on becoming a Microsoft ProClarity MVP. :)
As a former ProClarity employee, and a current user/customer, I do have some hope that this will be a good thing for both ProClarity and Microsoft, but we will have to wait and see how Microsoft adds ProClarity to their portfolio.
My hope is that ProClarity get sold along side the SQL Server product and gets encorporated into the MSDN Subscriptions. This would be very helpfull because it might finally open up some corporate lisencing of ProClarity.
Speaking selfishly, this would help me out quite a bit as well, as I do a lot of development with the ProClarity SDK...and I am very open to getting more customers.
Speaking REALLY selfishly, maybe now I can start working on becoming a Microsoft ProClarity MVP. :)
March 28, 2006
No Images in a TreeView
OK, right this one up under lame fixes.
This is the setup: WinForms with a TreeView and an ImageList. What happens: no images in the TreeView. Totally blank!
The culprit: Application.EnableVisualStyles.
If your Main() looks like this:
Application.EnableVisualStyles(); Application.Run(new frmMain());
You will not see Images in your TreeView no matter how hard you try.
But change it ever so slightly to this:
Application.EnableVisualStyles(); Application.DoEvents(); Application.Run(new frmMain());
and everything is hunky dorry.
BTW: I take no credit in figuring this out. I actually found the fix in the Microsoft .NET VB Forums.
This is the setup: WinForms with a TreeView and an ImageList. What happens: no images in the TreeView. Totally blank!
The culprit: Application.EnableVisualStyles.
If your Main() looks like this:
Application.EnableVisualStyles(); Application.Run(new frmMain());
You will not see Images in your TreeView no matter how hard you try.
But change it ever so slightly to this:
Application.EnableVisualStyles(); Application.DoEvents(); Application.Run(new frmMain());
and everything is hunky dorry.
BTW: I take no credit in figuring this out. I actually found the fix in the Microsoft .NET VB Forums.
March 24, 2006
MS OLAP 2005: DrillThru
So the Boise Code Camp 1.0 was last week. I gave a presentation on using ADOMD.NET 2.0. Very basic demonstration: how to open a connection, how to browse a cube/dimension/hierarchy/level/members/etc, how to execute a command, how to display the command via the CellSet object, why to avoid the AdomdDataReader, etc.
But, as is standard, I received one question I could not fully answer: "Hey, I heard they (Microsoft) removed Drill Thru from 2005 (Analysis Services 2005). Is that true?"
My stock answer was: “No, it is there.” Drill Thru is too needed a feature to just remove on the spur of the moment (a new release). I even opened a cube browser to show that drill-thru worked. And I was right -- or, mostly right anyway.
I did some stumbling around the web (read: google search) and I found this article: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5_anservdrill.asp
Read it if you wish, I can wait. The jist of the article is this, Drill Thru is there in 2005, and turned on by default, but it is different now -- ever so slightly different.
In the olden days of MSOLAP 2000 when you performed a Drill Thru, Analysis Services would send a SQL query back to the source database asking for data, and then passing that data back to the client. And that worked well, it was often horribly slow (especially against non-MSSQL databases, but it worked. Oh, and as a bonus feature, you could select which columns were displayed to the user, but not the order. Yup, that was fun. “Why is the Product ID in the middle of the display? Well the OLAP gods just wanted it there, that’s all. Move it? Shhhhhh, they might hear you!”
Now, in 2005, it seams that Analysis Services does not go back to the source database at all. Instead it returns data from the inner darkness of the cube itself. The side caveat is that if you want to have some data available via Drill-Thru, it has to be available IN the cube. Uhm, minor change there – better read the article above.
How can this possibly be a good thing? That is an easy question. If you are creating a MOLAP cube off of a live database (not a data warehouse that is built right before you build the cube), you should always get matching data between the cube and the drill-thru. Whereas in 2000, there was always the risk that the data might be out of sink between the database and the cube, causing inconsistencies between the drill-thru results and the cube. And trust me, if the cube says there are 5 of something and the drill-thru shows 6, people will notice.
A couple of good things did come out of this new version though: instead of having one drill-thru option per cube (select your columns and go away), now you can specify which the drill thru options on a measures by measure basis. This is because all drill-thrus are now handled by cell level actions.
This is something that many of us talked about when cell level actions became available in 2000 by way of one of the services packs (sp2 or sp3, I don’t remember). If any of the 3rd party tools had implemented it, things would have been cool. Note: I’m sure the VERY first question I would have received would have been: “Can you put the results straight into Excel?” (sigh) You might be wondering if I’m trying to be funny there (yes and no), but I also know that the first remark once I was done would have been: “Why is it so darned SLOW?” (sigh)
Another new toy in Analysis Services 2005 is a Report Action. This is an action that loads up a specific Report Server report. You can even key off of a cell. But I’m not sure if Report Server is really ready for all of the options needed for true drill-thru yet – mostly because of parameter limitations. But this would be perfect for a number of options where a limited set of filters is a viable solution.
So where does that leave us? A bit further than where we were in 2000. We can now specify drill-thru options on a per measure basis, and we have multiple drill-thru options, we can even create a Report Server report to do some limited drill-thru.
But customers will still want to get more out of their drill-thru: contextual information, links to other systems, related documents, etc. It isn't just about the raw data anymore to give the customers a full view of what there is to know (I've had to help write two drill-thru web sites because the customers did not like the standard output). I fear I will still be creating custom drill-thru web sites for a while to come. I guess I should be happy about that.
But, as is standard, I received one question I could not fully answer: "Hey, I heard they (Microsoft) removed Drill Thru from 2005 (Analysis Services 2005). Is that true?"
My stock answer was: “No, it is there.” Drill Thru is too needed a feature to just remove on the spur of the moment (a new release). I even opened a cube browser to show that drill-thru worked. And I was right -- or, mostly right anyway.
I did some stumbling around the web (read: google search) and I found this article: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5_anservdrill.asp
Read it if you wish, I can wait. The jist of the article is this, Drill Thru is there in 2005, and turned on by default, but it is different now -- ever so slightly different.
In the olden days of MSOLAP 2000 when you performed a Drill Thru, Analysis Services would send a SQL query back to the source database asking for data, and then passing that data back to the client. And that worked well, it was often horribly slow (especially against non-MSSQL databases, but it worked. Oh, and as a bonus feature, you could select which columns were displayed to the user, but not the order. Yup, that was fun. “Why is the Product ID in the middle of the display? Well the OLAP gods just wanted it there, that’s all. Move it? Shhhhhh, they might hear you!”
Now, in 2005, it seams that Analysis Services does not go back to the source database at all. Instead it returns data from the inner darkness of the cube itself. The side caveat is that if you want to have some data available via Drill-Thru, it has to be available IN the cube. Uhm, minor change there – better read the article above.
How can this possibly be a good thing? That is an easy question. If you are creating a MOLAP cube off of a live database (not a data warehouse that is built right before you build the cube), you should always get matching data between the cube and the drill-thru. Whereas in 2000, there was always the risk that the data might be out of sink between the database and the cube, causing inconsistencies between the drill-thru results and the cube. And trust me, if the cube says there are 5 of something and the drill-thru shows 6, people will notice.
A couple of good things did come out of this new version though: instead of having one drill-thru option per cube (select your columns and go away), now you can specify which the drill thru options on a measures by measure basis. This is because all drill-thrus are now handled by cell level actions.
This is something that many of us talked about when cell level actions became available in 2000 by way of one of the services packs (sp2 or sp3, I don’t remember). If any of the 3rd party tools had implemented it, things would have been cool. Note: I’m sure the VERY first question I would have received would have been: “Can you put the results straight into Excel?” (sigh) You might be wondering if I’m trying to be funny there (yes and no), but I also know that the first remark once I was done would have been: “Why is it so darned SLOW?” (sigh)
Another new toy in Analysis Services 2005 is a Report Action. This is an action that loads up a specific Report Server report. You can even key off of a cell. But I’m not sure if Report Server is really ready for all of the options needed for true drill-thru yet – mostly because of parameter limitations. But this would be perfect for a number of options where a limited set of filters is a viable solution.
So where does that leave us? A bit further than where we were in 2000. We can now specify drill-thru options on a per measure basis, and we have multiple drill-thru options, we can even create a Report Server report to do some limited drill-thru.
But customers will still want to get more out of their drill-thru: contextual information, links to other systems, related documents, etc. It isn't just about the raw data anymore to give the customers a full view of what there is to know (I've had to help write two drill-thru web sites because the customers did not like the standard output). I fear I will still be creating custom drill-thru web sites for a while to come. I guess I should be happy about that.
March 23, 2006
Trinity is Crawling
OK, this is not a programming related post. My bad, get over it.
But, my youngest daughter, now 10 months old just started crawling. Even better, I just caught the entire thing on tape. This is a momentous event, for all of you without kids and don't know better. This means the games have begun.
From the time a child starts crawling it is as if a silent gun has shot off for an Olympic 100 meter dash. Another analogy would be for a back woods car race. Doing the dashing is the parents and the baby, each trying to out maneuver each other to the best lanes. Unfortunately only the baby knows where those are, and it is up the parent to find them out -- preferably before the baby does.
How is the baby going to get to the stairs (we have lots of them), which electric sockets are exposed, which of the older kids toys are chocking hazards, etc. You see, this isn't something you can do once and you are good for life.
In the world of computer security, people are always wishing for more security, but gripe to high heaven when they have to enter a new password. It is annoying. Same with child proofing a house. Yes you can do it. But all of the stairway gates, drawer locks, and electric socket covers get really annoying really fast. So as soon as your kid gets old enough -- off they go! Of course, that is also when you find legos jammed in the electric sockets...again. So when the next baby comes around, there you go again. Reapplying old security fixes, and adding new ones.
That is enough analogies for one night.
But, my youngest daughter, now 10 months old just started crawling. Even better, I just caught the entire thing on tape. This is a momentous event, for all of you without kids and don't know better. This means the games have begun.
From the time a child starts crawling it is as if a silent gun has shot off for an Olympic 100 meter dash. Another analogy would be for a back woods car race. Doing the dashing is the parents and the baby, each trying to out maneuver each other to the best lanes. Unfortunately only the baby knows where those are, and it is up the parent to find them out -- preferably before the baby does.
How is the baby going to get to the stairs (we have lots of them), which electric sockets are exposed, which of the older kids toys are chocking hazards, etc. You see, this isn't something you can do once and you are good for life.
In the world of computer security, people are always wishing for more security, but gripe to high heaven when they have to enter a new password. It is annoying. Same with child proofing a house. Yes you can do it. But all of the stairway gates, drawer locks, and electric socket covers get really annoying really fast. So as soon as your kid gets old enough -- off they go! Of course, that is also when you find legos jammed in the electric sockets...again. So when the next baby comes around, there you go again. Reapplying old security fixes, and adding new ones.
That is enough analogies for one night.
March 13, 2006
Funny: best languages to learn
The best writing, to me anyway, is usually 1. something that you can learn something from, 2. funny, and 3. pragmatic.
This blog entry is all three with a discussion on the best languages to learn:
http://www.cabochon.com/~stevey/blog-rants/tour-de-babel.html
The only fault that I have: it doesn't list Delphi or C#. :)
This blog entry is all three with a discussion on the best languages to learn:
http://www.cabochon.com/~stevey/blog-rants/tour-de-babel.html
The only fault that I have: it doesn't list Delphi or C#. :)
March 11, 2006
Winforms 2.0: Application Settings
OK, I'm defiantly getting behind the times. But in my defense, I don't get many chances to use WinForms these days -- I'm still waiting for my great excuse to use Click-Once.
What did I miss all this time: Application Settings. This is not entirely new, we have had app.Config for a long time now, and the Settings class/designer uses the app.Config.
Couple of differences though:
To add a settings class to a C# project: Right click on the project (like you do to add a class or a form), select Add->New Item.... Then select Settings File from the bottom of the list, and give it a name -- I called mine Settings1.
That produced a file called Settings1.settings in the designer.
To access the properties stored in the settings class, I use Settings1.Default..
Also, you can access the code behind the designer for the settings object. Be warned, it is generated code, and it will get overwritten from time to time.
There are some differences between the VB version of this and the C#, but those are documented in the source. The main difference is that the settings class is included in the My object, and C# has to use the method shown above. This is complicated by the fact that most of the documentation seems to cater to the VB crowd.
One final note that has to be looked into. All of the settings in the Settings class are ultimatly stored in the app.config file. Application level settings are stored in the node, and user settings are stored in the node.
Now how does that work for multiple users?
What did I miss all this time: Application Settings. This is not entirely new, we have had app.Config for a long time now, and the Settings class/designer uses the app.Config.
Couple of differences though:
- It is type safe. You add a property thru the designer, then you can access that value thru its property. Nice. (I'll show more on this in a minute)
- You can change the values, and there is a Save method!
- There is a setting for User vs. Application settings
To add a settings class to a C# project: Right click on the project (like you do to add a class or a form), select Add->New Item.... Then select Settings File from the bottom of the list, and give it a name -- I called mine Settings1.
That produced a file called Settings1.settings in the designer.
To access the properties stored in the settings class, I use Settings1.Default.
Also, you can access the code behind the designer for the settings object. Be warned, it is generated code, and it will get overwritten from time to time.
There are some differences between the VB version of this and the C#, but those are documented in the source. The main difference is that the settings class is included in the My object, and C# has to use the method shown above. This is complicated by the fact that most of the documentation seems to cater to the VB crowd.
One final note that has to be looked into. All of the settings in the Settings class are ultimatly stored in the app.config file. Application level settings are stored in the
Now how does that work for multiple users?
March 08, 2006
ClickOnce in FireFox
OK, here is something I have been waiting for: an article detailing how to run a .NET 2.0 ClickOnce application from FireFox.
http://blogs.msdn.com/saurabh/archive/2006/03/02/541988.aspx
We are going to have to see a presentation on this one at the local user group meeting, me thinks.
http://blogs.msdn.com/saurabh/archive/2006/03/02/541988.aspx
We are going to have to see a presentation on this one at the local user group meeting, me thinks.
March 07, 2006
FireFox 2.0 with Spell Check
So the Alpha 1 of FireFox is supposed to be out this week. The big feature that I am looking for: as-you-type-Spell-Check.
Sure there are other cool features: better rss/atom support, tab enhancements, blah-blah-blah -- SPELL CHECK -- yay, yay!
Things that are not there: built in bittorrent would be nice. So would built in pod-cast support. Oh well, that is what extensions are for.
Sure there are other cool features: better rss/atom support, tab enhancements, blah-blah-blah -- SPELL CHECK -- yay, yay!
Things that are not there: built in bittorrent would be nice. So would built in pod-cast support. Oh well, that is what extensions are for.
February 16, 2006
Advantage Database Server goes .NET 2.0
In the long list of technologies that I have been meaning to work with, but haven't had the time yet, is Advantage Database Server. You can get it for free, light-weight, native SQL support, and available from their DevCenter and they have been good about supporting our local developer groups.
And now, it has a native .NET 2.0 data provider.
Check them out: http://www.advantagedatabase.com
And now, it has a native .NET 2.0 data provider.
Check them out: http://www.advantagedatabase.com
February 14, 2006
ASP.NET: AJAX with Anthem
OK, here is my take on AJAX at this point in history: a lot of talk, a lot of work, and little reality.
But, I have found one library that I actually like for doing AJAXy stuff: Anthem
http://jason.diamond.name/weblog/2006/01/31/anthem-100
Why do I like this one: it is easy to implement. They didn't go out and recreate a bunch of controls, but inherited the existing standard ASP.NET control library. So if you want a AJAX dropdownlist instead of a standard dropdownlist, change your asp:dropdownlist to an anthem:dropdownlist; or, my personal favorite, change your asp:calendar to an anthem:calendar (no more full post backs just for selecting a day).
OK, there are a couple of other steps involved, but all told it amounts to 4 extra lines of code, and there is a nice set of samples to tell you everything involved.
Did I mention this is an open-source source forge project?
But, I have found one library that I actually like for doing AJAXy stuff: Anthem
http://jason.diamond.name/weblog/2006/01/31/anthem-100
Why do I like this one: it is easy to implement. They didn't go out and recreate a bunch of controls, but inherited the existing standard ASP.NET control library. So if you want a AJAX dropdownlist instead of a standard dropdownlist, change your asp:dropdownlist to an anthem:dropdownlist; or, my personal favorite, change your asp:calendar to an anthem:calendar (no more full post backs just for selecting a day).
OK, there are a couple of other steps involved, but all told it amounts to 4 extra lines of code, and there is a nice set of samples to tell you everything involved.
Did I mention this is an open-source source forge project?
January 26, 2006
Knee update
I remember writing about my knee a number of months ago, and I thought this would be a good time for an update.
Why is this a good time? I just got back from my doctor after having an MRI on my knee.
Now, lets be fair -- I was hoping he would find something that could be fixed. He didn't. That isn't to say he didn't find something wrong, just nothing that can be fixed. That would be Arthritis, also known as osteoarthritis.
So, I got into a talk with the doctor about injecting chicken parts into my knee, and there is a 70% chance that will work. But it isn't a long term fix of any sort. Just my luck, I need chicken parts right when bird flue is running laps around the world.
In the mean time, I just bought a home gym (commonly known as an expensive clothing rack) and will be looking for a stationary bike. Apparently some of this can be worked out through some exercises.
Why is this a good time? I just got back from my doctor after having an MRI on my knee.
Now, lets be fair -- I was hoping he would find something that could be fixed. He didn't. That isn't to say he didn't find something wrong, just nothing that can be fixed. That would be Arthritis, also known as osteoarthritis.
So, I got into a talk with the doctor about injecting chicken parts into my knee, and there is a 70% chance that will work. But it isn't a long term fix of any sort. Just my luck, I need chicken parts right when bird flue is running laps around the world.
In the mean time, I just bought a home gym (commonly known as an expensive clothing rack) and will be looking for a stationary bike. Apparently some of this can be worked out through some exercises.
January 24, 2006
Unit Testing for customers
OK, here is an interesting thought. A new .NET Rocks is out today and they are interviewing Adam Cogan of SSW. He is known for having a long list of rules for developers working at his company.
This includes rules for writing rules that check dependencies like datasets, schemas, and web services. How to format code, how to respond to email. You just have to read some of them.
But there was one interesting rule that caught my eye: Menu - Do you have a standard 'Help' menu that includes a way to run your unit tests?
This is something that I haven't thought about. Letting users run your unit tests at any given time. How would this be a good thing. How many times have you had a "it works on my machine" moment, followed by a screen shot that apparently displays the problem -- but it doesn't.
But, if you can have your users run the unit tests on their machine, and you have written them in a logical fashion, you could game some valuable insight to what is wrong...without having to be on the users machine!
Now, what are the hidden requirements of this? You have to be able to distribute your unit tests, and the application that runs the unit tests as part of your executable. So NUnit is fine, but you will have some trouble with Team Systems.
I am going to have to think about this a bit more, but I am really liking the sound of this idea for many cases.
This includes rules for writing rules that check dependencies like datasets, schemas, and web services. How to format code, how to respond to email. You just have to read some of them.
But there was one interesting rule that caught my eye: Menu - Do you have a standard 'Help' menu that includes a way to run your unit tests?
This is something that I haven't thought about. Letting users run your unit tests at any given time. How would this be a good thing. How many times have you had a "it works on my machine" moment, followed by a screen shot that apparently displays the problem -- but it doesn't.
But, if you can have your users run the unit tests on their machine, and you have written them in a logical fashion, you could game some valuable insight to what is wrong...without having to be on the users machine!
Now, what are the hidden requirements of this? You have to be able to distribute your unit tests, and the application that runs the unit tests as part of your executable. So NUnit is fine, but you will have some trouble with Team Systems.
I am going to have to think about this a bit more, but I am really liking the sound of this idea for many cases.
January 13, 2006
Retrieving Query Parameters in a Smart Client
OK, so there is this little cool feature in Smart Clients that allows you to start a .NET executable from a web page. You can set it up so the program is always started from the web page, or just use it as a distribution method.
I'm interested in the "only start from a web page" option.
But, this is only useful if you can pass data to the smart client from the web page. Preferable thru the URL. And guess what -- You CAN! You just have to pile through a lot of help docs to find the documentation on it.
So here is what you do.
In you program, you will need some code that looks like this:
Next step is to call your application through your url with a parameter attached. It will probably look like this:
http://localhost/MyApp/MyApp.Application?Param=Var
Everything after the ? is up to you. Also left up to you is parsing the url for the parameters and values.
I'm interested in the "only start from a web page" option.
But, this is only useful if you can pass data to the smart client from the web page. Preferable thru the URL. And guess what -- You CAN! You just have to pile through a lot of help docs to find the documentation on it.
So here is what you do.
In you program, you will need some code that looks like this:
if (ApplicationDeployment.IsNetworkDeployed)
{
// retrieve the url. It will look something like this:
// http://localhost/myapp.Application?Param=Var
string url =
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
// do something with the url
}
Next step is to call your application through your url with a parameter attached. It will probably look like this:
http://localhost/MyApp/MyApp.Application?Param=Var
Everything after the ? is up to you. Also left up to you is parsing the url for the parameters and values.
Subscribe to:
Posts (Atom)