<?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>RemObjects Blogs</title>
	<atom:link href="http://blogs.remobjects.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blogs.remobjects.com</link>
	<description>Remobjects Software Blogs</description>
	<lastBuildDate>Wed, 16 May 2012 11:42:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Managed is the New Native</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/05/15/p4268</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/05/15/p4268#comments</comments>
		<pubDate>Tue, 15 May 2012 07:02:23 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oxygene]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4268</guid>
		<description><![CDATA[It used to be that native development referred to compilers outputting code ready to execute on the target CPU. At the time, the pool of possible CPUs was small, and the alternatives where runtime interpretation. Since then a lot has changed. Modern CPUs have multiple modes of execution (protected mode, long mode, etc.) and optionals [...]]]></description>
			<content:encoded><![CDATA[<p>It used to be that native development referred to compilers outputting code ready to execute on the target CPU. At the time, the pool of possible CPUs was small, and the alternatives where runtime interpretation. Since then a lot has changed. Modern CPUs have multiple modes of execution (<a href="http://en.wikipedia.org/wiki/Protected_mode">protected mode</a>, <a href="http://en.wikipedia.org/wiki/Long_mode">long mode</a>, etc.) and optionals instruction sets (<a href="http://en.wikipedia.org/wiki/SSE4">SSE4a</a>, <a href="http://en.wikipedia.org/wiki/SSE5">SSE5</a>, etc.). A &#8220;native code&#8221; compiler must choose a minimum level to target, ignoring &#8220;higher&#8221; level functionality available on newer CPUs. This leaves programs unable to take advantage of the latest CPU innovations, and often running in a legacy compatibility mode on the very CPU it targets.</p>
<p>What is more native on the latest 64-bit processor: 32-bit x86 code or intermediate code just-in-time compiled to take advantage of the 64-bit architecture and latest SSE instruction set? Not so simple, is it?</p>
<p>Managed code platforms such as Java and .NET have a &#8220;native&#8221; advantage that no unmanaged (so called &#8220;native code&#8221;) compilers can match. Because managed platforms distribute their programs in an intermediate format (Intermediate Language [IL] Assemblies for .NET and Byte-code for Java) the Just-In-Time (JIT) compiler is able to compile the program to specifically target the CPU it is running on. This means the program can scale up or down as necessary on each CPU, even a CPU that wasn&#8217;t released when you wrote the code.</p>
<p>A misconception is that managed applications are slower than unmanaged applications, or that managed applications are interpreted at runtime. A managed application is JIT compiled into highly optimized machine code immediately on execution.</p>
<p>The alternative for non-managed compilers is to compile to multiple targets and then provide software emulation for CPU instruction sets on older CPUs. The result is a more bloated program that contains emulation code that is rarely used, or a program that is unable to take advantage of the latest CPU optimizations.</p>
<p>Now that managed is the new native, it leaves developers free to focus on what is really important: <a href="http://blogs.remobjects.com/blogs/mh/2012/04/19/p4243">A Native User Experience</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/05/15/p4268/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Creating an Android Client with RemObjects SDK for Java and Oxygene for Java</title>
		<link>http://www.remobjects.com/tv/ro-03-ox-android</link>
		<comments>http://www.remobjects.com/tv/ro-03-ox-android#comments</comments>
		<pubDate>Thu, 10 May 2012 23:56:11 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=1b04363a717e817747c9b0fb82d9e8a4</guid>
		<description><![CDATA[A short introduction to using RemObjects SDK for Java and Oxygene for Java to create a Android client application for a RemObjects SDK server. RemObjects SDK is a remoting framework for creating and using smart services and service orientated solutions.]]></description>
			<content:encoded><![CDATA[<p>A short introduction to using RemObjects SDK for Java and Oxygene for Java to create a Android client application for a RemObjects SDK server. RemObjects SDK is a remoting framework for creating and using smart services and service orientated solutions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/05/11/p4315/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/ro/ro-03-ox-android.mp4" length="25713100" type="video/mp4" />
		</item>
		<item>
		<title>The Importance of Compatibility</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/05/10/p4289</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/05/10/p4289#comments</comments>
		<pubDate>Thu, 10 May 2012 14:20:50 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Cooper]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oxygene]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4289</guid>
		<description><![CDATA[When you are choosing a tool or library for Android development it is really important to consider platform compatibility. Some tools only support the latest and greatest version of Android, while the majority of devices are still running Gingerbread. It is always useful to consult the monthly updated Platform Versions Distribution when considering which version of [...]]]></description>
			<content:encoded><![CDATA[<p>When you are choosing a tool or library for Android development it is really important to consider platform compatibility. Some tools only support the latest and greatest version of Android, while the majority of devices are still running Gingerbread. It is always useful to consult the monthly updated <a href="http://developer.android.com/resources/dashboard/platform-versions.html">Platform Versions Distribution</a> when considering which version of Android to target.</p>
<div id="attachment_4290" class="wp-caption aligncenter" style="width: 470px"><a href="http://developer.android.com/resources/dashboard/platform-versions.html"><img class="size-full wp-image-4290" title="May 2012 Platform Version Distribution" src="http://blogs.remobjects.com/wp-content/uploads/2012/05/MayPlatformVersionDistribution.png" alt="" width="460" height="250" /></a><p class="wp-caption-text">May 2012 Android Platform Version Distribution</p></div>
<p>While Ice Cream Sandwich (Android 4 / API 15) is all the rage, it is only installed on around 5% of the devices. Gingerbread (Android 2.3 / API 10) is the current front running with over 60% of the devices. It took over from Froyo (Android 2.2 / API 8) just last year. If you target Froyo or greater, you have the potential to reach a whooping <strong>93.5%</strong> of the 300+ million Android devices. A whole lot better than the 5% that Ice Cream Sandwich gives you.</p>
<p>That is why <a href="http://www.remobjects.com/ro/java">RemObjects SDK for Java</a> and <a href="http://www.remobjects.com/oxygene/java">Oxygene for Java</a> support Froyo and newer – to give you access to the greatest possible number of Android devices. This level of support and compatibility is the result of our commitment to provide a <a href="http://www.remobjects.com/native">native developer</a> experience on each platform we support.</p>
<p>And thanks to the <a href="http://developer.android.com/sdk/compatibility-library.html">Support Package compatibility libraries</a> your app can take advantage of a lot of the latest Ice Cream Sandwich features even when running on a Froyo or Gingerbread device. That way you can have your dessert and eat it too!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/05/10/p4289/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating a RemObjects SDK for Java Client with IntelliJ IDEA</title>
		<link>http://www.remobjects.com/tv/ro-02-idea</link>
		<comments>http://www.remobjects.com/tv/ro-02-idea#comments</comments>
		<pubDate>Wed, 09 May 2012 15:14:41 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=4ac35049242262e96c6266d2216369cd</guid>
		<description><![CDATA[A short demo of creating a RemObjects SDK for Java console application client for the Mega Demo Server using the free JetBrains IntelliJ IDEA.]]></description>
			<content:encoded><![CDATA[<p>A short demo of creating a RemObjects SDK for Java console application client for the Mega Demo Server using the free JetBrains IntelliJ IDEA.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/05/09/p4313/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/ro/ro-02-idea.mp4" length="28392573" type="video/mp4" />
		</item>
		<item>
		<title>Announcing RemObjects SDK for Java — Available Now!</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/05/08/p4297</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/05/08/p4297#comments</comments>
		<pubDate>Tue, 08 May 2012 15:29:44 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[ROFX]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4297</guid>
		<description><![CDATA[Dear Readers, we are delighted to announce the immediate availability of RemObjects SDK for Java, the fourth platform edition of our award-winning remoting framework. This release roughly marks the 10th anniversary of our initial RemObjects SDK for Delphi back in 2002. At lot has happened in said 10 years; the industry and the computing infrastructure [...]]]></description>
			<content:encoded><![CDATA[<p>Dear Readers,</p>
<p>we are delighted to announce the immediate availability of <a href="http://remobjects.com/ro/java">RemObjects SDK for Java</a>, the fourth platform edition of our award-winning remoting framework.</p>
<p>This release roughly marks the 10th anniversary of our initial RemObjects SDK for Delphi back in 2002. At lot has happened in said 10 years; the industry and the computing infrastructure has changed a lot and RemObjects SDK has evolved a lot as well. And we are happy that with the new release of RO/J we now have you covered with native RemObjects SDK client connectivity on just about any computing and development platform out there — including the three big mobile platforms.</p>
<p>Many of you have pre-ordered RemObjects SDK for Java and already had a chance to use the product during its beta cycle. As of today, the first official bits for RemObjects SDK are available to customers, and a free 30-day trial version is also available for download from our website.</p>
<h2>What Does RemObjects SDK for Java Bring to the Table?</h2>
<p>Just like <a href="http://www.remobjects.com/ro">its sister products</a>, RemObjects SDK for Java is a fresh and completely platform-native reimplementation of our remoting infrastructure, this time for the Java and Dalvik platforms.</p>
<p>RO/J consists of 100% pure Java Runtime code with no external dependencies, and it will run on any system where Java 1.6 or higher or Android Dalvik API level 8 or higher is available.</p>
<p>RO/J has been designed from the ground up to fit well into the Java platform and its API paradigms, and it can be used from a variety of Java development environments, including Eclipse, NetBeans, IntelliJ IDEA — as well as, of course, our own Oxygene for Java in the Visual Studio IDE.</p>
<p>At the same time, RO/J is built on the same architectural principles that you have come to know and love from its sister products — remote services, messages, channels, envelopes and the like — as an existing RO user you will feel right at home.</p>
<h2>Why use RemObjects SDK for Java?</h2>
<p>The most exciting platform for RO/J, right now, is certainly Android. As one of the three major mobile computing platforms today, the Android operating system is largely based around a variant of the Java runtime called Dalvik. Serious, native Android development is done using Java or Java-Runtime-based languages (such as Oxygene), and with RO/J you now have the ability to leverage your remote services from your Android based applications.</p>
<p>But of course RO/J is also applicable in many other scenarios involving the &#8220;traditional&#8221; Java runtime: from cross-platform Java-based desktop applications over Applets or use in JavaServer Pages to Java on embedded devices — everywhere you can run Java and have a network connection, you can now communicate with your RO servers.</p>
<h2>Find Out More</h2>
<p>To find out more about RemObjects SDK for Java, visit the product home page at <a href="http://www.remobjects.com/ro/java">remobjects.com/ro/java</a>, or watch our introduction videos at <a href="http://www.remobjects.com/tv/ro-01-java-intro">RemObjects TV</a>. Or grab your free trial version today, at <a href="remobjects.com/trials">remobjects.com/trials</a>.</p>
<p>If you are ready to take the plunge, RO/J is available in our <a href="http://www.remobjects.com/shop">secure online store</a> for $399 for new users, and of course it&#8217;s available in bundles and as part of our &#8220;up-renewal&#8221; offer, where you can renew any existing RemObjects SDK subscription and just include the new Java edition in your renewal.</p>
<h2>Also, Data Abstract for Java</h2>
<p>If you want to go beyond remoting, we also have the Java edition of our Data Abstract database framework coming up. DA/J is currently in early-but-usable beta and available for pre-order. (Pre-orders of course include immediate access to the shipping RemObjects SDK for Java, as well as full beta access).</p>
<p>As you can probably tell, we are very excited about our new Java-based product line, and we hope you are too. Especially on the Android front, Java development is only going to become more relevant in the next few years, and with RemObjects SDK, Data Abstract and our Oxygene for Java, we have you covered on all fronts to create great native Android apps — and much more.</p>
<p>Yours,<br />marc hoffman<br />Chief Architect</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/05/08/p4297/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing RemObjects SDK for Java</title>
		<link>http://www.remobjects.com/tv/ro-01-java-intro</link>
		<comments>http://www.remobjects.com/tv/ro-01-java-intro#comments</comments>
		<pubDate>Tue, 08 May 2012 14:52:40 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=a38e44489729e688f1f4df1e40646ecc</guid>
		<description><![CDATA[A short introduction and overview of RemObjects SDK for Java. This 1.0 release includes support for Android and Java clients with BinMessage and HttpChannel. Also a short demo of HttpChat in Swing and Android with Java and Oxygene.]]></description>
			<content:encoded><![CDATA[<p>A short introduction and overview of RemObjects SDK for Java. This 1.0 release includes support for Android and Java clients with BinMessage and HttpChannel. Also a short demo of HttpChat in Swing and Android with Java and Oxygene.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/05/08/p4307/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/ro/ro-01-java-intro.mp4" length="44350993" type="video/mp4" />
		</item>
		<item>
		<title>Introducing &#8220;Train&#8221; &#8212; JavaScript-based build automation</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/05/02/p4193</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/05/02/p4193#comments</comments>
		<pubDate>Wed, 02 May 2012 12:10:34 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[non-tech]]></category>
		<category><![CDATA[RemObjects]]></category>
		<category><![CDATA[Train]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4193</guid>
		<description><![CDATA[Today i&#8217;m excited to talk about a new side project that Carlo and i have been working on in our spare time over the past couple of months: Train. But let me start with some background. Here at RemObjects Software, we use a sophisticated (but home grown) continuous integration system spread across several build servers [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.remobjects.com/images/product-logos/Train-256.png" width="128" align="right"/><br />
Today i&#8217;m excited to talk about a new side project that Carlo and i have been working on in our spare time over the past couple of months: Train.</p>
<p>But let me start with some background.</p>
<p>Here at RemObjects Software, we use a sophisticated (but home grown) continuous integration system spread across several build servers to do automated builds and tests of our products. The build cycle for most of our products is intricate and lengthy, so of course it has to be automated: our &#8220;rofx-win&#8221; (more on what that one encompasses below) repository alone creates 16 different installers that we deploy, involving dozens of binaries that need to be built and countless additional tasks that need to be performed.</p>
<p>Until recently, we have mostly been using a <a href="http://www.finalbuilder.com">commercial build automation tool</a> that has served us well for the past almost 10 years, but we started running into its limitations — limitations not by any fault of the tool itself, but limitations imposed by the complexities of our builds.</p>
<p>Some of the problems included:</p>
<ul>
<li>
<p>It supported builds for Windows only, meaning for out Mac-based products, we had to use a different solution.*</p>
</li>
<li>
<p>It provided a great IDE for creating build scripts, but that was also Windows only; i&#8217;m responsible for a lot of the build script maintenance here myself (because i&#8217;m the kind of anal type you need to be to keep these things clean and tidy ;), and i&#8217;m glad for any chance to avoid booting my Windows VM.</p>
</li>
<li>
<p>But most importantly, it used a very verbose XML file format where every little adjustment to one part of the script caused thousands of small and inconsequential changes to the XML — changes that made merging a living hell (and we branch like crazy, here). It&#8217;s an eye-opening experience when after doing a cumbersome manual merge in Araxis, you get an error telling you that you overlooked a change in line 87,000. Yes, that&#8217;s line eight-seven-thousand. Not good.</p>
</li>
</ul>
<h2>So, Train</h2>
<p>So we set out to create our build script engine to replace this tool, with the following goals in mind:</p>
<ul>
<li>
<p>We didn&#8217;t want to completely reinvent the wheel.</p>
</li>
<li>
<p>It had to run on Windows and Mac OS X (and potentially elsewhere, such as Linux, though <em>we</em> don&#8217;t run it on that, ourselves).</p>
</li>
<li>
<p>Build scripts had to be clean and easy to branch/merge.</p>
</li>
<li>
<p>And, ideally, build scrips should be easily maintainable as plain text.</p>
</li>
</ul>
<p>The result of these goals, lots of extensive spec&#8217;ing, and even more coding — mostly by Carlo — is Train, our new open source build script engine.</p>
<p>Train is based on JavaScript, and implemented using Oxygene and our already open-source RemObjects Script JavaScript engine. Simply put, Train is a tool that lets you take a JavaScript source file and run it. But Train is so much more: In addition to letting you use the full flexibility of JavaScript in our build script, Train adds:</p>
<ul>
<li>
<p>An extensive base API for common build tasks, from handling files operations over working with .ini or .xml files to building MSBuild, Delphi or Xcode projects. That API is of course expandable, both using .NET modules or directly in JavaScript.</p>
</li>
<li>
<p>Sophisticated handling of variables, including access to environment variables and parameters passed to the build script, and in-string variable resolution.</p>
</li>
<li>
<p>Flexible support for nesting and including sub-scripts.</p>
</li>
<li>
<p>Great and readable logging, both to the console/stdout while a build is running, and to XML and rich HTML log files.</p>
</li>
</ul>
<p>To give you an example, here are some parts of our &#8220;rofx-xcode&#8221; build script:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">include<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;$(Train)/ci2.train&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Shared stuff specific to RemObjects' CI2</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> versionNumber <span style="color: #339933;">=</span> ci2_GetVersionNumberFromGlobalIni<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ROFX&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> sharedRofxWin <span style="color: #339933;">=</span> ci2_FindClosestSharedFolder<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;rofx-win&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// find closest/latest &quot;rofx-win&quot; build to copy stuff from</span>
<span style="color: #003366; font-weight: bold;">export</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;CIVersionNumber&quot;</span><span style="color: #339933;">,</span> versionNumber<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;sharedRofxWin is in &quot;</span><span style="color: #339933;">+</span>sharedRofxWin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//...</span>
&nbsp;
run<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Source/RemObjectsSDK.train&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
run<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Source/DataAbstract.train&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
run<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Source/TwinPeaks.train&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> buildTrial<span style="color: #009900;">&#40;</span>_project<span style="color: #339933;">,</span> _targetBase<span style="color: #339933;">,</span> _sdk<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    xcode.<span style="color: #660066;">rebuild</span><span style="color: #009900;">&#40;</span>_project<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> configuration<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Trial&quot;</span><span style="color: #339933;">,</span> target<span style="color: #339933;">:</span> _targetBase<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; for OS X&quot;</span><span style="color: #339933;">,</span> sdk<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;macosx&quot;</span><span style="color: #339933;">,</span>          destinationFolder<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./Bin&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    xcode.<span style="color: #660066;">rebuild</span><span style="color: #009900;">&#40;</span>_project<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> configuration<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Trial&quot;</span><span style="color: #339933;">,</span> target<span style="color: #339933;">:</span> _targetBase<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; for iOS&quot;</span><span style="color: #339933;">,</span>  sdk<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;iphoneos&quot;</span><span style="color: #339933;">,</span>          destinationFolder<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./Bin/iOS&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    xcode.<span style="color: #660066;">rebuild</span><span style="color: #009900;">&#40;</span>_project<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> configuration<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Trial&quot;</span><span style="color: #339933;">,</span> target<span style="color: #339933;">:</span> _targetBase<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; for iOS&quot;</span><span style="color: #339933;">,</span>  sdk<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;iphonesimulator&quot;</span><span style="color: #339933;">,</span> destinationFolder<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./Bin/iOS&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
buildTrial<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Source/RemObjectsSDK/RemObjectsSDK.xcodeproj&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;RemObjects SDK&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
buildTrial<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Source/DataAbstract/DataAbstract.xcodeproj&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Data Abstract&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// ...</span>
&nbsp;
xcode.<span style="color: #660066;">rebuild</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Tools/DASchemaModeler/DASchemaModeler.xcodeproj&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> configuration<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Release&quot;</span><span style="color: #339933;">,</span>  destinationFolder<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./Bin&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
xcode.<span style="color: #660066;">rebuild</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Tools/DASchemaModeler/DASchemaModeler.xcodeproj&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> configuration<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;AppStore&quot;</span><span style="color: #339933;">,</span> destinationFolder<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;./Bin&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// ...</span>
&nbsp;
file.<span style="color: #660066;">copy</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Release/*&quot;</span><span style="color: #339933;">,</span> env<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;CIReleaseFolder&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Among other things, you see this script calls run() on &#8220;DataAbstract.train&#8221;, which is a subscript that we actually ship with the product, so customers can run it standalone if they want to rebuild DA from source. The console output of &#8220;DataAbtract.train&#8221; while it is running might look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Dream:Source mh$ train DataAbstract.train 
RemObjects Train - JavaScript-based build automation
Copyright (c) RemObjects Software, 2012. All rights reserved.
script(da.train) {     
  function buildDAProject(Data Abstract for OS X, macosx) {     
    xcode.rebuild(DataAbstract/DataAbstract.xcodeproj, [object Object]) { }   
    xcode.rebuild(DataAbstract/DataAbstract.xcodeproj, [object Object]) { }   
  } function buildDAProject
  function buildDAProject(Data Abstract for iOS, iphoneos) {     
    xcode.rebuild(DataAbstract/DataAbstract.xcodeproj, [object Object]) { }   
    xcode.rebuild(DataAbstract/DataAbstract.xcodeproj, [object Object]) { ...</pre></div></div>

<p>As you see, it is nice and concise; you can see the flow of actions and JavaScrip functions the script is running thru, without any excess baggage (such as the extensive info Xcode dumps to the console).</p>
<p>Of course both XML and HTML log files can be generated as well, with the HTML being created from the XML using a standard XSL file included in Train. The output of a failed build might look like this:</p>
<p><center><br />
<img src="/wp-content/uploads/2012/04/Train-Log-File.png" alt="Train Log file" /><br />
</center></p>
<p>Of course you can tweak the XSL, or process the XML log file in your own way, if you like.</p>
<h2>The Bigger Picture</h2>
<p>With Train, we now have the last part of our continuous integration system under our own control, running our own internal software.</p>
<p>The rest (and much bigger and more complex part) of our build infrastructure, affectionately called &#8220;CI2&#8243;, is very interesting too, and i plan to write more about it in the future (and we are looking into possibly open-sourcing more parts of that, as well — but currently many things in CI2 are designed pretty specifically around our own needs).</p>
<p>Train fits in well with CI2, but is a completely independent piece of technology, and we hope that by making it available as a true open source project (under the BSD license), it will be helpful to many others looking for a clean and easy way to automate builds (or, really, any task).</p>
<h2>Train in Action</h2>
<p>At RemObjects, we have 5 main repositories that our build system handles: &#8220;rofx-win&#8221; (Data Abstract, RemObjects SDK and related tools, for all platforms but Xcode), &#8220;rofx-xcode&#8221; (you guessed it: Data Abstract and RemObjects SDK for Xcode), &#8220;oxygene&#8221;, &#8220;hydra&#8221; and &#8220;everwood&#8221;.</p>
<p>At the time of this writing, all but &#8220;rofx-win&#8221; have been converted to use Train — and &#8220;rofx-win&#8221; simply hasn&#8217;t because it&#8217;s a <em>huge</em> and complex build script that just takes time to convert/rewrite (and in the process get cleaned up and rethought). But between the other four repositories, Train has already been getting some good and thorough real life use, both on Windows and Mac OS X.</p>
<h2>Get Train</h2>
<p>There&#8217;s two ways to get Train, both from <a href="http://www.github.com/remobjects/train">github.com/remobjects/train</a>.</p>
<ul>
<li>
<p>If you&#8217;re feeling adventurous and/or want to get involved in extending and improving Train, clone a copy of our git repository (or fork your on copy — we&#8217;re looking forward to your merge requests!) and build it yourself. The clone will include RemObjects Script, so all you need is <a href="http://www.remobjects.com/oxygene">Oxygene for .NET</a> (the <a href="http://www.remobjects.com/downloads">free command line compiler</a> will do).</p>
</li>
<li>
<p>Alternatively, you can just grab the pre-build .zip distro with the latest compiled binaries, ready to run on Windows and Mac OS X (via Mono). We&#8217;re currently at revision 0.5, the same version running on our build systems.</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/05/02/p4193/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>What, exactly, is &#8220;native&#8221; development?</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/04/19/p4243</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/04/19/p4243#comments</comments>
		<pubDate>Thu, 19 Apr 2012 14:38:10 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[non-tech]]></category>
		<category><![CDATA[Oxygene]]></category>
		<category><![CDATA[Platforms]]></category>
		<category><![CDATA[ROFX]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4243</guid>
		<description><![CDATA[Some developers, mostly those tied to unmanaged languages such as C++ or Delphi, define nativeness as compiling directly to the byte code expected by the physical CPU. That&#8217;s certainly one way to look at it, but we think it&#8217;s imprecise, and doesn&#8217;t take into account the full picture and the complexity of today&#8217;s software systems. [...]]]></description>
			<content:encoded><![CDATA[<p>Some developers<!-- and tool vendors-->, mostly those tied to unmanaged languages such as C++ or Delphi, define nativeness as compiling directly to the byte code expected by the physical CPU. That&#8217;s certainly one way to look at it, but we think it&#8217;s imprecise, and doesn&#8217;t take into account the full picture and the complexity of today&#8217;s software systems. Consider this for example: if you compile an application for x86, and then run it on a x64 CPU &#8211; is that really &#8220;native&#8221;? Arguably not.</p>
<p>CPU-native, unmanaged code, is becoming less and less relevant these days, and we believe true nativeness of code, of applications, and — most of all — of the developer experience defines itself by other criteria.</p>
<p>Here at RemObjects, we pride ourselves on providing truly <strong>native</strong> software development solutions for a variety of platforms. We consider two different and separate levels to determine what we consider &#8220;native&#8221; development: a native user experience, and a native developer experience.</p>
<h1>A Native User Experience</h1>
<p>What makes a native user experience? For a long time, there was only one platform for mainstream development: Windows. This has changed, and users are, by and large, choosing their work environment by preference. Even when avoiding to get into the &#8220;OS wars&#8221;, it cannot be disregarded that each platform out there today has its own distinct user paradigms, and that customers usually choose their computing platform carefully and want their applications to work and behave well on that particular system, adhering to their platform&#8217;s paradigms.</p>
<p>Windows users expect applications to behave &#8220;the Windows way&#8221;, and Mac users want them to work &#8220;the Mac way&#8221;. Similarly, iOS users want applications for their iPhones and iPads that fit in with that platform&#8217;s design philosophy, and Windows Phone (7) applications once again need to adhere to completely different UI paradigms than what Android users expect from their platform of choice.</p>
<p>Obviously, the degree to which applications need to fit in with their surrounding platform varies — most games, for example, usually sport more esoteric and platform-independent UIs (after all, they aim to take you out of your daily routing and immerse you in an entertainment experience), while business and productivity applications usually should adhere to the platform most strictly.</p>
<p>Nativeness also isn&#8217;t purely driven by using stock UI controls and themes exactly as prescribed. For example, many of the most famous and most well-respected iPhone applications add subtle textures or nuances to the OS provided controls. But they continue to feel &#8220;native&#8221;, because they stick to the basic UI paradigms, and the controls — while looking visually refined — look, feel and, most importantly, behave according to the user&#8217;s expectations.</p>
<p>This is generally achieved by using what is often referred to as the &#8220;native widget sets&#8221; of the platforms. Whether it&#8217;s a standard Win32 &#8220;Button&#8221; control or a native Mac NSButton, each widget set provides its own unique look and feel — from the spacing of text within the confines of the surrounding rectangle, over font sizes, styles and gradient strengths and directions, to the intricate details of how the control reacts and animates when it is clicked or touched. These subtle details are ingrained in the user&#8217;s mind; the user has subconscious expectations for how the control will feel when used, often down to the timing of animations. What may seem like unnecessary attention to detail becomes crucial to the user&#8217;s experience, and the user will feel an &#8220;<a href="http://en.wikipedia.org/wiki/Uncanny_valley">Uncanny Valley</a>&#8221; effect, if their expectations are not met.</p>
<p>But nativeness extends beyond just user controls. Most operating systems provide a lot of general infrastructure that users are used to seeing and working with — from the standardized Open/Close or Print dialogs on desktops to OS-provided Email or Tweet sheets on phones.</p>
<p>We believe that in order to create a truly native user experience with your application, your development tools need to let you work with the native widgets and infrastructure of the platform. No matter how much effort is put into &#8220;one size fits all&#8221; libraries, no cross-platform button will ever truly feel like a standard Windows button, like a standard Mac button, like a standard iOS button. In order to treat your customers to a truly native application, you need to choose a development tool chain that lets you work against the native platform.</p>
<p>Currently, such tool chains include .NET/WPF, Metro/WinRT, Delphi/VCL (for Windows), Objective-C/Xcode (for Mac and iOS), MonoMac and MonoTouch (for Mac and iOS, respectively), Java (for Android) or MonoDroid (also for Android).</p>
<p>It goes without saying that here at RemObjects we try to support developers with all of these tool chain choices. On the compiler side with Oxygene, we don&#8217;t have full coverage, but we can provide support for .NET and WinRT, all the Mono variations, as well as native Java/Android with our new Oxygene for Java. With our Data Abstract product suite, we have you covered on literally each and every one of the combinations listed above.</p>
<p>But: we believe that a native <em>user</em> experience, while key, is only half the story for successful app development.</p>
<h1>A Native Developer Experience</h1>
<p>Back in the day when Win32 was the gold standard of operating system APIs (and before), developer tools needed to provide strong abstraction layers for developers to work against — because the OS APIs themselves were so basic that working against them directly was akin to working in assembly language (or <em>was</em>, in fact, working in assembly).</p>
<p>When tools like the later Turbo Pascals, Visual Basic, or Delphi first came out, development against the core DOS or Win16/Win32 APIs was a chore, so developers welcomed abstraction layers that made coding easier, from basic class libraries to UI abstraction layers such as TurboVision, OWL, the VCL, or MFC.</p>
<p>But platforms have evolved, and with the likes of Microsoft&#8217;s .NET and WinRT, Apple&#8217;s Cocoa (and Cocoa Touch) or Android&#8217;s Java-based Dalvik, OS APIs have long reached a level that is developer friendly, a level that can and should be coded directly against.</p>
<p>Further abstractions on top of these APIs are a distraction, not a help to the developer, as they add an extra layer of unnecessary overhead to both the application and the development experience. And such abstractions have repeatedly shown to be failures, like when VCL.NET tried to reconstruct Delphi&#8217;s well-liked class library on top of the (already much more evolved and sophisticated, but orthogonal and thus incompatible) .NET Framework (then at early version 1.1).</p>
<p>Unnecessary abstractions of already good (or great) APIs serve no purpose to the developers using them. On the contrary, they separate developers from the platform, and from each other. For every article, sample or blog post provided by, say, Apple or the Cocoa community that shows how to use a feature of iOS, there has to be the equivalent &#8220;and here is how you do it in MonoTouch&#8221;, &#8220;and here is how you do it in FireMonkey&#8221;, &#8220;and here is how you do it in …&#8221;. The abstraction keeps developers from being able to (re)use the platform vendor&#8217;s documentation or samples. Worse, it fragments the developer community on the same platform, keeping programmers from interacting and sharing code — every Cocoa control written in MonoTouch is a Cocoa control that can&#8217;t be easily reused by a developer using the native Xcode/Objective-C toolchain (nor by a developer using FireMonkey, or Titanium, or any other abstraction layer).</p>
<p>Abstractions also keep developers from adopting new platform features quickly and easily. When the latest SDKs from the platform vendor come out, developers using the native tool chains usually can start working with the new technologies from day one (or even earlier). The very moment a new Android SDK hits, native Java developers can consume the new APIs. The very day a new iOS version becomes available, Cocoa developers can start getting their fingers dirty with the new goodness. All the while developers stuck behind a non-native abstraction layer need to wait for their tool vendor to abstract the new APIs for them.</p>
<p>Not to mention that non-native development tools will often lock you in and force you to stick with the abstraction layer.</p>
<p>The main selling point and attractiveness of a non-native tool chain usually is &#8220;familiarity&#8221;, the notion that the abstraction layer will let you get into a new platform without the steep learning curve of, well, learning a new platform.</p>
<p>But that is misleading and frequently turns out not to be the case. The main learning curve on a new platform is usually not the development language, or even the class framework — it is getting to know the platform itself and how to write great applications <em>for</em> that platform (looping us back to our first criterium: the native <em>user</em> experience).</p>
<p>Working with an abstraction layer turns out to actually have the <em>opposite</em> effect than intended, by making it harder to understand the platform vendor&#8217;s documentation (which is all tailored towards the platform-native tools, of course) and making it harder to re-use existing code samples found online.</p>
<p>To go back to the example of iOS: having to look at and understand documentation or samples written for Cocoa&#8217;s Objective-C APIs might seem difficult, if one is not yet familiar with the paradigms of Objective-C. But what&#8217;s actually <em>more</em> difficult is having to look at that same documentation or sample <em>and</em> then having to figure out how it translates to your — say — C#-based abstraction layer.</p>
<p>And no abstraction layer is ever perfect. Eventually, the underlying platform and its APIs will leak through and will have to be dealt with. Any efforts to avoid getting to know and understand the platform before developing on it is misguided and only delays the inevitable. Eventually the abstraction is missing a feature and the developer has to dig down to the base APIs and implement it themselves. Or a bug arrises that needs more debugging than the abstraction layer supports.</p>
<p>As with the native user experience, here at RemObjects Software we have made it our mission to support (and encourage) developers to use platform-native development tools; you&#8217;ll notice we&#8217;ll even encourage developers to go for the more native tool chain in cases where recommending a less native solution would mean an additional sale for us.</p>
<p>On the compiler front, Oxygene supports platform native development on classic Windows, Metro (Windows 8) and Android, and it is also a great choice for cross-platform servers based on Mono. The one notable omission is iOS and Mac, for which we recommend the excellent Xcode and Objective-C, even though Oxygene can support it via non-native development tool chains such as Mono and MonoTouch or Java.</p>
<p>With the Data Abstract suite, we support native development for all current major platforms: classic Windows (via .NET <em>and</em> Delphi), Windows Phone, Mac and iOS, as well as Android and other Java-based platforms (Data Abstract for Java is currently in beta).</p>
<h1>Other Concerns, Such as Code Reuse</h1>
<p>We realize of course that other factors play into the decision for the development tool chain. Considerations such as code reuse might rank higher on the list of priorities than a native development experience, and that is ok.</p>
<p>Our philosophy is that, all other things being equal, developers should aim for a toolchain that is native on both accounts: user experience <em>and</em> developer experience. If necessary, a compromise in developer experience can be made — it is after all a compromise that affects <em>only</em> the developer, if pursued correctly. No compromise, in our experience, should ever be made with regard to providing a truly native <em>user</em> experience.</p>
<p>In terms of code reuse between platforms, we at RemObjects Software aim to help, both on the language front (by providing the common Oxygene language as developer-native language for .NET, WinRT and Java/Android, at least) and on the back-end database front, by keeping Data Abstract wire compatible and letting you share a common server infrastructure for all your native client applications.</p>
<h1>Read More</h1>
<p>You can find out more about our cross-platform, platform-native products, Oxygene and Data Abstract, at <a href="http://remobjects.com/oxygene">remobjects.com/oxygene</a> and <a href="http://remobjects.com/da">remobjects.com/da</a>, respectively.</p>
<p>And you can find an overview matrix of how our products fit into the various native (as well as semi-native and non-native, if you must go there) development chains, at <a href="http://www.remobjects.com/products/toolchains">remobjects.com/products/toolchains</a>.</p>
<p>Thank you for reading, and we are looking forward to your feedback and comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/04/19/p4243/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>This Week on the Wikis</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/04/18/p4254</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/04/18/p4254#comments</comments>
		<pubDate>Wed, 18 Apr 2012 13:30:57 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[non-tech]]></category>
		<category><![CDATA[ROFX]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4254</guid>
		<description><![CDATA[Hi. About a month ago, we started with a major focus shift towards our documentation wiki (at wiki.remobjects.com. Back when we first started the wiki, years ago, it was an innovative step in developer product documentation and provided a level of information and access that few other component and tool vendors offered. A lot of [...]]]></description>
			<content:encoded><![CDATA[<p>Hi.</p>
<p>About a month ago, we started with a major focus shift towards our documentation wiki (at <a href="http://wiki.remobjects.com">wiki.remobjects.com</a>. Back when we first started the wiki, years ago, it was an innovative step in developer product documentation and provided a level of information and access that few other component and tool vendors offered. A lot of time has passed since, and we felt that a refresh is needed in order to provide even better and more thorough documentation across our products, from Articles over How Tos, and Samples to core Library Reference docs.</p>
<p>This will be a lengthy process, and you won&#8217;t see the wiki radically change over night, but instead, all thru the rest of the year, you should see steady progress and steady improvements both to the <em>kind</em> of information we provide and to <em>how</em> it is provided and accessed.</p>
<p>To accompany that, we want to start a (semi-)weekly series here on the blogs where we will keep you informed about what new content (and infrastructure) has been added in the past week (or so). Because we have a bit of a head start, this first post in the series will be a whopper.</p>
<h2>Changed, Cleaner Per-Product Sections</h2>
<p>The first thing you&#8217;ll see when you visit a product page on the wiki is that we&#8217;ve restructured each product&#8217;s root page (for example <a href="http://wiki.remobjects.com/wiki/Data_Abstract_for_.NET">DA/.NET</a> into four big categories — indicated by four big icons across the top.</p>
<p>These same 4 sections will greet you for every product, and they are:</p>
<p><strong>Getting Started</strong>: Clicking this section will give you a page with a curated, hand-picked selection of articles, how-tos and (external) videos from RemObjects TV, streamlined to get new users (or existing ones) started with the product. For each product, we start with a detailed look at our project wizard(s) and a walk-thru of the project they generate. And we provide a list of How-Tos and articles about common tasks or goals that users will be likely to want to achieve after starting a fresh project.</p>
<p>If you look at these <em>Getting Started</em> pages now, you will still see a lot of red. That is because we purposely started with a blank slate: we did not want exiting content to drive these pages, so instead, we sat down and approached this from the user&#8217;s perspective: &#8220;What would you want to do next?&#8221;, and added the appropriate links. These will now need to be be filled — some by redirecting or reworking existing content, many of them, with fresh content.</p>
<p><strong>Samples</strong>: Almost as important as starting a new project is to find your way around the existing sample projects. Each product now has a thorough overview page that covers all the sample applications we ship (for example <a href="http://wiki.remobjects.com/wiki/RemObjects_SDK_Samples">RemObjects SDK Samples</a>). The different editions of our respective products aren&#8217;t islands, and the samples from the different editions often work together or complement each other; that&#8217;s why each product has a shared page that covers the samples across <em>all</em> the platforms, where you can see how it all fits together, and, of course, dive into each of the individual samples.</p>
<p>As with the getting started, we have a lot of coverage still ahead of us, but you will see that quite a few samples are already covered.</p>
<p><strong>Articles</strong>: For each product, the articles section (e.g. <a href="http://wiki.remobjects.com/wiki/Data_Abstract_Articles_%28Xcode%29">DA/Xcode</a> will provide direct access to all the articles available for that product. We have always had tools in place that helped us manage the wiki and generate pages, and in the past we mostly used that for library documentation (more on that later). We&#8217;ve now extended that so that the <em>Articles</em> (and <em>HowTos</em>) sections are completely driven and auto-generated by meta-data in the individual articles. Each article topic in the wiki now contains meta-information on which product, platform(s), categories, classes and concepts it pertains to, allowing us to generate automatic (but designed to be human-readable) index pages. Articles can automatically reference the classes or concepts they refer to, just as the class documentation can automatically get links to articles that touch on a specific class.</p>
<p>We have started this process with a handful of articles — some new, some pre-existing, but reviewed and approved, so the lists will start out small, but over time we&#8217;ll be adding more new articles, as well as reviewing existing content and bringing it into the system if it is still up-to-date.</p>
<p><strong>How-Tos</strong>: How-Tos essentially follow the same structure as articles, but are shorter topics that focus on individual tasks (&#8220;How do do i display my data in an NSTableView?&#8221;).</p>
<p>The <em>Getting Started</em> section is, essentially, a selective view into the larger pools of content that are <em>Articles</em> and <em>How-Tos</em>. These two sections show you <em>all</em> content, while <em>Getting Started</em> shows a hand-picked subset.</p>
<h2>Library Docs</h2>
<p>We&#8217;re also working on a brand new infrastructure for library documentation, which we&#8217;ll give more focus in a future blog post. In the past, we automatically generated the basic structure of the class reference pages, and then filled them within the wiki. With our new tool chain, the entire class documentation will be maintained externally, and emitted into the wiki automatically — this gives us more opportunities to use this documentation in other ways, too (for example for generating XmlDoc files), in the long run.</p>
<p>More about that, later.</p>
<h2>Better Separation of &#8220;work in progress&#8221;</h2>
<p>In the past, work on new pages (or even creation of empty stub pages) was done on the page&#8217;s final URL. This meant that when these pages were linked elsewhere, the links would show blue (instead of the red you see for a missing page), but when you clicked them, you got to an incomplete or empty page. That was frustrating. We are changing this now, so that new pages get written in different locations (with a &#8220;WIP&#8221; prefix in the URL), until they are ready for consummation. This way, we can start adding links to them, but those links will be immediately obvious as not having content yet. Only when the page is ready will it be relocated, and all the links will turn blue.</p>
<p>In some places (such as the automatically generated <em>Articles</em> lists), you will see that we add a blue &#8220;(WIP)&#8221; behind the red link, so visitors can find the work-in-progress pages, if interested.</p>
<h2>New Content</h2>
<ul>
<li>
<p>The first six chapters of our <a href="http://wiki.remobjects.com/wiki/Developing_Database_Applications_for_Mac_and_iOS">Developing Database Applications for Mac and iOS</a> &#8220;work in progress&#8221; book have been made available on the wiki, free. These include a detailed overview of Relativity Server and Business Rules Scripting, a rundown of the New Project Wizard in DA/Xcode, two extensive topics on displaying data with UITableView and Core-Plot, as well as our &#8220;Why Multi-Tier&#8221; primer.</p>
</li>
<li>
<p>Extensive Run-thrus of the New Project Wizard for <a href="http://wiki.remobjects.com/wiki/Data_Abstract_New_Project_Wizard_%28.NET%29">DA/.NET</a>, <a href="http://wiki.remobjects.com/wiki/Data_Abstract_New_Project_Wizard_%28Delphi%29">DA/Delphi</a> and <a href="http://wiki.remobjects.com/wiki/Data_Abstract_New_Project_Wizard_%28JavaScript%29">DA/JavaScript</a> have been added just this week (and DA/Xcode is covered with the item above).</p>
</li>
<li>
<p><a href="http://wiki.remobjects.com/wiki/Choosing_a_Custom_Data_Abstract_Server_vs._Relativity_Server">Choosing a Custom Data Abstract Server vs. Relativity Server</a></p>
</li>
<li>
<p><a href="http://wiki.remobjects.com/wiki/Setting_up_a_Domain_in_Relativity_Server_%28with_Server_Explorer_for_Mac%29">Setting up a Domain in Relativity Server (with Server Explorer for Mac)</a></p>
</li>
<li>
<p>The entire product section for <a href="http://wiki.remobjects.com/wiki/RemObjects_SDK_for_Java">RemObjects SDK of Java</a>, shipping later this month, is new, with Samples coverage and an initial set of <a href="http://wiki.remobjects.com/wiki/RemObjects_SDK_Articles_%28Java%29">articles</a> on using RO/Java with Oxygene for Java and in Java Language IDEs.</p>
</li>
</ul>
<p>Let us know what you think! And stay tuned to this space for continued updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/04/18/p4254/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8? We got you covered!</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/04/17/p4170</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/04/17/p4170#comments</comments>
		<pubDate>Tue, 17 Apr 2012 12:04:05 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Month of Metro]]></category>
		<category><![CDATA[Oxygene]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4170</guid>
		<description><![CDATA[I updated this slide from //Build/Windows 2011 to show where you can use RemObjects Software&#8217;s tools with the Windows 8 Platform and Tools. Naturally, you can continue to use our tools for Delphi and .NET for desktop application development with Oxygene for .NET, Data Abstract and RemObjects SDK. If you are using Hydra, you can [...]]]></description>
			<content:encoded><![CDATA[<p>I updated this slide from <a href="http://www.buildwindows.com/">//Build/Windows</a> 2011 to show where you can use RemObjects Software&#8217;s tools with the Windows 8 Platform and Tools.</p>
<p style="text-align: center;"><a href="http://blogs.remobjects.com/wp-content/uploads/2012/04/Windows-8-Platform-and-Tools-RO.png"><img class="aligncenter  wp-image-4171" title="Windows 8 Platform and Tools with RemObjects Software" src="http://blogs.remobjects.com/wp-content/uploads/2012/04/Windows-8-Platform-and-Tools-RO.png" alt="" width="896" height="504" /></a></p>
<p>Naturally, you can continue to use our tools for Delphi and .NET for desktop application development with <a href="http://oxygenelanguage.com/">Oxygene for .NET</a>, <a href="http://www.remobjects.com/da/net">Data Abstract</a> and <a href="http://www.remobjects.com/ro/net">RemObjects SDK</a>. If you are using <a href="http://www.remobjects.com/Hydra">Hydra</a>, you can even combine Managed .NET and Unmanaged Delphi for the best of both worlds.  Then, with our latest <a href="http://www.remobjects.com/da/javascript">JavaScript client libraries</a>, we also have you covered in the browser.</p>
<p>The part that everyone is interested in is the new Metro style apps. These are the apps designed for touch on tablets and the desktop, and running in the Metro area of Windows 8. Most importantly, Metro style apps are the only ones available through the Windows Store. We got you covered for Metro, too. The latest betas of our .NET editions work with C#, VB and Oxygene for .NET to build XAML based Metro User Interfaces. Thanks to Windows 8&#8242;s new support for JavaScript based Metro apps, you can use our JavaScript client libraries for Data Abstract and RemObjects SDK to build Metro apps based on JavaScript and HTML/CSS too.</p>
<p>We are not in the unmanaged Metro space yet. Currently, the only tools that are supported there are Visual C and C++, which we don&#8217;t have libraries for. Hopefully in the future we will see that gap filled in one way or another.</p>
<p>One important thing to point out about the <a href="http://www.remobjects.com/da/javascript">JavaScript</a> client libraries is that they ship with all editions, including our Delphi editions. That means if you currently are building solutions with <a href="http://www.remobjects.com/da/delphi">DA/Delphi</a> or <a href="http://www.remobjects.com/ro/delphi">RO/Delphi</a>, you can add JavaScript Metro client applications to your solution, all with the RemObjects licenses you have today. We will soon be offering DA/JavaScript as a free separate download too.</p>
<p>Currently, Metro support is only available in our beta builds (which are available to all users with current subscriptions). Rest assured that we will have final versions of our Metro support by the time Windows 8 ships.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/04/17/p4170/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metro App Development with Data Abstract for JavaScript</title>
		<link>http://www.remobjects.com/tv/da-09-metro-javascript</link>
		<comments>http://www.remobjects.com/tv/da-09-metro-javascript#comments</comments>
		<pubDate>Mon, 16 Apr 2012 23:49:49 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=c3f41ab7fe3d53ee2ca960f3035fbe8a</guid>
		<description><![CDATA[A quick introduction to using the latest Data Abstract for JavaScript client libraries to build a Windows 8 Metro App with Visual Studio 11. Windows 8 supports HTML / CSS &#38; JavaScript as first class tools for building Metro Apps that are available via ...]]></description>
			<content:encoded><![CDATA[<p>A quick introduction to using the latest Data Abstract for JavaScript client libraries to build a Windows 8 Metro App with Visual Studio 11. Windows 8 supports HTML / CSS &amp; JavaScript as first class tools for building Metro Apps that are available via the Windows Store. RemObjects Data Abstract&#8217;s JavaScript client libraries support building a client for your existing Data Abstract custom and Relativity middle-tier servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/04/17/p4218/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/da/da-09-metro-javascript.mp4" length="36279668" type="video/mp4" />
		</item>
		<item>
		<title>Tools and Abstractions on iOS</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/04/16/p4182</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/04/16/p4182#comments</comments>
		<pubDate>Mon, 16 Apr 2012 12:46:52 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4182</guid>
		<description><![CDATA[I just came upon this Hanselminutes episode from back in February with John Sonmez about MonoTouch and Mono for Android, and it even mentions PhoneGap. If you are interested in working on iOS with any tool, I recommend you listen to the podcast, as he discusses the pros and cons of the different levels of abstraction and how [...]]]></description>
			<content:encoded><![CDATA[<p>I just came upon this <a href="http://www.hanselminutes.com/">Hanselminutes</a> episode from back in <a href="http://www.hanselminutes.com/305/monotouch-and-mono-for-android-with-trainer-john-sonmez">February</a> with <a href="http://simpleprogrammer.com/">John Sonmez</a> about <a href="http://xamarin.com/">MonoTouch and Mono for Android</a>, and it even mentions <a href="http://phonegap.com/">PhoneGap</a>. If you are interested in working on iOS with any tool, I recommend you <a href="http://www.hanselminutes.com/305/monotouch-and-mono-for-android-with-trainer-john-sonmez">listen to the podcast</a>, as he discusses the pros and cons of the different levels of abstraction and how to get the most out of the level you choose.</p>
<p>What do you think about his points on the different levels of abstraction? Remember, whatever level you choose we&#8217;ve got you covered with Data Abstract and RemObjects SDK for Xcode, .NET or JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/04/16/p4182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webinar &#8211; What&#8217;s New in Prism XE2</title>
		<link>http://www.remobjects.com/tv/oxygene-14-XE2</link>
		<comments>http://www.remobjects.com/tv/oxygene-14-XE2#comments</comments>
		<pubDate>Wed, 04 Apr 2012 19:43:58 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=5944fc7f5703557bd76bfc96f3e587d7</guid>
		<description><![CDATA[This hour long webinar covers what's new in Prism XE2 and how to get the most out of Prism and the Oxygene for .NET language that powers it. Covers new IDE features and productivity enhancements, duck typing, parallelism, class contracts, oxidizer, plu...]]></description>
			<content:encoded><![CDATA[<p>This hour long webinar covers what&#8217;s new in Prism XE2 and how to get the most out of Prism and the Oxygene for .NET language that powers it. Covers new IDE features and productivity enhancements, duck typing, parallelism, class contracts, oxidizer, plugin interoperability and even some Windows 8 Metro application development.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/04/04/p4169/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/oxygene/oxygene-14-XE2.mp4" length="158350155" type="video/mp4" />
		</item>
		<item>
		<title>Use Oxygene in the 2nd PGD Challenge</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/03/22/p4139</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/03/22/p4139#comments</comments>
		<pubDate>Thu, 22 Mar 2012 16:58:46 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oxygene]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[short]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4139</guid>
		<description><![CDATA[The 2nd Pascal Game Development challenge was officially announced, and Oxygene for .NET (AKA Prism) and Oxygene for Java are both listed as &#8220;Key Tools&#8221; and &#8220;Allowed Languages&#8220;. If you are using Oxygene for Java, you might want to take a look at the JMonkey Engine video on RemObjects TV back from when we were [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.pascalgamedevelopment.com/content.php?323-2nd-PGD-Challenge-Official-Announcement">2nd Pascal Game Development challenge</a> was officially announced, and <a href="http://www.remobjects.com/Oxygene/">Oxygene for .NET</a> (AKA <a href="http://www.embarcadero.com/products/prism">Prism</a>) and <a href="http://www.remobjects.com/Oxygene/java.aspx">Oxygene for Java</a> are both listed as &#8220;<em>Key Tools</em>&#8221; and &#8220;<em>Allowed Languages</em>&#8220;. If you are using Oxygene for Java, you might want to take a look at the <a href="http://www.remobjects.com/tv/oxygene-06-cooper3d">JMonkey Engine video</a> on RemObjects TV back from when we were still calling it &#8220;Cooper&#8221;.</p>
<p>As an added bonus, if your game is powered by Oxygene, we will provide you with a complementary Oxygene for Java license. </p>
<p><a href="http://www.youtube.com/watch?v=Knw_gjtqi8k&#038;fmt=18">http://www.youtube.com/watch?v=Knw_gjtqi8k</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/03/22/p4139/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Data Abstract for JavaScript in Visual Studio 11</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/03/19/p4108</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/03/19/p4108#comments</comments>
		<pubDate>Mon, 19 Mar 2012 18:13:34 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Month of Metro]]></category>
		<category><![CDATA[ROFX]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4108</guid>
		<description><![CDATA[As part of our Month of Metro, we&#8217;re also integrating Data Abstract (and RemObjects SDK) for JavaScript into Visual Studio, letting you create Metro apps that talk your servers. While we of course fully support Metro with Data Abstract for .NET as well, this feature will also be available with Data Abstract for Delphi, so [...]]]></description>
			<content:encoded><![CDATA[<p>As part of our Month of Metro, we&#8217;re also integrating <a href="http://www.remobjects.com/da/javascript">Data Abstract</a> (and <a href="http://www.remobjects.com/re/javascript">RemObjects SDK</a>) <a href="http://www.remobjects.com/da/javascript">for JavaScript</a> into Visual Studio, letting you create Metro apps that talk your servers.</p>
<p>While we of course fully support Metro with <a href="http://www.remobjects.com/da/net">Data Abstract for .NET</a> as well, this feature will also be available with <a href="http://www.remobjects.com/da/delphi">Data Abstract for Delphi</a>, so don;t be surprised if the DA/Delphi installer suddenly offers to integrate into Visual Studio ;).</p>
<p>Just as you&#8217;d expect, we provide a template for a Data Abstract Metro Application in the <i>File|New project</i> dialog:</p>
<p><center><img src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DAJS-Metro-1.png" width="700"  /></center></p>
<p>which will launch into the familiar New project Wizard that you already know from DA/.NET and DA/Delphi. Of course JavaScript is a client-only technology, so the server options are not available, but you can choose to connect your JavaScript app to either Relativity Server or a custom Data Abstract Server.</p>
<p><center><img src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DAJS-Metro-21.png" /></center></p>
<p>As you can see, we&#8217;ve also started re-theming the wizard to match Visual Studio 11&#8242;s flatter look. I&#8217;ll spare you the remaining Wizard steps, as they will be pretty similar to running the wizard for DA/.NET or DA/Delphi.</p>
<p>Once the wizard is completed, you have a ready-to-run JavaScript application, with a couple of pieces of code that you can uncomment to easily download data and show it in a &lt;table>.</p>
<p><center><img src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DAJS-Metro-3.png" width="700"  /></center></p>
<p>For this post, i&#8217;ll enable the download of <a href="http://wiki.remobjects.com/wiki/Data_Abstract_Samples">PCTrade</a>&#8216;s &#8220;CLients&#8221; table in <em>default.js</em>&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">adapter.<span style="color: #660066;">getData</span><span style="color: #009900;">&#40;</span>clientsTable<span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">Util</span>.<span style="color: #660066;">createRequestInfo</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">30</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">Views</span>.<span style="color: #660066;">HtmlTableView</span><span style="color: #009900;">&#40;</span>clientsTable<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;table-clients&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">UTIL</span>.<span style="color: #660066;">showError</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>and uncomment the matching &lt;table> tag in <em>default.html</em>. When we hit &#8220;Start&#8221;, our Metro app comes up full screen, first showing the default DA/Metro splash screen:</p>
<p><center><img src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DAJS-Metro-4.png" width="800"  /></center></p>
<p>and then populating the &lt;table> with 30 rows of Clients:</p>
<p><center><img src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DAJS-Metro-5.png" width="800" /></center></p>
<p>Of course the IDE support for JavaScript expands beyond just the template. For example, the <em>RemObjects SDK</em> menu item sports the familiar <em>Import RemObjects SDK Service</em> entry that lets you import the RODL from an existing RO service and generate a JavaScript Interface file right in our project.</p>
<p>We&#8217;re very excited about the possibilities of Data Abstract and RemObjects SDK for JavaScript on Metro, especially as it opens up the platform to Data Abstract for Delphi developers without needing DA/.NET. We&#8217;ll talk more about this soon, so stay tuned.</p>
<p><em>Oh, and: The functionality shown here is available in the current beta that we shipped last Friday. Feedback appreciated!</em></p>
<p>&nbsp;</p>
<p><center><a href="http://blogs.remobjects.com/blogs/category/non-tech/month-of-metro"><img src="http://blogs.remobjects.com/wp-content/uploads/2012/02/MonthOfMetro.png" width="300"/></center></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/03/19/p4108/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Month of Metro Media</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/03/16/p4097</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/03/16/p4097#comments</comments>
		<pubDate>Fri, 16 Mar 2012 15:57:31 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Month of Metro]]></category>
		<category><![CDATA[Oxygene]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[ROFX]]></category>
		<category><![CDATA[rotv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4097</guid>
		<description><![CDATA[I wanted to point out the podcast and video published as part of the Month of Metro. First up is the video on building Windows 8 Metro Apps with Oxygene for .NET and VS11: http://www.youtube.com/watch?v=IY5xRYpxJa8 Then, there is the podcast with Daniel Arroyo of Flaretag, discussing mostly the open source, cross platform mobile application framework [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to point out the podcast and video published as part of the Month of Metro.</p>
<p>First up is the video on building <a href="http://www.remobjects.com/tv/oxygene-13-metro">Windows 8 Metro Apps with Oxygene for .NET and VS11</a>:</p>
<p><a href="http://www.youtube.com/watch?v=IY5xRYpxJa8&#038;fmt=18">http://www.youtube.com/watch?v=IY5xRYpxJa8</a></p>
<p>Then, there is the <a href="http://www.remobjects.com/radio/11-JavaScriptAndTitanium" title="JavaScript and Titanium">podcast</a> with <a href="http://www.danielarroyo.net/">Daniel Arroyo</a> of <a href="http://www.flaretag.com/">Flaretag</a>, discussing mostly the open source, cross platform mobile application framework <a href="http://www.appcelerator.com/products/titanium-studio/" title="Appcelerator Titanium">Titanium</a>, as well as Metro and JavaScript in general.</p>
<p>There are more podcasts and videos in the works, so stay tuned.</p>
<p>&nbsp;</p>
<p><center><a href="http://blogs.remobjects.com/blogs/category/non-tech/month-of-metro"><img src="http://blogs.remobjects.com/wp-content/uploads/2012/02/MonthOfMetro.png" width="300"/></center></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/03/16/p4097/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8 Metro with Oxygene for .NET and VS11</title>
		<link>http://www.remobjects.com/tv/oxygene-13-metro</link>
		<comments>http://www.remobjects.com/tv/oxygene-13-metro#comments</comments>
		<pubDate>Thu, 15 Mar 2012 19:01:43 +0000</pubDate>
		<dc:creator>RemObjects TV</dc:creator>
				<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?guid=b586f737fba9eeea4a4edcf8a7172f2f</guid>
		<description><![CDATA[A quick look at building a Windows 8 Metro App with Oxygene for .NET and VS11.]]></description>
			<content:encoded><![CDATA[<p>A quick look at building a Windows 8 Metro App with Oxygene for .NET and VS11.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/remobjects-tv/2012/03/15/p4096/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.mp4/tv.remobjects.com/oxygene/oxygene-13-metro.mp4" length="24214564" type="video/mp4" />
		</item>
		<item>
		<title>Creating a Data Abstract client widget &#8211; Part 4</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4072</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4072#comments</comments>
		<pubDate>Fri, 09 Mar 2012 17:12:54 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ROFX]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4072</guid>
		<description><![CDATA[This is the 4th article in a 4 part series (the last for now) Using DashCode to create an interactive widget Creating an interactive widget without Dashcode Creating a RemObjects SDK client widget Creating a Data Abstract client widget (this article) In this article we will look at Data Abstract client widgets created without using [...]]]></description>
			<content:encoded><![CDATA[<p>This is the 4th article in a 4 part series (the last for now)</p>
<ol>
<li><a href="http://blogs.remobjects.com/blogs/jim/2012/02/16/p3862">Using DashCode to create an interactive widget</a></li>
<li><a href="http://blogs.remobjects.com/blogs/jim/2012/02/21/p3918">Creating an interactive widget without Dashcode</a></li>
<li><a href="http://blogs.remobjects.com/blogs/jim/2012/03/01/p3982">Creating a RemObjects SDK client widget</a></li>
<li>Creating a Data Abstract client widget (this article)</li>
</ol>
<p>In this article we will look at Data Abstract client widgets created without using Dashcode.<br />
<span id="more-4072"></span></p>
<h1>Data Abstract PCTrade Workers Image Gallery Widget</h1>
<p>For this demo we connect to the PCTrade sample database and display worker images. This creates an image gallery type widget, except the images are pulled live from a remote database on each activation. You can see an example of what this demo will look like <a href="http://remobjects.com:8099/js/gallery.html">on our website</a>. That demo may be updated in the future, but our widget will by default pull from the same database.</p>
<h2>Data Abstract JavaScript Library Files</h2>
<p>The following parts are needed for any Data Abstract JavaScript client you want to write. The minified versions are available on our sample server, or they ship in the .NET or Delphi versions of Data Abstract (coming soon to the Xcode version).</p>
<ul>
<li><strong><a href="http://remobjects.com:8099/js/RemObjectsSDK.js">RemObjectsSDK.js</a></strong> – The RemObjects SDK JavaScript library used by Data Abstract. </li>
<li><strong><a href="http://remobjects.com:8099/js/DataAbstract4_intf.js">DataAbstract4_intf.js</a></strong> – The Data Abstract interface class used by RemObjects SDK for Data Abstract.</li>
<li><strong><a href="http://remobjects.com:8099/js/DataAbstract.js">DataAbstract.js</a></strong> – The Data Abstract JavaScript library.</li>
</ul>
<p>These files need to be included in our widget package.</p>
<h2>Assembling the Widget Package</h2>
<p><a href="http://blogs.remobjects.com/blogs/jim/2012/02/21/p3918">As you recall</a>, the minimum requirements for a widget are:</p>
<ul>
<li><strong>main.html</strong> – The main html file.</li>
<li><strong>Default.png</strong> – The &#8220;preview&#8221; image that is visible before the widget activates. Also determines widget size and aspect ratio. </li>
<li><strong>Info.plist</strong> – The manifest that describes the widget.</li>
</ul>
<p><a href='http://blogs.remobjects.com/wp-content/uploads/2012/03/DA-Gallery.wdgt_.zip'><img src="http://blogs.remobjects.com/wp-content/uploads/2012/02/wdgt-icon.png" alt="DA-Gallery Widget" title="DA-Gallery Widget" width="128" height="128" class="alignright size-full wp-image-3924" /></a>You can create the parts from scratch, or download this <a href='http://blogs.remobjects.com/wp-content/uploads/2012/03/DA-Gallery.wdgt_.zip'>package of all the files</a>. We&#8217;ll take a closer look at how it all comes together. The core of the functionality is in the <strong>main.js</strong>. While you could put all that JavaScript in the main.html file, putting it in a separate file makes for better maintainability.</p>
<p>I usually create my default.png files by taking a screen shot of my HTML page running in a browser window. Somethings I&#8217;ll edit it after taking the screen shot. Generally you want to have the screen shot be of the first screen the user sees so the transition from image to active widget is smooth.</p>
<p>All these files need to be in the same folder, and the folder needs to be renamed with a <strong>.wdgt</strong> extension. Remember: If you double-click that folder, it will be deleted and installed in your Dashboard. Use the context menu to show package contents instead.</p>
<h2>Inside the main.html File</h2>
<p>At the top of the main.html file, in the <code><head></code> block, we reference all our scripts. It is important that these scripts are local and included in the package. They will not work from iBooks if they are remote.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">http-equiv</span>=<span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;text/html; charset=UTF-8&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;RemObjectsSDK.js&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;DataAbstract.js&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;main.js&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;DataAbstract4_intf.js&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;link</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;ro.css&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>The <code><body></code> is also really simple.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body</span> <span style="color: #000066;">onload</span>=<span style="color: #ff0000;">&quot;loadData();&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;wrapper&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Data Abstract for JavaScript<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h4<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>PCTrade workers gallery widget<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h4<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;content&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;javascript:void(0)&quot;</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">&quot;showPrevious();&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>prev<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> /
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;javascript:void(0)&quot;</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">&quot;showNext();&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>next<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;br</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;photo&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;name&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Name<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><span style="color: #808080; font-style: italic;">&lt;!-- #content--&gt;</span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><span style="color: #808080; font-style: italic;">&lt;!-- #wrapper --&gt;</span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>For the Body&#8217;s onload event, we assigned a loadData handler. This creates the service and downloads the data. There are two links to handle for moving to the next or previous image, with event handlers assigned, and finally an image and a paragraph with specific IDs assigned to hold the data.</p>
<h2>Inside the main.js File</h2>
<p>All the JavaScript that makes our widget work is contained in the main.js file. At the very top we declare our <strong>workersTable</strong> variable that gets defined in the <strong>connectToService</strong> function.</p>
<p>The createServices function actually contains two other functions. The first is <strong>includeScript</strong>, which is used to include <em>DataAbstract.js</em> and <em>DataAbstract4_intf.js</em> scripts when the call is made to <strong>connectToService</strong>, the second function in the createServices function. You&#8217;ll recognize this pattern and the includeScript function from the <a href="http://blogs.remobjects.com/blogs/jim/2012/03/01/p3982">RemObjects SDK</a> widget, and you will want to include them in your widgets.</p>
<p>The code you will customize in your own widgets is in the connectToService function, but most of it will be similar.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">    <span style="color: #003366; font-weight: bold;">function</span> createServices<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> includeScript<span style="color: #009900;">&#40;</span>scriptSrc<span style="color: #339933;">,</span> callback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> headID <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;head&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>         
        <span style="color: #003366; font-weight: bold;">var</span> newScript <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        newScript.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'text/javascript'</span><span style="color: #339933;">;</span>
        newScript.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> callback<span style="color: #339933;">;</span>
        newScript.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> scriptSrc<span style="color: #339933;">;</span>
        headID.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>newScript<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> connectToService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">// Use a different server here if you like:</span>
        <span style="color: #003366; font-weight: bold;">var</span> Channel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">SDK</span>.<span style="color: #660066;">HTTPClientChannel</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://www.remobjects.com:8099/JSON&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #006600; font-style: italic;">// Must be JSONMessage - BinMessage doesn't work in Safari</span>
        <span style="color: #003366; font-weight: bold;">var</span> Message <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">SDK</span>.<span style="color: #660066;">JSONMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #003366; font-weight: bold;">var</span> Service <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">SDK</span>.<span style="color: #660066;">RemoteService</span><span style="color: #009900;">&#40;</span>Channel<span style="color: #339933;">,</span> Message<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;DASampleService&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> daService <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> DataAbstractService<span style="color: #009900;">&#40;</span>Service<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> loginService <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">SDK</span>.<span style="color: #660066;">RemoteService</span><span style="color: #009900;">&#40;</span>Channel<span style="color: #339933;">,</span> Message<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;LoginService&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> Adapter <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">RemoteDataAdapter</span><span style="color: #009900;">&#40;</span>Service<span style="color: #339933;">,</span> loginService<span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">Bin2DataStreamer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Adapter.<span style="color: #660066;">onLoginNeeded</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>aCallback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">login</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;John&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;John&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aCallback<span style="color: #009900;">&#41;</span>
                    aCallback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">UTIL</span>.<span style="color: #660066;">ShowError</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        workersTable <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">DataTable</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;workers&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// Get the data</span>
        Adapter.<span style="color: #660066;">getData</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>workersTable<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">DataAbstract</span>.<span style="color: #660066;">Util</span>.<span style="color: #660066;">createRequestInfo</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// This is executed when the data comes back.</span>
            workersTable.<span style="color: #660066;">first</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            displayImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> RemObjects.<span style="color: #660066;">UTIL</span>.<span style="color: #660066;">showError</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
    includeScript<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;DataAbstract.js&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        includeScript<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;DataAbstract4_intf.js&quot;</span><span style="color: #339933;">,</span> connectToService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The connectToService function creates the following:</p>
<ol>
<li><em>Channel</em> –This is the connection to the remote server.</li>
<li><em>Message</em> – The message used as transport. Remember it needs to be JSON since Safari doesn&#8217;t like BinMessage.</li>
<li><em>Service</em> – This is the specific RemObjects SDK service on the channel we are using.</li>
<li><em>daService</em> – This is the Data Abstract service that uses the RemObjects SDK service.</li>
<li><em>loginService</em> – This service handles login, if necessary.</li>
<li><em>Adapter</em> – Provides access to the data tables.</li>
<li><em>workersTable</em> – The DataTable that contains the data from the Workers table on the remote server.</li>
</ol>
<p>In this example, it grabs the entire Workers table, but we could just as easily use DA/SQL here to only grab the parts of the table we are interested in.</p>
<p>The <strong>displayImage</strong> function simply displays the current image and name in the appropriate HTML elements on the page. It gets these values from the Workers Table.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> displayImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;photo&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;data:image/jpeg;base64,&quot;</span> <span style="color: #339933;">+</span> RemObjects.<span style="color: #660066;">UTIL</span>.<span style="color: #660066;">toBase64</span><span style="color: #009900;">&#40;</span>workersTable.<span style="color: #660066;">getFieldValue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;workerphoto&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;name&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerText</span> <span style="color: #339933;">=</span> workersTable.<span style="color: #660066;">getFieldValue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;WorkerLastName&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;, &quot;</span> <span style="color: #339933;">+</span> workersTable.<span style="color: #660066;">getFieldValue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;WorkerFirstName&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The <strong>showNext</strong> and <strong>showPrev</strong> functions move through the Workers Table and call displayImage to update the display.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> showNext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    workersTable.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    displayImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> showPrevious<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    workersTable.<span style="color: #660066;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    displayImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>And that is all the JavaScript specific to this widget.</p>
<h2>Deploying to iBooks</h2>
<p>If you&#8217;ve already put all these files into a folder and renamed the folder with the <strong>.wdgt</strong> extension, you are ready to include the package in an iBook. Just add an HTML widget to your iBook and drag the widget package into it (or use the <em>Choose&#8230;</em> button from the Widget Inspector).</p>
<p>Be sure your iPad has access to the server and port www.remobjects.com:8099 since that is where the data is pulled from.</p>
<h1>Summary</h1>
<p>Data Abstract&#8217;s JavaScript client library brings the power of remote databases to your iBooks interactive widgets.</p>
<h2>Things to Remember</h2>
<ol>
<li>All the scripts must be included in the widget package.</li>
<li>All JavaScript libraries must be referenced from the Main HTML file.</li>
<li>Use the includeScript function to include library scripts.</li>
<li>Don&#8217;t leave any JavaScript alert statements in from debugging. They lock up iBooks.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4072/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>RemObjects SDK and Data Abstract in Visual Studio 11</title>
		<link>http://blogs.remobjects.com/blogs/mh/2012/03/09/p4043</link>
		<comments>http://blogs.remobjects.com/blogs/mh/2012/03/09/p4043#comments</comments>
		<pubDate>Fri, 09 Mar 2012 14:29:24 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[Metro]]></category>
		<category><![CDATA[Month of Metro]]></category>
		<category><![CDATA[ROFX]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4043</guid>
		<description><![CDATA[&#8220;Native&#8221; integration for RemObjects SDK and Data Abstract in Visual Studio 11 is coming along nicely. The IDE integration has been made independent from the .NET product, and now gets offered up for the Delphi (Visual Studio 11 and only on Windows 8 or later) and Java (Visual Studio 2012 and 11) product installers as [...]]]></description>
			<content:encoded><![CDATA[<p>&ldquo;Native&rdquo; integration for <a href="http://www.remobjects.com/ro">RemObjects SDK</a> and <a href="http://www.remobjects.com/da">Data Abstract</a> in Visual Studio 11 is coming along nicely.</p>
<p>The IDE integration has been made independent from the .NET product, and now gets offered up for the Delphi (Visual Studio 11 and only on Windows 8 or later) and Java (Visual Studio 2012 and 11) product installers as well; the former to support JavaScript Metro clients, the latter to support Oxygene for Java.</p>
<p>The re-theming is also happening, with menu and toolbar glyphs and project templates getting adjusted to the new colorless Visual Studio 11 theme, as shown in the screenshot below (click to view full size).</p>
<p><center><br />
  <a href="http://blogs.remobjects.com/wp-content/uploads/2012/03/DA-Colorless.png"><img alt="RemObjects SDK and Data Abstract in Visual Studio 11" src="http://blogs.remobjects.com/wp-content/uploads/2012/03/DA-Colorless.png" width="700" /></a><br />
</center></p>
<p>As of now, the icons in Solution Explorer are driven by the file type icons registered for Windows Explorer, so it&#8217;s still unclear if we can theme those individually for Visual Studio 11 (without also forcing the flat look into VS2010 and Windows Explorer, which would not be good). Something we&#8217;re investigating.</p>
<p>Oh, and is that a Data Abstract template for Metro that you&#8217;re seeing there? Indeed it is. ;)</p>
<p>The RemObjects SDK template looks have also been updated; once again i&#8217;ve decided to keep a light touch of color.</p>
<p><center><br />
  <a href="http://blogs.remobjects.com/wp-content/uploads/2012/03/RO-Templates.png"><img alt="RemObjects SDK Templates" src="http://blogs.remobjects.com/wp-content/uploads/2012/03/RO-Templates.png" width="700" /></a><br />
</center></p>
<p>&nbsp;</p>
<p><center><a href="http://blogs.remobjects.com/blogs/category/non-tech/month-of-metro"><img src="http://blogs.remobjects.com/wp-content/uploads/2012/02/MonthOfMetro.png" width="300"/></center></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/mh/2012/03/09/p4043/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The desktop is not the OS. It&#8217;s an app</title>
		<link>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4057</link>
		<comments>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4057#comments</comments>
		<pubDate>Thu, 08 Mar 2012 23:55:18 +0000</pubDate>
		<dc:creator>Jim McKeeth</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[Month of Metro]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blogs.remobjects.com/?p=4057</guid>
		<description><![CDATA[When everyone was in a panic about the announcement that JavaScript was pushed to be the preferred development tool for Windows 8 Metro apps, I said that as long as there is a desktop, traditional Win32 (or Win64) development will be a first class citizen, and that the Metro interface was the old concept of [...]]]></description>
			<content:encoded><![CDATA[<p>When everyone was in a panic about the announcement that JavaScript was pushed to be the preferred development tool for Windows 8 Metro apps, I said that as long as there is a desktop, traditional Win32 (or Win64) development will be a first class citizen, and that the Metro interface was the old concept of just the traditional &ldquo;sidebar&rdquo; apps (which have been developed in JavaScript for a while now), elevated to a new, more prominent status.</p>
<p>Well, it would appear I was wrong.</p>
<p>I was reading Paul Thurrott&#8217;s <a href="http://www.winsupersite.com/article/windows8/windows-8-consumer-preview-call-common-sense-142476">Windows 8 Consumer Preview: A Call For Common Sense</a> and one point of his really stood out to me: &#8220;<strong>The desktop is not the OS. It&#8217;s an app.</strong>&#8221;</p>
<p>He goes on to say . . .</p>
<blockquote><p>
  The desktop is not the OS. In fact, while this isn&#8217;t technically true, conceptually, the desktop is just an app. The Windows 8 OS is comprised of Windows Runtime (WinRT), the Start screen shell and its Metro-style environment.
</p></blockquote>
<p>and . . .</p>
<blockquote><p>
  For those many, many businesses that will rollout Windows 8 alongside Windows 7, the existing desktop environment looks and works almost exactly like its predecessor, and has no compatibility or long-term testing issues. That&#8217;s the goal for the Windows 8 desktop. All the exciting and new stuff is in Metro.
</p></blockquote>
<p>This really changes things. It means that the Desktop and traditional Windows programming has more in common with Windows XP mode on Windows 7 (running inside a virtual machine). I am not saying, nor have I heard anyone say, that the &#8220;Desktop&#8221; is running in a virtual machine, but the point is that the Desktop and traditional Windows programming is now officially &#8220;legacy&#8221;. In Windows 9 (or beyond), the Desktop may actually run in a virtual machine, or at least a sandbox.</p>
<p>Microsoft is replacing the familiar Windows API&#8217;s with WinRT, and this changes everything. Despite your opinions on JavaScript or .NET programming, they are now the preferred tools for developing on the Windows platform.</p>
<p>&nbsp;</p>
<p><center><a href="http://blogs.remobjects.com/blogs/category/non-tech/month-of-metro"><img src="http://blogs.remobjects.com/wp-content/uploads/2012/02/MonthOfMetro.png" width="300"/></center></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.remobjects.com/blogs/jim/2012/03/09/p4057/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

