Monday, June 08, 2009

See The New uniPaaS Blog

This blog has been replaced by the Magic of uniPaaS blog to reflect the name change from eDeveloper to uniPaaS. Please see the new uniPaaS Blog

Friday, April 25, 2008

MIUG Business Networking Conference 2008

Just saw a preview of Avikam Perry's roadmap announcement. Wow! I can't tell you what I saw, but I can tell you it will lead to unprecedented power for developers and huge benefits for business organizations running Magic applications. It is very important that you actually be present for MIUG as this presentation is not likely to be available in any other forum until what is being shown is actually released. You will want to prepare for this and the only way to do so is to be present at MIUG.

Monday, March 31, 2008

Magic Link Interview with Steve Blank

Steve Blank of S.G. Blank Consulting is no newcomer to eDeveloper™. His experience with, and advocacy of the platform, goes back more than 20 years to his introduction to Magic version 3.5 and it’s been his “tool of choice” ever since. But Steve is more than just a user; he’s an active contributor to the system’s capabilities. One example is the DDF Maker Wizard—a utility provided in eDeveloper V10—that lets developers enhance the eDeveloper studio by making their own utilities and wizards.

Magic Link: Tell us a little about your business.

Steve Blank: S.G. Blank Consulting only has one employee—me. I specialize in three different areas. First, I provide training for in-house developers on the latest aspects and features of Magic’s eDeveloper. Second, I speak at conferences and present seminars/classes on different aspects of eDeveloper. Third, I provide custom programming services to a handful of customers who, generally speaking, aren’t big enough to have their own in-house staffs, but who see the benefit of custom applications. It’s in this third area that I spend most of my time. I’ve been working with eDeveloper for about 20 years, since version 3.5, when it became my tool of choice, and I’ve been using it ever since.

ML: What types of training services are you called on to provide?

SB: Most of the companies for which I provide training are small to mid-size businesses with five or fewer developers. They are typically organizations that have developed their entire business system in Magic and, so, have a huge investment in it, and are looking for ways to improve performance or to solve other problems that have arisen as a result of their growth. So I’m usually not training people who are new to eDeveloper, but rather people in companies that have used the product for a long time and are looking for ways to make things better. The areas on which I tend to focus are multi-user concurrency, performance, database design, and data integrity.

ML: Do you typically provide training, then, for the same customers on a repeat basis?

SB: Yes. Often, I will get called in by a company that is experiencing a specific problem and, after helping them to resolve that problem, will then get called back to provide a wider scope of training. For example, a few years back, I received a call from a company in El Salvador that was experiencing increasingly serious locking and performance issues with their eDeveloper application. I went down and, after spending a couple days analyzing their application and database, showed them how to solve their problems and gave them some additional pointers on best practices. Each year since then, they’ve brought me back down for a week to train their development team on what’s new in eDeveloper, and to provide in-depth instruction on topics such as transaction processing and error recovery.

ML: You mentioned that you frequently speak at conferences. What types of things do you speak about?

SB: I tend to address many of the same topics that arise in my consulting and on which I often focus in my training, as well as to explore newer features in eDeveloper such as integrating ActiveX controls and COM objects. I really enjoy attending and presenting at conferences, for a couple of reasons: first, preparing for conferences gives me an excuse to experiment and create demo programs from which I learn something myself; and second, it’s a great way to network and to further my reputation in the business in a way that comes back to me. Plus, it’s just plain fun to meet and talk shop with people literally from all over the world.

ML: What are the kinds of issues that people have with eDeveloper that cause them to contact you?

SB: One of the strengths of eDeveloper is also one of its weaknesses: it’s really, really easy to write complex applications without a lot of formal training. Frankly, one can sit down and crank out some pretty amazing stuff without having any formal training in programming or database design because the tool abstracts the complexities to the point that the developer doesn’t really need to be aware of it. That’s one of its strengths because you can put applications together really quickly. But that also means that it’s very easy for bad habits to creep in. Take database design, for example. A Magic developer isn’t forced to be concerned about the table structures and such things that are underlying; one can just go in there and plunk things down. As a result, a lot of applications tend to have databases that aren’t at all normalized, which is OK when things are small with very few users. But as things grow and the database gets bigger and there are more concurrent users, problems can arise. That’s one example of when I might get called.

ML: What other types of issues do your clients have that you help with?

SB: A client might call up needing new reports or a change in functionality. One of the reasons I like eDeveloper so much is because it’s so much easier and faster to do not only new development, but also this kind of ongoing maintenance. One of the reasons to develop a custom application is so that one can constantly tweak it as one goes along, adding new features and functionality. With eDeveloper, that can happen a lot more quickly, which translates into lower cost (even when the customer is hiring someone like me to do it) than it can in something like Visual Basic. For example, my biggest customer in Massachusetts manufactures and distributes products for the optical industry. For lots of reasons, their software needs to evolve, practically constantly, and I make that happen. I develop a relationship with companies like that such that I’m really just an extension of their staff—almost an employee.

ML: There are some people who, like you, got started with Magic in the early days but then didn’t do much more with it. Why is that?

SB: First, Magic is a small company and suffers from a lack of brand awareness. Not enough people know Magic is out there, but it survives because of those of us who do know it are such zealous adopters that we just can’t see ourselves going anywhere else. More than that however, it often comes down to a political issue in favor of Microsoft. Whoever ever got fired for recommending Microsoft?

ML: Have you been able to observe companies like that?

SB: I knew one company that had developed its entire business system in eDeveloper and had run that way for 12 years, but then dropped it in favor of one of the major ERP vendors. They ended up shooting themselves in the foot. But once those decisions are made, people tend never to go back and revisit them or ask themselves if it turned out to be a good idea. They abandoned a significant investment in one system for another that ended up costing them many times more. But even though Magic has been around almost since the inception of the IBM PC and almost as long as Microsoft, people still ask, “Who’s Magic? Are they going to be around next year? Can we afford to take a chance with them, or should we go with Microsoft?” It’s a shame when a company turns its back on a significant legacy investment that was costing them much less money to maintain and, as a result, giving them a much better return on their investment.

ML: How can Magic go about showing those people what their prior investment in Magic could do for them now?

SB: I see a real opportunity now to speak to people who care about total cost of ownership. There are still people in this world who are willing to look at alternatives and to consider something different from the mainstream. Magic is doing a good job right now by releasing a product like eDeveloper Discovery, and by continuing to add new functionality.

ML: What advice do you have for Magic’s customers—old and new?

SB: Take a look at what Magic has done to improve the product over the years, such as addressing today’s increasing need to consume and serve web services, build and work with composite applications, and integrate with legacy applications and databases. If developers see how fast they can get the job done with eDeveloper and management sees how favorable the TCO is, they should agree that Magic is the answer.

Sunday, March 09, 2008

A Little Magic History

I am constantly being asked about Magic's history, about the story of how the amazing technology that we know today evolved. Well, I can only tell you what I know.

Magic Software was founded in 1983 by Mashov Computers. Magic marketed application development tools and application deployment technology in the boom years of the personal computer craze (a boom that one could argue has not yet subsided). The programmers at Magic decided that if the computer was going to be perosnal and easy enough for everyone to use, that writing software was going to have to be a whole lot easier. While there had been some initial experimental attempts out of universities to create RAD -- rapid application development tools. None of them were all that useful because they tended to either be too complex or too restrictive and limited. So the developers at Magic set out to find a paradigm that would deliver full functionality and significantly reduce complexity.

SO there first and easiest decision was what not to do. They decided not to write a new computer programming "language." In fact they avoided traditional computer programming concepts and instead introduced a "table-driven" RAD tool. Today we know about concepts like pseudo-code, but they were really doing a lot of things we talk about in IT today: pseudo-code, services, mashups, etc. before anyone knew what to call them and really before they could be done as elegantly as Magic can do them today. SO they adopted an approach that required no compiling or linking. Because the pre-compiled sturctures could be employed and tested iteratively, the users of this new tool were able to prototype very quickly and start seeing results in minutes rather than weeks or months.

Te rest as they say is history, but let's remind ourselves of what that history includes: five years of victories at the Droege International development competiton, including the final year in which Magic's customers swept every prize at the contest, forcing the organizers to give up. Why continue holding programming competitions if the results are a given, Magic is the best and fastest tool. Ah, if only the market dynamics today were that simple.

