<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SIMPOL Development</title>
	<atom:link href="http://www.simpol.com/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.simpol.com/dev</link>
	<description>The SIMPOL Development Area</description>
	<lastBuildDate>Thu, 24 Nov 2011 11:33:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>DPI Awareness</title>
		<link>http://www.simpol.com/dev/2011/11/24/dpi-awareness/</link>
		<comments>http://www.simpol.com/dev/2011/11/24/dpi-awareness/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 11:31:47 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[SIMPOL Programming]]></category>
		<category><![CDATA[dpi]]></category>
		<category><![CDATA[enhancements]]></category>
		<category><![CDATA[large fonts]]></category>
		<category><![CDATA[SIMPOL]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://www.simpol.com/dev/?p=67</guid>
		<description><![CDATA[Sorry I haven&#8217;t said much recently, but the last couple of months have been busy. While tracking down a strange report from a customer about a small application we had built, I discovered that SIMPOL had been bitten by the small fonts/large fonts issue that I remembered from way back in the old days with [...]]]></description>
				<content:encoded><![CDATA[<p>Sorry I haven&#8217;t said much recently, but the last couple of months have been busy. While tracking down a strange report from a customer about a small application we had built, I discovered that SIMPOL had been bitten by the small fonts/large fonts issue that I remembered from way back in the old days with Superbase. Resolving this issue took a few weeks and a lot of refactoring of existing code, including example programs, but it was worth it. In a later post, I will describe some of the other things we have been working on, but for now read on about the large fonts issue.</p>
<h2>What Does &#8220;Small Fonts&#8221; and &#8220;Large Fonts&#8221; Mean?</h2>
<p>For those who are unfamiliar with the issues: Windows normally runs in what is commonly called &#8220;small fonts&#8221; mode. What this means in practice is that the resolution of the screen is 96 DPI (dots per inch). When the user changes their system to run in large fonts (which is becoming more common as high resolution displays become more affordable), the screen runs in 120 DPI. The effect for the user is that fonts are drawn large and smoother on the screen.</p>
<h2>How Does Changing to Large Fonts Affect Things?</h2>
<p>Windows draws the fonts are drawn 25% larger than in small fonts mode, so the container needs to be scaled up or otherwise the text will be cut off, reducing the effective screen resolution by 25%. For example, a screen (and graphic card) that has a resolution of 1024 x 768 pixels, will have an effective resolution of 800 x 600.</p>
<h2>So Why is That a Problem for Me?</h2>
<p>As mentioned earlier, the container needs to be scaled up, assuming that the DPI during design was 96. SIMPOL can&#8217;t just automatically scale up all containers, because if the developer was running in large fonts when they created their forms, then they would actually need to scale down the containers when running in small fonts. So the problem is that you need to know the original DPI at design time, plus the current DPI at run time in order to even have a hope of adjusting things correctly.</p>
<h2>And the Solution Is?</h2>
<p>Actually, in SIMPOL there was a multifaceted solution. That is because we have both the <code>wxform</code> and <code>dataform1</code> families of user interface types. It turned out the solution to the problem for dataform1 was quite simple. A <code>designdpi</code> property was added to the <code>dataform1</code> type, and that is stored in the form file. In <code>formlib</code>, when the form is opened the <code>designdpi</code> value is compared to the current DPI of the running system, and an adjustment factor is calculated that is then applied to most (but not all) objects. Currently it will not scale the size of bitmap buttons, though it will reposition them. Images on the forms themselves should be set to &#8220;preserve aspect&#8221; to ensure adequate scaling.</p>
<p>A second solution needed to be found for the <code>wxform</code> family of types, since we don&#8217;t have a storage format for them other than in source code. The decision was made to change how the source code is generated, to include the <code>designdpi</code> value and all the code necessary to calculate the factor and apply it.</p>
<p>Obviously this also required changes to the form storage format, and all older forms are assumed to be in 96 DPI. The Form Designer also required changes under the hood, though not too many.</p>
<p>Final cleanup included modifying examples and various utilities. All very time consuming, but worth it. One of the issues that arose, however, was that many of the wxforms in use pre-dated being able to create and save them in the Form Designer. To make refactoring those types of forms easier, a new function was added to <code>formlib</code>, that converts a <code>wxform</code> into a <code>dataform1</code>, which can then be saved as a form file. Very neat that bit!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/11/24/dpi-awareness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Supporting PHP &#8211; What a Pain</title>
		<link>http://www.simpol.com/dev/2011/09/15/supporting-php-pain/</link>
		<comments>http://www.simpol.com/dev/2011/09/15/supporting-php-pain/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 23:50:44 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Other Languages]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.simpol.com/dev/?p=63</guid>
		<description><![CDATA[Today I decided to tackle something that I had decided needed doing. After discussing the migration to the new forum with my web guru, he pointed out that we would lose all the back links and indexed entries from Google and other search engines if we broke the URL path. The original reason we put [...]]]></description>
				<content:encoded><![CDATA[<p>Today I decided to tackle something that I had decided needed doing. After discussing the migration to the new forum with my web guru, he pointed out that we would lose all the back links and indexed entries from Google and other search engines if we broke the URL path. The original reason we put a new forum plug-in up was because the old Newsportal software broke on PHP5.3, which was required by the newest release of WordPress. My guru suggested that it couldn&#8217;t be that bad to fix, it <em>should mainly just run</em>.</p>
<p>Famous last words. As it turns out, the software was actually faulty in various ways, probably in most respects because of changes that PHP5 has made that break things that worked before. Just to give you a feeling for it, older PHP programs used: <code>&lt;?</code> to begin a chunk of PHP code inside of a section of HTML. In PHP5, it seems you have to use <code>&lt;?php</code> to do that. This meant tracking down every single place that PHP code was being inserted throughout, as well as places where it was being added into the web page by some other chunk of PHP code. To say the least, it was spread far and wide. At least the closing tag hadn&#8217;t changed.</p>
<p>Then, on top of all those changes, they were all kinds of other places in the code that just plain didn&#8217;t work. It seems that some convention of inserting one-liners using PHP that worked before wasn&#8217;t working now, and I had to figure that out and alter them all. Also, the original code had numerous errors that were being ignored by PHP4 but which showed up loud and clear in PHP5. I ended up having to fix quite a few errors in the code. Also, in some places functions were being used that were deprecated, but for which there were drop-in compatible replacements; so why didn&#8217;t they just leave the original function there and have it call the new one if the old one needed replacement? If they really were that compatible &#8211; split() is deprecated and now you use explode() &#8211; why not just fix split() instead of creating a new one? Didn&#8217;t these people ever hear of backwards compatibility?</p>
<p>Oh well, rant over. The work took hours, but it is now done. I have a reworked copy of <a href="http://amrhein.eu/newsportal/">Florian Amrhein&#8217;s Newsportal</a> that works in PHP5 and which has numerous bugs removed. If somebody really needs it, let me know and I will try and package up the changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/09/15/supporting-php-pain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Look at Superbase Conversion</title>
		<link>http://www.simpol.com/dev/2011/08/18/superbase-simpol-conversion/</link>
		<comments>http://www.simpol.com/dev/2011/08/18/superbase-simpol-conversion/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 22:37:17 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[SIMPOL Programming]]></category>
		<category><![CDATA[Superbase Migration]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[SIMPOL]]></category>
		<category><![CDATA[Superbase]]></category>

		<guid isPermaLink="false">http://www.simpol.com/dev/?p=59</guid>
		<description><![CDATA[In my recent conversations with one of the old Superbase crowd who has taken the plunge and is converting/rewriting an application in SIMPOL, he mentioned that he is documenting his steps on a blog. For anyone interested in getting a different point of view and set of experiences, you may wish to have a look [...]]]></description>
				<content:encoded><![CDATA[<p>In my recent conversations with one of the old Superbase crowd who has taken the plunge and is converting/rewriting an application in SIMPOL, he mentioned that he is documenting his steps on a blog. For anyone interested in getting a different point of view and set of experiences, you may wish to have a look at <a href="http://www.cross-platform-development.com/">Dan Jinks&#8217; blog</a>. I have to admit every opportunity I get to interact with someone who is providing solid feedback helps me to better understand what people need to learn and in what order.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/08/18/superbase-simpol-conversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google XML Sitemap Generator</title>
		<link>http://www.simpol.com/dev/2011/08/05/google-xml-sitemap-generator/</link>
		<comments>http://www.simpol.com/dev/2011/08/05/google-xml-sitemap-generator/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 15:50:39 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[SIMPOL Deployment]]></category>
		<category><![CDATA[SIMPOL Programming]]></category>
		<category><![CDATA[Google XML Sitemap]]></category>
		<category><![CDATA[SIMPOL]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simpol.com/dev/?p=53</guid>
		<description><![CDATA[One of the things that I had to do as part of the web site update, was to manage supplying multiple XML sitemaps to Google. WordPress has various plugins to create usable XML sitemaps for Google, but I also needed to generate one for the external content represented by the documentation. To put it into [...]]]></description>
				<content:encoded><![CDATA[<p>One of the things that I had to do as part of the web site update, was to manage supplying multiple XML sitemaps to Google. WordPress has various plugins to create usable XML sitemaps for Google, but I also needed to generate one for the external content represented by the documentation. To put it into perspective, we currently have 63 pages or so in WordPress, but over 900 pages in the documentation, so it was important that it get indexed.</p>
<p>I have looked around in the past for tools that create these types of site maps, but have not been particularly impressed with them, or they were limited (max 100  URLs in the free version) or else they wanted money from me before doing even a demo. Although they would be entitled to some cash if the task were that hard, I knew I could create one pretty fast myself. I had a quick look at the format, and then in about 20 minutes I built and tested mine. No fancy bits, it just does a recursive directory walk. It does not do this by analyzing links on a bunch of web pages, it is meant for offline use. I am sure it could do with a raft of options, but I haven&#8217;t needed them yet.</p>
<p>So if you want to have one, this one runs from the command line. I have included the Win32 runtime components of SIMPOL (just the ones required) in the archive, together with the source code.</p>
<p>Enjoy!</p>
<p><a href="http://www.simpol.com/dev/files/2011/08/googlesitemapgen.zip">Google Sitemap Gen Package</a></p>

<div class="woo-fblike none">		
<iframe src="http://www.facebook.com/plugins/like.php?href=http://www.simpol.com/dev/2011/08/05/google-xml-sitemap-generator/&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light&amp;font=arial" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:60px"></iframe>
</div>
	
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/08/05/google-xml-sitemap-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Superbase to SIMPOL App Conversion</title>
		<link>http://www.simpol.com/dev/2011/08/04/simpol-converts-taxiplus-superbase-simpol/</link>
		<comments>http://www.simpol.com/dev/2011/08/04/simpol-converts-taxiplus-superbase-simpol/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 17:53:23 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[SIMPOL Personal]]></category>
		<category><![CDATA[SIMPOL Programming]]></category>
		<category><![CDATA[Superbase Migration]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[SIMPOL]]></category>
		<category><![CDATA[Superbase]]></category>

		<guid isPermaLink="false">http://www.simpol.com/dev/?p=33</guid>
		<description><![CDATA[I would like to discuss the approach taken to convert TaxiPlus into a new SIMPOL-based product called Taxi Pro Gold. The order of execution was roughly this: Analyze the original Initial Conversion Create project using the Address Book sample as the basis. Add into the project all the pieces. Ensure that data-entry, the menu, the [...]]]></description>
				<content:encoded><![CDATA[<p>I would like to discuss the approach taken to convert TaxiPlus into a new SIMPOL-based product called Taxi Pro Gold. The order of execution was roughly this:</p>
<ul>
<li>Analyze the original</li>
<li>Initial Conversion</li>
<li>Create project using the Address Book sample as the basis.</li>
<li>Add into the project all the pieces.</li>
<li>Ensure that data-entry, the menu, the tool bar, etc. all work and allow record selection, creation, modification, saving, and deletion.</li>
<li>Clean up all the forms to look consistent. Add in whatever buttons are required and get them working.</li>
<li>Examine the reports. Convert the graphic reports using the conversion tool, then clean up the XML to be correct.</li>
<li>Add the reports to the system. Add dialogs for preparing the filters. Test the reports.</li>
<li>Final testing and clean up.</li>
<li>Create handbook and registration system.</li>
<li>Produce and test installer.</li>
</ul>
<h2>Analysis</h2>
<p>Using the Superbase Project Manager (added into the product with the 2001 release), we analyzed the original. This process consisted of assessing the number of database files, forms, quick reports, graphic reports, and the overall amount of code. As part of this we established how much of the code was being used to manage the Superbase package, and how much was used to actually do the work of the package. These were split apart, so that we could concentrate only on the code that actually did the work of the package. The internal management would be left to the application framework library.</p>
<p>Once the analysis was complete, the next phase was the initial conversion.</p>
<h2>Initial Conversion</h2>
<h3>Converting the Databases</h3>
<p>The first step in the conversion was to convert the databases. The utility program &#8220;Superbase to SIMPOL Database Converter&#8221; is found in the installation program group in the Utilities sub-folder. Running that produces a GUI-based conversion tool that allows the batch conversion of Superbase database files into SIMPOL database files. The recommended approach is to use one database file per container, this is for performance reasons when doing maintenance. In this case, we did not want any of the data, so we chose not to copy the data across, unticking the &#8220;Copy data&#8221; check box.</p>
<div id="attachment_34" class="wp-caption alignnone" style="width: 573px"><a href="http://www.simpol.com/dev/files/2011/08/sbfcvtr.jpg"><img class="size-full wp-image-34 " title="Superbase to SIMPOL Database Converter" src="http://www.simpol.com/dev/files/2011/08/sbfcvtr.jpg" alt="Superbase to SIMPOL Database Converter" width="563" height="457" /></a><p class="wp-caption-text">Superbase to SIMPOL Database Converter</p></div>
<p>Once the databases were converted, we also needed to deal with the field level formulas for initializing constant values, calculating field values, and validating field values. Since field level calculations, validations, and constants are not supported by SIMPOL, there is a different approach that is used. An event handling function is created and assigned to the <em>onnewrecord</em> event to handle constants and another for the  calculations and validations that is assigned to handle the <em>onsaverecord</em> event.</p>
<h3>Converting the Database Formulas</h3>
<p>These functions can be created mostly automatically, using another conversion tool, called <em>sbd_formula_rdr.smp</em>. This is a command line program that is located in the Utilities directory beneath the main SIMPOL installation directory. It takes as arguments, a starting path and an output file name. It will then look at every *.sbd file in that directory(it does not recurse into subdirectories), and will create functions in the target file for each formula type (constant, calculation, and validation) with entries for each field that has a formula of said type. The resulting output will be a mixture of SIMPOL and unconvertable SBL, which will have to be converted by hand. The program looks like this:</p>
<div id="attachment_37" class="wp-caption alignnone" style="width: 585px"><a href="http://www.simpol.com/dev/files/2011/08/sbdformulardr.jpg"><img class="size-full wp-image-37    " title="SBD Formula Reader" src="http://www.simpol.com/dev/files/2011/08/sbdformulardr.jpg" alt="SBD Formula Reader" width="575" height="166" /></a><p class="wp-caption-text">SBD Formula Reader</p></div>
<p>When run against the SBAIR sample from Superbase, the output looks like this (I have truncated it here):</p>
<pre>function city_rec_validation(type(db1record) r, appwindow appw)
 // RouteCategory.CITY LIKE "[SML]"
end function</pre>
<pre>function crew_rec_initialize(type(db1record) r, appwindow appw)
 // r!CrewID = SER (CrewID.CREW)
end function</pre>
<pre>function flight_rec_initialize(type(db1record) r, appwindow appw)
 // r!FlightNo = "SUP" + STR$ ( SER (FlightNo.FLIGHT,1),"000")
 // r!Frequency = "1234567"
end function</pre>
<p>As you can see, the code that is output won&#8217;t run, it has to be modified by hand, still, having it all in one place, and in appropriate functions makes it easier. Also, in many cases the conversion tool will generate fairly correct code. The biggest difficulty we face here is the lack of a SER() function. In many cases, even in Superbase systems, more experienced developers have written their own function for this, since network serial number generation is complicated to get right.</p>
<p>We created a function for use with this conversion project, which is based on a serial number table, with a record for each database table that it manages. The first time it will go searching for the final record in the appropriate index depending on which table it is working with. If the table is empty, it will create the number 1 and store it in the newly created record for that table. From then on it will need to lock the record to ensure that only one client receives the number. Our function is called getserno() and it takes a reference to the serial number table, the name of the target table, and the application object, which contains the references to all the database tables.</p>
<p>The hand modified code for our functions above looks like this:</p>
<pre>function city_rec_validation(type(db1record) r, appwindow appw)
  boolean ok
  ok = .like1(r!RouteCategory, "[SML]")
end function ok</pre>
<pre>function crew_rec_initialize(type(db1record) r, appwindow appw)
  r!CrewID = getserno(appw.app.serno, "CREW", appw.app)
end function</pre>
<pre>function flight_rec_initialize(type(db1record) r, appwindow appw)
  r!FlightNo = "SUP" + STR(getserno(appw.app.serno, "FLIGHT", appw.app), "000")
  r!Frequency = "1234567"
end function</pre>
<p>As you can see, once the serial number strategy has been resolved, things speed up quickly. The other common problem is when people are using the Superbase LOOKUP to search for a record in another table. There is a similarly named function called lookup() in SIMPOL and it is found in the appframework.sml library. Also available through there is the getuserinput() function (similar to REQUEST 4 in Superbase) and the listpicker() function which is similar to the REQUEST 20, 24, and 25 from Superbase. The source for listpicker() and getuserinput() is provided in the uisyshelp project.</p>
<p>The next step, was to convert the forms.</p>
<h3>Converting the Forms</h3>
<p>To convert the forms, a Superbase language utility was created. It makes a number of assumptions about the target, chief among them, that the database tables are each stored in a *.sbm file with the same name as the original table, where the file name is the table name in lower case, and the table itself is stored with the table name in uppercase. The utility will run in Superbase 2001 or later, but it may not run in anything older. The interface is quite sparse, it simply asks you to select a form, then asks for the name of the target file suggesting the original form name with an sxf extension.</p>
<p>There are a few differences between Superbase forms and SIMPOL forms. Superbase form controls are all drawn by Superbase, which is one reason why they tend to look dated. That is also a reason why Superbase is so fast, but on modern hardware the price, not having a consistent looking UI when compared to other applications on the same operating system, is too high. The speed difference is rarely apparent. SIMPOL also does not currently support nested detail blocks, although the preparation for them is there. Nor does it support writing to the detail blocks. There are features in place for retrieving the records associated with a row in a detail block, as well as for updating that row, or even removing it from the detail block. Also, the only unlinked detail blocks available use a query to fill them.</p>
<p>SIMPOL also has a few useful tricks available to it. Each edit control can have an associated drop down list that is activated by the user typing a specific number of characters, similar to the drop down lists that appear in modern browsers. Every control can have a tool tip. Images can be automatically retrieved from various sources, such as URLs. There are also some additional controls that Superbase did not have, such as arcs, triangles, scroll bars, a grid and a data-aware grid.</p>
<p>Once we had converted all the forms, we still needed to clean them up, but that can come later. First we wanted to just see them come up in the application framework, so in the next step, we made a copy of the <a href="http://www.simpol.com/docs/quickstart/databaseprograms.html">Address Book sample</a> to use as a starting point.</p>
<h2>Creating the Main Project</h2>
<p>Now things were starting to get interesting. We copied the sample into a new directory with an appropriate project name, and began making the few minor modifications necessary to get the first form and database table up. This only took an hour, and from there we began making some design decisions and preparing the data types (objects) that we were going to use.</p>
<p>As an early next step, we converted the menu program from the Taxi Plus program. This was created using the Superbase Menu Designer and was still be loaded from the same source code. Fortunately there is also a converter for Superbase menu programs, so we immediately ran the converter. This is also found in the SIMPOL Utilities group, and is called &#8220;SB Menu to SIMPOL Source&#8221;. It is also a Superbase program and when run it will convert a Superbase menu program into SIMPOL source code. It also will generate placeholder (empty) functions for each of the named functions in the menu. Taxi Plus did not have an icon bar, but if it had, we would have converted it at this point too. There is no converter for icon bars, but there is a sample that is fairly easy to extend.</p>
<p>At this point, all there was left to do to in the conversion was defined by the functions called from the menu, the tool bar, and any buttons on the forms.</p>
<h2>Ongoing Development</h2>
<p>The biggest chunk was simply to get all the functions filled out from the menu and tool bar, especially those that opened up new forms, and to define the functions for the buttons on those forms. Each function was given a single function call in its body until it was done. That function call was to the notyet() function, which displays a message that the functionality is not yet implemented. The goal was to eventually have none of these left.</p>
<p>Along the way, we stumbled over some dialogs as well. SIMPOL only has forms, and those forms can be selected into a window, a dialog, or even a tool bar. So in some cases, where the dialog code was still fairly consistent with the original, we used the converter for dialogs to SIMPOL forms. This is also a Superbase program and can be found in the Utilities sub-folder.</p>
<p>During this period all of the forms were also revisited and cleaned up, given a new look and checked for consistency across the interface.</p>
<p>Once all of this was done, the last big chunk was there: printed forms, quick reports and graphic reports. Fortunately, the printed forms could be done using the print form library, with some minor adjustments to the converted forms.</p>
<h2>Quick Reports and Graphic Reports</h2>
<p>There were only a few quick reports in the package, but there were over 30 graphic reports. By clever redesign, we managed to consolidate a number of the graphic reports so that at the end, we only had 23. Still, they all had to be converted. One of the big stumbling blocks is that currently there is no front-end in SIMPOL for designing and modifying graphic reports or quick reports. These front-ends are on the current work list. The back end code, for creating them programmatically, and for saving them and loading them does exist, as does a converter for the graphic reports, which does around 95% of the work. The rest required direct manipulation of the XML file in which the reports were stored. This sounds much worse than it is. Part of the problem with writing a converter for Superbase Graphic Reports is that there is no programmatic way to access the group, aggregate calculation, and report-specific content. Superbase stores this in a separate file which most people then manipulate anyway.</p>
<p>One of the things we discovered, is that in the absence of a graphical report designer, it was actually faster to do all of the manipulation we wanted of the report in the Superbase Graphic Report Designer, and then when we were happy with it, to convert it.</p>
<p>One difference worth mentioning between Superbase and SIMPOL, is that SIMPOL always uses absolute positioning for creating reports and printed forms, so this may require adjustment in Superbase prior to conversion.</p>
<h2>Some Screenshots of the Results</h2>
<p>Here are some images from the finished program.</p>
<div id="attachment_45" class="wp-caption alignnone" style="width: 556px"><a href="http://www.simpol.com/dev/files/2011/08/firstrun05.png"><img class="size-full wp-image-45" title="System Settings Wizard Page" src="http://www.simpol.com/dev/files/2011/08/firstrun05.png" alt="System Settings Wizard Page" width="546" height="354" /></a><p class="wp-caption-text">System Settings Wizard Page</p></div>
<div id="attachment_42" class="wp-caption alignnone" style="width: 548px"><a href="http://www.simpol.com/dev/files/2011/08/booking.png"><img class="size-full wp-image-42 " title="Taxi Pro Bookings Form" src="http://www.simpol.com/dev/files/2011/08/booking.png" alt="Taxi Pro Bookings Form" width="538" height="387" /></a><p class="wp-caption-text">Taxi Pro Bookings Form</p></div>
<div id="attachment_41" class="wp-caption alignnone" style="width: 548px"><a href="http://www.simpol.com/dev/files/2011/08/allocate.png"><img class="size-full wp-image-41 " title="Taxi Pro Driver Allocation Form" src="http://www.simpol.com/dev/files/2011/08/allocate.png" alt="Taxi Pro Driver Allocation Form" width="538" height="387" /></a><p class="wp-caption-text">Taxi Pro Driver Allocation Form</p></div>
<div id="attachment_43" class="wp-caption alignnone" style="width: 549px"><a href="http://www.simpol.com/dev/files/2011/08/createinvoice.png"><img class="size-full wp-image-43 " title="Taxi Pro Invoice Creation" src="http://www.simpol.com/dev/files/2011/08/createinvoice.png" alt="Taxi Pro Invoice Creation" width="539" height="387" /></a><p class="wp-caption-text">Taxi Pro Invoice Creation</p></div>
<div id="attachment_46" class="wp-caption alignnone" style="width: 536px"><a href="http://www.simpol.com/dev/files/2011/08/invoice_preview.png"><img class="size-full wp-image-46 " title="Taxi Pro Invoice Print Preview" src="http://www.simpol.com/dev/files/2011/08/invoice_preview.png" alt="Taxi Pro Invoice Print Preview" width="526" height="382" /></a><p class="wp-caption-text">Taxi Pro Invoice Print Preview</p></div>
<div id="attachment_44" class="wp-caption alignnone" style="width: 546px"><a href="http://www.simpol.com/dev/files/2011/08/driverssheet.png"><img class="size-full wp-image-44 " title="Taxi Pro Driver's Sheet" src="http://www.simpol.com/dev/files/2011/08/driverssheet.png" alt="Taxi Pro Driver's Sheet" width="536" height="424" /></a><p class="wp-caption-text">Taxi Pro Driver&#39;s Sheet</p></div>
<h2>Conclusion</h2>
<p>Overall, it was a fairly meaty job. Some of the issues that arose and had to be solved were imposed by newer versions of Windows. As of Vista it is no longer a good idea to install your data in the same directory subtree as your application. This only results in problems, because of virtualization. As such, we had to investigate the best way to do it on multiple versions of Windows. Overall, it took around what we thought it would take in terms of time, plus about 15-20%, but some of that time was because of items added during production that were not part of the original product. If we had to do it over again, we might have made a few decisions differently, but that is often the case on a project like this. Overall, the project slipped into the application framework quite well, and works the way we had hoped. There are bound to eventually be some niggles, but overall we are satisfied with this first big conversion. Now it is time to get the remaining front-end bits done to make it even easier. Still, considering that the reports had to be hand-adjusted, it only took about 2-3 weeks to convert and adjust all of the 30+ reports, including building dialogs for requesting filter parameters from the user.</p>

<div class="woo-fblike none">		
<iframe src="http://www.facebook.com/plugins/like.php?href=http://www.simpol.com/dev/2011/08/04/simpol-converts-taxiplus-superbase-simpol/&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light&amp;font=arial" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:60px"></iframe>
</div>
	
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/08/04/simpol-converts-taxiplus-superbase-simpol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The First (Next) Step</title>
		<link>http://www.simpol.com/dev/2011/07/29/next-step/</link>
		<comments>http://www.simpol.com/dev/2011/07/29/next-step/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 20:03:06 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[DocBook]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[SIMPOL]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simpol.com/www/dev/?p=23</guid>
		<description><![CDATA[Well, the revamp of the SIMPOL website has been done. We have now gotten the whole thing into WordPress 3.2.1. This was anything but trivial, as it turns out. We have hundreds of pages of documentation that are written using DocBook XML and generated externally to WordPress that we did not intend to insert and [...]]]></description>
				<content:encoded><![CDATA[<p>Well, the revamp of the SIMPOL website has been done. We have now gotten the whole thing into <a href="http://wordpress.org">WordPress 3.2.1</a>. This was anything but trivial, as it turns out. We have hundreds of pages of documentation that are written using <a href="http://www.docbook.org">DocBook XML</a> and generated externally to WordPress that we did not intend to insert and maintain in WordPress. We also had to add in our online registration system and associated web shop (a suite of programs written in SIMPOL), all of which needed light touch ups for the new look.</p>
<p>One of the overall goals of this effort has been to enable me to integrate this blog into the system and to update it with various features that WordPress makes available. Even more important is that we wanted to seize this opportunity to create an accessible two-way communication spot where useful ideas can flow in both directions.</p>
<p>Please visit the blog often to keep up with things that are happening at SIMPOL that are not necessarily newsworthy enough for our News section, but that we still want to share with you.</p>
<p>Also, please register if you wish to write back here on the blog. Don&#8217;t forget that we also provide a <a href="news://news.simpol.com">news server</a> plus a new <a href="http://www.simpol.com/forum/">forum</a>. The news server contains a wealth of information regarding SIMPOL and Superbase development, and the new forum system will undoubtedly produce a similar resource in the coming months and years.</p>

<div class="woo-fblike none">		
<iframe src="http://www.facebook.com/plugins/like.php?href=http://www.simpol.com/dev/2011/07/29/next-step/&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light&amp;font=arial" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:60px"></iframe>
</div>
	
]]></content:encoded>
			<wfw:commentRss>http://www.simpol.com/dev/2011/07/29/next-step/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.simpol.com @ 2013-05-20 02:50:22 -->