PowerTimes 6/6 - Nov

Transcription

PowerTimes 6/6 - Nov
JOURNAL FOR PEOPLE INTERESTED IN CLIENT/SERVER AND INTERNET
APPLICATION DEVELOPMENT WITH THE SYBASE TOOLSET
NOVEMBER /DECEMBER 1999
PRICE: US$ 7.50
VOL. 6 / ISSUE 6
Contents
Guest Editorial: DevelopIT
by Warren Clayburn, Chairman UK PBUG
Impressum
on Page 2
Head to Head: PowerDesigner vs. ERwin
by Michael Nicewarner on Page 4
PFC Place: Date Standards
by Boris Gasin on Page 12
COM Knowledge:Component Futures
DEVELOP IT
by Alan J. Walsh on Page 17
Guest Editorial by Warren Clayburn
Internet Aware: How to make your PB application more powerful
If you have not yet heard about DevelopIT, we would like
to extend an invitation to you and tell you a little more
about the event.
by Roy Kiesler and Reed Shilts on Page 21
Useful Tools: Creating ActiveX Components
with JazzAge
DevelopIT is a European User Conference and Exhibition
which will take place on the 20 & 21 March in London.
With an agenda put together by the European PBUG’s &
SUG’s, DevelopIT will be a learning environment with a
multi-tracked agenda, which will provide you with excellent technical presentations from well known independent
speakers and Sybase Technical Evangelists. The event is
supported by Sybase and will be the only European conference in 2000.
by Martin Rothenberger on Page 25
Book Review: Jaguar Development with
PowerBuilder from Michael Barlotta
reviewed by Boris Gasin on Page 30
Little Helpers of the Year Award 1999
by Arthur Hefti on Page 31
Four of the Open Tool tracks have been devised to give
you a full life cycle experience on:
• Web development
• Client/Server development
• Distributed component development
• Java development
Little Helpers: VersionEdit by E. Crane
Computing
reviewed by Arthur Hefti on Page 33
User Group Section
on Page 35
http://www.powertimes.com
The fifth Open Tool track will have an assortment of miscellaneous topics and running alongside will be two DBA
tracks and a Mobile Computing track.
We hope there will be plenty to offer to anyone who is
developing with Sybase technology and a unique opporContinued on page 2
Page 1
tunity for the users from Europe to join together for the
first independent user event.
Booking information and full programme details will be
available on the www.pbug.co.uk Web site later in December. We will be sending letters and mailers to each
country President for circulation in early January and the
UK members will receive their usual mailings and booking form 8 weeks before the event.
We look forward to welcoming you to the UK and meeting you at DevelopIT.
Impressum
PowerTimes is an international PowerBuilder Journal published 6 times a year mainly destined to PB User Groups
worldwide. If your User Group does not subscribe to
PowerTimes and you would like to receive it, then you can
subscribe to it on an individual basis.
Contact addresses:
Editor:
Rolf André Klaedtke
Bächlistrasse 21
CH-8280 Kreuzlingen / Switzerland
Fax: ++41 - (0)71 - 670 01 71
e-mail: [email protected]
Co-Editor:
Mark A. Lansing
Eichmatt 17
CH-6343 Rotkreuz / Switzerland
Fax: ++41 - (0)41 - 790 74 79
e-mail: [email protected]
Warren Clayburn
Chairman UK PBUG
On the web: http://www.powertimes.com
Column responsibles:
Little Helpers:
Arthur Hefti
[email protected]
PFC Place:
Boris Gasin
[email protected]
Know How:
Bernie Metzger
[email protected]
As we’re approaching the last day of the year 1999, we
would like to thank all our authors who have spent many
hours of their time to write for PowerTimes. Our thanks
also go to you, the readers, for your interest and support
and to our advertisers, who help to make it possible.
Distributed Ways:
Sean Flynn
[email protected]
COM Knowledge
Alan Walsh
[email protected]
As the founder and publisher of PowerTimes, I would like
to especially mention my partner and friend, Mark Lansing
and his lovely wife, Evelyn Lansing, and their kids, Ryan
and Chiara. Mark dedicates a lot of time to make
PowerTimes a real thing.
EASy Does IT
William B. Heys
[email protected]
Yes, it’s that time of the year again, where Arthur awards
the Little Helper of the Year to the best product that he has
reviewed during the past months. He also gives an overview and an update of all the products reviewed.
Thanks, Mark for your incredible work and friendship and
Evelyn for your patience with us two guys !
Rolf André Klaedtke
Subscription rates:
Individual:
User Group:
US$ 45 per year
US$ 750 per year
For user group subscriptions, the group has the right to
distribute PowerTimes to their members in an electronic or
printed form at no extra charge ! PowerTimes is produced
as an electronic document in Adobe Acrobat format.
Disclaimer:
Articles or opinions published in PowerTimes do not necessarily
reflect the opinion of the editorial team. They reflect the opinion
of the submitter. We assume that the copyright of all submitted
articles is owned by or granted to the submitter. We must decline
every responsability regarding technical correctness or truth of
submitted articles and opinions.
Page 2
We from PowerTimes
would like to wish all our
authors, readers, and advertisers good health and
success for the coming
year.
Mark Lansing
Thank you for your support
of and interest in
PowerTimes !
Rolf André Klaedtke
Page 3
P OWERDESIGNER VS. ERWIN
by Michael Nicewarner
Introduction
The purpose of this article is to compare PowerDesigner
against ERwin at a very detailed technical level. This will
cover process and data modeling functionality as well as
overall tool stability and performance.
Philosophy
There is a considerable difference in the basic philosophy
behind the two tools. PowerDesigner uses a conceptualphysical methodology while ERwin uses logical-physical.
Conceptual data models (CDM) are a level of abstraction
above logical data models (LDM), and are completely
separate from the physical data model (PDM). Entities in
a CDM are business “things” that are important enough to
describe. The relationships are also at a business level.
Attributes describe the entities in business language. All
of this is intended to communicate at the business user’s
point of view without getting confused with database implementation issues like indexing and foreign keys. The
LDM is closer to the database, being considered by most
to be a link between CDM and PDM. However, since
ERwin doesn’t allow a true CDM, it reduces the usefulness of the tool in communicating with the business user.
At the physical level, ERwin makes the modeler choose
between a standard PDM and a dimensional data model
(DDM), when in fact a DDM should be a completely separate idea. Specifically, a DDM gets its data from a set of
source PDMs, and needs to model the data transformations from the PDMs to the DDM. For instance, I could
have two PDMs, representing American and Canadian
subsidiaries. The structures are unique because of governmental requirements and have all prices in local currency.
To consolidate this into a data warehouse DDM, I would
need to convert the currencies in at least one of the PDMs
into a common currency. This happens with time zones
and many other measurements. With PowerDesigner this
is a simple structure to model while in ERwin it would be
impossible.
Figure 1 below shows that the differences are obvious and
fundamental.
History - PowerDesigner
PowerDesigner started life as S-Designor, which was written by Xiao Wang of SDP Technologies, a French company that was started in 1983. Powersoft purchased SDP
in 1995 and Sybase purchased Powersoft later that same
year. Sybase currently owns all rights to PowerDesigner.
The first commercial release of S-Designor (version 2.0)
in France was in 1989 and in the US in 1992.
ProcessAnalyst was added to the suite in 1996. The first
version of PowerDesigner (V6.0) was released in 1997.
WarehouseArchitect was added in 1997. The latest version of the PowerDesigner suite (version 6.1.4) was released in May of 1999.
History - ERwin
ERwin was created by Logic Works, which was founded
in 1988 by Professor Ben Cohen. Platinum purchased
Logic Works in 1998 and Computer Associates purchased
Platinum in ’99.
PowerDesigner
CDM
Loosely
connected
PDM
ERwin
Loosely
connected
DDM
PDM
LDM
Tightly
connected
Either, but not both
DDM
Figure 1, Tool Philosophy
Page 4
✂
GET YOUR WEB APPLICATIONS
ROLLING, WITHOUT ALL THOSE
PESKY IN - BETWEEN STEPS.
Introducing PowerBuilder 7.0 and Enterprise Application Server 3.0. Together,
they offer the fastest, easiest way to assemble, test, and deploy scalable, thinclient applications for the Web. You not only take advantage of a highly
productive development environment that leverages your existing skill sets
and technology. You’ll also deploy more scalable, more secure applications,
from Web to N-tier architectures. It all adds up to the most powerful way
to take your business to the Web. For details on EAServer and PowerBuilder,
call 1-800-8-SYBASE, or visit www.sybase.com/sdn.
©1999 Sybase, Inc. All rights reserved. All trademarks are the property of their respective owners.
Testing Environment
The first commercial version of ERwin was released in
1990. The latest version of ERwin (version 3.5.2) was released in May of 1999. The first version of BPwin was
released in 1994 and the current version (2.5) was released
in August of 1998.
Physical Attributes
The test machine is a 400 MHz PII system with 128MB of
memory and a 14GB drive. The system was rebooted between tests to verify the time-based results were accurate.
TaskInfo 98 was used to get the memory sizing information.
Time to Load from DDL
Both tools are enterprise-level modeling tools, so most
variances in performance and graphics are actually fairly
minor. The following sections compare the tools against
one another with respect to the physical implementation
of their respective model management techniques.
Minimum System Requirements
OS
PowerDesigner
ERwin/BPwin
Win 3.x
80486 processor
8 MB RAM
VGA monitor
CD-ROM drive
14MB disk space
Does not support
16bit operating
systems
Win 95, 80486 processor
98, NT 12 MB RAM
VGA monitor
CD-ROM drive
14MB disk space
80486 processor
16 MB RAM
(32 MB RAM
recommended)
10MB disk space
A script with a specific number of tables was created, then
loaded (reverse engineered) into each tool using the default settings and a target DBMS of IBM DB2/MVS 4.0.
The results are that ERwin loads larger DDL scripts faster
than PowerDesigner.
Time to Save File
The resulting model from step one was immediately saved
as a new file and the elapsed time recorded. The results
are that PowerDesigner saves files faster than ERwin.
File Size
Once the file was saved, the size of the file was recorded.
The results were that PowerDesigner has much smaller
files than ERwin.
Time to Open File
After rebooting the machine, the file created in step two
was reloaded and the elapsed time recorded. The results
were that PowerDesigner loads the files much faster than
ERwin.
Table 1, Minimum system requirements
Raw Performance
Memory Footprint
In short, both tools use a proprietary file format
(PowerDesigner is text-based while ERwin supports both
text and binary) and can handle very large models easily.
There does seem to be a significant difference in both file
size and memory footprint between the tools, with
PowerDesigner using space far more efficiently. Base
memory for PowerDesigner without any model open was
10,904KB while ERwin was 22,696KB. ERwin’s models
were also almost twice the size of PowerDesigner’s models, but this is mainly due to the fact that ERwin stores
both the logical and physical information in the single file.
Although PowerDesigner was slower to reverse engineer
DDL, it was much faster at opening and closing the models.
Immediately after the file was loaded, the memory footprint of the data, excluding the code mentioned earlier was
recorded. The results were that PowerDesigner requires
less memory for the model than ERwin.
PowerDesigner
ERwin
Access method
File-based
File-based
File format
Proprietary text file Proprietary text or
binary file
Max. objects
per model
100 million
Limited by memory
& hard drive space
Base memory
footprint
Code 7.42 MB
Data 3.6 MB
Code 17.5 MB
Data 5.2 MB
Stability
Within the context of the performance tests, both tools
completed all tests with no system errors of any kind. However, it was apparent that ERwin had a tendency to have
graphic problems. These were mainly related to line redraws when dialog boxes were opened or the model was
moved on-screen. This behavior could be attributed to the
hardware configuration, but was tested on 3 different systems with the same results. The graphic problem was very
minor and may not even be noticed by most users.
When ODBC or other direct links were used to reverse or
forward engineer a database, there were typical
vulnerabilities to the third party software. However, the
Intersolv drivers shipped with PowerDesigner are considered extremely stable and, as in the case of the Oracle database, many vendors recommend using Intersolv drivers
rather than their own ODBC drivers.
Table 2, Performance data
Page 6
Features and Functionality
Basic performance is only one indicator in comparing design tools. The features a tool offers can balance many
performance problems, although the absence of certain features make even top performance irrelevant, since the desired function is either impossible or extremely difficult
to accomplish.
Supported Platforms
For clarification purposes, “support” means that the tool
can both create objects for and reverse engineer objects
from the specified database.
PowerDesigner supports the most database platforms.
However, ERwin does include the ability to directly connect to some databases, notably Sybase’s SQL Server via
dblib or ctlib. PowerDesigner ships with a full set of
Intersolv ODBC drivers while ERwin users must buy the
drivers separately.
Also, worth noting is that PowerDesigner uses “definition
files” to store most DBMS-specific information, so a user
can tailor a definition file for their own database and have
that appear on the list of databases automatically. ERwin’s
list of databases is coded into the application.
Supported Methodologies
The tools differ in their implementation of relational theory
so it is worthwhile to point out these differences in methodology and notation. ERwin is founded primarily in the
Integration Definition for Information Modeling set of
standards while PowerDesigner is based on the Information Engineering/Relational concept. Note that BPwin far
surpasses ProcessAnalyst in every way, being a fully functional process modeling tool. ProcessAnalyst, on the other
hand, is a data flow diagram tool with very limited functionality.
PowerDesigner
ProcessAnalyst
• Object Functional Model Notation (from the Object
Modeling Technique) *Note that this is notation
only.
• Yourdon/DeMarco
• Gane & Sarson
• Structured Systems Analysis and Design Method
(SSADM)
•
•
Information Engineering (IE)
DataArchitect Physical
• Relational
• COnference on DAta SYstems Languages
(CODASYL)
WarehouseArchitect
• Dimensional Modeling
Dimensional Modeling
ERwin
BPwin
•
•
•
IDEF0 (Integration DEFinition for Infor-mation
Modeling)
IDEF3
Gane & Sarson
Erwin
• IDEF1X
• Information Engineering (IE)
• Dimensional Modeling
User Interface
When S-Designor first came on the market it was highly
praised for its innovative user interface. PowerDesigner
still sports this intuitive design. The graphic design features built into PowerDesigner are comparable to many
commercial drawing tools.
ERwin has a slightly more cumbersome interface, with
some functions in hard-to-find places. There is much less
control over graphic objects and fewer notation options
available.
Ease of Use
These features include those that make the tools particularly easy to use. This includes being able to add additional graphic objects to the model to help explain or identify objects.
DataArchitect Conceptual
Information Engineering (IE)
Continued on page 8
Page 7
What
PowerDesigner
ERwin
Object placement
High degree of control
Basic control but lacking in reference line control
Freeform text
Yes
Yes, but cannot store special characters (tab, etc) in the text
Boxes, polygons and
lines
Yes, can place any graphic with text on the diagram
No
Symbol, text, and line
color and other graphic
highlighting
Yes
Yes
Line and symbol outline
style
Yes
Limited since no graphic-only lines
Text font, sizing and
alignment
Yes
Yes
Auto-layout
No, but there are options to evenly distribute the
symbols
Yes, both as a part of the reverse engineering process and
on-demand from a menu
Vertical and horizontal
alignment
Yes, left, center, right and top, middle, bottom
No
Grid and snap-to-grid
No
Yes, but the grid is invisible
Group and ungroup,
arrange, back and front,
protect and unprotect
Yes, any symbols and/or graphic objects can be
grouped, protected, moved behind/before others
No, there is no way to group symbols, evenly distribute
them, move them behind/before other symbols or protect
them from accidental modification
Help facility
Yes, standard help
Yes, advanced on-line tutorial and product walk-through
On-line documentation
Yes, available for free via the Sybase web site
None was found
Table 3, Features for ease of use
Windows Features
These features are specific to the Windows operating systems and the concern is that the tools will interoperate with
other Windows applications seamlessly and have a common look-and-feel when compared with other software typically
found on user workstations.
What
PowerDesigner
ERwin
Object Linking and Embedding (OLE)
Yes, both as client and server
No
Cut, Copy and Paste to/from windows
clipboard
Yes
Yes, also has ERwin-specific clipboard to copy
model information between vendor tools
Drag and drop
No
Yes, just with the mouse moves the
attribute/column while CTRL-mouse copies the
object
Toolbars and dialog boxes conform to
Windows standards
Standard layout, but static. No customized
toolbar capabilities.
Standard layout, but static. No customized
toolbar capabilities
Field-level help
Yes
No
Dockable toolbars
No
No
Undo/Redo
Yes
No
Multiple Document Interface (MDI) more than one model open at a time
Yes
Yes
Graphic printing
Yes, standard Windows printing capabilities
Yes, standard Windows printing capabilities
Table 4, Windows features support
Page 8
Modeling Features
These features are advanced modeling capabilities that make some complex modeling tasks possible and the rest much
easier.
What
PowerDesigner
ERwin
Menu add-ins
No
Yes, ERwin has an open API and links with
3rd party vendors to extend
Conceptual data items
independent of entities
Yes, can import lists of data items and
work with them independently
No, must create attribute/column in context of
entity/table
Graphic synonyms or
duplicates of objects
Yes
No
Compare with database
No, although there are way to
accomplish the task
Yes, full database synchronization capability, bidirectional
Model Validation
Yes, very powerful model checking
facility with controlled automatic
updates to the model
There are available reports that provide this
information, but no single validation function
DDL Customization
Yes, through definition files have good
control over resulting DDL appearance
No
Volumetrics
Yes, basic sizing abilities
Yes, complex sizing and future growth
estimation
Stored Procedures
Yes, can create them and make
templates for common code blocks
Yes, can create them and reverse engineer them
Triggers
Yes, can create them and make
templates for common code blocks
Yes, can create them and reverse engineer them
Test Data Generation
Yes, with good control over datatypes
and referential integrity
No
Table 5, Advanced modeling capabilities
Dimensional modeling
PowerDesigner
PowerDesigner’s WarehouseArchitect is a full-featured
dimensional modeling tool tightly integrated with a number
of OLAP databases and end-user tools. The list of OLAP
tools includes:
• Cognos PowerPlay and Impromptu
• Arbor Essbase
• Microstrategy DSS Agent
• Oracle Express
Distinct support of some OLAP databases is included to
take advantage of each database’s strengths, such as different indexing schemas and partitioning.
One of WarehouseArchitect’s strengths is the ability to
accurately source a model from various other physical
models. In a typical environment, there may be a number
of transactional or legacy models that feed into a single
warehouse model. The transformations, calculations and
summarizations can be accurately modeled in
WarehouseArchitect.
ERwin
ERwin provides the basic functionality to do dimensional
modeling, but doesn’t include any of the integration features noted in PowerDesigner. Also, since the modeling
technique has a one-to-one relationship between the logical and physical models, it is difficult to accurately model
a complex data warehouse derived from multiple source
databases.
Reporting
Both tools have some sort of reporting facility. The basic
purpose of this facility is to generate model-level documentation. ERwin seems to lack some of the higher-end
documenting capabilities to be expected in an enterpriselevel modeling tool.
PowerDesigner
PowerDesigner has a report editor where users can modify
the layout and contents of a report, then save the report
either embedded in the model or separately as a common
report shared by many models. PowerDesigner ships with
a few common report layouts, simple lists and complete
model documentation. The level of control over the reports is very good, allowing simple “list of” reports and
exhaustive model documentation. The reports are, by design, limited to a single model per report. The user has
control over many report elements, which can be included
in a report repeatedly.
PowerDesigner has the ability to export the report to HTML
or Rich Text (common word processing format). There
Page 9
are some limitations, such as sizing submodel graphics to
fit on the pages when the submodels have differing page
scales.
ERwin
ERwin also has a report editor that can create fairly simple reports, but it doesn’t have the ability to create a single
model-level report with all documentation. All sections
have to be generated one by one and then combined. It
does have a distinct advantage that it can look at either the
ERwin file or the ModelMart repository, including other
Platinum tools that share the repository.
ERwin does include the ability to report on all of the model
objects except for the formatting options (table of contents, titles, etc.) seen in PowerDesigner.
Repository
Both tools have some form of repository functionality, but
implement it in different ways. PowerDesigner uses
MetaWorks, a set of relational tables that can be loaded
into almost any ODBC-compliant DBMS. ERwin uses
ModelMart, a similar set of relational tables that can also
be loaded on a database. However, ERwin is limited to
Sybase System 10/11, Microsoft SQL Server version 4/6/
7, Oracle version 7/8 and Informix version 7/9. ModelMart
was more difficult to install, having a tighter integration
with the target database while MetaWorks was a slow performer because of the ODBC interface.
PowerDesigner
MetaWorks provides the following functionality:
• Browse all models in the database
• Merge any portion of any model with any other model
• Extract and consolidate models/submodels from/to the
database
There is no impact analysis or version control function,
although the model files themselves can be versioned outside of MetaWorks with any version control product on
the market.
The MetaWorks tables are accessible via ODBC or any
other method available on the target DBMS, and the
PowerDesigner suite does include a copy of InfoMaker
which can be used to create and maintain reports from
MetaWorks.
ERwin
ModelMart provides the following functionality:
• Browse all models in the database
• Merge models of various types (BPwin and ERwin)
• Check out and check in of models
Versions and Pricing
PowerDesigner
PowerDesigner 6.1.4
DataArchitect
ProcessAnalyst
WarehouseArchitect
Base / Maint. Price
$2,495 / $950/yr
$1,495 / $570/yr
$4,995 / $1900/yr
ERwin
ERwin 3.5.2
BPwin 2.5
Base / Maint. Price
$3,495 / $695/yr
$2,495 / $425/yr
Conclusion
In conclusion, both of these data modeling tools are very
popular and provide the user with many useful functions.
However, PowerDesigner has a more elegant user interface and functions that are easier to find and use for a
novice. With its advanced control over graphics and its
stronger reporting facility, PowerDesigner produces better quality documentation than ERwin. ERwin is stronger
in the “round trip engineering” area, supporting DBMS
synchronization and advanced volumetrics that
PowerDesigner lacks.
BPwin is a much better tool than ProcessAnalyst at
modeling business processes and functions.
WarehouseArchitect runs rings around ERwin’s weak dimensional modeling capabilities. On all types of models,
PowerDesigner seems to open and save the files faster and
use system resources more efficiently. The ModelMart
repository is more sophisticated than MetaWorks, but
MetaWorks is compatible with a wider range of target
DBMSs.
The fundamental difference in philosophy concerning conceptual and logical models and the limitations ERwin enforces concerning attributes and data items gives
PowerDesigner a significant edge when creating businessoriented models and maintaining multiple physical models from a single conceptual model.
?
Michael Nicewarner is a Database Design Manager at
IBP, inc. with 12 years of experience in data processing,
specializing at times in mainframe development, configuration management and database administration. He is a
member of TeamSybase, a
group recognized as being
experts with Sybase products
and commissioned to assist
users with technical problems. Before his involvement with Sybase, Mike was a
user of S-Designor, ERwin and a host of other modeling
tools. This background gives him a unique perspective
and a strong voice in the modeling community.
Note from the editors: this article appears in PowerTimes,
by kind permission of Michael Nicewarner and Sybase, in a
condensed version from the original. The original article can
be found on the PowerTimes web site (www.powertimes.com)
in the download section.
Page 10
Page 11
DATE STANDARDS
by Boris Gasin
Introduction
One more month until year 2000! I don’t know about you,
but I am glad it’s almost over. No I am not talking about
Armageddon, I am talking about the Y2K panic. The monotonous Y2K testing, obscene amounts spent on Y2K
initiatives, shrinking IS development budgets, development
freeze are just a few things I am not going to miss…But
because I am an optimist I have learned that there is always a bright side. We all have become more aware of
date related issues. In fact most of the date related issues I
found while performing Y2K testing had nothing to do
with Y2K bug. A lot of these bugs came from the conversion errors from dates stored in other data types, misunderstood date processing rules, and dissimilar standards.
Yes right now we are all singing to a different tune. But
the world is shrinking. Within a year most of us will be
working on global applications. By necessity we will be
forced to comply with international date standards.
In this month’s article I will examine the history of date
keeping, highlight today’s prominent date standards and
how they relate to the PFC’s datetime service.
Calendar History
Most calendars are based on astronomical events, specifically solar and lunar cycles. The concept of a year is based
on the earth’s motion around the sun. The time from one
fixed point, such as a solstice or equinox, to the next is
called a tropical year. Its length is approximately 365.24219
days. The concept of a month is based on the moon’s motion around the earth. The time from one new moon to the
next is called a synodic month, and its length is currently
29.5305889 days. The Christian calendar is based on the
motion of the earth around the sun, while the months have
no connection with the motion of the moon. The Islamic
calendar is based on the motion of the moon, while the
year has no connection with the motion of the earth around
the sun. Finally, the Hebrew calendar combines both, in
that its years are linked to the motion of the earth around
the sun, and its months are linked to the motion of the
moon.
The Julian calendar was the 365-day calendar that Julius
Caesar made official in 46 BC. It replaced a calendar based
on lunar cycles. The Julian calendar provided for a leap
year with an extra day every four years. However the Julian
calendar was not perfect. By 1582 AD the Julian calendar
had become out of step with the seasonal cycle by 10 days.
The Gregorian calendar was introduced in order to reform
the method of calculating dates of Easter. Under the Julian
calendar, the dating of Easter was based on March 21 as
the date of the equinox. By the thirteenth century it was
realised that the true equinox had regressed from March
21 to a date earlier in the month. As a result, Easter was
drifting away from its springtime position and was losing
its relation with the Jewish Passover. Over the next century, the time for celebrating Easter was hotly debated. In
October, 1582 Pope Gregory XIII had approved a new
calendar named after himself. 10 days were dropped from
the calendar. October 4, 1582 was followed by October
15, 1582. The Gregorian calendar provides better accuracy in relation to the tropical year and it is the calendar
we use today. It takes approximately 3300 years for the
tropical year to shift one day with respect to the Gregorian
calendar. The approximation 365 97/400 is achieved by
having 97 leap years every 400 years.
However, not all the countries had adopted the Gregorian
calendar right away. While the transition to Gregorian calendar happened immediately in Catholic countries, Protestant and Orthodox countries were reluctant to change.
England has adopted the calendar in 1752 while many
Slavic countries and Greece didn’t change until the start
of this century. Here are some of the latecomers:
Albania:
Bulgaria:
China:
Estonia:
Greece:
Latvia:
Lithuania:
Romania:
Russia:
Turkey:
Yugoslavia:
1912
1916
1912 or 1929
1918
1924
1915 to 1918
1915
1919
1918
1927
1919
Because Julian calendar was falling out of synch by one
day every 128 years, the countries implementing the change
in 1900s had to drop 13 days instead of 10 originally suggested in the 1500s. Also, each country may have selected
to drop a different date range. For example in Greece 9
March 1924 was followed by 23 March 1924, while in
Russia 31 January 1918 was followed by 14 February 1918.
Just imagining the confusion caused by dropping 10 – 13
Page 12
days from the calendar I feel a little better about our problems with Y2K issues. If you think this problem pales in
comparison to the millennium bug, tell it to the Russian
Rifle Team which showed up 12 days too late for the 1908
Olympics! However, that is history. In most countries the
Gregorian calendar has been around for long enough and
that “holes” in the dates are probably not an issue. Nevertheless, if you are working on a global application and
plan to deploy in one of the countries mentioned above, it
helps to be aware that the “holes” in the calendar may have
occurred as early as 80 years ago with the exact position
varying from one country to the next.
The Julian date is probably the least of our worries. Today
we are facing many other problems caused by inconsistent
date standards.
Other Date Standard Variations
If you tell your client that the invoice is due to be paid on
01/12/99 what does that mean? As long as you are in the
same country you are safe. But if you are in US and your
client is in Europe this may mean that you are not going to
get paid for a year! Based on a convention, the above date
can be interpreted as December 1, 1999 or January 12,
1999.
What is the first day of the week? Is it Sunday or Monday? The origin of a 7-day week is not clear. Some base
the 7-day week on Genesis. The Bible states that God created the world in six days and rested on the seventh. This
seventh day became the Jewish day of rest, the Sabbath or
Saturday. Other sources point to Egypt, Babylon, Persia,
or Rome as the origin of a 7-day week, places in which
Judo-Christian beliefs were not shared. Before I get too
deep and offend one or another religion I’ll concede that
there are different conventions, with two major ones considering Sunday or Monday as the first day of the week.
If you want to calculate the week number for a specific
date where do you start? Is the first week the one containing January 1st? Or is it the one with 4 days in the new
year?
ISO 8601 Standard
The ISO 8601 standard specifies date and time notation
which helps to eliminate the confusion in international
communication. A complete standard may be downloaded
from the ISO website at http://www.iso.ch/markete/
8601.pdf
Here are some of the highlights:
Date Display
The international standard date notation is
YYYY-MM-DD
For example, January 15 of the year 2000 is written in the
standard notation as
2000-01-15
ISO 8601 also specifies a few alternative date formats.
The hyphens can be omitted
20000115
A 2-digit year representation is available:
00-01-15 or 000115
It also allows for display of only a month and a year:
2000-01 or 2000
If you find this standard difficult to remember, just keep in
mind that the date is displayed from the largest unit to the
smallest, left to right. This makes it consistent with the
time display, which is more consistent across the continents.
Time Display
The time is displayed in the hh:mm:ss format. The hours
are specified in a 24-hour range. AM or PM suffixes are
not allowed.
24:45:53
Time Zones
Whenever date or time is displayed across timezones, the
time is expressed in Universal Co-ordinated Time or UTC.
UTC, formerly known as Greenwich Mean Time, is designated by appending a ‘Z’ suffix. Whenever both date and
time are displayed together a letter T precedes the time
component.
2000-01-15T24:45:53Z
One interesting fact is that ISO 8601 went to great length
to specify date format in number of weeks. For example
one may specify a date as:
1995-W16-3.
The above means the 3rd day of 16th week of year 1995.
Which brings us to the week numbers.
Week Number
Below is the ISO definition of a week and its number:
“week, calendar: A seven day period within a calendar year,
starting on a Monday and identified by its original number
within a year; the first calendar week of the year is the one
that includes the first Thursday of that year. In the Gregorian
calendar this is equivalent to the week which includes 4
January”.
This yields some interesting results. Take a look at the day
of the year and the week of the year numbers represented
by a table below:
where YYYY is the year in the Gregorian calendar, MM
is the month of the year between 01 (January) and 12 (December), and DD is the day of the month between 01 and
31.
Page 13
1999
1
Mon
340
347
354
361
W49
W50
W51
W52
2
Tue
341
348
355
362
3
Wed
342
349
356
363
4
Thu
343
350
357
364
5
Fri
344
351
358
365
6
Sat
345
352
359
1
//***************************************
// Modifications:
// Date
Author
Comments
//———————————————————
//
//***************************************
integer li_rc
li_rc = DayNumber( ad_date )
7
Sun
346
353
360
2
Table 1, ISO Representation of the
last 4 weeks of 1999
Note that January 1st and 2nd of year 2000 actually are a
part of the Week 52 of 1999. So according to ISO the 200001-02 and 1999-W52-7 represent the same date.
// Convert to ISO
IF of_get_mode() = ISO then
// ISO is a constant
li_rc —
IF li_rc = 0 THEN li_rc = 7
END IF
RETURN li_rc
PFC DateTime Service
Finally… I bet by now you forgot this was a PFC column.
Well, to reward those who have made it through the monotony of standards I’ll even throw in some code samples!
What if you choose to go with ISO 8601 date standards?
How will it affect a PFC application? Is PFC ISO compliant? Unfortunately the answer is no. One of the issues
with PFC’s datetime service is that it relies on the US conventions. Let’s examine the datetime service. If you decide to perform calculations according to the ISO 8601
standard some of the functions need to be overridden or
overloaded. One of such functions is of_WeekNumber().
As mentioned previously according to ISO 8601 the 1st
week of the year is a 1st week which has 4 days in the new
year. Also Monday is considered to be the first day of the
week. Before calculating the week number I needed to
know the day number in the ISO format. I have created the
of_daynumber() function which returns a day number
based on the current mode. The PFC’s of_dayofweek(),
which was marked obsolete in 6.0 may be resurrected and
used for the same purpose.
//***************************************
// Method: of_daynumber
// Author: B. Gasin
// Date : 11/10/99
//
// Arg :
// Return: integer
//
// Desc
: Function returns number of the
// day in the week
//
ISO
US
//
Mon = 1
The algorithm for the week number calculation has proved
to be a little tricky. Up to first three days in January may
belong to a previous year. Some years may contain 53
weeks while others may have 53. To determine the week
number I went with the “Brute Force” approach. First calculating a starting point, a Thursday either preceding or
following the date in question. Next I counted the weeks
backward until the beginning of the year..
//***************************************
// Method: of_isoweeknumber
// Author: B. Gasin
// Date : 11/10/99
//
// Arg : ad_date
// Return: integer
//
// Desc : Determines the week number of
//
a date according to ISO
//
standard.
// ISO Rules:
// - Monday is a 1st day of the week
// - 1st week of the year is considered
//
to be the first week with 4 days
//
//***************************************
// Modifications:
// Date Author Comments
//———————————————————//
//***************************************
date ld_date
Integer li_year, li_prev_year
Integer li_day, li_week
ld_date = ad_date
li_day = of_DayNumber(ld_date)
2
//
Tue = 2
3
//
Wed = 3
4
//
Thu = 4
5
//
Fri = 5
6
//
Sat = 6
7
//
Sun = 7
1
//
DO WHILE li_day <> 4
IF li_day < 4 THEN
// Mon - Wed. Go to next Thur.
ld_date = RelativeDate(ld_date, 1)
ELSE
// Thur - Sun. Go to prev Thur.
ld_date = RelativeDate(ld_date, -1)
END IF
li_day = of_DayOfWeek(ld_date)
LOOP
li_year = Year(ld_date)
Page 14
adopted in other national standards:
// Count weeks backwards until the
// previous year
DO
li_week++
ld_date = RelativeDate(ld_date, -7)
li_prev_year = Year(ld_date)
LOOP UNTIL li_year <> li_prev_year
European Norm
United Kingdom
USA
Japan
Germany
EN 28601:1992
BS EN 28601:1992
ANSI X3.30-1985
JIS X 0301-1992
DIN 5008
Return li_week
If you are working on a global application it looks like
ISO 8601 is your best bet.
Conclusion
There is a strong movement toward the stardanization of
date and time measurement. Hopefully this movement will
be greatly accelerated by the Internet and the global nature of future business.
Should you drop your current date conventions and go with
the ISO 8601 standard? I wouldn’t go that far. In the past
this decision was driven by the application users. In many
cases they have their own well-defined and unique date
standards. The TV broadcasting industry is one example.
Perhaps your users have specific rules for payroll driven
date standards. In cases such as these you have to wait for
your industry to switch to the standard before you do.
However, more and more we will be working on applications which do not have a well-defined user base. The web
based Enterprise Portal applications reach out to global
communities. In this case we have to rely on international
standards. The ISO 8601 standard has already been widely
?
Boris Gasin is a Chief Technology Officer at Dynamic
Technology Group, a New
Jersey based consulting
company specialising in
Internet and Client-Server
technologies. Boris is a
member of Team Sybase
and is a three time winner
of the Team MVP award.
Boris is a co-author of
PowerBuilder Foundation Class Professional Reference published by McGraw-Hill, ISBN # 0-07913267-7 and a contributing author of the
PowerBuilder 6.0 Secrets of the Masters by SYSCon Publishing. He can be reached via email at
[email protected].
Page 15
For More Information Fax back this reply, or call our sales team.
Phone: 041 760 5071
Fax: 041 760 1707
Name
Company
Function
Department
Phone
Fax
E-Mail
SYAP AG, Dorfstrasse 38, Baar CH-6340.
Phone: 041 760 5072 Fax: 041 760 1707 Web Site: www.syap.ch
COMPONENT F UTURES
by Alan J. Walsh
The Next Big Thing
Don’t you hate those articles that you see all the time in
trade magazines that talk about the next big thing? The
columnist goes on about something that they think is going to change the way you and I write software. I hate it
too. And as I sat down to write this last article of the millennium I had my mind made up on a very straightforward
technical article. But there was something gnawing at the
back of my mind that forced me to do the unthinkable.
Something important was happening in the world of components and I felt I had to report on it.
Distribution Problems
Years ago when distributed PowerBuilder first came onto
the scene, I got very excited and I convinced my colleagues
that this was how we should be doing all of our application development. We sat down to write our next application and we began creating all of our middle-tier components. After a while it became apparent that this was a lot
easier in theory than it was in practice. We learned the
hard way that moving data back and forth between physical or even logical tiers was a real challenge. Because of
time constraints we were forced to abandon that approach
and return to our more traditional development techniques.
I was crushed.
Years later after I got heavily involved in the COM world,
I faced a different problem. Basic COM is pretty simple to
learn and implement. You can get your mind around the
concepts and start coding stuff pretty quick. Once again I
got excited and started trying to convince everyone in my
group that we should standardize on COM. There I was in
front of a room full of people talking about binary standards and language independence. It was going great. Then
someone asked the inevitable question.
What About Cross-Platform?
Probably one of the most frequently asked questions about
COM is the issue of platforms. Everyone knows that COM
is readily available on the Windows platform. But what
about other operating systems? I used to give people the
standard response to this question, about how COM actually was available on other platforms. Software AG has
ported COM to several platforms, including OS/390.
Microsoft themselves will sell you COM for Solaris. But I
knew in my heart that this was not an answer that satisfied
people. They were always a little skeptical. And deep inside of me I was a little skeptical too. Let’s face it: today
cross-platform means the Internet, and making COM work
on every device on the web is a challenge to say the least.
There had to be a better answer.
A New Perspective
Fast-forward to 1999 and people have started talking about
a new way to do cross-platform COM. In fact a whole new
way to develop internet-ready applications. What’s the
secret? The answer lies in the combination of two Internet
standards. The first one is familiar to anyone who has ever
used a web browser, and the second one just happens to be
the buzzword of the year.
HTTP
The hyper-text transfer protocol is in many ways the foundation of the web. If the web is an information
superhighway, then HTTP is the pavement. What makes
HTTP so good and why would we be interested in it for
application development? For starters, HTTP is supported
by every platform on the web. That solves our platform
issue right away. If certain people have their way, pretty
soon your toaster will support HTTP. And it’s a W3C standard, so no single vendor controls it. Another great thing
about HTTP is that it is usually ignored by firewalls. I
know I’m not going to make any friends in the security
department happy when I say that, but that’s the way it
goes. The point is an application based on HTTP will not
encounter any security roadblocks, unlike many other
protocols (DCOM). Finally, HTTP scales nicely with simple techniques like IP load balancing.
With all that going for it, I think you can see why HTTP
makes an attractive transport mechanism for our application data. The next step is to find a format for passing that
data. Let’s look at a simple HTTP request:
GET /faq.htm HTTP/1.1
Sending this request to the PowerTimes web site will get
you the FAQ – a nicely formatted HTML document. Nothing surprising here, HTML is what most web documents
are made of and it’s what most web browsers expect to
see. But what about our application data? Should we use
HTML for that? Let’s look at a snippet of HTML:
<strong>New York</strong>
Page 17
This is a perfectly valid chunk of HTML that any browser
will happily parse. Even a human being can parse it without much effort. But what is it telling us? What are we
looking at? New York is a city, but it’s also a county and a
state. Which one are we looking at here? The point is we
don’t know. While HTML is great for formatting and presenting data, it doesn’t really do anything to tell us anything about that data. If we’re going to be passing data
between hosts in a distributed application, we’re going to
need a way to pass some descriptive info about that data.
In short, we need XML
XML
XML stands for Extensible Markup Language, and as most
of you know, it is one of the hottest topics in IT today.
XML is a W3C specification that is based on SGML, or
Standard Generalized Markup language. SGML itself is
too challenging for most folks, so think of XML as a more
user-friendly version. Like SGML, XML is a markup metalanguage – a language for specifying markup languages.
This is why XML is extensible, because it allows you to
create your own tags. And if you can create your own tags,
then you can certainly describe the data in your documents.
Let’s look at an XML version of our previous example:
the pubs database that comes with SQL Server. So you
can see that XML does a nice job of marking up structured
data – exactly what we need for a distributed application.
And it does it in a nice, somewhat human readable format.
Putting It All Together
So now that we have the two elements that we need, how
do we put it all together in an application? Imagine it like
this: our clients send HTTP requests to the server, which
processes the request and sends back data in an XML document The client can then parse the document and extract
the data in a format that it knows how to use. What does
the client look like? Anything that can send and receive
HTTP requests. As I stated earlier, this includes just about
any device connected to the web. It could be a
PowerBuilder application running on Windows 98, or perhaps a PERL script executing on a Linux/Apache web
server. And what about the server? Well that’s anything
that can process HTTP requests. Your web server should
do just fine. Behind the scenes you’ll have a component
that retrieves and composes the data. Try using an ASP
script or a COM component running on IIS, or perhaps a
PowerBuilder component in EA Server. If you are using a
Unix/Linux web server try using PERL.
<city>New York</city>
Making The Call
Now we know exactly what we are looking at in this piece
of data. Here’s a more complete example of an XML document:
There’s no reason that our clients should be limited to simple HTTP requests though. In fact, to make a truly useful
application, our clients are going to need to be able to
send additional information in their requests. Anyone who
has ever built a form on a web page is already familiar
with the POST verb in HTTP. Why not utilize this and
send XML both ways? So now instead of clients sending
simple HTTP GET requests for specific documents, they
can send POST requests with XML data that carries with
it all of the information that we want to pass in. Let’s look
at what a method call might look like in XML:
<?xml version=”1.0"?>
<Authors>
<Author ID=”172-32-1176">
<au_id>172-32-1176</au_id>
<au_lname>White</au_lname>
<au_fname>Johnson</au_fname>
<address>10932 Bigge Rd.</address>
<city>Menlo Park</city>
<state>CA</state>
<zip>94025</zip>
<phone>408 496-7223</phone>
</Author>
<Author ID=”213-46-8915">
<au_id>213-46-8915</au_id>
<au_lname>Green</au_lname>
<au_fname>Marjorie</au_fname>
<address>309 63rd St. #411</address>
<city>Oakland</city>
<state>CA</state>
<zip>94618</zip>
<phone>415 986-7020</phone>
</Author>
<Request>
<Object>Authors</Object>
<Method>GetAuthors</Method>
</Request>
</Authors>
This is a “well-formed” XML document. It’s well-formed
because it follows the basic XML formatting rules, like
having start and end tags for each element. You can make
a well-formed document “valid” by adding a document
type definition (DTD) to it. There isn’t time to go into all
the details of XML here, but you can find all you need to
know at the W3C web site, which I list at the end of this
article. You might recognize the data in this example from
Here we are asking for a method called GetAuthors() on
an Authors object. On the server side you write the necessary code to parse this and process the request. This exact
model is being pushed by a variety of different groups and
is rapidly emerging as a new way to build applications on
the Internet. It eliminates many of the problems that plague
other component and object architectures. This doesn’t
model doesn’t replace those technologies; rather it builds
on them and extends their reach across the Internet. I’d
like to conclude by examining an effort underway to formalize this new development model.
SOAP
SOAP stands for Simple Object Access Protocol, and it is
the result of collaboration between Microsoft and
DevelopMentor. Microsoft created COM and
DevelopMentor has become perhaps the leading independ-
Page 18
ent authority on it, so when it comes to components and
application architectures these folks really know their stuff.
SOAP uses HTTP for the reasons already stated, and it
puts an RPC-like protocol layer on top of that. Of course
it uses XML to implement that protocol. Right now
Microsoft has only produced the specification for this protocol. DevelopMentor is nearing completion of implementations for Java, COM+, and PERL.
Here’s an example of a SOAP request from the specification:
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml-SOAP
Content-Length: nnnn
MessageType: Call
model is that it is entirely based on standards, so anyone
can write their own implementation. It seems logical that
at some point we will have to come to an agreement on an
implementation is we are to reap the maximum benefits. I
don’t know if XML over HTTP is the next big thing, but it
looks pretty large from where I’m sitting.
References
W3C (HTTP, XML), http://www.w3c.org
SOAP, http://msdn.microsoft.com/xml
www.develop.com/soap
XMLRPC, http://www.xmlrpc.com
http://
?
<GetLastTradePrice>
<ticker>DIS</ticker>
</GetLastTradePrice>
Alan Walsh works for Indiana University. He can be
reached at [email protected].
And the response:
HTTP/1.1 200 OK
Connection: close
Content-Type: text/xml-SOAP
Content-Length: nnnn
MessageType: CallResponse
<GetLastTradePriceResponse>
<__return>34.5</__return>
</GetLastTradePriceResponse>
This is remarkably similar to the simple example that we
looked at earlier. The main difference here is the request
headers. Notice that they specify a new content type: text/
xml-SOAP. The purpose of these headers is to allow
firewall filtering. The SOAP implementations at
DevelopMentor also use something called CDL (Component Decryption Language) to provide type information.
At this time there is no object activation in SOAP. Components are more or less mapped to URLs, and SOAP
passes method calls and parameters.
Alan after his presentation on COM at the Swiss PB
User Group Meeting in Zurich, November 1998.
XMLRPC
Another take on this model is found at the XMLRPC site.
XMLRPC is kind of like the forerunner to SOAP as most
if not all of the folks who are working on the SOAP specification also worked on XMLRPC before that. I encourage you to visit the site, as there are numerous links to
interesting implementations.
Conclusions
I hope this article has spurred some interest in this new
model for application development. This movement seems
to be gaining critical mass as more and more companies
jump on board the XML bandwagon. I leave it up to you
to decide whether or not this holds any use for you. For
most of us, doing business on the Internet is no longer an
option. And on the Internet HTTP rules. XML seems to be
headed in that same direction. Whether you choose to build
you own solution is also up to you. The beauty of this
Page 19
Tool
of the
month
Client-Server
Datenbanken
Services
PowerBuilder 7
The good news is, the skills you’ve already learned
will make you successful as you pursue new
opportunities on the Internet. PowerBuilder 7.0 is
designed to take you to the next phase of your
development career, with all the power and
capability that has made PowerBuilder the number
one choice for serious business application
development year after year.
The bridge from
client/server to Web
and distributed
applications
PowerGen
PowerDoc
The essential tool for
generating PB
applications.
Get your self some
extra sparetime.
PowerGen's breakthrough
technology gives you
unprecedented flexibility and
speed when you building
PowerBuilder applications.
Recreate your libraries (PBLs)
from object source. Use
PowerGen to produce all your
PowerBuilder deliverables in a
single step.
Am Borsigturm 48
D-13507 Berlin
Germany
Phone: +49 (0)30 430 323 50
Fax: +49 (0)30 430 323 55
Email: [email protected]
PowerDoc automates the
entire process of generating
high quality, technical
documentation. With simple,
easy-to-understand
instructions, you select the
PowerBuilder application to
document, and PowerDoc
does the rest, including the
preparation of Table of
Contents and Index.
PB Spy
ImagN’
Get an inner sight
of what’s going on
in your PB 6.5
Application.
Show what you’ve
got.
More than a debugger. The
service-based TreeView and
ListView controls are now PB
Spy objects with Message
Pump and other features. Justin-time debugging has been
built into the Message Service
and the Action Menu so that
you can break into the source
code.
The family of ImagN’ toolkits
takes the headache out of
integrating graphics images into
your Windows applications!
Display BMP, PCX, DCX, GIF,
JPEG, Progressiv JPEG, PIC,
Targa, and TIFF images using
ImagN’s powerful 16 & 32-bit
engines.
Super FAST viewing and print
engine available as an ActiveX
or DLL/VCL.
HOW TO MAKE YOUR PB APPLICATION MORE P OWERFUL
by Roy Kiesler and Reed Shilts
HTML is Here to Stay
Everybody and anybody these days are navigating the vast
reaches of the Internet. The half-decade-long browser war,
with heavy casualties on both sides, is still ongoing and
ultra-thin client applications are popping up everywhere.
So what is a rich-client application developer to do? If
you have taken a look at some of the latest web-enabled
applications like
Microsoft Outlook, you will notice that many areas of functionality, previously implemented as dialog boxes, are now
implemented as embedded HTML views, as shown in figure 1 below. Microsoft’s next generation operating system, Windows 2000, takes this paradigm further still, by
using Dynamic HTML for system functions such as Find
Files or Folders
control maintains a history list that allows the user to
browse forward and backwards through previously
browsed sites, folders, and documents. The control directly
handles the navigation, hyperlinks, history lists, favorites
and security. You can use it to display many other kinds of
files besides HTML, including GIF, JPEG, and AVI files.
Applications can also use the Web Browser control as an
Active document container to host Active Documents such
as Microsoft Word documents or Excel spreadsheets, and
edit them in-place.
Figure 1, Microsoft Outlook’s Embedded HTML View
So how do you implement this latest GUI gadget in your
PowerBuilder application? By using the Microsoft Web
Browser control...
Browser in a Box
Using the Web Browser Control
We begin by creating a standard visual user object, inherited from OLEControl, which hosts the Web Browser control, as shown in figure 2 over the page. We’ll call our
object u_wbc.
The Microsoft Web Browser control provides the functionality of a Web browser within the context of a Windows application. The Web Browser control is an ActiveX
control in which the user can browse the World Wide Web,
as well as files and folders in the local and network file
systems. The Web Browser control supports hyper-linking and Uniform Resource Locator (URL) navigation. The
Page 21
// is resized.
this.Object.Width = UnitsToPixels( &
newWidth, XUnitsToPixels! )
this.Object.Height = UnitsToPixels( &
newHeight, YUnitsToPixels! )
Loading Documents
In order to load HTML pages or other types of active
documents, you simply call the Navigate method. The
URL passed to this method should always be fully
qualified. For example:
ole_1.Navigate( &
“http://localhost/index.htm” )
ole_1.Navigate( &
“C:\Roy\Web Browser\word.doc” )
Navigation
As shown in the previous section, navigation using the Web
Browser control is easy - simply pass a fully qualified URL
or file spec to the Navigate method and presto!
Figure 2, Selecting the Web Browser Control
Next, we code a number of key events, as shown below.
The results are shown in Figure 3.
// BeforeNavigate2 – setting arg_cancel
// to TRUE will cancel the navigation
Yield()
arg_cancel = FALSE
// Error – default handler. Override in
// descendants
action = ExceptionIgnore!
// ExternalException - default handler.
// Override in descendants
action = ExceptionIgnore!
// resize( integer newWidth,
//
integer newHeight )
// this is a user event which should be
// called whenever the control container
The Navigate2 method is identical to Navigate, with the
exception of the first parameter, a Win32 VARIANT structure, which is represented as an any data type in
PowerBuilder. VARIANT structures provide a uniform
“safe” mechanism to pass data between automation servers and clients
The BeforeNavigate2 event occurs when the Web
Browser control is about to navigate to a different URL,
giving the container has an opportunity to cancel the
pending navigation, by setting the arg_cancel parameter
to TRUE.
The NavigateComplete2 event occurs after the Web
Browser control has successfully navigated to a new
location. The requested document might still be downloading (e.g., images in an HTML page may still be
Figure 3, Web Browser Control Demo
Page 22
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
int
int
int
int
int
ID_PRINT = 6
ID_PAGESETUP = 8
EXECOPT_DODEFAULT = 0
EXECOPT_PROMPTUSER = 1
EXECOPT_DONTPROMPTUSER = 2
// Page setup
ole_1.object.ExecWB( ID_PAGESETUP, &
EXECOPT_DONTPROMPTUSER, AsStatement! )
// Print
ole_1.object.ExecWB( ID_PRINT, &
EXECOPT_PROMPTUSER, AsStatement! )
GUI Enhancements
If you are implementing an interactive web browser interface, you will need an address bar. For that purpose, the
Redmondtonians have created a magic function that will
turn any old edit control to a eye-catching, fancy address
bar. All you have to do is place a single line edit control on
your window and add the following code:
Table 1, Navigation Methods
downloading), but at least part of the document has been
received from the server.
The DownloadBegin event is fired after the
BeforeNavigate2 event. Typically, it is used to implement a busy processing indication (animation, progress
bars, etc.) Further information about the progress of a
navigation or download operation can be obtained by
handling the ProgressChange and StatusTextChange
events.
// External function declaration
// NOTE: requires Internet Explorer 5.0
FUNCTION long SHAutoComplete( &
ulong hwndEdit, &
ulong dwFlags &
) LIBRARY “shelwapi.dll”
// Open event of hosting window
SHAutoComplete( Handle( sle_1 ), 0 )
Next, run the application and type http:// in the edit control and observe the magic…
More Interesting Things to Try
The DownloadComplete event is fired after the
NavigateComplete2 event, when a navigation operation
finishes, is halted, or fails.
The ExecWB function is extremely powerful. Try to use
some of the following constants to see which ones can
be used in your application:
The GoBack and GoForward methods simply iterate
through the Web Browser control’s history list.
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
CONSTANT
The Refresh method reloads the current page in the Web
Browser control. Using the Refresh2 method allows you
to control whether the page is loaded from cache or not.
Finally, the Stop method cancels any pending navigation
or download activity, as well as dynamic page elements
such as sound or animation.
int ID_SAVEAS = 4,
int ID_SAVECOPYAS = 5,
int ID_PROPERTIES = 10,
int ID_CUT = 11,
int ID_COPY
= 12,
int ID_PASTE = 13,
int ID_UNDO
= 15,
int ID_REDO
= 16,
int ID_SELECTALL = 17,
int ID_CLEARSELECTION = 18,
int ID_FIND
= 32,
int ID_DELETE = 33,
The Web Browser control does not have a Print method,
however, you can print its contents using two different
methods:
One of the least documented features of the Microsoft
Internet Explorer browser is its support for the Res
protocol, which allows for viewing resources in a Win32
executable or dynamic link library. The syntax for using
this protocol is as follows:
•
res://module filename[/res type]/res id
Printing Documents
•
Set focus to the control and send it a CTRL-P key
combination.
Use the ExecWB method to send an OLE print command to the control.
The following code demonstrates printing the contents
of the Web Browser control using the second method:
Try the following code snippet to display Internet Explorer’s About dialog in your PowerBuilder: browser:
ole_1.Object.Navigate( &
“Res://shdoclc.dll/about.dlg” )
Page 23
Want to bring up Internet Explorer Favorites dialog? Here’s
how:
ole_1.Object.Navigate( &
“Res://shdoclc.dll/orgfav.dlg” )
Known Issues
Because of a bug in PowerBuilder 6.x, some of the Web
Browser control’s events, including BeforeNavigate2,
NavigateComplete, and DocumentComplete do not fire.
This has been corrected in PowerBuilder 7.x.
In addition, the Web Browser control implements a collection of property-setting functions, listed intable 2 , which
seem to have no visual effect even though the associated
properties are being set appropriately.
Many high-end applications are already using the Web
Browser control, including Sybase’s own PowerSite,
Microsoft Outlook and Outlook Express, Microsoft Money,
America Online, and CompuServe. Yours could be next in
line!
References and Downloads
•
http://msdn.microsoft.com/workshop/c-frame.htm#/
workshop/browser/default.asp
http://download.sybase.com/software/tools/pbuilder/
datawind/47945.zip
http://www.powertimes.com/resources/wbc70.zip
•
•
?
Reed Shilts is a member of the PowerBuilder/ PowerJ
Kernel Group at Sybase Inc. An “Alpha geek” developer, deep within both PowerBuilder and PowerJ, he
spends his time between ActiveX components and Enterprise Java Beans (EJBs). Reed is anxiously waiting
for the arrival of his first child that he is adopting from
China.
Table 2, Property-Setting Methods
This may be due to a PowerBuilder issue, or perhaps an
OLE implementation issue. I was unsuccessful in my research so far to determine the cause.
Conclusion
Occasionally it is handy for a PowerBuilder application to
have a web browser embedded in it. There are many benefits to integrating HTML with standard Win32 GUI, including:
•
•
•
Built-in support for hyper linking, rich text display
and style sheets, window scrolling, navigation history,
etc.
Easier localization – the Web Browser control currently supports 25 different languages.
Access to the Internet Explorer document object
model, which allows for further use of automation and
scripting.
Roy Kiesler is a Senior Lead
Consultant at Noblestar Systems in Cambridge, MA, a leading provider of strategic information technology business solutions. Roy has been working
with PowerBuilder since version 4.0, developing client/
server and multi-tiered applications for the Pharmaceutical,
Financial Services and Telecommunications industries. He
is a member of TeamSybase, a group of highly proficient Sybase/Powersoft product users, who volunteer
their time to answer questions in various support forums. Contact Roy via e-mail at [email protected].
Page 24
CREATING ACTIVE X COMPONENTS WITH JAZZAGE
By Martin Rothenberger, CATsoft Development GmbH
Introduction
Have you ever thought about creating components out of
your existing PowerBuilder applications? A really cool
search window, that you could use in all your other applications? Or have you tried to access functionality of other
PB applications? Sure, you want a multithreaded component, that is just loaded into memoryonce and can be
accessed from all your applications. There are several solutions to these questions. You can use OLE Automation,
Distributed PowerBuilder or you can rewrite that part of
your application in VB and create an ActiveX Control <g>!
There may be other solutions out there, but if you use
PowerBuilder to build COM components, you will run into
the following problems:
• A COM component created in PowerBuilder 6.5
(COM Generator) is always running “in-process”,
meaning it is a DLL (PBD is also possible) that is
loaded in the same process boundary as the client
application is running in. This implies restrictions in
application techniques when using PowerBuilder. You
are not allowed to use global variables and therefore
you also can not use the PFC. This is because there is
no EXE running and so no application object is created that you can use with your own script. In fact, the
PowerBuilder runtime engine is dynamically instantiating a system class application object with default
variables (SQLCA, message,...).
• Using PowerBuilder you can not create standalone
COM components with a visual interface. These components were originally known as OLE controls or
OCXs and are now called ActiveX controls.
So what can be done?
Our Solution
A couple of months ago we found a product called
“JazzAge ActiveX Factory” from JAZZAge Software
SARL that makes it possible to use an existing
PowerBuilder application as a standard ActiveX control.
The idea behind JazzAge is that you can use your existing,
well known development environment to produce components and wrap them into an ActiveX Control with the
JazzAge ActiveX Editor. ActiveXs are standard, language
independent components based on the component object
model technology from Microsoft called COM. Thousands
of ActiveXs have already been developed, covering a wide
range of functionality. They can be quickly integrated into
a growing number of development tools to produce end-
user applications. ActiveXs are highly modular and reusable, but also self documented and automatically distributable through the Internet. ActiveX components are easy
to use and integrate, but very difficult to build from scratch
because of the variety and complexity of services required
by the ActiveX specifications.
JazzAge ActiveX Factory offers a unique and general way
of turning any ActiveX consuming development tool into
an ActiveX producer. It makes it possible, and very easy,
to revamp your existing forms created with PowerBuilder,
Clarion, VB, VisualFoxPro, C++, etc., into ActiveXs, and
therefore make them more modular, reusable and distributable. The JazzAge Object Engine handles all the low
level, complex and tedious COM jobs and lets you concentrate on the minimum code required to have your forms
(dialog boxes) behave as full-featured standard ActiveXs.
The Process
For the developer, JazzAge is a visual development environment to create ActiveX controls. It is as easy as defining a user object in PowerBuilder. After you have designed
all the methods, properties and events, you can compile
the project and the JazzAge ActiveX Editor produces all
the necessary files. Any existing PowerBuilder Window
can be transformed in an ActiveX control without changing its logic. Just drop a special type of ActiveX control,
as produced by JazzAge, in it and then assign code to its
events. With JazzAge, you produce an ActiveX control
the way you are already familiar with! You can do it at any
time of your development cycle, with existing forms or
new ones.
This way you create compressed, standalone and Internet
ready components. All the files (code, bitmaps) required
by the JazzAge ActiveX controls are compressed and
packed into standalone OCX files. The JazzAge ActiveX
Factory includes a visual ActiveX Editor to let you interactively design the Properties, Methods and Events you
want your forms to expose. Those definitions can be stored
into JazzAge project files containing any number of
ActiveX descriptions. The ActiveX Editor will also let you
document the components you design, assign them toolbar
bitmaps and help topics to be retrieved and used later in a
standard manner by any ActiveX-aware development tool.
ActiveX controls produced with the JazzAge ActiveX Factory support multithreading, signing and licensing. It also
Page 25
lets you implement property pages with your development
environment. JazzAge ActiveX controls can be implemented and exposed by either DLL (in process) or EXE
(out of process) servers. A DLL server offers faster communication between controls and their container, but the
ActiveX controls exposed by an EXE server to different
clients are managed by the same process. They can therefore be more easily synchronised. A control exposed by an
EXE server can be instantiated and manipulated over a
network, and therefore can act as a remote automation
server also firing events. An EXE server exposing some
or all of its forms as ActiveX controls/objects can still be
used interactively as a standalone application. The JazzAge
created components support DCOM so they can be instantiated and invoked over a network, which also applies
to ActiveX Controls! JazzAge offers the unique capability
of producing Controls acting over a network. Such Controls act as Remote Automation objects (exposing properties and methods) and are also able to fire events over the
network.
PowerBuilder Stuff
Especially for PowerBuilder, we found some points to look
at before you start building your components.
PowerBuilder applications can not really be thin components, because each application needs at least the
PowerBuilder Virtual Machine “PBVM60.DLL”, and that
means 3.3MB. In addition, if you use DataWindows, you
need the file “PBDWE60.DLL”, which needs another
1.5MB. So, at runtime, a really small component without
DataWindows consumes about 5.0MB. For a more complex window with some dropdown DataWindows cached
and a dropdown calendar on it, we end up with a component that needs 12MB of memory during runtime!
JazzAge offers the three standard ways of how an ActiveX
can act. You choose from “Standard Control”, “Invisible
at Runtime” and “Simple Frame”. The difference between
the types are in the way they can be used. An Invisible at
Runtime control will only be shown in design mode. It
will be made invisible at runtime. For example, a timer
control firing events at pre-set intervals would be designed
as invisible at runtime. It would be visible at design-time
(so the developer can edit its properties, or attach code to
its events) but not at run time. A Standard Control will
appear as an empty rectangle at design time, and be fully
activated when switching to run mode. At design time a
Simple Frame control will be fully activated as soon as
PowerTimes is a leading development journal for Sybase tools.
Published in Switzerland, thousands of developers around the world already enjoy this publication.
If you want to find out more, or download a free copy, visit our web site - you won’t regret it.
Page 26
dropped in a form. It will also be activated at run mode. In
design mode a Simple Frame will already be fully running. It could also act as a container for other ActiveX
controls.
A PowerBuilder MDI application can not be a visual component (standard control or simple frame type) because of
the global variable restriction, but you can use it with the
Invisible at Runtime type of ActiveX control. You define
the interface (properties, methods, events) in the JazzAge
ActiveX definition. The client application that uses your
ActiveX control is initiating the start-up of your MDI application and is then able to communicate with your application through the interface of your ActiveX control. A
PowerBuilder SDI application can act as a visual component to the client application. Both types (Standard Control and Simple Frame) are possible.
None of these ways act as a DLL server (in process). The
DLL server needs some functions that are defined as exported and I don’t know how to export the function definition of a PowerBuilder DLL. You can use the COM Generator to create such objects. The EXE server has in fact
some advantages above the DLL server. It can, for example, serve more than one control with the visual interface
at once. This means you can have two (or even more) windows in your PowerBuilder EXE and use them from where
you want. The EXE is only instantiated once and opens a
window for each request that is displayed inside the client
application.
not be a native one).
•
•
•
Save your project and compile it from the “project>command” tab of the JazzAge Editor. Do not embed the files at this point, because you change your
PowerBuilder executable during implementation
and do not want to compile/embed it every time
you have changed something to test your component. The ActiveX controls that JazzAge has produced
during the compile process only points to your
PowerBuilder executable at that moment and therefore, as long as the interface does not change, you
don’t need to touch the ActiveX controls.
•
Now you have to implement the functionality of your
component. As described, JazzAge produces more
then one ActiveX control for each JazzAge ActiveX
form. Let’s have a quick look at the architecture of a
component created with JazzAge.
What JazzAge Produces
If you have defined the interfaces of your new component
in the JazzAge ActiveX Editor, you can compile your
project. JazzAge produces all the necessary files for your
new component, like the Type Library, the OCX file and
other files. It also registers the content of the OCX file in
your PC’s registry. For each ActiveX form you defined in
your JazzAge Project you will get an ActiveX control that
you can use in any client application that can use ActiveX
controls.
JazzAge also produces a set of special ActiveX controls
which you will have to use to implement your ActiveX
forms. There is a project related one, called the Control
Factory and one for each ActiveX form in the project,
called the Remote Control. But let’s look at an example
of how to build a visual component...
Step by Step
Let us suppose you have to build a new visual component
that implements a search window for addresses. You have
to use this in every application you build and you don’t
want to reimplement it every time. It is also necessary that
an application, developed outside your company, can implement the same search window.
•
Start a new project in the JazzAge ActiveX Editor
and give it a name (e.g. “appAddressComponent” ).
Then you have to select the executable that implements the form server (your search window) and define the implementation type (EXE32 in our example). You also have to write a short description of your
component to the DOC STRING field.
Now you can switch to the ActiveX’s tab on the editor and create a new ActiveX form. Define the name
and DOC STRING the same way as described in the
previous step (e.g. “appAddressSearch” and “Company search form for addresses”). Define all the properties, methods and events needed to access the functionality of your search window. Specify the control
type as “Standard” on the ControlInfo tab and key in
the height and width of your search window in pixels.
If you are in the PowerBuilder’s Window Painter, you
can access the position tab of the window property
dialog to guess the values (look at the graphical representation of your window and use the doted lines to
guess). There is no problem if they are bigger than
needed, because the client application defines the size.
But it must be big enough to display the search window in it.
In Figure 1 you will see a client application that uses the
address search component. The ActiveX Form Server is
the PowerBuilder application that implements the address
search component. On the form server, there must be an
additional window called the ActiveX Factory Form (
“jacfwnd” ) with the Control Factory ActiveX control on
it. The search window contains the Remote ActiveX control. On the diagram, you will see the process of instantiating a component created with JazzAge:
First you create a PowerBuilder application with the
search window and compile it to an executable (must
Page 27
Figure 1,Instantiating an ActiveX component
1.
2.
3.
4.
5.
6.
The client application loads the window with our “Search Window” ActiveX control on it.
The local ActiveX control attempts to connect to its Control Factory ActiveX, which launches if
necessary the ActiveX Form Server EXE
The connected Control Factory ActiveX receives a request from the local ActiveX to create the
required form.
The form creation request is turned into an event by the Control Factory ActiveX
The code linked to the fired event provokes the creation of the ActiveX form (e.g. open the
search window), containing the Remote ActiveX corresponding to the “Search Window”
ActiveX control on the client application.
The new created ActiveX form handle is returned to the local ActiveX. The JazzAge Object
Engine automatically inserts the ActiveX form into the local ActiveX.
•
Now create the Control Factory form window in your PowerBuilder application. It is a window of type “main”, has
the visible property set to false and needs to be opened first from the application’s open event. You have to place the
correct Control Factory ActiveX control on that window and code two events.
•
Place the Remote ActiveX control on your search window and code the necessary events.
•
Create your executable (if possible put all the files into the exe-file).
•
Now you can switch to the JazzAge ActiveX Editor and embed your executable by adding your files on the “project>embedded files” tab and embed it from the “project->command” tab. The <component>32.OCX file now contains all necessary files and information that you need to deploy your new component (don’t forget the
PowerBuilder VM).
•
You can test the new component by registering the OCX-file and opening the created HTML-file in your WebBrowser.
Page 28
Tips and Tricks
Conclusion
One of the nasty things with ActiveX controls is the fact
that if the interface changes they would not be updated.
So, every time you have to change something in the
ActiveX interface, you have to copy all the code in the
control, you have placed on your window to a newly placed
ActiveX control onto your window.
For me, JazzAge is a very useful tool to build components
with and for every development environment that can act
as a ActiveX consumer. I’ve built different types of components starting from standalone visuals to invisible ones
used to communicate with existing PFC applications. The
components are used not only in other PB applications;
they are also used in a Smalltalk application. This tool
makes it possible to implement “dummy” components with
no real implementation behind, to give other developers
the ability to start working with the interface of the components before we have finished with the real implementation.
To avoid this, I have created an extension layer between
the real ActiveX control and the controls on my windows.
Just create a new visual custom user object of the OLE
control and save it without any changes. Then you use this
one to place on your window. Now you can redefine your
ActiveX control’s interface, recreate the user object and
after a short regeneration of your window, you can see the
changes in the ActiveX control’s interface.
As described in the article, do not embed your files into
the OCX file, as long as you have not finished with the
development of your component.
If you use the Invisible at Runtime type of control, you
can dynamically create it with the function
ConnectToNewObject(). This has the advantage that the
EXE form server is only loaded if really needed. The disadvantage is that you no longer have the events available
on your control, because it is a standard OLE object for
PowerBuilder.
The product is really worth the price of US$250. Just check
out their webpage http://www.jazzagesoft.com to get a
demo version of the latest release of “JazzAge ActiveX
Factory ‘Forms and Objects Edition’”.
?
Martin Rothenberger is working at CATsoft Development GmbH in Zurich. He is a Certified PowerBuilder
Professional and Instructor and can be reached by
e-mail at [email protected]
When you define a visual custom user object of that type
and open it dynamically during runtime with the function
OpenUserObject(), you can use all the events and still load
it as needed.
Page 29
JAGUAR DEVELOPMENT WITH P OWERB UILDER 7
MICHAEL B ARLOTTA
Reviewed by Boris Gasin
Since this is the first Jaguar book
targeted for a PowerBuilder audience, I was pretty excited
when I finally got a copy in my
hands. However, I was also a little apprehensive. For the up-todate technical information I rely
heavily on the Sybase
newsgroups, technical seminars
and magazine articles. It takes 6
– 9 months to publish a technical book. So by the time a technical book hits the stands
the information it contains is approximately a year old.
Given the above, my expectations for the book were not
set too high. I expected a lot of unrelated “filler” material
and a relatively small section of current information. Boy,
was I pleasantly surprised!
The book begins with a brief overview of distributed computing and introduces the topics of application partitioning as well as application server specific topics such as
load balancing, connection pooling, and scalability. Next
chapter provides an application server overview with a
solid section on CORBA and Jaguar. What I like about the
book is that all the topics are described from ground zero.
The author does not assume an in-depth knowledge of any
application server related subject matter. The appendix
even contains a TCP/IP primer section. The description of
Jaguar environment follows the introduction. Basic administration, organisation of packages and components, database connectivity, and connection caches are some of the
topics. The real meat is in the PowerBuilder section. The
book provides a detailed description on PowerBuilder
component design as well as client applications. The tips,
notes and warnings are very appropriate and should save
valuable hours of development time. Ample time is dedicated to proper design and coding techniques, highlighting some of the nuances specific to Jaguar component
based development.
What is missing from the book are some of the more advanced EAServer topics, specifically a detail description
of the EAServer load balancing and failover configurations. However, the book was never intended to be a complete EAServer reference. Web DataWindow component
description is absent, possibly due to the its introduction
late in the beta cycle. I would also like to see more coverage on Jaguar interfaces from other tools / applications:
page servers, such as ASP or PowerDynamo, Java applets,
etc... But I am getting ahead of myself. As the title implies, the book is targeted at PowerBuilder developers looking to gain insight into n-tier application development with
Jaguar. In this area the book will meet and exceed anyone’s expectations.
Why all this fuss about Jaguar, or application servers in
general? According to the Forrester Research business
analysts, the U.S. business-to-business e-commerce revenues will grow to $1.3 trillion by 2003. This is why Sybase
is talking about Enterprise Portal solutions. If you are a
PowerBuilder developer and you want to be a part of the
new wave of business application you HAVE to master
EAServer!
The Jaguar Development with PowerBuilder 7 book by
Michael Barlotta provides a solid application server foundation for any PowerBuilder developer. It offers a platform from which anyone can confidently dive into the
world of enterprise e-business application development.
Jaguar Development with PowerBuilder 7, ISBN # 1884777-86-4 is published by Manning Publishing company. More information is available on their website at
http://www.manning.com/barlotta2/
?
Boris Gasin is a Chief Technology Officer at Dynamic
Technology Group, a New
Jersey based consulting company specialising in Internet
and Client-Server technologies. Boris is a member of
Team Sybase and is a three
time winner of the Team
MVP award. Boris is a co-author of PowerBuilder Foundation Class Professional Reference published by
McGraw-Hill, ISBN # 0-07-913267-7 and a contributing author of the PowerBuilder 6.0 Secrets of the Masters by SYS-Con Publishing. He can be reached via
email at [email protected].
Page 30
LITTLE HELPER OF THE YEAR AWARD
by Arthur Hefti
This is the 3rd time that
the Little Helper of the
year is being awarded.
This overview goes
through all the Little
Helper articles of 1999,
gives a short update on
any new features and categorizes the Little
Helper. I’ll use the same
categories as the year
before:
•
•
•
Programmer Productivity
Add On
Various
Category
Progr. Productivity
Review/Cur. Version
1.33/1.35
Original Review
June 1999
Download www.ozemail.com.au/~butchc/utils/
Short Description
DBDelta is a small utility that compares two Sybase SQL
Anywhere Databases and generates the needed scripts to
sychronize them.
New Features
Now includes check constraints on tables and Columns
EncryptX By InnerDynamic Software
Category
Review/Cur. Version
Original Review
Download
PowerProbe by DevelopWare
Category
Review/Cur. Version
Original Review
Download
DBDelta by Charles Butcher
Various
2.0 / February 1999
-
Short Description
PowerProbe is a PowerBuilder documentation tool that
generates HTML files and also allows browsing of projects.
New Features
Not available any more.
AddOn
3.1/3.11
August 1999
www.innerdynamics.com
Short Description
EncryptX is an ActiveX that can encrypt files using Blowfish and compress using C-CADE files and strings.
New Features
EncryptX Lite, is a blowfish only component without compression.
Bubble Help
PBLPeeper by Terry Voth
Category
Review/Cur. Version
Original Review
Download
Progr. Productivity
1.1.0/1.2.02
April 1999
http://www.visual.com/gallery/
TVoth/index.html
Short Description
PBLPeeper is a tool to view, analyze and compare
PowerBuilder objects.
New Features
Support for PB 7 including new controls, embedded NVOs
and the new trace file. Customizable on how much information from the ancestor objects will be included in the
object information. A couple of minor enhancements.
PBL Peeper is the Little Helper of the year!
Category
AddOn
Review/Cur. Version
1.03/1.03
Original Review
October 1999
Download www.lonestar.texas.net/~chakes/bubble.htm
Short Description
Bubble Help allows you to show a small yellow window
with some informational text, known as Bubble Help or
Tooltips.
New Features
None.
VersionEdit by E. Crane Computing
Category
Review/Cur. Version
Original Review
Download
AddOn
1.0/1.0
December 1999
www.ecrane.com
Short Description
VersionEdit allows you to edit version information
resources in any executable, ocx or dll.
Page 31
a Client/Server and Internet development and consulting company
7RROV
&OLHQW6HUYHU
'HYHORSPHQW
- Custom made Software in any Business
Area
,QWHUQHW
(QWHUSULVH,1HW
'HYHORSPHQW
- Custom made Web Sites
+ Easy to maintain
+ Fast Development
+ Public Hosting available
'HYHORSPHQW
- Custom made Web
Sites for Intranet and
Internet usage
7UDLQLQJ
- For Sybase AG and 5HVDOH
- ColdFusion
SQL AG
- HomeSite
- ScriptBuilder
&RQVXOWLQJ
- On various PowerBuilder Topics
6\EDVH&$33DUWQHU
&ROG)XVLRQ5HVHOOHU
5HVDOH
- SilverStream Reseller
6LOYHU6WUHDP9$5
Catsoft Development GmbH, Amdenerstr. 28a, CH-8872 Weesen
Tel: ++41 55 616 51 11, Fax ++41 616 51 14
Web: www.catsoft.ch, E-Mail: [email protected], Compuserve: CATsoftCH
VERSIONEDIT
from E. Crane Computing
reviewed by Arthur Hefti
Introduction
When you check the properties of a PowerBuilder Executable in the Explorer you find that there is the same information in the Properties Dialog as in the Properties Dialog of PowerBuilder. This means that the company shown
is Sybase and the descriptions and versions mention
PowerBuilder.
be replaced, is actual or even more recent than the version
the user wants to install.
VersionEdit also comes with a command line application
allowing you to include version settings into a batch job to
create your installation files.
If you don’t like this and want to provide your company
name, file and product versions there’s now an easy way
to do it. E. Crane Computing just released VersionEdit to
edit version resources in executables and DLLs.
Description
VersionEdit is a Resource Editor that can change the version resources in any executable or DLL. After opening a
PowerBuilder executable the version information is shown
on the screen.
Conclusion
By simply clicking on an entry you can change the fields
Value and Label. In addition to changing entries you can
also add and delete whole entries. You can even add additional version information entries for different languages
or character sets.
Usage
The advantage of setting the version information of a file
is not only showing the name of your company, the product version and some copyright information to a user looking at the properties of the file in the explorer.
Even more important is the that a setup application can
read the version information and determine if a file has to
VersionEdit is a simple but useful tool that allows you to
customize the version resource information in any application, DLL or OCX written in any language. VersionEdit
comes with a standard setup and contains a complete help
file in the new explorer style.
Pricing and Availability
The price for Version Edit is $75. It can be downloaded
from the E. Crane Computing Website at http://
www.ecrane.com
E. CRANE COMPUTING
16 Centre Street
Concord, New Hampshire 03301, USA
Phone: +1 603-226-4041
Fax: +1 603-226-4091
Page 33
Level 5 Software launches Object
Browser for PowerBuilder
Verteilte Geschäftsabwendungen mit
HOW und PowerBuilder entwickeln
An easy to use object browser written by PowerBuilder
developers for PowerBuilder developers.
Rüsselsheim/Dresden, Dezember 1999: Hohe
Anforderungen aus einem raschen technologischen Wechsel
fordern die Anwendungsentwicklung heute stärker als zuvor.
Dabei geht es nicht nur um das Erreichen einer höheren
Effizienz bei der Anwendungsentwicklung, der Trend zu
unternehmensweit vernetzten Anwendungen und die
Bedeutung des Intra-/Internets fordern auch neue
Anwendungseigenschaften. Eine führende Lösung für diese
Problemstellung ist das Produkt HOW der Riverton Software
Corp., das von der Precision Technologies GmbH jetzt in
der Version 3.0 angeboten wird.
West Hartford, CT , November 22, 1999 – Level 5 Technology’s software division, Level 5 Software, today announced the availability of Object Browser for
PowerBuilder. Object Browser for PowerBuilder is an
extension to the class browser which is supplied with
PowerBuilder. It will help PowerBuilder developers visualize and analyze effective code, accessable functions and
events, variables and structures for all PowerBuilder objects.
Object Browser for PowerBuilder facilitates searching,
scanning, editing and printing of an object’s definition and
implementation, as well as its ancestor and nested objects,
through a easy-to-learn graphical user interface.
This simple to use interface allows the developer to point
and click through all of the critical object information without having to open multiple windows. Functions, events,
variables and attributes for the opened object, its controls
and ancestor objects are all within reach with just a single
window.
Product Features
•
•
•
•
•
•
•
•
•
•
•
Browse function and event scripts.
Browse variables and variable painter scripts.
Browse attributes.
Browse definition.
Browse controls.
Browse ancestor objects.
Browse ancestor script.
Browse object syntax.
Edit scripts and syntax and save the changes to a
file.
Print exceptional looking reports.
Create documentation.
Finally an easy to use, cost effective browser which will
help PowerBuilder developers take their software development to the next level …
For more information and free product evaluation software visit Level 5 Software’s website at
www.level5technology.com
PowerBuilder is one of the leading 4GL application development tools on the market today and a registered trademark of Sybase, Inc.
HOW ist eine komponentenbasierte Entwicklungs- und
Laufzeitumgebung. Im Produkt sind die klassischen Mittel eines
A/D-Tools enthalten. Dabei baut HOW auf der UML auf, bietet
jedoch zusätzliche Diagramme, die insbesondere die Entwicklung
von komponentenbasierten Geschäftsanwendungen unterstützen.
So können in der Anforderungsanalyse Geschäftsregeln definiert
werden oder wird beim Design und der Entwicklung auch die
relationale Datenbank und die Benutzeroberfläche berücksichtigt.
Eine hohe Effizienz wird durch die Möglichkeit der
Wiederverwendung von bereits vorhanden Komponenten und die
enge Integration mit der jeweiligen Zielumgebung (PowerBuilder,
Java, Visual Basic) erreicht. So können ca. 80 % einer typischen
Anwendung durch Point-and-Click zusammengebaut werden.
Neben diesen Funktionen umfaßt HOW ein OpenFrame genannten
Framework, das eine komplette Laufzeitinfrastruktur für verteilte
Anwendungen bereitstellt. OpenFrame besitzt eine Drei-SchichtenArchitektur
(User-Interface,
Business-Logic,
Datenhaltungsschicht). Das Framework wird in den Modellierungsund Entwicklungsfunktionen von HOW berücksichtigt und
vereinfacht dadurch die Entwicklung verteilter Anwendungen
erheblich. Das Framework unterstützt die Nutzung von Sybase EAS
oder des Microsoft Transaction Servers. Eine hohe Laufzeiteffizienz
wird durch das Arbeiten mit Resultsets und der Anwendung der
Late-Instantiation erreicht.
Die Einführung einer solchen Entwicklungstechnologie erfordert
natürlich nicht nur die Auswahl eines Produkts. HOW wird daher
durch das KnowHOW-Konzept ergänzt. Das KnowHOW-Konzept
umfaßt neben dem Produkt, den KnowHOW –Prozess, eine
Sammlung von Best-Practices für die Entwicklung von
Geschäftsanwendungen und ein Servicekonzept des Herstellers und
der Partner. Der KnowHOW-Prozess ist kompatibel zum Unified
Software Development Process, jedoch ergebnisorientierter auf die
Bereitstellung verteilter Geschäftsanwendungen ausgerichtet.
HOW liegt in der Version 3.00.10 vor. Die PowerBuilder-Cartridge
unterstützt PowerBuilder 6.5 und 7.0. Das Framework unterstützt
sowohl Sybase EAS als auch Microsofts MTS. In Deutschland,
Österreich und der Schweiz werden die Kunden von Riverton durch
die Precision Technologies GmbH, Systemhaus für innovative ITTechnologien, betreut. Precision Technologies bietet dabei
insbesondere auch Unterstützung für das KnowHOW-Konzept an,
indem es neben dem Trainingsangebot eine Vielzahl von
Serviceleistungen anbietet. Weitere Informationen können unter
[email protected] angefordert werden.
Page 34
PowerTimes provides this space to the subscribing user
groups to publish their news, announcements and other
communications to their members. Please send your material to the editor or the co-editor of PowerTimes (addresses under “Impressum”).
If your user group doesn’t subscribe to PowerTimes yet,
please contact us to get the very reasonable rates or check
out our web site at:
http://www.powertimes.com
Albany New York PowerBuilder User Group
President:
Greg Fisher
[email protected]
Vice President:
Ed Donohue
[email protected]
Treasurer:
Danna Goodwin
[email protected]
Secretary:
Steve Davies
[email protected]
• The members of ANYPBUG are dedicated to the advancement of their skills both professionally and technically.
• ANYPBUG is a not-for-profit organization established
as a forum to help members realize their goals.
• Through regular meetings and events, members learn the
latest techniques and trends surrounding the
PowerBuilder product. Members also have a chance to
view emerging technologies before they become prominent in the work place.
• Membership is free! Several forward thinking organizations pay an annual fee to help support the activities of
ANYPBUG.
Baltimore PowerBuilder User Group
The
Baltimore
Area
PowerBuilder Users Group
(BAPBUG) meets the first
Wednesday of the even numbered
months at the Social Security Administration OAG building in
Woodlawn, Maryland.
http://www.geocities.com/SiliconValley/Bay/8680
President:
Vice President:
Secretary:
Treasurer:
Debbie Arczynski
[email protected]
BillBitman
[email protected]
Gordon Giffen
[email protected]
Fred Grau
[email protected]
The members of the Baltimore PowerBuilder User Group
receive PowerTimes thanks to a generous sponsorship from
http://www.ctpartners.com
Specializing in the Sybase, SilverStream and Microsoft
families of products, Corporate Technology Partners offers a full line of client/server and web application development and training services. Point your browser to http:/
/www.ctpartners.com/asp/tips.asp for frequently updated,
cutting edge whitepapers, and a variety of helpful, technical tips from industry pros. Visit today to see how we can
help your organization realize the most effective emerging technology solution.
Page 35
Greater Boston PowerBuilder User Group
The officers of the User Group are:
President:
Dan Murphy
Vice President:
Olga I. Demidova
[email protected]
Treasurer:
Karen Ness
[email protected]
Secretary:
KEVSystems is a PowerSoft Consulting Partner and
provides system design and integration assistance for
financial, personnel, and medical systems.
Susan Thompson
[email protected]
The members of the Greater Boston PowerBuilder User
Group receive PowerTimes thanks to a generous sponsorship from KEVSystems Inc., located in Newton, MA.
Our staff, made up exclusively of Certified
PowerBuilder Developers, has over 20 years experience in securities processing systems and database design. We have worked on systems for trust accounting,
shop floor management, personnel, and three-tiered integration.
KEV Systems, Inc.
65 Stony Brae Rd.
Newton, MA. 02161-1728
Phone:
Fax:
(617) 964 1426 or (800) 376 5755
(617) 527 0090
ChicagoLand PowerBuilder User Group
The CPBUG website can be found at:
The officers of the CPBUG are:
President
Michael Baraz
Vice-President Peter Vassilatos
Secretary
Jeff Barnes
Treasurer
Nicky Petrila
(630)
(312)
(847)
(630)
http://www.cpbug.org
235-4529
856-6720
549-7765
792-5073
The Secretary of the ChicagoLand PowerBuilder User
Group, Jeff Barnes, can be reached at the following email address: [email protected].
Central Ohio PowerBuilder User Group
President:
Vince Fabro
[email protected]
614 - 220 7900
Vice President:
Jeff Kusner
[email protected]
614 - 213 5329
Refreshments: 6:00 - 6:15pm, Presentation: 6:15
Secretary:
Our mailing address is:
Central Ohio PowerBuilder User Group
P.O. Box 363
Worthington, OH 43085-0363
Jim Nelson
[email protected]
614 - 418 1748
Treasurer:
Todd Dake
[email protected]
614 - 418 1748
The Central Ohio PowerBuilder Users Group generally
meets during the second week of odd numbered months.
Meetings alternate between member demos and product
presentations.
Location:
Internet:
Bank One Offices
1111 Schrock Road, Columbus, OH
http://www.cmhpbug.com
Page 36
Club Fibonacci - Club des Utilisateurs Sybase France
Le club francais des utilisateurs PowerBuilder n’existe
plus en France. Il a été remplacé par le Club Fibonacci:
le club des utilisateurs Sybase, qui est géré directement
par Sybase France.
Les membres du Club Fibonacci reçoivent PowerTimes
grace au sponsoring généreux de la société NOVALYS.
(The PowerBuilder User Group France doesn’t existe
anymore. It has been replaced by the “Club Fibonacci”
- the Sybase Users Group in France
The members of the Club Fibonacci (France) receive
PowerTimes thanks to a generous sponsorship from
Novalys.).
NOVALYS met en place des outils,
méthodes
et
normes
de
développement pour la réussite de
vos applications. Les consultants de
Novalys accompagnent et certifient
vos projets pour garantir leur réussite technique.
NOVALYS creates, distributes and supports complementary tools for PowerBuilder and is the distributor of HOW
from Riverton Software in France.
Visit our website at: http://www.novalys.fr.
Novalys SA
140 rue Galliéni
92100 Boulogne-Billancourt / France
Tel : 01.46.99.66.20
Fax: 01.46.99.08.92
PowerBuilder User Group Italia
Vogliamo ricordare
a tutti gli utilizzatori
di Powerbuilder di
lingua italiana che
l’iscrizione
al
Powerbuilder User
Group Italia e’
Gratuita, basta solo
registrarsi sul nostro
web e si ha diritto a
partecipare ai forums in italiano dove scambiare idee
su Pb con altri utenti.
E-mail: [email protected]
Fax:
0331/700189
Internet: http://www.telemacus.it/pbug/pbug.htm
The members of the PowerBuilder User Group Italy receive PowerTimes thanks to a generous sponsorship from
Sybase Italia.
L’ abbonamento a PowerTimes per gli iscritti del Power
Builder User Group Italia e’ stato gentilmente offerto da
Sybase Italia.
New Jersey PowerBuilder User Group
The President of the New Jersey PowerBuilder User
Group, Guy Yasika, can be reached at the following email address: [email protected]
Dynamic Technology Group, Inc.
1055 Parsippany Blvd., Suite 501-26
Parsippany, NJ 07054
The NJPBUG website can be found at:
http://www.njpbug.org
Phone:973.402.5600
Fax: 973.402.5620
The members of the New Jersey PowerBuilder User
Group receive PowerTimes thanks to a generous sponsorship from Dynamic Technology Group.
http://www.dynamictechgroup.com
Page 37
PowerBuilder User Group Norway
Formålet med vår brukerforening er todelt:
1) Den skal være et kompetanseskapende forum
for
brukere
av
Powersoft-produktene
2) Den skal være et kontaktpunkt mellom brukere
og Sybase Norge AS når det gjelder forslag til
endringer/forbedringer av produkter og relaterte
tjenester.
De fleste arrangementer i brukergruppens regi vil
foregå på kveldstid. Arrangementene tar sikte på at
man skal kunne utveksle erfaringer og kunnskap
gjennom at brukere presenterer sine løsninger,
tredjepartsleverandører presenterer sine produkter,
konsulenter viser prosjekter de har deltatt i etc. Neste
års norske brukerkonferanse vil bli arrangert i
samarbeid med Sybase Brukergruppe Norge.
Brukerforeningen vil også ha noen arrangementer i
samarbeid med Sybase Norge AS slik som
presentasjoner av nye releaser o.l. Ønsker du mer
informasjon om Powersoft Brukerforening Norge, ta
kontakt med Thomas Revetal (Zema AS) på tlf. 905
64 568.
Thomas Revetal
Zema AS
Tlf. 90 56 45 68
Stig Melling
Rune Nerhagen
Wenche Fronth
Øystein Rolfsen
Leif Aksel Grøthe
Avenir ASA
WM-Data
Hærens Forsynings Kommando
De Norske Bokklubbene
Online Consulting Partner AS
Tlf.
Tlf.
Tlf.
Tlf.
Tlf.
23
22
23
22
90
15
57
09
02
52
75
70
63
20
74
00
00
86
00
94
Oregon PowerBuilder User Group
The Oregon PBUG meets every other month, usually
from 6-8pm on the first Wednesday of odd-numbered
months (January, March, May, July, September, and November). We meet in downtown Portland (see web site
for map and topic information.)
Client Server Group, Inc.,
is a leading provider of software development and consulting services serving the Pacific Northwest. In addition,
CSG is a supplier of industry leading client/server software products, software development tools, and related
training.
Web site address:
Client Server Group, Inc.
5201 SW Westgate Drive
Suite 208
Portland, OR 97221
Phone: (503) 292-0859
http://www.csgpro.com
http://www.teleport.com/~wagnerc/pbug
1999 Officers:
President:
Treasurer:
Secretary:
Brad Ashton
[email protected]
Frank Calfo
[email protected]
Julie Beranek
[email protected]
MetaCorp Strategies International
The members of the Oregon PowerBuilder User Group
receive PowerTimes thanks to a generous sponsorship
from the following two companies:
-
Client Server Group, Inc.
MetaCorp Strategies International
Fax: (503) 292-1485
was founded in 1987 and is an information systems consulting firm engaged in all aspects of systems design, development, integration, education, and management.
MetaCorp Strategies is headquartered in Westport, Connecticut with sales offices in Wallingford, West Hartford
and Westport, Connecticut, Portland, Oregon and
Scottsdale, Arizona.
MetaCorp Strategies International
10300 SW Greenburg Road
Suite 470
Portland, OR 97223
Phone: (503) 452-6333
Fax: (503) 452-6337
http://www.metacorp.com
Page 38
Oklahoma PowerBuilder User Group
We have regular monthly meeting on the First Wednesday of every month.
President:
Dianna DeMotto
Phone: (405)360-3386
Email: [email protected]
Vice President:
William Walter
Secretary:
Scott Chaney
Rattan Consulting is a Business Consulting company.
Information on meetings can be found on our website
at:
http://www.okcpbug.iwarp.com
The members of the Oklahoma PowerBuilder User
Group receive PowerTimes thanks to a generous sponsorship from Rattan Consulting from Oklahoma City.
We specialize in designing and programming custom window based & internet applications. We have experience
with EA Studio, EA Server, Powerbuilder, Visual Basic
and C /C++. We also have staff specially trained and experience in Data Warehousing.
We are a Sybase Premier Partner and sell Sybase software
at discounted rates so call us for all your software needs.
Rattan Consulting
4334 NW Expressway Suite 259
Oklahoma City, OK 73116
Phone:(405) 810-8005
Fax:
Email: [email protected]
(405)810-8097
Toronto PowerBuilder User Group
President:
Paul Bis
[email protected]
(416) 866-5493
Vice President:
Ioana Naum
Membership
Admin.:
SoftApproach Corporation is a software vendor. It offers
PB Spy, a debugging tool for PFC-based PowerBuilder
applications. It helps you monitor your application process and view your data easily. Plus it can detect memory
leaks.
If you are interested in using PB Spy to promote your
user group activities, please contact:
Paul Bis, President of the Toronto PowerBuilder User
Group at [email protected]
Debbie Brittain
Assistant:
Haibo Peng
[email protected]
Assistant:
Earl Armbrust
[email protected]
Assitant:
Eugene Osadchi
[email protected]
For more information about the product, please check the
following website:
http://www.softapproach.com
The members of the Toronto PowerBuilder User Group
receive PowerTimes thanks to a generous sponsorship
from SoftApproach Corporation.
Page 39
St. Louis PowerBuilder User Group
We meet on the 3rd Tuesday of every other month, beginning in January at Monsanto Corporate Headquarters (directions on the web page). The meetings begin
at 5:30 pm.
Solutech is a company specializing in client/server, web
application development, technical training, vendor certified consulting and software solutions.
The new website is at http://www.stlpbug.org.
President:
Jay Hunt
[email protected]
Vice President:
Allen Phelps
[email protected]
Secretary:
Neal Bockwoldt
[email protected]
Treasurer:
Dave Blankenship
[email protected]
Solutech maintains strategic partnerships with leading software vendors such as Microsoft, Oracle, Rational,
Powersoft and Sybase. These partnerships give you a direct link to new product information and on-going technology developments. Solutech is a local extension of our
vendors, bringing you peace of mind in a constantly changing environment.
The members of the St. Louis PowerBuilder User Group
receive PowerTimes thanks to a generous sponsorship
from Solutech, Inc. in St. Louis.
Solutech has nine offices and training centers. For a complete list of our free seminars and vendor certified training
classes; or to view the latest company information on
Solutech, our locations, and our services, please visit us
on the web at www.solutechinc.com.
UK PowerBuilder User Group
An independent group formed in
1992, PBUG currently has a
membership approaching 150
companies. Events are held three
times each year with attendances
in the region of 200 at each event.
The group is self-funding and receives excellent technical support
from Sybase.
PBUG Council:
Chairman:
Warren Clayburn
[email protected]
Treasurer:
Ian Soden
[email protected]
Secretary:
David Speight
[email protected]
Member:
Brick Du Bourg
[email protected]
The member council runs PBUG, but the day-to-day work
is managed by Pb Associates.
Anne Bocock is responsible for most aspects of the group
including organising the conferences and putting together
PBulletin. Judy Barnett handles all accounting matters. You
can reach Anne and Judy at the PBUG office.
Telephone:
Fax:
Email:
Internet:
0181 421 3533
0181 420 1420
[email protected]
http://www.pbug.co.uk
Postal address:
Suite A8, Kebbell House
Carpenders Park
Watford, Herts. WD1 5BE
Page 40
Ottawa PowerBuilder User Group
The Ottawa PowerBuilder User’s Group is
composed of Ottawa-area Information Systems professionals who are interested in staying on the leading edge of Power-Builder and
client/server development.
President:
The group meets on the 2nd Wednesday of each month,
from September through May. At each meeting, a new
and interesting topic is presented and discussion is encouraged. These meetings are a great place to meet fellow users, discuss issues and ideas, and network for future opportunities.
VP Administration:
Bill Stevens
[email protected]
Treasurer:
Wade Kornik
[email protected]
Secretary:
Paul Grawal
Carole Hargrave
[email protected]
VP Public Relations: Ron Guilbault
[email protected]
The Ottawa PowerBuilder User Group website can be
found at http://www.opbug.com
PowerBuilder User Group Germany
Besuchen Sie die Homepage der
PowerBuilder User Group Germany:
http://www.pbugg.de
PBUGG e.V.
c/o Power People
Ludwin Feiten
Am Borsigturm 48
D-13507 Berlin
Tel.:
+49 (0)30 4303 2350
Fax:
+49 (0)30 4303 2355
Sybase and PowerBuilder User Group Switzerland
CATsoft
President:
Rolf André Klaedtke
[email protected]
Vice President:
Andreas Theis
[email protected]
Treasurer:
Martin Rothenberger
[email protected]
Secretary:
Celia Hegarty
[email protected]
Member:
Werner Warger
[email protected]
Internet:
http://www.spbug.ch
CATsoft Development GmbH is a Swiss Client/Server and
Internet/Intranet company specializing on PowerBuilder
and JAVA development. We have experience in
PowerBuilder on the Internet (Web.PB), Powersoft’s PFC
and HOW. We also do Cold Fusion and SilverStream.
CATsoft Development GmbH
Amdenerstrasse 28a
CH-8872 Weesen
The members of the Sybase and PowerBuilder User
Group Switzerland receive PowerTimes thanks to a generous sponsorship from CATsoft Development GmbH.
Phone:
Fax:
Web:
Page 41
+41-55-616 51 11
+41-55-616 51 14
www.catsoft.ch
Interested in Java ?
Then don’t miss the
HANDS-ON JAVA SEMINAR
with Bruce Eckel
When:
April 10 - 14, 2000
Where:
Hotel Préalpina
Chexbres - Montreux
This is an introductory Java seminar. It will be an intense, 5-day Hands-on seminar taught by Bruce Eckel, author of “Thinking in Java” (an extract of this book
comes with PowerJ from Sybase) and the best-selling “Thinking in C++”, which
won the Software Development Magazine Jolt Award for best book in 1995.
Bruce Eckel has years of background teaching seminars and consulting in objectoriented programming. He is dedicated to giving you the best learning experience possible.
The Préalpina Hotel offers you a superb setting in its own park with an unimpaired view of the Lake and Alps just minutes from the “Chexbres” motorway
exit.
For more information see http://www.raksoft.ch
RAK Software, Consulting & Publishing
Rolf André Klaedtke
Bächlistrasse 21
CH-8280 Kreuzlingen
Phone:
Fax:
E-mail:
++41 - 71 - 670 01 60
++41 - 71 - 670 01 71
[email protected]
Page 42