Magic has had to try to preserve it ssimple table driven concept despite massive torrents of change in the underlying architecture of the computer. Not only has there been a major shift from text-based DOS environments to newer and arguably improved GUI operating systems, I don't know why I bother to use the plural, we all know I'm talking about Windows. But there was also a major shift from standalone PCs, to networked PCs on a LAN to PCs connected over the Internet -- the "cloud" as we sometimes like to call it. Magic also got a little ambitious too. The world of DOS and Windows in the 1990s was still not where most of the Fortune 2000 companies transacted their IT business. So Magic decided to expand the concept to include VMS, Unix, OS/400 and eventually Linux. The original dos version used Btrieve, these other environments used other databases and ISAM file systems. So the Magic development tool had to be given new "gateways" to deal with these new databases. Magic was able to sell these gateways as seperate products to their customers. Of course that transition to these other environments also meant a difference in architecture for the applications. The original desktop application approach was not a broad enough paradigm for these new distributed architecturess, so Magic's tool added client-server and Internet deployment methodologies. Known today as eDeveloper V10, Magic's development tools can deliver applications over the Internet in a browser-client mode or an HTML merge mode that is similar to PHP in the way it tags the HTML and merges in the results of its processing.

I'll probably have a lot more to say about this topic in the future, but I'd better get back to the topic of migration before anyone complains that I forgot to deliver my promised final chapter on moving your application to eDeveloper V10.

Saturday, March 08, 2008

Converting to eDeveloper V10 (the Migration Story continues)

OK, you're probably thinking: I was a convert to the Magic way of developing a long time ago: why do I need to convert? But I'm talking about a more routine kind of conversion here, the conversion utility that automates the move from eDeveloper v9.4 to eDeveloper V10.
Needless to say, (oh don't worry, I know I say needless things all the time anyway), the Conversion Utility feature does not exist in the Discovery version. The discovery version is designed for beginners and beginners only. If you already have a big application, you're not a beginner.

Getting to Know the Conversion Utility


If you've gotten very far into this, you probably already know that eDeveloper V10 provides an Application Conversion utility for converting your eDeveloper V9 application into an eDeveloper V10 project. Please remember that this utility is designed only for full applications written in eDeveloper V9.4sp7 and onwards.So, if you have to do something to get your application to eDeveloper v9.4 sp7 (or later) first, then do that before attempting the conversion utility. Be warned.
As the documentation ably illustrates, you can launch the Application Conversion Utility from the Windows Start menu > (All) Programs > eDeveloper V10.1 > Migration > V9 Migration UI.
After you launch the application conversion utility, aka V9 Migration UI, you will see its Welcome screen. When you click the Next button, the Version 9.4 Applications Screen opens, and this is where the fun begins (OK, not really fun but I am trying to make this different from the documentation in tone and style, is it working?).

Version 9.4 Applications Screen


So you may be wondering, why do I have to add everything one by one? Well, the answer is simply that you may not feel the need to convert all your applications and components, so just choose the ones you truly want ti the new world of eDeveloper V10. (After all, why convert that cool BetaMax Catalog application? So when you convert an application, each application and its component must be added to the Version 9.4 Applications screen by clicking the Add button. If your application has references to a component that has already been converted, you should still add that component to the list at this point. That's right, do it again, you are telling the convert utility to make that component available to this application in the new world of eDeveloper V10. So just do it.
Each time you click the Add button of course, the Conversion Details screen opens and you have some disambiguation to do.

So This is How You Use the Conversion Details Screen


In addition to the how, I'll try to answer the why, without simply saying "because that's the way it is." Basically, the reason for the conversion details screen is for you to communicate your intent. Do you want to convert all of the application or just part of it? Do you want to convert a new component, or has it already been converted and you just want to reference it? These are the kinds of questions you are answering in this screen. So you simply select whether you are converting an application, part of an application, a component, or keeping the reference for a previously-converted component.
For each export file there are four possibilities (the order entered is not important):
Convert an application - The utility converts the entire application to V10 (but not its components, you are adding them separately, remember?).
Convert part of an application – Now it gets a little particular here, because this option cannot be combined with other conversion types in the same process. That doesn'tmean the very next add operation cannot use one of the other selections, it just means that in a single add operation, you are either choosing part of an application, or some combination of the other three options: convert an application, convert a component or keep a component reference. So, all the other options can be added one after another and all of them will be converted in the same conversion run or process. That is why, this option can only be selected if you have not yet selected one of the other options since starting this session of the utility.
You can continue with additional V9 export files using the Add button.

Convert a component - The utility converts the application to V10, and finds all of the references to the MCF or MFF in all of the Component repositories in the conversion list (the first screen). Then, the utility changes their references to the newly created ECF.
Keep reference for previously converted component - The utility points to the references of this component to the previously converted cabinet file. By doing this, we do not have to convert the same application twice. This is useful if we have a component with models, which is used in a number of different applications.
Depending on which option you select, you then fill in the application details and/or project details.
When you convert an application and its components, the utility will take the name of the component (entered in the Component File Name field) and change any reference to that file name in the Composite Resource Repository with the V10 cabinet file (in the V10 Project Name field).
The Cabinet file location field governs where the conversion process creates the cabinet file.

When you click the Next button, the General Settings screen opens.

Salute the General Settings Screen


The General Settings screen has the following settings:
V9.4 Magic.ini File – The Magic.ini file used in the V9.4 application.
Log file directory – A path for the log file directory.
Log Level – This setting has the following options:
Full – Displays the full log.
Partial – Displays errors and changes of behavior only.
Convert empty eDeveloper handlers – This property governs whether the Record Prefix, Record Suffix, Task Prefix, and Task Suffix will be converted if they are empty. In previous versions, these built-in handlers were created automatically even if they were empty. These empty handlers are irrelevant in V10. If you select this check box, the empty handlers will be included in the converted application. If this check box is not selected, the empty handlers will be removed.
"SpecialModalToolWindow" – In previous versions, the caption of Modal windows was narrow while in V10 it is a full sized caption. Select this check box if you want the Modal window height to be increased in order to fit the contents.

But as we shall see next, you can also go to directly to the conversion executable file.

Taking Command with the Command Line Conversion


eDeveloper V10 does not support the eDeveloper V9 export file structure, however it does provide a command line conversion utility called v9converter.exe that converts eDeveloper V9.4sp7 export files to a valid V10 application.
The v9converter.exe file is located in the eDeveloper V10 installation directory.
When the export file is executed with no parameters or when you enter /?,the Conversion utility help text will appear on the screen.
When you run the utility, the conversion results are displayed on the screen.
If the conversion process fails, you should verify that the command line syntax is valid and that the application is in a valid version 9 export file format. The utility will create the .edp file in the specified project directory and the project source files in the Source subdirectory.
The conversion log file will be created according to the -LOG parameter. If this parameter is not set, the log file will be created by its default name.

So remember, if you need to migrate only a partial application, you need to use the Command Line Conversion utility.

In the final entry on the migration process to eDeveloper V10, we will take a look at what the conversion utility parameters do, try to explain how application behaviors can be changed in the conversion process, and finally, recap some of the troubleshooting issues related to your conversion. Let's hope this whole approach demystifies a lot of this for those of you who have been wondering, what is really involved? As you can see, it takes about as long to explain it all in detail as it does to perform the actual migration. So much for the blah, blah, blah.

Tuesday, February 12, 2008

Crossing the Border to eDeveloper V10

Part One: Preparing Your Application


I don't know why exactly, but somebody coined the term "migration" to describe the steps involved in bringing an existing application from an older version of its development/deployment environment to a newer version. When I think of "migration" I picture a flock of birds flying south for the winter or a long line of cars crossing the border at Tijuana. Fortunately, migrating an eDeveloper v9 application to eDeveloper V10 is considerably less exhausting than either of those images might imply. Keep in mind, that eDeveloper applications cannot be converted to eDeveloper Discovery, since the purpose of Discovery is to introduce new developers to the Magic paradigm. Migration is therefore available only to eDeveloper Express and eDeveloper Enterprise.


eDeveloper V10 offers an entirely new approach to creating, storing and handling your eDeveloper application development projects. One of the things that you will notice is that eDeveloper V10 does not support the previous version's export file structure. But not to worry, a conversion utility is provided.

So crossing the border to eDeveloper V10 involves three easy steps: prepare your application for export, export the application, and run the conversion utility. It's just that simple, but let's look into each step a little more deeply and then discuss the three utilities available once your application has been migrated.

Preparing Your Application for Export


Prior to exporting your application, you should modify your application by replacing any unsupported features that you may have used with new approaches. In this fashion, you will ensure that no program information gets lost during the conversion process.

Unsupported Features
A number of older features have been removed: DVAL3, ESTR, FLOW3, Pref, ISTR, IVAL, LSTR, WebRef, EVAL, RVAL, RSTR, LVAL, STR3, TSTR3, TVAL3, VAL3, and the Euro functions, EuroCnv, EuroDel, EuroGet, EuroSet, EuroUdp. All of these were deemed unneeded or superfluous for one reason or another. So make sure to remove them from your application if you happened to use them in the past. Chances are you did not use these functions anyway, but you should check. And remember, while you do not have to do anything to prepare for features that have been renamed, about ten functions have new names in eDeveloper V10. So the conversion utility will change these automatically, such as changing ASC to ASCIIVAL, etc.

Changing Memo Attributes
You also need to know that any variable with a Memo attribute in your v9 application is going to be changed automatically to an Alpha attribute. Database fields that had Memo attributes will be converted to Alpha attributes with Memo storage. And of course, the VarAttr function will no longer return 'M' for Memo as this is no longer an eDeveloper attribute. But once again, don't worry, the conversion process will not automatically change expressions with the VarAttr function. Nevertheless, you should probably search for the string VarAttr to see where it is equated with 'M'. You will want to adjust your program in these rare situations, because VarAttr will no longer return the value 'M'.

A Fond Farewell to Web Online
"Web Online, we're glad we knew thee, but alas it is time to departeth." Yes, Web Online is that old and it is time to abandon this approach if, tsk, tsk, you hadn't already done so. To be clear: Web Online is not supported in eDeveloper V10. Older forms with the Web Online Response interface type are not supported in eDeveloper V10. The conversion utility simply removes these types of forms from your application. So any existing Form Output operation pointing to these forms will not point to a form in the converted project. Magic recommends that you remove any form of this type before exporting your application.

And HTML Forms Must Get the Boot As Well
As a result of improvements and greater flexibility in the new Merge capabilities, and to prepare the way for even greater enhancements in the future, eDeveloper V10 will not support forms with the HTML interface type. Once again, the conversion utility simply removes these types of forms from your application, and any Form Output operation pointing to these forms will not point to a form in the converted project. So Magic recommends that you remove any form of this type before exporting your application.

So this change implies a number of changes from the way things used to work: 1) The HTML property has been removed from the Style section of the property sheet of variables, columns and models. 2) The HTML class has been removed from the Model repository. 3) The Internet Development File Root property has been removed from the Project properties. 4)The Internet APG is not supported. 5) The HTML Merge Interface Type is now named Merge. The Conversion utility will convert the HTML Merge values to Merge.

