Need to generate lines of code statistics for your project? For PowerBuilder, you're best served by PBL Peeper or Visual Expert. It's not immediately obvious how to do it with PBL Peeper, but if you go to Lists, then Scripts, and then select View->Show from the menu, you'll be presented with a dialog that allows you to add Line Count to the report.
If you've got to count lines of code for anything else, you might want to check out Code Counter Pro. Somewhat similar to SlickEdit, you define for a particular file extension how to distnguish between code lines and comment lines.
Then for a particular analysis you select the different file extensions that should be analyzed.
If your PowerBuilder project is under source control and you don't have "Delete PowerBuilder generated object files" checked in the source control settings, you could easily run Code Counter Pro on the PowerBuilder source files (they're generated by the source control system in the directory with the PBLs). The issue is that Code Counter Pro will include all of the system generated code lines as well (create and destroy scripts, etc.). Generally that's not the information that people are looking for when they are looking for code line counts for PowerBuilder projects.
Wednesday, December 07, 2005
Tuesday, December 06, 2005
Ovation
Well, perhaps not the greatest name for a product, particular when you decide to use a capital O as the logo in your icon. I can't help think of an egg rather than applause. But what it does is pretty spectacular. If it's not a cure for PowerPoint poisoning, it's a least a treatment.
It takes a PowerPoint presentation, adds moving backgrounds, sharper graphics and better transitions between points. And of interest to presenters, it allows you to see your notes side-by-side with the slides while your audience only sees the slides.
The product is in beta now. The only problem I've had with it is that it requires more serious graphics hardware that my current (couple year old) laptop is equipped with. Looks like it's time for an upgrade.
It takes a PowerPoint presentation, adds moving backgrounds, sharper graphics and better transitions between points. And of interest to presenters, it allows you to see your notes side-by-side with the slides while your audience only sees the slides.
The product is in beta now. The only problem I've had with it is that it requires more serious graphics hardware that my current (couple year old) laptop is equipped with. Looks like it's time for an upgrade.
Friday, December 02, 2005
Wednesday, November 16, 2005
Vote for PocketBuilder (again)!
Developer.com has opened their "product of the year" contest again, and PocketBuilder is in the mobile category again. If you like PocketBuilder and think it deserves the recognization, please give it a vote. This contest is painless to vote for.
Check out: http://www.developer.com/
On the left hand side is the "Product of the Year 2006" link.
Check out: http://www.developer.com/
On the left hand side is the "Product of the Year 2006" link.
Monday, November 07, 2005
The Second PowerBuilder Developer Meeting in Latinamerica
On October 28th and 29th the Second PowerBuilder Developer Meeting in Latinamerica was held in Bogota, Columbia. I participated and did presentations on PowerBuilder, EAServer and PocketBuilder.
I've posted my pictures from the conference and from the special event (a tour of the "Cathedral of Salt").
I've posted my pictures from the conference and from the special event (a tour of the "Cathedral of Salt").
Tuesday, September 20, 2005
Vote for PocketBuilder!
Please take a few minutes and vote for PocketBuilder in the 2005 Mobile Star Awards(TM), and then pass this on to customers and partners! PocketBuilder is a candidate in the Enterprise Software: Developer Tool category.
The Mobile Star Awards hire no judges, and are meant to be open to all. Winners are chosen only by email subscribers of MobileVillage's free twice-monthly mobile/wireless technology newsletter, Go Mobile(R).
If you already receive Go Mobile by email, you can vote right away. If you are not a subscriber, you can sign up at http://www.mobilevillage.com/subscribe-gomobile.htm. Subscribing is free, quick, and immediate.
Once you are subscribed, you can vote online at: http://www.mobilevillage.com/awards.htm.
Voting runs until Sept. 30, 2005, and winners will be announced in early October.
There are several important voting rules, listed on the voting page:
The Mobile Star Awards hire no judges, and are meant to be open to all. Winners are chosen only by email subscribers of MobileVillage's free twice-monthly mobile/wireless technology newsletter, Go Mobile(R).
If you already receive Go Mobile by email, you can vote right away. If you are not a subscriber, you can sign up at http://www.mobilevillage.com/subscribe-gomobile.htm. Subscribing is free, quick, and immediate.
Once you are subscribed, you can vote online at: http://www.mobilevillage.com/awards.htm.
Voting runs until Sept. 30, 2005, and winners will be announced in early October.
There are several important voting rules, listed on the voting page:
- You must enter your email address at the bottom of the voting page, to validate that you are a Go Mobile subscriber.
- After voting, you must remain subscribed to Go Mobile for at least five more months (about 10 issues.)
- Please don't vote in categories where you have no experience. Do vote in categories in which you have experience, or enough interest to read the entrants' profiles.
- To help ensure fairness for all entrants, MobileVillage will not accept votes: 1) twice from the same person; 2) on behalf of another person; 3) exceeding 40 votes by employees of an entering company; and 4) from entrants' family members, pets, etc. However, MobileVillage welcomes all votes by entrants' customers and qualified business partners.
Monday, September 19, 2005
DataWindow.Net 2.0 Sneak Preview
We are a little over a month away from the Beta for DataWindow .NET 2.0 and here is your chance to get a sneak preview of what that release has to offer.
A sneak preview webcast will be held on Thursday September 29th at 10 am PDT/ 1 pm EDT.
Attendence is free, but space is limited and you must register at:
http://www.customermining.com/Sybase/webinar3.html
Here are some of the features you can expect to learn more about at this webcast:
- Visual Studio 2005 Support
- Dot Notation (Indexer) access to DataWindow Data
- Hierarchical (Treeview) Style DataWindow
- Enhanced Drop Down DataWindows for Web Apps
- Using .NET Datasets and Datatables as DataWindow datasources
A sneak preview webcast will be held on Thursday September 29th at 10 am PDT/ 1 pm EDT.
Attendence is free, but space is limited and you must register at:
http://www.customermining.com/Sybase/webinar3.html
Here are some of the features you can expect to learn more about at this webcast:
- Visual Studio 2005 Support
- Dot Notation (Indexer) access to DataWindow Data
- Hierarchical (Treeview) Style DataWindow
- Enhanced Drop Down DataWindows for Web Apps
- Using .NET Datasets and Datatables as DataWindow datasources
Thursday, September 15, 2005
Well, maybe you can teach an old dog new tricks…
I was using the GenerateGUID function in PowerScript the other day (and it's been quite a while since I last used it). I thought the example given in the online help was in error, because it showed the REF keyword being used in the actual use of the function.
Turns out the example is correct. In fact, as the PowerBuilder documentation indicates, the REF keyword is required in the actual call when working with an OLE Server application that attempts to return values in arguments. The following is a copy of the relevent section of the HTML books. How odd to consider how long I've been working with PB and OLE that I just noticed this.
Or perhaps its a symptom of something else. They say one of the best things about getting older is you get to meet all these nice new friendly people over and over again...
==============================================================================
Passing arguments by reference
If an OLE server expects an argument to be passed by reference so that it can pass a value back to your script, include the keyword REF just before the argument. This is similar to the use of REF in an external function declaration:
olecontrol.Object.functionname ( REF argname )
In these generic examples, the server can change the values of ls_string and li_return because they are passed by reference:
string ls_string
integer li_return
ole_1.Object.testfunc(REF ls_string, REF li_return)
This example illustrates the same function call using an OLEObject variable.
OLEObject ole_obj
ole_obj = CREATE OLEObject
ole_obj.ConnectToNewObject("servername")
ole_obj.testfunc(REF ls_string, REF li_return)
Turns out the example is correct. In fact, as the PowerBuilder documentation indicates, the REF keyword is required in the actual call when working with an OLE Server application that attempts to return values in arguments. The following is a copy of the relevent section of the HTML books. How odd to consider how long I've been working with PB and OLE that I just noticed this.
Or perhaps its a symptom of something else. They say one of the best things about getting older is you get to meet all these nice new friendly people over and over again...
==============================================================================
Passing arguments by reference
If an OLE server expects an argument to be passed by reference so that it can pass a value back to your script, include the keyword REF just before the argument. This is similar to the use of REF in an external function declaration:
olecontrol.Object.functionname ( REF argname )
In these generic examples, the server can change the values of ls_string and li_return because they are passed by reference:
string ls_string
integer li_return
ole_1.Object.testfunc(REF ls_string, REF li_return)
This example illustrates the same function call using an OLEObject variable.
OLEObject ole_obj
ole_obj = CREATE OLEObject
ole_obj.ConnectToNewObject("servername")
ole_obj.testfunc(REF ls_string, REF li_return)
Wednesday, September 07, 2005
Brute force pbtrace.log file processing
Every had to search through a large PBTRACE.LOG file to find the problematic SQL statement that is causing your application to run slow? If you've moved to PowerBuilder 10.2 it's less of an issue because of the enhancements to database tracing they've added to that version. However, if you're still using anything earlier, it can be a pain to find the statement in a large log file.
So here's a brute force method of handling it. Import the pbtrace.log file into Excel, and then insert three columns before the data. In the first column, add the following formula in the first cell and then copy it for each row of data:
=IF(ISERROR(SEARCH("MilliSeconds",D1)),0,SEARCH("MilliSeconds",D1))
That forumla determines if there is timing data for the particular row in the pbtrace.log file.
In the second column, add the following forumla in the first cell of the second column and then copy it for each row of data:
=IF(A1>0,SEARCH("(",D1,A1-9),0)
That forumla determines where the beginning of the numeric value for the timing information begins.
Finally, add the following formula in the first cell of the third column and then copy it for each row of data:
=IF(A1>0,VALUE(MID(D1,B1+1,A1-B1-2)),0)
That forumula strips out the numeric value from the timing data.
You should now be able to perform a descending sort on the third column to determine which SQL statements are the problematic ones.
So here's a brute force method of handling it. Import the pbtrace.log file into Excel, and then insert three columns before the data. In the first column, add the following formula in the first cell and then copy it for each row of data:
=IF(ISERROR(SEARCH("MilliSeconds",D1)),0,SEARCH("MilliSeconds",D1))
That forumla determines if there is timing data for the particular row in the pbtrace.log file.
In the second column, add the following forumla in the first cell of the second column and then copy it for each row of data:
=IF(A1>0,SEARCH("(",D1,A1-9),0)
That forumla determines where the beginning of the numeric value for the timing information begins.
Finally, add the following formula in the first cell of the third column and then copy it for each row of data:
=IF(A1>0,VALUE(MID(D1,B1+1,A1-B1-2)),0)
That forumula strips out the numeric value from the timing data.
You should now be able to perform a descending sort on the third column to determine which SQL statements are the problematic ones.
Thursday, August 25, 2005
Thursday’s Incidentals
I've talked to a number of folks that found rather strange charges on their hotel bill when they checked out. There was a $150 charge on mine for a massage. Fortunately, they hotel was very good about removing the charge without arguing about it. It pays not to use quick checkout though, even if the regular checkout line is long.
Enhancements Section
Over 85% of the high vote value enhancements are implemented
The panel consisted of (or was supposed to consist of):
Jonathan Baker
John Strano
Dimitri Volkman
Dave Dichman
Loren Corbridge
Evan Ireland
Ian Thain
For some reason, Jonathan Baker wasn't able to make it.
The panel consisted of (or was supposed to consist of):
Jonathan Baker
John Strano
Dimitri Volkman
Dave Dichman
Loren Corbridge
Evan Ireland
Ian Thain
For some reason, Jonathan Baker wasn't able to make it.
Wednesday, August 24, 2005
Wednesday’s Special Event
I'm a video game junkie, so this year's special event was one of the better one I've been at in a while. (Of course, I haven't gone to many of them recently, so I'm speaking out of ignorance as well).
Sybase reserved the GameWorks on the strip for 3.5 hours. A wide variety of food was provided, and the games were set to run for free. People who climbed half way up the climbing wall were rewarded with flashing sunglasses, and those making it to the top won an additional prize. There were also several competitions (indy racing, basketball throws, pool) which had prizes as well.
TeamSybase member Terry Voth making an ascent on the climbing wall
TeamSybase member Terry Voth farther along on his ascent
Normally mild-mannered TeamSybase member Mike Nicewarner now sporting a tattoo and blowing away bad guys
Former PFC project manager and now PocketPC application expert Alex Whitney doing his best to protect us from evil aliens
Members of the Sybase Engineering team attempting to kill enemies in a video game. Let's hope they're better at killing bugs in code than they seem to be at this game...
Sybase reserved the GameWorks on the strip for 3.5 hours. A wide variety of food was provided, and the games were set to run for free. People who climbed half way up the climbing wall were rewarded with flashing sunglasses, and those making it to the top won an additional prize. There were also several competitions (indy racing, basketball throws, pool) which had prizes as well.
TeamSybase member Terry Voth making an ascent on the climbing wall
TeamSybase member Terry Voth farther along on his ascent
Normally mild-mannered TeamSybase member Mike Nicewarner now sporting a tattoo and blowing away bad guys
Former PFC project manager and now PocketPC application expert Alex Whitney doing his best to protect us from evil aliens
Members of the Sybase Engineering team attempting to kill enemies in a video game. Let's hope they're better at killing bugs in code than they seem to be at this game...
Wednesday’s Incidentals
A few complaints:
It wasn't entirely obvious to me where we were supposed to pick up the hard copies of the presentations for our AM classes (the PM classes are only done on CD). I've found it now, but either somebody didn't mention it to me during registration or I completely missed any signs indicating where it was located.
I'm not sure whose bright idea it was to locate the meeting rooms adjacent to what appears to be freight elevators. It was not unusual to have a session interrupted at times by loud noises from people moving heavy equipment. I don't see why the hotel can't wait until lunchtime or after hours to move equipment in that area if they know a conference is going on.
There was a similar issue during the keynotes, as the breakfast area was directly adjacent to the room where the keynotes occurred. Apparently the hotel did not mind making a significant amount of noise cleaning up after the breakfast and moving equipment around during the middle of the keynotes.
It wasn't entirely obvious to me where we were supposed to pick up the hard copies of the presentations for our AM classes (the PM classes are only done on CD). I've found it now, but either somebody didn't mention it to me during registration or I completely missed any signs indicating where it was located.
I'm not sure whose bright idea it was to locate the meeting rooms adjacent to what appears to be freight elevators. It was not unusual to have a session interrupted at times by loud noises from people moving heavy equipment. I don't see why the hotel can't wait until lunchtime or after hours to move equipment in that area if they know a conference is going on.
There was a similar issue during the keynotes, as the breakfast area was directly adjacent to the room where the keynotes occurred. Apparently the hotel did not mind making a significant amount of noise cleaning up after the breakfast and moving equipment around during the middle of the keynotes.
Wednesday’s Sessions
I finally managed to catch an AM session: Marty Mallick's presentation on RFID 101 – Understanding RFID. During the discussion on different readers, Reed Shilts noted that there is an RFID reader available for PocketPCs as well. The Wireless Dynamics SDID reader comes in a SD memory card form factor.
SDID RFID Reader for PocketPCs
SDID RFID Reader for PocketPCs
Wednesday’s Keynote
Jonathan Baker began the Wednesday keynote and introduced the three points that would be discussed:
PowerBuilder: Believes in .Net
J2EE: Tomorrow has arrived
Mobile: The future is now
PowerBuilder: Believes in .Net
J2EE: Tomorrow has arrived
Mobile: The future is now
Tuesday, August 23, 2005
Tuesday’s Incidentals
I really do like the way they did the Conference Program Guide this year. Rather than a hard binding like it's been in previous years, this year's is a three ring bound version in the portfolio provided upon registration. So when you get additional materials (such as the daily NewsWave) you simply include it in the three ring binder.
The Pocket Guide actually came in the binder as well, you simply folded it up. I must admit it wasn't entirely obvious it was there though. Yes, there was an index tab that said "Pocket Guide", but it was fairly well down in the Program Guide so I didn't get to it until today.
What I didn't particularly like was the map of the conference center (or rather, the lack thereof). Only one floor of the four floors was actually mapped out. And the keynotes and lunches were held in the event center, which is a bit of a hike from the conference center. (Between the heat and the length of the walk, it kind of reminded me of previous conferences in DisneyWorld.) And there was no map provided in the conference materials for the entire hotel (so we could see how to get to the event center). There are maps scattered throughout the hotel as well as direction signs, but they're not always that helpful. They say that "all roads lead to Rome" but what I tended to find was that "all roads lead back to the casino". I lost track of the number of times I got lost in the maze of the first floor of the hotel in the first couple of days here.
I have to complain about something somewhat related. The main reason I'm checking the Program Guide is to find where the sessions are. Perhaps the information wasn't available when I originally registered, but it certainly wasn't made available in the "add to Outlook" options that were you scheduled your sessions online. I took advantage of that option, and then synched with my SmartPhone so I would only need to carry that around. Ian's PocketBuilder app for tracking the sessions is great, but I really only wanted to handle it in Pocket Outlook.
That's really an issue for the third-party that handles the registrations for Sybase. If they do decide to fix that for future conferences, they could also improve on the "add to Outlook" feature in another way. Once I had my schedule complete, I had to perform the "add to Outlook" operation individually for each session. There has to be some way to implement that in a batch process so that my entire schedule is added at once.
Some kudos to the hotel though. Unlike the Gaylord Palms, the meeting rooms here are well marked. It was generally pretty easy to find my sessions, even without a decent map in the Program Guide. Also, as with the last two conferences in the Gaylord Palms, there is a WiFi hot spot in the conference center and high-speed connections in the hotel rooms. The email kiosks are back again this year as well.
And, as opposed to the Gaylord Palms, there are plenty of other places to go within walking distance. You aren't trapped in the hotel if you don't have a car handy. On the other hand, the few times I usually come to Las Vegas is in winter, when the temperatures are reasonable. So although there are lots of places to go within walking distance, I'm not doing too much walking outside in Las Vegas in late August when it's 102 degrees.
The Pocket Guide actually came in the binder as well, you simply folded it up. I must admit it wasn't entirely obvious it was there though. Yes, there was an index tab that said "Pocket Guide", but it was fairly well down in the Program Guide so I didn't get to it until today.
What I didn't particularly like was the map of the conference center (or rather, the lack thereof). Only one floor of the four floors was actually mapped out. And the keynotes and lunches were held in the event center, which is a bit of a hike from the conference center. (Between the heat and the length of the walk, it kind of reminded me of previous conferences in DisneyWorld.) And there was no map provided in the conference materials for the entire hotel (so we could see how to get to the event center). There are maps scattered throughout the hotel as well as direction signs, but they're not always that helpful. They say that "all roads lead to Rome" but what I tended to find was that "all roads lead back to the casino". I lost track of the number of times I got lost in the maze of the first floor of the hotel in the first couple of days here.
I have to complain about something somewhat related. The main reason I'm checking the Program Guide is to find where the sessions are. Perhaps the information wasn't available when I originally registered, but it certainly wasn't made available in the "add to Outlook" options that were you scheduled your sessions online. I took advantage of that option, and then synched with my SmartPhone so I would only need to carry that around. Ian's PocketBuilder app for tracking the sessions is great, but I really only wanted to handle it in Pocket Outlook.
That's really an issue for the third-party that handles the registrations for Sybase. If they do decide to fix that for future conferences, they could also improve on the "add to Outlook" feature in another way. Once I had my schedule complete, I had to perform the "add to Outlook" operation individually for each session. There has to be some way to implement that in a batch process so that my entire schedule is added at once.
Some kudos to the hotel though. Unlike the Gaylord Palms, the meeting rooms here are well marked. It was generally pretty easy to find my sessions, even without a decent map in the Program Guide. Also, as with the last two conferences in the Gaylord Palms, there is a WiFi hot spot in the conference center and high-speed connections in the hotel rooms. The email kiosks are back again this year as well.
And, as opposed to the Gaylord Palms, there are plenty of other places to go within walking distance. You aren't trapped in the hotel if you don't have a car handy. On the other hand, the few times I usually come to Las Vegas is in winter, when the temperatures are reasonable. So although there are lots of places to go within walking distance, I'm not doing too much walking outside in Las Vegas in late August when it's 102 degrees.
Tuesday’s Sessions
I attended Dave Dichman's "PowerDesigner Futures" session first. He discussed the following upcoming features:
Tuesday’s Keynote
Tuesday's keynote was incredible! As you're walking into the event center where keynotes are, you're met by "demonstrators" who are demanding that the secrets about "Area 15" be made know. They were handing out "National Enquirer" style newsletters that included articles about Raj Nathan being abducted by aliens, Tom Traubitz being mistakenly launched into outer space, and even an update on the whereabouts of Mitchell Kertzman. And then you found a green light stick on your seat in the center.
Later, MIB agents arrived in what appeared to be a Hummer and took position on the stage. Then the aliens beamed down Raj Nathan in their midst so he could deliver his keynote.
Later, MIB agents arrived in what appeared to be a Hummer and took position on the stage. Then the aliens beamed down Raj Nathan in their midst so he could deliver his keynote.
Monday, August 22, 2005
Monday’s Incidentals
It took me a while to discover Cypress Street Marketplace, about the only place within Caesers Palace that you can get a meal at a decent price. It's like a bit better quality version of the food court you would find in most major shopping malls. It's also got the Java Joint, which I visit regularly. As with last year's conference, the coffee served with the conference supplied meals is mediocre and the cups are hardly large enough for a coffee addict like me.
Speaking of lunches, the ones served at the conference are typical. Rather small and not a whole lot of choices. Still, I don't have it near as bad as folks like Steve Katz. Steve (and a number of other conference attendees) are Orthodox Jews. Steve was sitting next to me when they delivered his kosher meal. It looked like a rather old airline meal. I loaned Steve my van (I drove to the conference) so he could run out and get a real meal.
Breakfast is pretty much the same high-carb stuff, although there were yogurts and fruits available.
The Sybase reception Sunday night and the sponsor reception Monday night had great food, but either not enough or it wasn't coming fast enough. Often the tables were empty for a while, followed by a rush and a long line when it was finally replenished.
Speaking of lunches, the ones served at the conference are typical. Rather small and not a whole lot of choices. Still, I don't have it near as bad as folks like Steve Katz. Steve (and a number of other conference attendees) are Orthodox Jews. Steve was sitting next to me when they delivered his kosher meal. It looked like a rather old airline meal. I loaned Steve my van (I drove to the conference) so he could run out and get a real meal.
Breakfast is pretty much the same high-carb stuff, although there were yogurts and fruits available.
The Sybase reception Sunday night and the sponsor reception Monday night had great food, but either not enough or it wasn't coming fast enough. Often the tables were empty for a while, followed by a rush and a long line when it was finally replenished.
Monday’s Sessions
I didn't make my AM session (Modeling with PowerDesigner 11) because I was making last minute changes to the presentation for my own session in the afternoon.
I did manange to catch most of Dave Fish's afternoon session "Up Close with PowerBuilder 10.5". There was quite a lot of feedback on the new features being developed. I was somewhat concerned about the few number of audience members that we actually participating the in the beta. The more people that participate, and the sooner they get involved and provide feedback, the better the end result will be.
Then came my own session "SOA with PowerBuilder/EAServer". It was well attended (I had one of the smaller rooms, but it was full) and from the people I talked to later it seems to have gone over well.
I did manange to catch most of Dave Fish's afternoon session "Up Close with PowerBuilder 10.5". There was quite a lot of feedback on the new features being developed. I was somewhat concerned about the few number of audience members that we actually participating the in the beta. The more people that participate, and the sooner they get involved and provide feedback, the better the end result will be.
Then came my own session "SOA with PowerBuilder/EAServer". It was well attended (I had one of the smaller rooms, but it was full) and from the people I talked to later it seems to have gone over well.
Monday’s Opening Keynote
TechWave was opened this year by the illusionist Rick Thomas. His grand finale illusion involved a number of volunteers from the audience.
John Chen indicated that this year's TechWave set recent records for attendance (1500) and sponsors.
John Chen indicated that this year's TechWave set recent records for attendance (1500) and sponsors.
Sunday, August 21, 2005
So much for the gameshow…
We (TeamSybase) got our clocks cleaned by the Sybase folks. We thought we might have a chance with categories like Sun, HP, Oracle, Big Blue, etc. Turns out Sun was about the solar system, HP was about Harry Potter, Oracle about the Matrix and Big Blue about the ocean.
The audience seemed to enjoy it, particularly those that won prizes. For our own efforts, we received rubber chickens....
The audience seemed to enjoy it, particularly those that won prizes. For our own efforts, we received rubber chickens....
Sunday, August 14, 2005
Test your Sybase Knowledge Gameshow
Pompeian Ballroom in the Palace Tower around 3:30 on Sunday the 21st.
Four TeamSybase members (Millard Brown, Terry Voth, Mike Nicewarner and myself) will do battle against a team from Sybase employees. Each team will take turns answering multiple choice questions off a Jeopardy style game board. The questions will be about 50% Sybase engineering related and the rest from other walks of life. There will be two rounds with a tie-breaker question just in case.
The audience will have handhelds and play along. They will have a chance to win some cool prizes (30 GB iPods, PSP's and Optic Nerve Sunglasses are up for grabs) at the end of each round (so to the audience it is really two games).
Jonathan Baker (Sybase) is the emcee and "impartial" judge
Four TeamSybase members (Millard Brown, Terry Voth, Mike Nicewarner and myself) will do battle against a team from Sybase employees. Each team will take turns answering multiple choice questions off a Jeopardy style game board. The questions will be about 50% Sybase engineering related and the rest from other walks of life. There will be two rounds with a tie-breaker question just in case.
The audience will have handhelds and play along. They will have a chance to win some cool prizes (30 GB iPods, PSP's and Optic Nerve Sunglasses are up for grabs) at the end of each round (so to the audience it is really two games).
Jonathan Baker (Sybase) is the emcee and "impartial" judge
Friday, August 05, 2005
Track historical Amazon rankings
Something you may not be interested in unless you're an author, but it's possible to use the Amazon web services API to track the ranking of items on Amazon over time. The folks at TitleZ have made their implementation of it available. The following is the report for the PowerBuilder 9 books from SAMS.
Tuesday, May 17, 2005
Problems with Word after installing PD 11
In case anybody else has run into this, this is from a newsgroup posting from "Seth S." about how to overcome issues with Word after PD11 is installed. The problem is that Word loads the PowerDesigner plug-in by default (everytime you use Word), not just when PowerDesigner needs it. For me it's been a real issue because I use Word as the editor for Outlook, so it keeps getting loaded when I'm in Outlook as well.
One minor correction. That key shows up for me under HKEY_CURRENT_USER, not HKEY_LOCAL_MACHINE as the newsgroup post indicated.
===================================================================
The workaround is to change the LoadBehavior of the DLL in Word
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftOfficeWordAddinsWordToRqm11.Connect]
"LoadBehavior"=dword:00000002
LoadBehavior should be set to '3' and you must set it to '2'. After that Ms Word will not load the DLL anymore.
NOTE: The add-in remains listed in the Global Template and Add-in box and the contextual menu named 'requirements' is still on the menu. These things will be address in the cr 376227.
===================================================================
One minor correction. That key shows up for me under HKEY_CURRENT_USER, not HKEY_LOCAL_MACHINE as the newsgroup post indicated.
===================================================================
The workaround is to change the LoadBehavior of the DLL in Word
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftOfficeWordAddinsWordToRqm11.Connect]
"LoadBehavior"=dword:00000002
LoadBehavior should be set to '3' and you must set it to '2'. After that Ms Word will not load the DLL anymore.
NOTE: The add-in remains listed in the Global Template and Add-in box and the contextual menu named 'requirements' is still on the menu. These things will be address in the cr 376227.
===================================================================
Monday, May 02, 2005
Must have improvements for the next version of PowerBuilder
A while back I took the new features I had suggested in my PBDJ editorial from last year, all the input from last TechWave's enhancement section discussion and all of the suggestions from a long thread a while back in the future_directions forum and I entered them into the ISUG enhancement request system.
Sunday, May 01, 2005
Dynamically creating an Access database
Even need to export data in an Access database format? It may be a little easier than you think, or even the way you're currently doing it.
Two things to consider:
1. You can dynamically create a Access database file without having Access on the system.
2. You can connect to that database and write data to it without ever creating ODBC entries for it.
The first item is possible because the Microsoft Data Access Components, which are installed as part of the operating system on most recent Microsoft operating systems, allow you to perform a number of database operations through OLE Automation. The actually implemention looks something like this:
oleobject l_adocatalog
string ls_database = "c:asaexport.mdb"
l_adocatalog = CREATE oleobject
l_adocatalog.ConnectToNewObject ( "ADOX.Catalog" )
l_adocatalog.Create ( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ls_database )
l_adocatalog.DisconnectObject()
Destroy l_adocatalog
Of course, you would add some appropriate error checking and wrap most of the calls in a try/catch block to allow gracefully recovery from any OLE Automation errors.
The second item is accomplished through something called a "DNSless Connection". That is, rather than create an ODBC entry and point to that in the ODBC ConnectString, we simply give the ODBC drivers everything they need to get connected directly in the ConnectString. In the case of Access, all we need to do it tell it the Driver we want to use and where the file is located in the DBQ paramater, as well as the uid and pwd we would use for any typical ODBC ConnectString:
SQLCA.DBMS = 'ODB'
SQLCA.DBParm = "ConnectString='Driver={Microsoft Access Driver (*.mdb)};Dbq=" + ls_database + ";Uid=admin;Pwd='"
I've put this all together in a little sample app on CodeXchange that creates an Access data file dynamically and the pipelines data from the ASA sample database to that new Access data file.
Two things to consider:
1. You can dynamically create a Access database file without having Access on the system.
2. You can connect to that database and write data to it without ever creating ODBC entries for it.
The first item is possible because the Microsoft Data Access Components, which are installed as part of the operating system on most recent Microsoft operating systems, allow you to perform a number of database operations through OLE Automation. The actually implemention looks something like this:
oleobject l_adocatalog
string ls_database = "c:asaexport.mdb"
l_adocatalog = CREATE oleobject
l_adocatalog.ConnectToNewObject ( "ADOX.Catalog" )
l_adocatalog.Create ( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ls_database )
l_adocatalog.DisconnectObject()
Destroy l_adocatalog
Of course, you would add some appropriate error checking and wrap most of the calls in a try/catch block to allow gracefully recovery from any OLE Automation errors.
The second item is accomplished through something called a "DNSless Connection". That is, rather than create an ODBC entry and point to that in the ODBC ConnectString, we simply give the ODBC drivers everything they need to get connected directly in the ConnectString. In the case of Access, all we need to do it tell it the Driver we want to use and where the file is located in the DBQ paramater, as well as the uid and pwd we would use for any typical ODBC ConnectString:
SQLCA.DBMS = 'ODB'
SQLCA.DBParm = "ConnectString='Driver={Microsoft Access Driver (*.mdb)};Dbq=" + ls_database + ";Uid=admin;Pwd='"
I've put this all together in a little sample app on CodeXchange that creates an Access data file dynamically and the pipelines data from the ASA sample database to that new Access data file.
Saturday, April 30, 2005
Cleaning up the Recent Workspaces list
You know that option in PowerBuilder under Tools -> Options -> Workspaces, the command button marked "Clean Up"? It scans the registry and automatically removes references to workspaces and targets that are no longer available.
What drives me nuts is that is that the one thing that option doesn't to is clean up the File -> Recent Workspaces list. That's something I use quite frequenty, and I wish the Clean Up option would address it too.
What drives me nuts is that is that the one thing that option doesn't to is clean up the File -> Recent Workspaces list. That's something I use quite frequenty, and I wish the Clean Up option would address it too.
Sunday, April 17, 2005
Ajax versus Smart Clients…
Back in December of 2004, I commented in my editorial in the PowerBuilder Developer's Journal (PBDJ) about the advent of Smart Clients and how they would give us the benefits of standard client/server applications and internet applications without the downsides of either.
A couple of months later, in February of 2005, we published an article by Rahul Jain about the use of XMLHTTPRequest to develop more rich client internet applications.
Well, it appears that the XMLHTTPRequest approach is gaining some ground. It and other standard technologies like CSS and DOM, are being used in combination in a methodology called Ajax that is delivering some of the same promises that Smart Clients are supposed to bring. If you've seen Google's mail service (Gmail) or Google Maps, you've seen just what it can do.
Of course, the new beta version of Google Groups is also based on that technology. But I don't think that should reflect poorly on Ajax. It just means that even the best technology can be applied poorly. (As you might infer, I'm not particularly impressed wth the latest version of Google Groups.)
A couple of months later, in February of 2005, we published an article by Rahul Jain about the use of XMLHTTPRequest to develop more rich client internet applications.
Well, it appears that the XMLHTTPRequest approach is gaining some ground. It and other standard technologies like CSS and DOM, are being used in combination in a methodology called Ajax that is delivering some of the same promises that Smart Clients are supposed to bring. If you've seen Google's mail service (Gmail) or Google Maps, you've seen just what it can do.
Of course, the new beta version of Google Groups is also based on that technology. But I don't think that should reflect poorly on Ajax. It just means that even the best technology can be applied poorly. (As you might infer, I'm not particularly impressed wth the latest version of Google Groups.)
Saturday, April 16, 2005
Wither VB?
In case you haven't been following, there is an online petition to Microsoft to keep classic Visual Basic alive. So far, they have over 5,000 signatures (including 241 Microsoft MVPs). I have a mixed reaction to this. On one hand, I believe it's a sign that RAD client/server development is alive and well. On the other hand, I'd like to see those frustrated VB developers become PB developers instead.
Thursday, April 14, 2005
How do you deploy an ASP.NET application to a non default web site?
Well, it's a bit tricky, at least until VS 2005 arrives. Until then, take a look at Microsoft Tech Note 821335. It comes with a new version of DCPA.DLL, and a JavaScript file called EnableHostHeaders.js.
What to do with that though? Well, to make it simplier for me, I created a quick and dirty VS Add in. It's pretty simple. Just use the Add In Wizard. Then add a form to the project and code a button on it to allow you to select the MSI file:
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "MSI files (*.msi)|*.msi|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 1 ;
openFileDialog1.RestoreDirectory = true ;
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
msifile = openFileDialog1.FileName ;
textBox1.Text = msifile ;
bOK.Enabled = true ;
}
Then add another button that uses Process.Start to run the EnableHostHeaders file on the MSI file:
System.Diagnostics.Process.Start(
""c:program filesteamsybaseenablehostheadersEnableHostHeaders.js"", """ + msifile + """) ;
this.Close() ;
Finally, go back to the add in class and in the Exec function simply display the form:
EnableHostHeadersForm myForm = new EnableHostHeadersForm() ;
myForm.Show();
The add in wizard automatically creates a setup project as well. Compile the entire solution, then exit VS.Net and run the setup program outside of VS.Net. If you run the setup from within VS.Net, the changes to the Tools menu aren't saved.
From now on, after compiling your setup project for an ASP.Net project you simply run the add in on the resulting MSI file. When the setup is run now, it will display a DDLB that allows you to select the web site on the server to install to.
What to do with that though? Well, to make it simplier for me, I created a quick and dirty VS Add in. It's pretty simple. Just use the Add In Wizard. Then add a form to the project and code a button on it to allow you to select the MSI file:
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "MSI files (*.msi)|*.msi|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 1 ;
openFileDialog1.RestoreDirectory = true ;
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
msifile = openFileDialog1.FileName ;
textBox1.Text = msifile ;
bOK.Enabled = true ;
}
Then add another button that uses Process.Start to run the EnableHostHeaders file on the MSI file:
System.Diagnostics.Process.Start(
""c:program filesteamsybaseenablehostheadersEnableHostHeaders.js"", """ + msifile + """) ;
this.Close() ;
Finally, go back to the add in class and in the Exec function simply display the form:
EnableHostHeadersForm myForm = new EnableHostHeadersForm() ;
myForm.Show();
The add in wizard automatically creates a setup project as well. Compile the entire solution, then exit VS.Net and run the setup program outside of VS.Net. If you run the setup from within VS.Net, the changes to the Tools menu aren't saved.
From now on, after compiling your setup project for an ASP.Net project you simply run the add in on the resulting MSI file. When the setup is run now, it will display a DDLB that allows you to select the web site on the server to install to.
Wednesday, April 13, 2005
Just found my next PDA…
The OQO. Unfortunately, it's based on the Transmeta Crusoe. That's the chip that HP originally used for their Tablet PC before switching to the Intel Pentium M. It's also the chip that the vendor is no longer producing.
An update. There are some other manufacturers in the same space including FlipStart and some indication that Microsoft is also working with an undisclosed OEM to provide something similar.
An update. There are some other manufacturers in the same space including FlipStart and some indication that Microsoft is also working with an undisclosed OEM to provide something similar.
Tuesday, March 22, 2005
Multiple file types in GetFileOpenName
Ever notice how the File Open dialog in some applications (including the PowerBuilder IDE) show multiple file types in a single line in the drop-down list box? Ever wonder how you could do it from PowerBuilder? Well, if you look at the documenation for the OpenFileName structure that is the argument for the native GetOpenFileName function in the Windows API, you'll notice the following statement about it's lpstrFilter attribute:
"To specify multiple filter patterns for a single display string, use a semicolon to separate the patterns (for example, "*.TXT;*.DOC;*.BAK")."
Well, it's not documented, but that works for the filter argument for the PowerScript GetFileOpenName function as well. Try setting the filter to something like:
"Graphic Files (*.bmp;*.gif;*.jpg;*.jpeg),*.bmp;*.gif;*.jpg;*.jpeg"
And you'll see that not only does the dialog show that line in the DDLB, but it also shows all the files that match any of those file types.
"To specify multiple filter patterns for a single display string, use a semicolon to separate the patterns (for example, "*.TXT;*.DOC;*.BAK")."
Well, it's not documented, but that works for the filter argument for the PowerScript GetFileOpenName function as well. Try setting the filter to something like:
"Graphic Files (*.bmp;*.gif;*.jpg;*.jpeg),*.bmp;*.gif;*.jpg;*.jpeg"
And you'll see that not only does the dialog show that line in the DDLB, but it also shows all the files that match any of those file types.
Still more useful utilities…
If you're trying to work with external functions in DLL and want to make sure you have the name and case of the function name correct, InspectExe is quite useful for viewing all of the exports from an EXE, DLL or OCX. The utility adds several panes onto the properties dialog in Windows Explorer.
If you're having trouble with a DLL, it may be because it has depenencies on other DDLs, and it's actually another DLL that is actually causing the problem. A real useful utility for resolving that is Dependency Walker. It adds a menu item to the right mouse popup menu in Windows Explorer that allows you to launch the program to process the selected DLL.
If you're having trouble with a DLL, it may be because it has depenencies on other DDLs, and it's actually another DLL that is actually causing the problem. A real useful utility for resolving that is Dependency Walker. It adds a menu item to the right mouse popup menu in Windows Explorer that allows you to launch the program to process the selected DLL.
Tuesday, February 15, 2005
XP text search broken…
Have you ever done a search for files containing specific text with Windows Explorer and have it return no results even though you know that the files are there? Well, if you're using XP, chances are the problem is that XP only returns results for files whose extensions have a "PersistentHandler" value in the registry. It's documented in a MS tech note on the issue.
Why do you care? Because the PowerBuilder source code extract files don't have such values, unless you create them. Fortunately, one of the MS MVPs has a utility that restores the typical "search all files" results one gets from the earlier operating systems.
Why do you care? Because the PowerBuilder source code extract files don't have such values, unless you create them. Fortunately, one of the MS MVPs has a utility that restores the typical "search all files" results one gets from the earlier operating systems.
Friday, February 04, 2005
A couple more useful (and free) utilities
The first is SCC Switcher. Not that changing your SCC provider is a big deal in PowerBuilder. But it is in other tools. Particularly if you're involved in community development work with a CVS respository like CodeXchange and also use a standard SCC provider for your day-to-day work, you may need to switch between providers for some of your other development tools. SCC Switcher allows you to do this from a mouseclick in the task bar.
The other is StampEm from KnowWare. Want to provide all of the files you're about to deploy with the same date/time stamp information? Since that's a popular thing to do, there are a number of utilities out there that do it, this is one good one.
One nice thing about both of these utilities is that the source code is available as well.
The other is StampEm from KnowWare. Want to provide all of the files you're about to deploy with the same date/time stamp information? Since that's a popular thing to do, there are a number of utilities out there that do it, this is one good one.
One nice thing about both of these utilities is that the source code is available as well.
Thursday, February 03, 2005
Readers’ Choice Awards
DataWindow.Net is a nominee in the .NET Developer's Journal 2004 Reader's Choice Awards, in the Best .NET Libraries and Controls category. Get your vote in now!
Move aside AutoScript
Check out PBIntelli. It's an add-in written in PBNI which is faster than AutoScript and more powerful. In the example below, it's showing the columns in the DataWindow object in the DataWindow control being referenced. It's what AutoScript should have been.
The text that is displayed is stored in a series of text files in the program directory, so you can customize it and extend it as needed.
The text that is displayed is stored in a series of text files in the program directory, so you can customize it and extend it as needed.
Blog Mirroring
I'm mirroring this blog over on bruce.pbdjmagazine.com. Turns out, that's not exactly a complicated process. The JavaScript RSS Box Viewer allows me to do it with a simple line of JavaScript. It's useful if you just want to set up a sidebar to your blog entries (or someone else's) but it works great for mirroring as well.
Wednesday, February 02, 2005
Eating your own dog food
You might remember from my TechWave 2004 notes, "eating your own dog food" is my favorite means of describing a company opening using its own products in its public interface to their customers (e.g., their web site). If a company expects their customers to put faith in the utility and stability of the product, they should be showing that same confidence in the product themselves.
Well, we have another excellent example of Sybase doing that. Are you familiar with the search engine on Sybase? No, not that search engine! That was the old one that ran slowly and gave you useless results. Well, Sybase recently replaced that with a search engine built on EAServer accessing data stored in Adaptive Server Enterprise (which, incidentally, is the same technology combination I used for the newsgroup search engine on teamsybase.com, but I digress...). The end result is search results that come back quickly and are actually highly relavent. Perhaps Sybase could sell the solution to Microsoft's MSDN site, which could certainly use it.
Well, we have another excellent example of Sybase doing that. Are you familiar with the search engine on Sybase? No, not that search engine! That was the old one that ran slowly and gave you useless results. Well, Sybase recently replaced that with a search engine built on EAServer accessing data stored in Adaptive Server Enterprise (which, incidentally, is the same technology combination I used for the newsgroup search engine on teamsybase.com, but I digress...). The end result is search results that come back quickly and are actually highly relavent. Perhaps Sybase could sell the solution to Microsoft's MSDN site, which could certainly use it.
SmartPhone review
The folks at eWeek just did a review of the Motorola MPX220 that I was so hot for a while back (they also reviewed one Palm and one Blackberry device).
One interesting note from their review was the following: "we'd love to see smart-phone hardware and software vendors license SureType from RIM for inclusion in their products—the technology represents one of the best new ideas in mobile device input that we've seen in some time."
As I indicated in my last comments on the SmartPhone platform, the key hurdle is user input. It sounds like Blackberry has come up with an advance in that area. Most phones use the same letter to number key assignment as a house phone, which requires anywhere from two to four keypresses to obtain a single correct letter. The Blackberry keyboard uses a standard QWERTY typewriter layout, with only one or two letters assigned to each key. That makes it much easier for the predictive software to guess which letter you are trying to type.
By the way, I also mentioned in that last article that the Audiovox SMT5600 I'm now using and the Motorola MPX220 both use the mini-SD card rather than a standard sized SD memory card. Well, if you're as unfamiliar as I was with the mini-SD card at that time, you may not realize that the mini-SD card comes with an adapter that will allow it to work in a standard SD slot. Pretty slick.
One interesting note from their review was the following: "we'd love to see smart-phone hardware and software vendors license SureType from RIM for inclusion in their products—the technology represents one of the best new ideas in mobile device input that we've seen in some time."
As I indicated in my last comments on the SmartPhone platform, the key hurdle is user input. It sounds like Blackberry has come up with an advance in that area. Most phones use the same letter to number key assignment as a house phone, which requires anywhere from two to four keypresses to obtain a single correct letter. The Blackberry keyboard uses a standard QWERTY typewriter layout, with only one or two letters assigned to each key. That makes it much easier for the predictive software to guess which letter you are trying to type.
By the way, I also mentioned in that last article that the Audiovox SMT5600 I'm now using and the Motorola MPX220 both use the mini-SD card rather than a standard sized SD memory card. Well, if you're as unfamiliar as I was with the mini-SD card at that time, you may not realize that the mini-SD card comes with an adapter that will allow it to work in a standard SD slot. Pretty slick.
PowerBuilder Use Survey Results
The results of the latest poll by Novalys on PowerBuilder use are in. The results are good. A lot of people are still using PowerBuilder and intend to continue to do so for some time. An increasing number of those are using PowerBuilder to do new development work, rather than simply maintaining existing applications. The number of developers on a particular project has increased over previous years.
What I found particularly interesting is that the majority of people are using PowerBuilder versions 8 and 9. Only slightly over 1% of the respondents indicating they were using version 10. Perhaps Unicode support was not as important as was first thought. Hopefully, version 11 will offer some more compelling reasons to migrate. Note that one-half the respondents indicated they will upgrade in the next year, so that may indicate people moving to version 10, just not that quickly.
What I found particularly interesting is that the majority of people are using PowerBuilder versions 8 and 9. Only slightly over 1% of the respondents indicating they were using version 10. Perhaps Unicode support was not as important as was first thought. Hopefully, version 11 will offer some more compelling reasons to migrate. Note that one-half the respondents indicated they will upgrade in the next year, so that may indicate people moving to version 10, just not that quickly.
Monday, January 31, 2005
Web Services Changes
The W3C and OASIS have a number of new standards for web services. The one of particular interest to PowerBuilder developers will be XOP (XML-binary Optimized Packaging), a standard means of transmitting binary data via XML. The others MTOM (Message Transformation Optimization Mechanism) and RRSHB (Resource Representation SOAP Header Block) are more under-the-covers implementations to improve performance. Unfortunately, the other key headache for web services developers is security, and those bodies are only starting to develop a common consensus on a new standard in that area.
Wednesday, January 19, 2005
Blue Marble
If you're into Geographical Information Systems, you might want to take a look at Blue Marble. They just announced a free evaluation version of their toolkit which "will allow developers to embed sophisticated image reprojection and tiling in their applications in a matter of minutes with just a few function calls."
Microsoft MVP program…
Rumors that Microsoft was going to do away with their MVP program (essentially the equivalent of TeamSybase) have been put to rest. Actually, their program is just a bit bigger. There are 30 TeamSybase members, and there are something like 2,600 Microsoft MVPs. Part of what was haunting the MVP program is their recent rapid growth: 3 years ago there were only 600 MVPs.
The MVP program was patterned after TeamSybase (actually TeamPowersoft at the time). Microsoft hosted a meeting with a number of TeamPowersoft members shortly before they launched their program. Can't take too much credit though, TeamSybase was patterned after Borland's TeamB, which has been around quite a bit longer. One big difference with the MVP program is that the memberships are only good for one year, you have to keep being re-selected. TeamSybase (and TeamB) membership is continuous provided that you continue to meet program requirements. For a glimpse of the early days of the MVP program, you might check out the following article on one of the first MVP summits.
The MVP program was patterned after TeamSybase (actually TeamPowersoft at the time). Microsoft hosted a meeting with a number of TeamPowersoft members shortly before they launched their program. Can't take too much credit though, TeamSybase was patterned after Borland's TeamB, which has been around quite a bit longer. One big difference with the MVP program is that the memberships are only good for one year, you have to keep being re-selected. TeamSybase (and TeamB) membership is continuous provided that you continue to meet program requirements. For a glimpse of the early days of the MVP program, you might check out the following article on one of the first MVP summits.
Friday, January 14, 2005
Further SmartPhone Adventures…
A while back I wrote about why I had switched from an iPAQ PocketPC to a Motorola SmartPhone, and how I was excited about the introduction of SmartPhone support in version 2.0 of PocketBuilder (formerly Pocket PowerBuilder). At the time, I was looking forward to upgrading from a Motorola MPx200 to an MPx220.
Subscribe to:
Posts (Atom)