As you get deeper into eDeveloper V10, you will see this as an enhancement with a more flexible and useful approach to Merge.

Goodbye to the Old Browse Function
The browse function was rather single purpose and it is simply more flexible to replace this with an Invoke OS Command operation that gives you the flexibility to do more than just Browse. So, as a result, the Browse operation is not supported in eDeveloper V10. Magic recommends that you remove any Browse operation before exporting your application. Keep in mind, however, that the Conversion utility will replace the operation with an Invoke OS Command operation.

Other Unsupported and Removed Properties that Will Not Convert

  • Environment properties
    The Multi User Access setting has been removed from the Environment dialog box.
  • Euro-Related properties
    A number of older Euro Support features have been removed because they are simply not needed any longer. First of all, the European Currency Conversion File environment setting was removed from the External tab of the Environment dialog box. The EuroFile environment setting was also removed from the MAGIC_ENV section of the Magic.ini file. Needless to say, the Base Currency and European Currency Conversion File application properties were removed too. And as mentioned above, several Euro functions are no longer supported.
  • Java Browser Client
    The browser client of old was a Java applet. No more. To reflect changes in the most commonly supported client applet technologies available for Internet Explorer, the Java option has been removed from the Browser client technology setting in the Server tab of the Environment dialog box.
  • Java Component Generator (JCG)
    We used to have a separate generator called the Java Component Generator. This concept has been significantly expanded upon to allow composite objects of all types to be generated, including your own ability to write composite generators. All of these are now found in the new and exciting Composite Resource Repository in eDeveloper V10.
  • Out with the Old XML Component Generator (XCG)
    Significant improvements in XML handling have been added in eDeveloper V10. You can learn about these in greater detail in one of the recent XML Webinars in the Magic Software webinar archives. Anyway, the old XML Component Generator has been removed to make way for these enhancements.
  • Minor Change to Application Properties
    The rather obscure "Internet Development File Root" property was removed from the Application Properties dialog box.
  • DBMS
    Three columns have been removed from the DBMS repository:
  • 2 Phase
  • Excl. Trans.
  • ID
  • In corresponding fashion, some Magic.ini settings were removed from the MAGIC_DBMS section: OnePhaseCommit, TwoPhaseCommit, NotTransLockExcl and TransLockExcl.

  • Databases
    Several columns and properties have also been removed from the Database repository. The Magic Server column was removed from the Database repository. The Common Data Dictionary property was removed from the Options tab of the Database Properties dialog box. And the XA Transactions property was removed from the SQL tab of the Database Properties dialog box.
  • Internet APG is out the door
    Out the door forever, I should add. The Internet APG for a table or task is no longer supported. The Internet tab was removed from the APG dialog box.
  • Export Document
    The Export Document option was removed from the Operation list in the Export/Import dialog box.
  • Studio Rights
    Finally, (well, with blogs, nothing is ever final) the Studio rights have been removed.


  • Colors and Fonts
    This next consideration is optional. Some of you may prefer the new eDeveloper V10 color and font settings. Nevertheless, if you want to maintain your application's colors and fonts, you should set the Application color and font definition files and the Internal color and font definition files of the converted project to be directed to the color and font definition files of version 9. This is a onetime setting change for each application and project.

    Security File
    You will likely want to use your security file (such as usr_std.eng) from the previous version, but you do not have to. If you decide to convert your existing security file, run the usrupd.exe utility from the command line. The syntax is:

    usrupd *input* *output*

    *input* is the name of your current file name and *output* is the name that you want given to the file that is created by the usrupd.exe utility. And you should keep in mind, very importantly that in eDeveloper V10 you can only assign runtime rights.

    Terminology has changed too
    I won't get into terminology changes here because I don't think they are relevant to the migration itself. But you should definitely familiarize yourself with the new terminology in eDeveloper V10 as compared to the prior version.

    Next time:

    In my next blog entry, we'll discuss the export and conversion steps. So stay tuned.

    Friday, January 18, 2008

    Magic eDeveloper V10 and ROI for Start-Up Businesses

    The economy has been showing signs of weakness. Despite this, thousands of entrepreneurs will be launching new businesses, even in the midst of a new economy. How does that affect software development? Building the software systems for these new businesses is a critical process and one that must complete in the least possible amount of time. During slow economic times Return on Investment is on the mind of every entrepreneur who has to sign off on a development budget to get the new business systems in place that will deliver their unique competitive advantage. So in today’s business climate, the emphasis is on rapid return on investment. The break-even point needs to be achieved at the earliest possible moment. Every cost has to be analyzed against the expected returns to arrive at estimated break even dates. So here’s my claim: “You can achieve ROI in your application development process faster and with greater assurance when using eDeveloper V10.”

    Application development tends to occur in phases. For our purposes, let’s consider these four phases: Design, Build, Test and Deploy. In the harried environment of a new startup business, you need to have all four of these occurring almost simultaneously, but traditional computer programming tools do not allow this. All four of these phases require an investment of time, but if you can execute some of the phases in parallel, then you can get to the final destination faster. So testing isn’t something that happens at the end of a software process, it is an iterative process that occurs throughout the project. For this reason, it may be more useful to think of Design, Build, Test, Maintain not as phases, but rather as layers of the development task. The design layer tends to be front-loaded in the project, but some design occurs while maintaining the program. The test layer tends to be back-loaded towards the end of a project, but using sound iterative design principles, testing definitely occurs throughout the life of the project.Time is money is perhaps a cliché but critical when discussing the ROI of business software development projects for new businesses.

    Application Development ROI calculations must put the emphasis on the investment that goes into dollars paid to the developers on the project; i.e. how many developers will it take and for how long? The sooner the project comes to a successful end, the faster the ROI for the project, and the sooner the new business can deploy their new systems and reap the benefits.

    The time saved - hence the ROI - using Magic eDeveloper V10 is significant: typically from 4 to 6 times faster than that of other development technologies.
    The table below is based on extensive market research and compares each of the four phases (layers) of the application development lifecycle for 3GLs (Third Generation Languages), 4GLs (Fourth Generation Languages) and Magic eDeveloper. If X, Y, Z, and W represent the time spent on an average 3GL application for each of the application development phases, research shows that generally 4GLs cut the time in half. With Magic eDeveloper even better time- savings are achieved. The productivity gains shown below are conservative calculations by Magic Software based on interviews with eDeveloper programmers, many of whom are quoted later.



    In order to achieve rapid ROI, each phase of the lifecycle must not only be completed quickly, but must also have the highest reliability to ensure the fastest payback for the investment being made.
    In going through the analysis of each of the application development lifecycle phases in future blog entries, I will detail additional aspects of Magic eDeveloper that result in further ROI increases.

    Magic eDeveloper’s progressive development paradigm allows prototype applications to be quickly and easily created. The eDeveloper paradigm is often used to convince venture capitalists and other investors that achievement of a new start-up businesses goals for new business systems is in fact achievable. Without eDeveloper, some businesses might not even “get off the ground.” In addition, the ability to support applications over time despite changing business models, platforms, and standards is inherent in the Magic eDeveloper development technology.

    Rapid ROI remains a key critical measure for every new business and is often the difference between success and failure. I’ll comment more on the savings possible during each phase of the application development cycle in later posts.

    Thursday, January 17, 2008

    Top Ten Ways To Gain Approval of Your eDeveloper Upgrade

    Getting the boss's approval to upgrade important software can be a challenge, particularly when budgets are tight. Here are a few tips on how to get approval to upgrade eDeveloper V10:

  • PREPARE. Go in armed with all the necessary materials to make a good case for your upgrade. Download the “Ten Reasons” brochure and visit the series of blog entries on reasons to upgrade in Glenn Johnson’s eDeveloper V10 blog.

  • LEARN. Attend the Magic University course “Migration to eDeveloper V10” so that you can speak with authority on the capabilities of eDeveloper V10. Download the FREE EVALUATION SOFTWARE and consult the "What's New in eDeveloper V10" and other documentation.

  • RELATE. Show how specific problems or issues you've recently encountered can be overcome by one of the improvements in eDeveloper V10. Ask for a Magic representative to setup a live web presentation on your upgrade to eDeveloper V10. Invite your opeers and your boss to participate in this information gathering session.

  • SHARE. Point others in your organization towards the new learning resources in eDeveloper V10: the “Mastering eDeveloper” book and the 22 online demonstrations.

  • SAVE. Point out the ROI benefits of migrating to eDeveloper now, before you release a new version of your software based on your current version. Cost savings, productivity enhancements, application improvements, user interface benefits, and much more, are all available immediately, but only if you make the leap to eDeveloper V10. A delayed start to active development using eDeveloper V10 equates to a very real loss of benefits to your company.

  • TEAM. Review the benefits of eDeveloper V10 with other members of your development team. Gain an understanding of how the improvements can enhance efforts across your development team.

  • CONSULT. Magic Professional Services can help to provide you with a migration readiness assessment. This formal consulting process will help you to plan for all aspects of your migration to eDeveloper V10.

  • LAUNCH. Ask for a commitment on a specific launch date for your team’s use of eDeveloper. Come in armed with a launch plan.

  • MEET. Set a specific meeting in which you can present your upgrade request to senior management. Make it clear to everyone that this is an important and needed decision.

  • DECIDE. Give a deadline to make a decision. Present the information and ask for an answer within a specified time frame. Reiterate that procrastination has real expenses and costs associated with it as well as lost business opportunities.
  • Friday, January 04, 2008

    Developing RFID Applications with eDeveloper V10

    Last month, I attended the Active RFID Summit held in Dallas, Texas. In addition to enjoying a chance to sample some excellent Tex-Mex dishes, I really appreciated the chance to compare notes with colleagues on the state of the art application of RFID, especially active RFID. Regardless of whether you are developing proprietary applications, vertical applications for a specific industry or horizontal applications that serve cross-industry needs, RFID is putting a strain on IT resources. Active RFID represents a major paradigm shift in data acquisition and generation creating an onslaught of data that current applications are generally not prepared to handle.

    Stephen Moody, an RFID Program Coordinator for the Combat Feeding Program of the US Army's Natick Soldier Research Development, presented a fascinating case study entitled: "DoD Active RFID Applications for Supply Chain Security and Shelf Life Management." It is easy to underestimate RFID as something akin to a glorified barcode or a "traveling database". But many active RFID tags are far more sophisticated in that they incorporate environmental sensors. The US Army sends tons of rations to the troops in Iraq and elsewhere. These shipments are made in ships holding thousands of standardized shipping containers. How can the US Army be sure the shipments have not been tampered with or exposed to unacceptable environmental conditions? The answer is active RFID tags with sophisticated sensors for a number of environmental events: temperature, radiation, light, chemical agents, biological agents, shock, door sensors, etc. If somebody is doing something to a shipment of food, or if it just gets too hot for too long, the US Army knows when it happened and where it happened. This is simply one of scores of applications for active RFID in an organization like the US Army. But what does one do with all that data? According to Moody, "the greatest barrier to the successful implementation and adoption of RFID is integration to legacy systems."

    One of the other challenges for RFID is the current lack of standards. In some ways this is unavoidable: RFID is not a specific product, technology or protocol. RFID is a family of technologies that incorporate radio frequency and are used to identify "stuff." As Sue Hutchinson, the Director of Industry Adoption for EPCglobal US put it, RFID provides the answer to the question "where's my stuff?" But the type of RFID may involve passive RFID, where the tag has no power source and is a write-once technology, to active RFID, including ultra wide-band (UWB), all the way to GPS and beyond. With such a diversity of technologies, standards become even more important. Lacking these standards, however, flexible development and integration tools become even more important.

    Consider the food safety example above, somewhere in an ERP system the information resides for the supplier name, items ordered, supply date, carrier and so forth. Does this information get integrated to the data on the RFID tag? What happens if food from one supplier is more prone to spoilage or to lose palatability under prolonged high temperatures? How can the US Army, or any organization for that matter, take full advantage of RFID applications if key information sits locked in a silo such as an ERP or supply chain system?

    Information integration is the key. But how does one best handle RFID integration with an ERP or other existing application? To answer that, we first need to consider the RFID system being used. RFID systems involve tags (some with built in sensors), programmers, readers, networks and so on. But most do not include middleware. And the hooks provided are inconsistent. Text files, XML, .NET objects, java objects and Web Services are provided inconsistently. For an organization to be prepared to integrate the data from a reader, they can benefit from a middleware solution like iBOLT that provides the ability to consume any of these data types and orchestrate them within an overall business process. Or they can create interfaces from directly within an eDeveloper application. Even when dedicated applications are written to take advantage of RFID data, middleware and business process management software is still needed to facilitate integration to legacy systems. Ideally, these middleware systems are service-oriented including event driven capabilities, discoverable web services and more.

    Unfortunately, too many RFID early adopters are resorting to hefty J2EE or.Net based programming projects rather than utilizing a development tool like eDeveloper V10 or a simplified visually-oriented business process design tools like iBOLT. As the world begins to find more and more uses for RFID, it will be useful for serious organizations to incorporate eDeveloper and iBOLT for integration to RFID data, whether it comes in raw text or XML format or is served up by a Web Service or programming object like .NET or XML.

    With RFID, the emergence of integration file standards is far from certain. The Auto ID Center has proposed an XML format known as PML as a standard. You can read about it on the XML CoverPages hosted by OASIS. But the adoption of the standard is far from ubiquitous, especially in the Active RFID world which tends to look at organizations like EPCglobal with at least some degree of suspicion.

    The good news for eDeveloper programmers is that since PML is just a flavor of XML, you can access RFID data with standard eDeveloper XML tools. To see what you’re avoiding, take a look at the PM example below. For more information on RFID and iBOLT, you can access Magic Software’s RFID related webinars.

    Using PML in eDeveloper V10
    eDeveloper V10 includes a new capability called XML Integration. This approach makes PML’s use within eDeveloper much easier. In fact, you can now develop applications using eDeveloper with no database at all and simply use XML files, including PML for RFID and other Auto ID related applications.

    When using a PML data source containing RFID data, you can create eDeveloper tasks (batch and online) that use the PML files as their view (main files and linked files). You can define an PML data source in the Data repository (remember PML is XML) and define a task to manipulate and handle the PML. You can check that the XML task is compatible with the XML schema by using the XMLValidate and XMLValidationError functions. Namespaces are automatically handled by eDeveloper.

    There are two XML development methodologies to choose from. You can develop applications using XML in the data repository or you can develop using XML with BLOBs. If you use both methods, then the BLOB takes precedence.

    With eDeveloper V10, a task that uses XML (such as PML) will first open the entire XML file (if it is not already open) and then populate the tables. It then executes the defined task, whether that be query, insert, update or delete. Finally, when closing the task, if the data has changed, then eDeveloper V10 writes the XML BLOB or file back over the original XML source.

    eDeveloper V10's XML Integration feature provides two functions that allow you to verify that the XML is compatible with the XML schema.

    The functions are XMLValidate, which validates an XML document against its schema; and XMLValidationError, a function that returns the errors of the last XMLValidate. This will help you to determine whether your PML file is valid based on the PML schema, which of course is found in the .xsd file.

    With eDeveloper V10, you can use the Get Definition function to discover the properties of a PML file that contains RFID data and map them to an eDeveloper table. Like all XML files, PML files are described by .xsd metadata that contains the XML schema definition. During a Get Definition, if an element’s/attribute’s type is defined using a SimpleType or as a reference to a Global element, it will be converted to the appropriate Primitive xsd data type from which it is derived.

    Primitive xsd data types are mapped to corresponding eDeveloper attributes. Once this occurs, the field attributes can be changed without restriction. A default picture (most of the time you can think of this as length) will be assigned (as specified in the table). When the type is based on a SimpleType, which defines length, the picture will be updated with the length specified for the SimpleType.



    What About Other RFID Data Integration Types

    To be sure, RFID vendors are not uniform or universal in their support of RFID data via PML or XML. Fortunately, eDeveloper has built in functions for the other common methodologies as well. Some vendors supply RFID Web Services, which means you can use the eDeveloper V10 Web Services wizard. That’s even easier than dealing directly with PML or other forms of XML.

    Occasionally, programming objects such as java objects or COM objects are provided, in which case eDeveloper can call and pass information to these objects. Keep in mind that Active RFID enables two-way data communication and write-many read-many (WMRM) storage with an RFID tag, whereas, generally speaking passive RFID is a write-once read many (WORM) technology. That means your eDeveloper applications need Active RFID if they are going to do any of the more sophisticated RFID applications.

    Ways to Apply RFID Technology in eDeveloper Applications
    Going back to Sue Hutchinson’s comment, RFID helps to answer the question: “where’s my stuff?” One way to determine this is to sense the immediate presence of an FID tag next to a reader. This approach works well, with say, tagged parts that are passing along an assembly line. The parts are always within range of the reader. Another example of good stationary reader approaches might be warehouse doors. Some work has even been done to create “smart shelves” that sense the RFID tag of products as they are pulled on or off the shelf. For these close proximity applications, passive RFID may be satisfactory.
    But the real world does not always have these convenient thresholds.

    One of the technologies developing around RFID are Real-Time Locating Systems (RLTS). These systems measure the wave properties of an RFID signal to determine the location of an RFID tag. The readers are generally placed in a grid and then tuned to a room or outdoor location. Since waves travel inconsistently through and around walls, etc., bandwidth is a consideration with RLTS. In cramped spaces, UWB is often preferred and it may offer energy saving advantages as well. Battery life in an RFID tag is another important consideration. Beacons that emit constant signals use more energy and have shorter battery life than systems that simply “chirp” at an established interval.

    Software algorithms that calculate the location of a tag by comparing signal strengths on a grid of sensors are quite sophisticated. But they aren’t always accurate. Practical field applications show that errant readings are fairly common. When possible, a location should be calculated based on the average of several readings and not just a single reading. This approach leads to a great deal of accuracy.

    RLTS can be used in applications such as worker safety systems. Companies like BP use active RFID in their employee badges so that if disaster strikes at a refinery or other hazardous work location, systems can be used to pinpoint the locations of workers and visitors. Needless to say, the RFID readers in these systems have to be “hardened” to withstand violent environmental conditions such as fire and explosion.

    Another common use of RLTS is in asset management software systems. These often take on specialized use in various industries. Nurses need to know which room an IV cart or other mobile medical equipment was left in. Newspapers need to know where the paper stock rolls are in their automated factory. Truckyard operators need to know which spot particular trailers are located in, etc.

    Glorified barcodes? Perhaps. But when was the last time a barcode could tell you whether the product it tagged has been kept at safe temperatures or automatically report its location? Sure we know we scanned it into inventory six months ago, but don’t ask us to actually find it in the store or warehouse.

    Monday, November 26, 2007

    A Little Thanksgiving Housekeeping for eDeveloper v9.4

    I know I usually write about the latest version of eDeveloper: eDeveloper V10, but last week's service pack release gives me a chance to mention the latest service pack release for our older development tool version: eDeveloper v9.4.

    On Thanksgiving Day (US), November 22, 2007 Magic Software Enterprises released SP8. As always, you can install eDeveloper 9.4 Service Pack 8 using the installation wizard’s Upgrade option, the wizard automatically replaces the files that were modified since your previously-installed version. By the way, if you haven't looked at the samples for v9.4, be sure to look at the samples at:

    ftp://ftp.magicsoftware.com/v9product/94Samples/

    Hopefully, that gives you something to be thankful for. The Service Pack only includes fixed problems, commonly known as bug fixes, which are shown here in alphabeical order, by name, and with a reference to the relevant QCR:

    1. ActiveX – CDO Library (QCR # 249783) eDeveloper failed to show the methods or properties of the Microsoft CDO type library.
    2. ActiveX – MgItemSequential (QCR # 755479) The first item in a collection was not retrieved when using the MgItemSequential method of a COM object.
    3. ActiveX – Return Value (QCR # 529387) The values were not properly returned when using an ActiveX control defined as "FileSystemObject" of type library "Microsoft Scripting Runtime (Ver 1.0)".
    4. Application List – INIPut() (QCR # 916180) A change to the application name via the Settings menu was not saved when an INIPut() function was previously used to add entries to the [MAGIC_SYSTEMS] section of the magic.ini file.
    5. AS400 – Get Definition (QCR # 931792) Performing Get Definition on a table with indexes from a database whose name was defined in small letters added the library name as a prefix to the table and indexes’ names.
    6. Authorization – LDAP (QCR # 750937) Specifying the wrong password when using LDAP closed the login screen and showed the previous username as the connected user.
    7. Authorization – LDAP (QCR # 751594) eDeveloper failed to use Active Directory user accounts that were defined with a comma character in their name.
    8. Broker – Monitor (QCR # 769359) The Broker monitor showed a threads peak value greater than the threads maximum value.
    9. Browser Client – .NET CLR 2 (QCR # 227844) Executing a Browser Client program on a machine without CLR 1.1 installed did not return the proper error message. *
    10. Browser Client – Check Box Control (QCR # 914074) A Check Box control did not show the updated value in Browser Client display when a Verify statement was executed immediately after changing the value.
    11. Browser Client – Context Unload (QCR # 976397) An error appeared in the mgerror log file after closing a page with a javascript function when the Context Unload Timeout environment setting was set to zero.
    12. Browser Client – Contexts (QCR # 985850) A running context could close another context from another IE session when both contexts ran the same program.
    13. Browser Client – Copy and Paste (QCR # 777060) The Copy and Paste options did not work in a Browser Client program that was in Query mode.
    14. Browser Client – Cross-site Scripting (QCR # 988306) The eDeveloper requester (CGI /ISPI) had Cross-site scripting (XSS) flaws when using DefHtml Parameter settings in the Mgreq.ini file and writing direct scripts in front of the Arguments parameter in the URL.
    15. Browser Client – Field Range (QCR # 287294) Value range on a Date field failed to work in Browser Client when the range contained spaces.
    16. Browser Client – Incremental Update (QCR # 900738) Incremental updates did not work correctly in a Browser Client task when a Link Write was used.
    17. Browser Client – Screen Refresh (QCR # 917684) The screen was not refreshed correctly when browsing memory tables in certain scenarios.
    18. Browser Client – Signed MSI (QCR # 101633) The MSI file that installs the CAB files required for Browser Client execution was not signed, thus it could not be executed on sites using a strict security policy. *
    19. Browser Client – Transaction Cache (QCR # 785229) The eDeveloper engine crashed in some specific scenarios depending on the transaction cache when running a Browser Client program.
    20. Builders – Components (QCR # 939733) An error was returned when adding new tables to an existing component that already had some tables defined.
    21. Builders – WSDL (QCR # 934669) The WSDL builder returned an error when tying to get the schemas from an XSD file with a URL path.
    22. Builders – XML (QCR # 987568) The data was not read from the XML file through the "Read XML" program created in the XML component.
    23. Cache – Changing Modes (QCR # 966543) eDeveloper switched to Create mode upon changing the mode to Modify on a screen mode program defined with no main table and the Cache Strategy set to "Position".
    24. Cache Strategy – Memory Gateway (QCR # 254280) Scrolling using the PgDn and PgUp keys did not work properly when browsing a table whose Cache strategy was set to None and performing Sort by clicking on the table column's title.
    25. Cache Strategy – Memory Gateway (QCR # 769691) Scrolling in a backward direction did not refresh the data properly when browsing a memory table whose Cache strategy was set to None and the column sort was used.
    26. Call Remote – Performance (QCR # 248012) A performance problem occurred when using the "call remote" mechanism with a large user file. *
    27. Checker – ExpCalc() (QCR # 771447) An error was shown when executing the Checker on an expression that had a nested ExpCalc function in it.
    28. Checker – Missing Variable (QCR # 681399) The Checker failed to report on a missing variable that was defined in an expression of the "DB SQL Where" property.
    29. Components – CallProg() (QCR # 929773) The CallProg() function executed in a component called a program from the host application instead of the program from the component application.
    30. Components – Load Immediate (QCR # 915478) eDeveloper crashed when a model in the host application had a select program from a component that was defined with Load Immediate=No.
    31. Components – Orphan Tasks (QCR # 991046) eDeveloper crashed upon executing a component program from a host application with orphan tasks during some scenarios.
    32. Confirm Update – Nested Tasks (QCR # 929259) Updates made in a subtask were saved even when Confirm update was set to No by the end-user when exiting the subtask and immediately exiting the parent task.
    33. Controls – Border Style (QCR # 974253) It was not possible to change the Border style property when selecting multiple controls and changing their style to 2D.
    34. Controls – Combo Box (QCR # 937702) The wrong value was displayed in a combo box after creating a record when an expression was attached to both the Item List and Display List properties of the combo box.
    35. Controls – Image (QCR # 740281) The tooltip was not displayed for Image controls when the screen resolution was changed to 1280*768.
    36. Controls – Image Button (QCR # 985613) The 3D effect of an Image button in SP6c and above was different than previous versions.
    37. Controls – Line (QCR # 756240) The cursor was not moved to an Edit control when there was a Line control under the Edit control and the area of the Line control was clicked on.
    38. Controls – Slider (QCR # 602655) The Mouse Over/Out event did not work on Slider controls.
    39. Controls – Slider (QCR # 656280) The Control Hit event handler for Slider controls was executed twice.
    40. Controls – Tab (QCR # 992568) The screen flickered upon scrolling through the records when the form had a Tab control set with expressions on the tab’s Display list and Items list properties.
    41. Controls – Table (QCR # 743617) It was not possible to drag and drop the table field's data when the table was wider than the MDI and the caret was positioned on the right side of the table.
    42. Controls – Table (QCR # 777255) Records in a table were not correctly displayed when opening a table in create mode, inserting some records and then adding a new record in the middle of them.
    43. DB2 – Decimal Value (QCR # 293057) eDeveloper did not display the decimal part of number values on a DB2 9.1 database.
    44. DB2 – Expand Form (QCR # 781109) eDeveloper rounded the data when reading data from a DB2 table having a field with data type = DOUBLE.
    45. DB2 – Order By Clause (QCR # 777372) The position key segments were also included in the Order By clause created for a linked table locating a non_unique index when using the DB2 and ODBC gateways.
    46. Debugger – Flow Monitor (QCR # 728280) The CPU usage was sometimes increased to 100% when reaching a breakpoint.
    47. Edit Control – Multi-Line (QCR # 774769) It was not possible to park on a multi-line Edit control by pressing the mouse when a 'click' event existed in the program and the Edit control had an expression on the Enable property.
    48. Environment – INIPut() (QCR # 991880) Setting the value of RangePopTime and TempPopTime using the INIPut() function did not work when using it with Force write = False.
    49. Events – Control Level (QCR # 915413) The control’s event handlers were not executed when modifying the field’s value, pressing Cancel, and selecting ‘No’ in the confirmation box.
    50. Events – Page Header (QCR # 779133) The Page Header event was executed only once even when more than one output forms were outputted.
    51. Execution – DEP (QCR # 240904) eDeveloper terminated abnormally during startup when DEP (Data Execution Prevention) was enabled for all programs. *
    52. Exit Operation – Background Mode (QCR # 281614) An 'Exit' Operation command executing a batch file in background mode returned an error code (-1) as the return value.
    53. Export – Document (QCR # 767712) The contents of the eDeveloper SQL Range was not written to the Export Document file when both the SQL Range and DB SQL Where Expressions were defined in the program.
    54. Expression Editor – Repeat Shortcut (QCR # 288555) The repeat shortcut (@) was limited to a 3-digit expression number.
    55. Flow Monitor – Variable Window (QCR # 288396) Variables that started and ended with the % (percentage) character were not displayed in the value column of the Variable window in the Flow Monitor.
    56. Force Record Suffix – Add Record (QCR # 286131) A new record that was created in an online task defined with Cycle record main = No and Force record suffix = Yes, was not saved when skipping to the next record by pressing tab from the last field.
    57. Form Editor – ActiveX (QCR # 764514) eDeveloper crashed when exiting a subtask with an ActiveX control on its form.
    58. Forms – Tooltip (QCR # 768929) The tooltip was not displayed if it was defined as an expression that uses a variable from a Link operation when the main display form was other than the default form.
    59. Functions – CtrlGoto() (QCR # 764538) eDeveloper did not respond after scrolling through the table using the scroll wheel of the mouse when CtrlGoto() was used in the Record Prefix.
    60. Functions – CtxSize() (QCR # 778885) The CtxSize() function refreshed the last used context information when it was used.
    61. Functions – CurRow() (QCR # 741409) The CurRow()function returned wrong results if the Resident Task property of the task was set to "Yes" and when the task range was changed so that there were no records in the range.
    62. Functions – IOSize() (QCR # 997160) The IOSize()function returned negative values for files larger than 2 GB.
    63. Functions – KbGet() (QCR # 772271) The KbGet() function returned a wrong value when used in the Record Main compatible logic unit.
    64. Functions – VarSet() (QCR # 300356) eDeveloper crashed when a numeric expression was set to an alpha variable using the VarSet() function.
    65. HTML Form – Hyperlink (QCR # 967502) An HTML form defined with Input=Yes and set with a Hyperlink that referred to an eDeveloper program, did not dynamically add the three hidden arguments, Application, Prgname, and Arguments, to the form tags that are generated at runtime when the called child task/program also output an HTML form.
    66. Image – Resolution (QCR # 910920) An image was not displayed properly in some resolutions.
    67. Import – Special Characters (QCR # 939169) eDeveloper could not import an export of a program that contained special characters in some of its properties.
    68. Interface Builder – Web Services (QCR # 334866) When creating a Web Service using the Web Service Interface builder and clicking the Verify Structure button, an error was sometimes received.
    69. LDAP – Binding (QCR # 998962) Using OU did not work when entered in the Connection String property.
    70. Memo – Tab Display (QCR # 774357) Memo fields that contained the Tab character were not displayed properly when leaving the field.
    71. Memory Leak – Link Write (QCR # 911077) A memory leak occurred after executing a batch program having a Link Write operation in background mode when the MaxConcurrentRequests were reached.
    72. Merge – Performance (QCR # 775792) Performing a merge operation on a template that had rows and columns took a very long time when there were a lot of rows to merge.
    73. MSSQL – Browser Client (QCR # 303363) Link Query defined in the main program was executed after every record execution in any task even when there was a fixed value in the Link Locate expression.
    74. MSSQL – Error Handlers (QCR # 728381) eDeveloper crashed while browsing records on an MSSQL database when some rows were deleted from another session.
    75. MSSQL – Hint (QCR # 910662) An error was obtained when ‘FORCE_INDEX’ was used as a hint on SQL Server 2005.
    76. MSSQL – Locate (QCR # 757582) eDeveloper did not perform the incremental locate properly when typing fast.
    77. MSSQL – Numeric Field (QCR # 248887) A numeric field stored as a signed integer with SQL type set to bit displayed as 1 in eDeveloper when the numeric field's picture was larger than 1 and included the N character. *
    78. MSSQL – Sort (QCR # 998843) eDeveloper did not send a sort command to the RDBMS when the sort was done by the user on columns from the Main table and Link Joined table.
    79. MSSQL – Stored Procedure (QCR # 784462) eDeveloper crashed when running a program that calls a generated stored procedure where a Locate is performed on a field that was moved.
    80. MSSQL – View Refresh (QCR # 970880) eDeveloper crashed upon closing a DSQL task after performing a view refresh operation when the result database was MSSQL.
    81. Multilingual – Trim (QCR # 912733) The MlsTrans() function returned a trimmed string when no matching translation string was found.
    82. OLE – Instantiation (QCR # 782361) An OLE object was not instantiated correctly when it was part of a collection.
    83. Operations – Block (QCR # 778724) The 'Block Else' condition was executed even though the 'Block If ' condition evaluated to True.
    84. Oracle – Charset (QCR # 756467) The correct row was not retrieved when ranging a value using Picture on an Oracle table and using "NLS_CHARACTERSET=WE8MSWIN1252".
    85. Pervasive – Deferred Transactions (QCR # 982443) eDeveloper returned an error when deleting records from a Deferred Transaction program that had a Link Inner Join operation.
    86. Pervasive – Duplicate Index (QCR # 774018) eDeveloper did not show the "Duplicate Index" error message when creating records using "Link Create" in a batch program that did not use a Pervasive database transaction.
    87. Pervasive – New Table (QCR # 15457) A Unique Identifier error appeared when creating a new table with a float (4) field on Pervasive 9.5 database.
    88. Pervasive – ODBC (QCR # 926120) An error appeared when using the Pervasive ODBC Client Interface and executing a program with a certain index definition.
    89. Pervasive – SQL Range (QCR # 913959) eDeveloper crashed when performing view refresh on a program with a Pervasive table that was once an SQL table and had an SQL range defined.
    90. Print Preview – Expand Form (QCR # 780319) Table data was not displayed correctly in the Print Preview when the Expand Form option was used.
    91. Print Preview – Images (QCR # 993173) The Image control on print preview had a different size and display colors compared with image controls in versions prior to SP5.
    92. Printers – Number of Copies (QCR # 979100) The Copies property value defined in the default printer settings of the operating system was not shown in eDeveloper.
    93. Printing – Multi- line Edit (QCR # 989830) The printed header lines of the second page and onwards were corrupted when printing a report that prints multi-line edit fields.
    94. Printing – Tasks (QCR # 777828) eDeveloper sometimes crashed while printing the forms from two tasks into the same printer when headers and footers were defined.
    95. Range – Cache (QCR # 994246) Records were not displayed properly when updating them from a batch task and displaying them according to range when not all the variables from the table were selected.
    96. Record Suffix – Mouse Click (QCR # 770744) The Record Suffix was not executed when clicking on an Edit control in a child task in certain scenarios.
    97. Records Display – No Index (QCR # 759564) Records were not displayed properly when selecting a table that does not have an index and selecting only some of the variables in the task.
    98. Requester – HTTPVars (QCR # 996861) Error (-103) occurred when the HTTPVars parameter string in the Mgreq.ini file was too long.
    99. Rights – Components (QCR # 765845) eDeveloper sometimes showed controls on a form defined in a component even if the user that was logged on did not have rights for them.
    100. SQL – Range (QCR # 755614) An error was received when ranging on a virtual variable that was defined with Null allowed=Yes in certain scenarios.
    101. Table – HitZOrder() (QCR # 996362) The HitZOrder() function returned a unique value for the controls in each row in a table instead of returning the same value for all the controls in the same column.
    102. Table – Logical Names (QCR # 996418) A gateway error was returned when altering a table that was defined with a logical name in its name and had a foreign key.
    103. Table – Width Recompute (QCR # 913114) The table width was recomputed every record after a window resize was done when the Table control had a placement and expression on its Width property.
    104. Team Development – ACS (QCR # 292564) eDeveloper crashed on checking out a program when using ACS file for the same database as the MCF.
    105. Team Development – Components (QCR # 932448) eDeveloper crashed when activating Team development for components in a specific scenario.
    106. Text-based Forms – Horizontal Alignment (QCR # 931771) The Horizontal Alignment property of a variable pasted on a Text-based form could not be changed if the Text control of the variable was pasted near any of the variables on the form.
    107. Tools – Export (QCR # 923487) eDeveloper crashed when trying to export an application that has a component using the Tools infrastructure in Background mode.
    108. Tree Control – Drop (QCR # 941906) The Drop event did not work properly when performed on a Tree control.
    109. Version Control – Folders (QCR # 765202) eDeveloper crashed after performing the version control sync operation on an application with folders.
    110. Web Service – Call Operation (QCR # 773587) eDeveloper hanged when loading some WSDL files into a Call Web Service operation.
    111. WSDL – Call Web Service (QCR # 996400) Some methods in a WSDL file could not be loaded using the Call Web Service operation.

    Please feel free to contact us at anytime with suggestions for improvements to eDeveloper.

    Happy Thanksgiving!

    Friday, October 05, 2007

    Unicode Makes Multiple Languages Easier In Your eDeveloper V10 Applications

    One of the important enhancements to eDeveloper V10 is the addition of full support for Unicode. This FAQ is designed to answer some of the high-level questions you may have regarding Unicode and its use in eDeveloper V10.



    Q. What is Unicode?

    A. The official definition can be found on the Unicode Consortium website in their glossary:

    “Unicode. The universal character encoding, maintained by the Unicode Consortium (http://www.unicode.org/). This encoding standard provides the basis for processing, storage and interchange of text data in any language in all modern software and information technology protocols.”

    Q. What are the benefits of Unicode?

    A. Once again we turn to the Unicode Consortium for an answer:

    “Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language. The Unicode Standard has been adopted by such industry leaders as Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys and many others. Unicode is required by modern standards such as XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML, etc., and is the official way to implement ISO/IEC 10646. It is supported in many operating systems, all modern browsers, and many other products. The emergence of the Unicode Standard, and the availability of tools supporting it, are among the most significant recent global software technology trends.”

    “Incorporating Unicode into client-server or multi-tiered applications and websites offers significant cost savings over the use of legacy character sets. Unicode enables a single software product or a single website to be targeted across multiple platforms, languages and countries without re-engineering. It allows data to be transported through many different systems without corruption.”

    Q. How extensively does eDeveloper V10 support Unicode?

    A. eDeveloper V10 now includes across-the-board Unicode support within the product. Support for Unicode is provided in addition to existing support for both the ANSI and OEM standards.

    Q. What specific Unicode capabilities are included in eDeveloper V10?

    A. Unicode support in eDeveloper V10 includes the ability to read from and write to Unicode database fields; capability to input and output Unicode data to various Input and Output files; options to create program logic for Unicode data; techniques to perform read and write operations on Unicode files; capacity to send and receive Unicode data to and from external systems; and power to use Unicode definitions in expressions, functions, and form properties.

    Q. What capabilities are there for Unicode Conversion?

    A. eDeveloper V10’s implicit casting mechanism lets you select the code pages you
    want to use for conversion to and from Unicode. If you don’t select the code
    pages, eDeveloper V10 will use its own default code page. For purposes of explicit casting, there are two new functions:
    • UnicodeFromANSI
    • UnicodeToANSI

    Q. Is it true that Unicode functions have been added to eDeveloper V10?

    A. Yes, to complement the Unicode support, two new Unicode-related functions have
    been added.
    • UnicodeCHR - Converts a numeric value to a corresponding Unicode
    character
    • UnicodeVal - Converts a Unicode character to a corresponding numeric
    value

    Q. Are there utilities for Unicode Conversion?

    A. Absolutely. eDeveloper V10 includes utilities that help you convert data from Unicode to ANSI and from ANSI to Unicode. The utilities let you define the input and output files as well as the code page to use, if you don’t want to use the default code page.

    Q. Are there resources on the web to help us learn more about Unicode?

    A. Of course. Start, of course with Unicode.org at http://www.unicode.org/

    While I am sure you can google on your own, here are a couple more interesting pages to get you started on a nice long surfing expedition:

    Alan Wood’s Page
    http://www.alanwood.net/unicode/
    This is a good resource page with links to many other useful sites.

    W3C Page
    And of course, W3C could not possibly be silent on a subject as important as Unicode, here is the XML/Unicode page:
    http://www.w3.org/TR/unicode-xml/

    Q. What character sets are supported by Unicode?

    A. “More than you will ever need” is probably the shortest answer.

    Specifically, Unicode 2.0 supports scripts for Arabic, Armenian, Bengali, Bopomofo, Cyrillic, Devanagari (the script employed by Hindi and Sanskrit), Georgian, Greek, Gujarati, Gurmukhi, Han, Hangul, Hebrew, Hiragana, Kannada, Katakana, Latin (including the international phonetic alphabet IPA), Lao, Malayalam, Oriya, Tamil, Telugu, Thai, and Tibetan scripts. These scripts are all written horizontally. Hebrew and Arabic are of course written right to left. Indic scripts are written variously and in ways that are sometimes described as a circular motion. Arabic and the Indic scripts must use intelligent ligature selection.

    Unicode 3.0 expands some existing scripts and adds Braille, Canadian Aboriginal, Cherokee, Ethiopic, Khmer, Mongolian, Myanmar, Ogham, Runic, Sinhala, Syriac, Thaana, and Yi. Mongolian is the first script that can only be written in vertical rows.

    Besides the characters for writing the world's major languages, there is a whole set of typographic, technical, graphical, mathematical, astrological and other scientific symbols and geometrical shapes in Unicode.

    Q. I heard Unicode has limited support for Chinese, Japanese and Korean. Is that true?

    A. Unicode supports Han scripts such as those used in Chinese, Japanese and Korean (often called CJK). Unfortunately some urban legends or myths have developed about the support of CJK characters in Unicode. According to unicode.org, “The Unicode Standard supports all of the CJK characters from JIS X 0208, JIS X 0212, JIS X 0221, or JIS X 0213, for example, and many more. This is true no matter which encoding form of Unicode is used: UTF-8, UTF-16, or UTF-32.”

    In fact, Unicode supports more than 70,000 CJK characters. More will undoubtedly be added, but you can be assured that the support is comprehensive already and goes above and beyond what is expected. Unicode.org reports that “the International Standard ISO/IEC 10646 and the Unicode Standard are completely synchronized in repertoire and content. And that means that Unicode has the same repertoire as GB 18030, since that also is synchronized with ISO 10646 — although with a different ordering and byte format.” Rather a mouthful for those that do not follow these things in detail. And in the final analysis, that is the beauty of eDeveloper 10 – as with all previous versions of Magic, you do not need to get bogged down in the underlying technical details. With eDeveloper 10, just sit back, relax and enjoy full Unicode support.

    Compliance Requirements Strain IT Resources

    For those of you keeping track of Magic Software's entry into the podcast age, here is a link to the interview on the subject of compliance with Carol Woodbury, Founder and President of Skyview Partners.

    Learn more about the webinar here on Magic's website.

    Thursday, May 10, 2007

    Thanks for the Memories: MIUG 2007

    What a great MIUG 2007! Thanks to everyone who participated in and attended this year's MIUG 2007. I hope that you will agree that this event provided an excellent foundation for members of the Magic community looking to advance and grow their businesses using the greatest development tool on the market today.

    The key word at this year's event seems to have been "transparency." Thank you WIRED magazine for placing this concept top of mind for everyone. You probably noticed a few things that were different at this year's conference:

    1. We started by showing our imminent built-in support for PDF. I am thinking that since it took us 6+ years of MIUG to release this feature, we should start each conference for the next six years by doing a PDF demo. :) The reason this is an evidence of transparency is that it showed that we listened to the input from last year, admitted our mistakes, and moved on.

    2. The demonstration of he Rich Internet Client is also an evidence of transparency, in that we are showing that the input received during the CAPP migration process of last year has also influenced heavily on our development decisions.

    3. Two years ago at MIUG, you may remember that we discussed the need for lower cost licensing models. It took us a little over a year to implement our solution, but we have also responded in a big way with the Discovery/Xpress/Enterprise Edition structure to answer the needs for seeding, affordability and power, respectively.

    4. The focus roup sessions were invaluable. I am sure that you will see great things coming from Avishai Shafir as the lead person directing our Magic community programs and marketing.

    5. Once again, we were delighted to be able to provide knowledgeable presenters from our R&D, technical support and professional services teams. We also love all of the presentations by each of you in the user community. The depth of your knowledge is invaluable.

    6. Having our chairman, David Assia, present with us at MIUG was the icing on the cake this year. David's passion and vision are obvious and I hope that you can see that the future of eDeveloper is bright.

    I want to take this opportunity to once again thank Dale and Heidi Schuppenauer and Cabrita Software for organizing the conference as well as SUmmer Remmert for her assistance.

    See you all in 2008!

    Saturday, March 03, 2007

    eDeveloper V10 Advanced Features Webinar

    eDeveloper V10 -- Advanced Features



    Topic: eDeveloper V10 -- Advanced Features
    Date: Wednesday, March 21, 2007
    Time: 11:00 am, Pacific Daylight Time (GMT -07:00, San Francisco)

    Join Roberto Ramirez, a Senior Consultant in the Professional Services Department at Magic Software Enterprises, Inc. in Laguna Hills, California, who will present three important advanced features in eDeveloper V10:

  • Report Generator. End users seek applications that allow them to build their own reports on the fly. The powerful new runtime report generator in eDeveloper V10 Enterprise Edition is better than ever and will be explored from both the developers' and the end users' perspective.

  • Team Development. It's hard enough for a solo programmer to keep track of revisions and versions of their software. When you add one or more additional developers, then team development solutions are vital. With eDeveloper V10 Enterprise Edition you can use the source code control software of your choice, including the bundled CVS software.

  • Graphical User Interface Enhancements. Your users will absolutely love the enhanced usability and improved aesthetics of the new applications you create with eDeveloper V10. Learn what you can do now to create immediate raves from your customers and end users.

    Registration. To attend this meeting, you must first register for it. Please click here to see more information about and register for this meeting.

    Once you have registered for the meeting, you will receive an email message confirming your registration. This message will provide the information that you need to join the meeting.
  • Monday, February 26, 2007

    How do you define software quality?

    ISO 9126 provides a standardized way to evaluate software quality by defining six sets of attributes by which we can evaluate software. These attribute sets are functionality, reliability, usability, efficiency, maintainability, and portability. What do they mean by these standards?

    Functionality refers to the existence of a set of functions and their associated properties. Functionality gets to the fundamental ability of a software application to perform the required tasks necessary to satisfy user and organizational needs.

    Reliability refers to the stable performance of these functions under a variety of conditions across time.

    Usability as approached by ISO 9126 deals with the effort needed for use, and user assessment and acceptance.

    Efficiency is all about performance issues and the resources required to perform the software functions under various conditions over time.

    Functionality, reliability, usability and efficiency are all characteristics observable by users or operators. The other two criteria for measuring software quality that are contained in ISO 9126 relate to the developers ability to interact with a given software application. It isn't only an assessment of the tools used, but also how well the tools were used to accomplish the need for these next criteria:

    Maintainability looks at the effort required to make specific modifications. We all know that some applications are easier to maintain than others due to variations in documentation, organization and software architecture.

    Portability, or the ability to run applications in new environments, can also be impacted by the developer, and not simply by the tools she uses. For example, an application that utilizes many environment specific utilities may be more difficult to port to a new environment where those utilities may be unavailable or handled in a different manner.

    With eDeveloper V10, you gain a software development environment for application development, testing, and deployment that enhances software quality in all of these areas for a number of reasons. In future posts, will look at all of these areas in detail.