<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en"><title type="text">J.D. Was Here</title><link rel="alternate" type="text/html" href="http://jdmullin.blogspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JdWasHere" /><subtitle type="html">A blog about Advantage Database Server and Software Engineering.</subtitle><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-11-26T09:11:41+00:00</updated><generator uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">89</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="jdwashere" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><id>tag:blogger.com,1999:blog-1672233813945040344</id><entry><title type="text">Side Effects</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/bTL90TVYkgE/side-effects.html" /><category term="ITC Boise SoftwareEd" /><category term="csExtras" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-11-07T06:57:05-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-156847657659924859</id><content type="html">&lt;p class="p1"&gt;&lt;span class="Apple-style-span"&gt;Last month we hosted a CS Extras event at Keynetics, inviting all CS students, but focusing on freshman and sophomore students. The Keynetics team put on a great presentation. They focused on describing what kinds of things students can expect in the workplace, what a typical work day/week/month is like, why they love their jobs and the industry, what tools they use, etc.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;The November presentation itself was a success, but I wanted to focus on how small events like this can indirectly result in long lasting returns. &lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;To someone on the outside an event like this might seem like a waste of time or a futile effort. "How will talking to 20-60 students for 2 hours increase the number and quality of software engineers in the valley?". This is a great question, and one I constantly ask myself as it can often feel like we are fighting an uphill battle.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;This presentation, and the events following it helped solidify my motivation and confidence in our program. &lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;At the BBQ after the presentation, two students told me they had been considering switching to an Electrical Engineering degree, but now they were motivated to stick with Computer Science and excited about the opportunities. That provided a warm fuzzy feeling and I was more than happy to take that as ample justification for the event. But that isn't why I'm writing this.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;It wasn't until two weeks later that I realized the full impact of the event. This is a circumstance of one small act of giving turning into something much bigger than itself.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;Amit, a professor at BSU, told me that the students came back to class and asked him about automated testing (which was mentioned in the presentation). As Amit uses tests to verify the students programming assignments, he was able to expose an interface the students could use to run his tests against their programs before submitting them. &lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;If you work in the software industry, you understand the significance of that last paragraph. We now have first year CS students that understand the value of automated testing and how it can be applied to almost any program. This is a fundamental career skill that will not only help them with programming tasks in college, but that they will take with them into the work force.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;We have a situation where one event, that was easy to coordinate, and took only a few hours of each volunteers time, instilled a process that will likely stick with these students (and possibly the curriculum) for years and years to come. In addition, the benefit of the presentation has now filtered to all students in that class, not just those who attended CS Extras.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;Perhaps I'm being too optimistic, but these are the kinds of positive side effects that you just can't plan for but that can make the entire endeavor worthwhile.&lt;/span&gt;&lt;/p&gt; &lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;To keep up with CS Extras events; like our &lt;a href="http://tinyurl.com/csextras"&gt;Facebook page&lt;/a&gt;, subscribe to &lt;a href="http://jdmullin.blogspot.com/"&gt;my blog&lt;/a&gt;, or watch the &lt;a href="http://www.idahotechcouncil.org/dev/itc/"&gt;ITC website&lt;/a&gt; for event updates. To volunteer, post on the &lt;a href="http://www.linkedin.com/groups/Idaho-Technology-Council-3794326?trk=myg_ugrp_ovr"&gt;ITC LinkedIn discussion group&lt;/a&gt; and I will contact you.&lt;/span&gt;&lt;/p&gt;&lt;p class="p2"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Update&lt;/b&gt;: Be sure to check out the comments on this post, more good side effects.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-156847657659924859?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/bTL90TVYkgE" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T06:57:05.898-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/11/side-effects.html</feedburner:origLink></entry><entry><title type="text">Hello Tomorrow</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/9yNwNpyRXfA/hello-tomorrow.html" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-08-02T12:31:57-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-582487261179586599</id><content type="html">&lt;p&gt;I started at Extended Systems in the fall of 1995 during my second year of college. I was immediately placed on a team with incredibly smart people working on fun products. That trend has continued for the past 16 years and I have had a wonderful time. Great coworkers, cool customers and constantly changing technologies have kept things interesting for a very long time.&lt;/p&gt;  &lt;p&gt;I’m also excited to take on some new challenges and with that in mind I have accepted a position at a local startup and will be saying goodbye to my friends at ESI/Sybase soon.&lt;/p&gt;  &lt;p&gt;While the last few years I have been the public face of Advantage via blog posts and screencasts, this product is much bigger than one person and is in great hands. The development team is strong and works with an equally experienced sales, support and marketing team. I know Advantage will continue to thrive.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;I still plan to continue writing, however the content will likely shift a bit towards different software technologies. I look forward to continuing our conversations and friendships. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-582487261179586599?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/9yNwNpyRXfA" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T12:31:57.269-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/08/hello-tomorrow.html</feedburner:origLink></entry><entry><title type="text">iPhone oData Client, Part 3</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Rke9Zcy4G8I/iphone-odata-client-part-3.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-10-10T06:50:38-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-7252792826152521123</id><content type="html">&lt;p&gt;In Part 2 of this series we moved our service query to a background thread and added “pull to refresh” functionality. In Part 3 we take a quick look at insert, update and delete functionality.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.screencast.com/t/bS47aFFxkxNS" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="odatademo3" border="0" alt="odatademo3" src="http://lh5.ggpht.com/-e6VhljvpEuE/TgH6yr2t1NI/AAAAAAAAKZI/rbsQRS35gY8/odatademo3%25255B1%25255D.png?imgmax=800" width="654" height="504" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can &lt;a href="http://www.jdwashere.com/blog/screencasts/oDataDemo3.mp4" target="_blank"&gt;view (or right-click and download) the screencast here&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Resources&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;The Example Application &lt;a href="https://github.com/jdmullin/iOS_oData_Example" target="_blank"&gt;Source Code&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Paul Crawford’s &lt;a href="https://github.com/pcrawfor/PCCustomSwitch" target="_blank"&gt;PCCustomSwitch&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://jdmullin.blogspot.com/2011/05/iphone-odata-client-part-2.html"&gt;Part 2 of this series&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-7252792826152521123?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Rke9Zcy4G8I" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T06:50:38.274-07:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-e6VhljvpEuE/TgH6yr2t1NI/AAAAAAAAKZI/rbsQRS35gY8/s72-c/odatademo3%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/06/iphone-odata-client-part-3.html</feedburner:origLink></entry><entry><title type="text">iPhone oData Client, Part 2</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/ovJBmPyxe0o/iphone-odata-client-part-2.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-10-10T06:52:26-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1606280550322586456</id><content type="html">&lt;p&gt;In Part 1 of this series we set up an XCode project to use the Objective-C oData client and pulled some rows into a grid. In Part 2 we will move our service query into a background thread to keep our UI responsive. In addition, we will add some visual feedback and “pull to refresh” functionality.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.screencast.com/t/gZ7hfgoNb6" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="refresh" border="0" alt="refresh" src="http://lh6.ggpht.com/-ZmH7M6_poxI/Td6t97GcsnI/AAAAAAAAKZM/wZliIgret70/refresh%25255B1%25255D.png?imgmax=800" width="684" height="527" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can &lt;a href="http://www.jdwashere.com/blog/screencasts/oDataDemo2.mp4"&gt;view the screencast here (or right-click and download)&lt;/a&gt; (61MB).&lt;/p&gt;  &lt;h2&gt;Resources&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;The Example Application &lt;a href="https://github.com/jdmullin/iOS_oData_Example" target="_blank"&gt;Source Code&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;iOS &lt;a href="http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html" target="_blank"&gt;Concurrent Programming&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;iOS &lt;a href="https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html" target="_blank"&gt;Operation Queues&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Leah Culver’s &lt;a href="http://blog.leahculver.com/2010/12/iphone-pull-to-refresh.html" target="_blank"&gt;Pull to Refresh&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://jdmullin.blogspot.com/2011/05/getting-started-with-ios-development.html"&gt;Part 1 of this series&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://jdmullin.blogspot.com/2011/06/iphone-odata-client-part-3.html"&gt;Part 3 of this series&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1606280550322586456?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/ovJBmPyxe0o" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T06:52:26.664-07:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-ZmH7M6_poxI/Td6t97GcsnI/AAAAAAAAKZM/wZliIgret70/s72-c/refresh%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/05/iphone-odata-client-part-2.html</feedburner:origLink></entry><entry><title type="text">Getting Started with iOS Development and Advantage</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/25fKFewDdj4/getting-started-with-ios-development.html" /><category term="Advantage" /><category term="oData" /><category term="iOS" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-10-10T06:57:47-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-7729790312532886775</id><content type="html">&lt;p&gt;The &lt;a href="http://jdmullin.blogspot.com/2010/09/advantage-web-api.html" target="_blank"&gt;Advantage Web API&lt;/a&gt; makes it easy to expose your Advantage databases via the &lt;a href="http://www.odata.org" target="_blank"&gt;oData&lt;/a&gt; protocol. The oData protocol includes a &lt;a href="http://www.odata.org/developers/odata-sdk" target="_blank"&gt;variety of clients&lt;/a&gt;, including an Objective-C client for iOS devices (iPhone, iPod Touch, iPad, etc.). &lt;/p&gt;  &lt;p&gt;I’ve posted an introduction to using the Objective-C oData client with Advantage. This 20 minute video shows how to download the client, configure a new XCode project, and display the contents of a table. You can &lt;a href="http://www.jdwashere.com/blog/screencasts/oDataDemo1.mp4" target="_blank"&gt;stream the presentation (or right-click and download) here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;While this presentation is targeted towards Advantage developers getting started with iOS development, aside from the first 3 minutes the rest of the presentation is provider agnostic and applies to all oData services, not just those provided by the Advantage Database Server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; If you’d like to use SSL, I’ve submitted a patch to the oData client you can download and use (as opposed to disabling SSL in the web api conf file). The patch provides a new switch for odatagen (/trustServer=1) and a new trustServer parameter when initializing your WindowsCredential object:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;WindowsCredential *cred = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;  [[WindowsCredential alloc] initWithUserName:&lt;span style="color: #006080"&gt;@&amp;quot;adssys&amp;quot;&lt;/span&gt; password:&lt;span style="color: #006080"&gt;@&amp;quot;&amp;quot;&lt;/span&gt; trustServer:true];&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;See &lt;a href="http://odataobjc.codeplex.com/SourceControl/list/patches"&gt;http://odataobjc.codeplex.com/SourceControl/list/patches&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The Example Application &lt;a href="https://github.com/jdmullin/iOS_oData_Example" target="_blank"&gt;Source Code&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://odataobjc.codeplex.com/" target="_blank"&gt;Objective-C oData Client&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://jdmullin.blogspot.com/2010/09/advantage-web-api.html"&gt;Advantage Web API&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://odataobjc.codeplex.com/SourceControl/list/patches"&gt;SSL Self-Signed Certificates Patch&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://jdmullin.blogspot.com/2011/05/iphone-odata-client-part-2.html"&gt;Part 2 of this series&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-7729790312532886775?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/25fKFewDdj4" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T06:57:47.741-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/05/getting-started-with-ios-development.html</feedburner:origLink></entry><entry><title type="text">CS Extras #1 and #2</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/WAEhW5V8hq8/cs-extras-1-and-2.html" /><category term="ITC Boise SoftwareEd" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-03-21T07:04:35-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-3116563678303456602</id><content type="html">&lt;p&gt;&lt;a href="http://jdmullin.blogspot.com/2010/10/itc-software-alliance-industry-led.html" target="__blank"&gt;CS Extras&lt;/a&gt; kicked off in February with its first presentation. Seven industry volunteers collaborated to teach an introduction to web development fundamentals. Over sixty students from area universities participated in the inaugural event.
&lt;/p&gt;
&lt;br/&gt;
&lt;img src="http://api.photoshop.com/v1.0/accounts/5536daad67ac415dbc57818302835382/assets/f3c65e2c3b0442f38e35ac3d322c99f0" width="640" height="478" style="border:0px"/&gt;
&lt;br/&gt;
&lt;p&gt;
The second CS Extras presentation will be held Wednesday March 23rd from 6pm to 8pm in the BSU Micron Engineering Center, room MEC106. In this session, Patrick Lee from Bodybuilding.com will be focusing on web form creation fundamentals and persisting and retrieving data once a form is submitted. In addition, I can't hold out until April to give away these Apple TV's, so we will be giving away one of the three Apple TV's at the end of the night! If you attended the first session, and you are at the second session, you will be eligible to win. We've made a couple of tweaks to the "hands on" portion based on feedback from the first event as well, and pizza will be provided again. Hope to see everyone there!
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
Event map and other details can be found on our Facebook page as well at &lt;a href="http://tinyurl.com/csextras" target="__blank"&gt;http://tinyurl.com/csextras&lt;/a&gt;
&lt;/p&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-3116563678303456602?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/WAEhW5V8hq8" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-21T07:04:35.594-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/03/cs-extras-1-and-2.html</feedburner:origLink></entry><entry><title type="text">Delphi Starter Edition Database Support</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/k2gwDnzmg-Q/delphi-starter-edition-database-support_02.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-02-02T09:53:56-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-2183056384746926944</id><content type="html">&lt;p&gt;The &lt;a href="http://embarcadero.com/products/delphi/starter" target="_blank"&gt;Delphi Starter Edition&lt;/a&gt; was released February 1, 2011 as a low cost entry-level version of Delphi. The starter edition is a great addition to the Delphi product line, but only includes database support for IBExpress and the deprecated Borland Database Engine (BDE).&amp;#160; It does not include a simple in-process database or support for client/server databases like SQL Server, MySQL, Oracle, etc. &lt;/p&gt;  &lt;p&gt;Unlike these other database offerings, the &lt;a href="http://www.sybase.com/products/databasemanagement/advantagedatabaseserver/delphi-components" target="_blank"&gt;Advantage Database Server components for Delphi&lt;/a&gt; are fully compatible with the Delphi Starter Edition, and you can start using them today for free. The majority of database support was removed from the Delphi Starter edition by eliminating support for the dbExpress database layer, but Advantage does not use this extra database layer, and therefore works very well with the Delphi Starter Edition.&lt;/p&gt;  &lt;h3&gt;BDE issues&lt;/h3&gt;  &lt;p&gt;Many Delphi developers and enthusiasts have been pointing out that beginners should not be learning to use Delphi with a deprecated database engine. Michael Rozlog mentions the &lt;a href="https://forums.embarcadero.com/thread.jspa?messageID=316720&amp;amp;tstart=0#316720" target="_blank"&gt;BDE hasn’t been developed for 10 years and there is not a 64-bit migration path&lt;/a&gt;. This is untrue if you use the Advantage Database Server (ADS). In addition to being a fully functional client/server database and a great in-process local database, replacing the BDE with Advantage provides a clear and sustainable 64-bit migration path. Advantage already has 64-bit servers, supports a variety of 64-bit clients (ADO.NET, PHP, OLE DB, ODBC, etc.) and is ready to provide 64-bit Delphi support as soon as the Delphi compiler is available.&lt;/p&gt;  &lt;h3&gt;Free Local Engine&lt;/h3&gt;  &lt;p&gt;The Advantage Local Server is also included&amp;#160; with the Advantage Components for Delphi, and is a free in-process database library that fits perfectly with the starter edition concept. The local server is not limited to local drive access and can operate on and serve data via network shares just like the BDE (only without lock file and concurrency headaches). The Advantage Local Server is free to use and distribute, and as your product grows and puts more demand on the database, the full ADS version is available with no code changes (simply change a server type property on the connection). &lt;/p&gt;  &lt;h3&gt;Starter Edition Installation&lt;/h3&gt;  &lt;p&gt;The Delphi Starter edition does not allow the use of the Delphi command-line compiler, which the Advantage installer generally needs. With this limitation the Advantage design-time components will work fine in the Delphi IDE, but when an application is built the compiler will fail to find adsdata.dcu. A future update to the installer will address this issue, but for now this is easily resolved by opening the Delphi Tools-&amp;gt;Options menu, clicking on the Delphi Library item in the tree view (shown below), and updating the Advantage Library Path from “…\DelphiXE\win32” to “…\DelphiXE\win32\source”. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_GFOFxoBQlsY/TUmY9PLfupI/AAAAAAAAKWw/eKE_OlMAahA/s1600-h/image%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_GFOFxoBQlsY/TUmY97itWdI/AAAAAAAAKW0/vQsE0hsNH9o/image_thumb%5B2%5D.png?imgmax=800" width="673" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GFOFxoBQlsY/TUmY-b0oMdI/AAAAAAAAKW4/ZV_Cq0Ltbcs/s1600-h/image%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_GFOFxoBQlsY/TUmY_GwUwBI/AAAAAAAAKW8/amHLLqZjhhY/image_thumb%5B5%5D.png?imgmax=800" width="676" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;With this path change, if you are utilizing user access control in Windows, you may need to run Delphi as the administrator the first time you compile an Advantage enabled application. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-2183056384746926944?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/k2gwDnzmg-Q" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T09:53:56.700-08:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_GFOFxoBQlsY/TUmY97itWdI/AAAAAAAAKW0/vQsE0hsNH9o/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2011/02/delphi-starter-edition-database-support_02.html</feedburner:origLink></entry><entry><title type="text">Copy/Paste Rows in Advantage Data Architect</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/X8Pje3_vilo/copypaste-rows-in-advantage-data.html" /><category term="ARC DYK" /><category term="ARC" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-12-21T09:32:17-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1854739701107192387</id><content type="html">&lt;p&gt;&lt;em&gt;This is a guest post by Will Foster, our R&amp;amp;D intern this year, on a feature he implemented in ARC version 10.1&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_GFOFxoBQlsY/TRDkJenmMnI/AAAAAAAAKUw/0Zex6fPX-cs/s1600-h/will%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="will" border="0" alt="will" src="http://lh5.ggpht.com/_GFOFxoBQlsY/TRDkJzENkWI/AAAAAAAAKU4/NOT43E3VXtI/will_thumb%5B1%5D.jpg?imgmax=800" width="71" height="73" /&gt;&lt;/a&gt;&lt;strong&gt;@WilliamGFoster&lt;/strong&gt;&lt;/p&gt;   &lt;h3&gt;Overview&lt;/h3&gt;  &lt;p&gt;The Advantage Data Architect (ARC) now supports copy and pasting directly from the table browser! This functionality has been added in order to allow copy and pasting into and out of ARC. This means when you select one or more records in a table view (SQL Utility in next v10.1 public update) you will now be able to right click and “Copy Records” which will place all your data, including memo and blob field types, onto the system-wide clipboard. The data is placed onto the clipboard in CSV, HTML Table, and Tab delimited formats. This means you will be able to Paste directly into Microsoft Office products with some default formatting, and directly into an HTML formatted e-mail message. This framework also allows you to select data in Microsoft Excel or other spreadsheet software and paste directly into ARC, making adding data to a table as easy as a copy and a paste. You can also copy rows from a table and paste back into that same table (to duplicate rows, then tweak individual fields, for example).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_GFOFxoBQlsY/TRDiAk3XU5I/AAAAAAAAKTs/i1FHGj5-s14/s1600-h/copypaste%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="copypaste" border="0" alt="copypaste" src="http://lh6.ggpht.com/_GFOFxoBQlsY/TRDiBWCA32I/AAAAAAAAKT0/xZV0sVktqNY/copypaste_thumb%5B1%5D.png?imgmax=800" width="673" height="545" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Copying data directly from a table browser&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#123346"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#123346"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#123346"&gt;&lt;a href="http://lh3.ggpht.com/_GFOFxoBQlsY/TRDiCIAWGxI/AAAAAAAAKT8/l__6dDDh9uI/s1600-h/paste-excel%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="paste-excel" border="0" alt="paste-excel" src="http://lh4.ggpht.com/_GFOFxoBQlsY/TRDiCrstG2I/AAAAAAAAKUE/Kft7-dvnCxw/paste-excel_thumb%5B1%5D.png?imgmax=800" width="674" height="674" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pasting directly to Microsoft Excel&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#123346"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#123346"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_GFOFxoBQlsY/TRDiDUI3XEI/AAAAAAAAKUM/aFvvcnZl0po/s1600-h/paste-gmail%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="paste-gmail" border="0" alt="paste-gmail" src="http://lh3.ggpht.com/_GFOFxoBQlsY/TRDiD0qzN9I/AAAAAAAAKUU/BbkZjgvm8Dc/paste-gmail_thumb%5B2%5D.png?imgmax=800" width="670" height="544" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pasting directly into email client&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Binary/BLOB Data&lt;/h3&gt;  &lt;p&gt;It should be noted that blob field types will be 64 bit encoded prior to being placed onto the clipboard. This means that if copying large quantities of blob data, this encoding may take a while, and will remain 64-bit encoded if pasted anywhere other than ARC. However, you can feel free to copy and paste blob data within ARC, retaining all the original integrity of the field.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Field Mapping&lt;/h3&gt;  &lt;p&gt;You can also copy and paste from two entirely different tables. This is accomplished via a mapping dialog. This allows you to modify the orientation of fields from the source table so that they match the destination table. If any conflicts occur you will be notified and allowed to retry with all the data still remaining on the clipboard. This dialog will also let you choose if you have a header row or not (useful when copying partial bits of data from Excel or the Web. This dialog also attempts to match based on field names, so if you have fields in a different order on the source table it will be no problem at all!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_GFOFxoBQlsY/TRDiEmOehCI/AAAAAAAAKUc/t3l6UDJ-i14/s1600-h/field-mapper%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="field-mapper" border="0" alt="field-mapper" src="http://lh3.ggpht.com/_GFOFxoBQlsY/TRDiFulkIpI/AAAAAAAAKUk/o33quErUF8c/field-mapper_thumb%5B1%5D.png?imgmax=800" width="672" height="536" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Field Mapping Dialog&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;Overall, the copy/paste functionality is a great addition to ARC and we believe it will make your data manipulation tasks even easier than before! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1854739701107192387?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/X8Pje3_vilo" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T09:32:17.380-08:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_GFOFxoBQlsY/TRDkJzENkWI/AAAAAAAAKU4/NOT43E3VXtI/s72-c/will_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/12/copypaste-rows-in-advantage-data.html</feedburner:origLink></entry><entry><title type="text">ITC Software Alliance: Industry-Led Education</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Rydx0eYA3gg/itc-software-alliance-industry-led.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-10-17T07:01:03-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-8162211745810173565</id><content type="html">&lt;h3&gt;CS Extras&lt;/h3&gt;  &lt;p&gt;Our goal is to increase the number and quality of software professionals in Idaho. &lt;/p&gt;  &lt;p&gt;Idaho’s software industry is vibrant and expanding. Yet, many are not aware of its growing importance. Today there are many silos of professionals and user groups in Idaho exposing high school students to software, teaching guest lectures at universities, and training their own employees valuable skills. These efforts are inspirational, but can often fade when volunteers don’t feel like they are making the impact originally envisioned. We would like to pool these existing resources, strengthen them with renewed interest from Industry partners in the Idaho Technology Council, and create a community that not only engages high school and university students, but its own members as well.&lt;/p&gt;  &lt;p&gt;By helping to build a more vibrant software community through industry led training, we can help retain existing professionals, build a solid pipeline of excellent local talent coming from our Idaho schools and universities, and avoid recruiting from out of state.&lt;/p&gt;  &lt;h3&gt;The Format&lt;/h3&gt;  &lt;p&gt;Our format simply pairs Idaho software experts with those seeking enhanced skills and information about software. The format will be flexible – presentations, interactive coding sessions, round table discussions and other discussion and training methods. &lt;/p&gt;  &lt;p&gt;Idaho’s software industry employees and leaders are encouraged to volunteer in one of these areas: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Encourage teens to consider and pursue a software degree &lt;/li&gt;    &lt;li&gt;Increase college student’s awareness of a variety of programming skills and knowledge, and showcase exciting career opportunities. &lt;/li&gt;    &lt;li&gt;Expand existing professional skills with industry-specific presentations, skills and training &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Starting early 2011, we’d like to host an event every other month, with focus areas of your interest. Scheduling will be dependent on areas of interest and the best time of year for the target audience. The target audience will vary throughout the year between high school students, university students, and industry peers.&lt;/p&gt;  &lt;h3&gt;What We Ask of Volunteers&lt;/h3&gt;  &lt;p&gt;Volunteers will be asked to present (or help present with one or more additional volunteers) one time each year or two. Topics and formats can vary based on the subject matter and the target audience. Volunteers can expect support from the Software Alliance for organizing, scheduling and communicating the sessions and discussions. The Software Alliance will lay the ground work for the volunteers to effectively share their expertise.&lt;/p&gt;  &lt;p&gt;Example topics may include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Basics (source code control, debugging techniques) &lt;/li&gt;    &lt;li&gt;Technologies (languages, frameworks, mobile development, content mgmt) &lt;/li&gt;    &lt;li&gt;Hands on demonstrations &lt;/li&gt;    &lt;li&gt;Tips and best practices &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;We Need Your Help&lt;/h3&gt;  &lt;p&gt;Interested? Motivated? &lt;a href="mailto:jeremym1234@cableone.net?subject=ITC%20Education"&gt;E-mail me&lt;/a&gt; to volunteer or ask questions.&lt;/p&gt;&lt;p&gt;You can also check out &lt;a href="https://www.facebook.com/pages/ITC-CS-Extras/166836090030542?sk=wall"&gt;Facebook page&lt;/a&gt; for the most up to date information.&lt;/p&gt;  &lt;h3&gt;Still not convinced? &lt;/h3&gt;  &lt;p&gt;Still reading? The content above was the “short version”, and will be the base message we market in the future and post on our web site. I’m including some of the rational behind the plan below for those interested in more context:&lt;/p&gt;  &lt;h4&gt;A Successful Partnership&lt;/h4&gt;  &lt;p&gt;Industry led software education benefits all parties involved, making it a very powerful mechanism.&lt;/p&gt;  &lt;h5&gt;Benefits to Employers&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Develop reputations and company name recognition with potential student hires. When students are attending job fairs or looking for internship employment they will recognize companies who have invested time training them in the past. They will also likely know the instructors, and if they enjoyed those instructors they will be more likely to interview and entertain job offers with their company. &lt;/li&gt;    &lt;li&gt;Help the local community build a bigger job force to hire from, and a job force that has additional skills beyond those taught as part of the student’s course work. This will reduce ramp-up time when educating out-of-college new hires. &lt;/li&gt;    &lt;li&gt;Students will learn about the active tech community in Boise and many companies that employ software professionals here that they didn’t know existed, resulting in more graduates staying in Idaho and a larger talent pool for all companies to hire from.&lt;/li&gt;    &lt;li&gt;As the program grows, and is promoted by ITC, employers will be helping draw out of state students to Idaho universities. This in turn can result in a larger pool of students willing to consider Idaho companies for their full time employment. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;Benefits to Students&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;ITC Software Alliance seminars will provide free training above and beyond their standard course-work. This will create students with additional “real world” training and make them more marketable when they are interviewing for internships and full time positions. &lt;/li&gt;    &lt;li&gt;Develop relationships with local companies, many of which will be looking to hire interns and full time employees. &lt;/li&gt;    &lt;li&gt;Develop a relationship with ITC and have access to its full list of relevant companies when looking for employment. &lt;/li&gt;    &lt;li&gt;Eventually we would like to have ITC scholarships we can offer students who have engaged us in these training events. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;Benefits to Universities&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Student retention in engineering programs as industry guest speakers motivate students and provide glimpse into what their “real world” working environment and tasks may entail. &lt;/li&gt;    &lt;li&gt;If successful, this program will differentiate Idaho universities and make them more valuable and attractive to out of state students. &lt;/li&gt;    &lt;li&gt;Industry training will allow universities to focus on core competencies of the curriculum, while industry volunteers help educate students on specialty, cutting edge topics that the industry needs new students to understand (Python, .NET, Ruby on Rails, etc) for immediate employment (whether as interns or full time employees).&lt;a name="_GoBack"&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-8162211745810173565?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Rydx0eYA3gg" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T07:01:03.166-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/10/itc-software-alliance-industry-led.html</feedburner:origLink></entry><entry><title type="text">Too Many Web Frameworks</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/PFJYPMVryfo/too-many-web-frameworks.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-09-27T14:18:25-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1349186671566599681</id><content type="html">&lt;p&gt;&lt;a href="http://www.webdesignish.com/the-best-web-development-frameworks.html" target="_blank"&gt;This list&lt;/a&gt; of web frameworks is not complete (read all of the additional frameworks listed in the comments), but serves as a reminder why many traditional desktop application developers encounter analysis paralysis when moving to web development.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1349186671566599681?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/PFJYPMVryfo" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-27T14:18:25.602-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/09/too-many-web-frameworks.html</feedburner:origLink></entry><entry><title type="text">Advantage Web API</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/fB0CeFZARVY/advantage-web-api.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2011-07-05T09:41:35-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-4161115586243927454</id><content type="html">&lt;p&gt;Currently, data stored in the Advantage Database Server can only be accessed via an Advantage client interface of some sort (Delphi components, .NET Data Provider, PHP driver, etc.). All of these interfaces are built on top of the Advantage Client Engine (ACE), and ACE only supports two platforms; Windows and Linux.&lt;/p&gt;  &lt;p&gt;The easiest way to consume your data from other platforms is to expose that data via a web service. Depending on your experience and familiarity with web services, this can be a trivial task, or a pain point. There are many choices to be made at a high level (IIS, Apache, Ruby, Python, ASP.NET, PHP, etc.) and once those decisions are made there are even more at lower levels (framework decisions, REST vs RPC, etc.).&lt;/p&gt;  &lt;p&gt;Once implemented, these technologies work well with Advantage, but have introduced a variety of moving parts that your team must now understand and maintain. In addition, the requirement for these technologies as a foundation has increased both your development time and the scope of your project. For many teams this is a manageable solution, but for others this entry barrier prevents projects from ever getting off the ground.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;A Built-In Solution&lt;/h2&gt;  &lt;p&gt;We want Advantage users to have a turnkey option to retrieve their data via a web service. You can still obviously build your own, but for teams that would like a jump start, or would like to investigate web interfaces without the overhead or commitment, we will be distributing a pre-built web server and web service that provides access to your existing Advantage data.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;The Technology&lt;/h3&gt;  &lt;p&gt;The web service is implemented as an Apache module that will be loaded by a stand-alone instance of Apache. This web service can also be installed into an existing Apache installation, but by default will install it’s own minimal copy of Apache.&lt;/p&gt;  &lt;p&gt;The web service is a &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank"&gt;RESTful&lt;/a&gt; API that returns data using a format very similar to the &lt;a href="http://www.odata.org/home" target="_blank"&gt;oData specification&lt;/a&gt;. The initial implementation will return &lt;a href="http://en.wikipedia.org/wiki/Json" target="_blank"&gt;JSON&lt;/a&gt; data. XML is a possibility for future implementations, but will not be part of the initial beta. &lt;/p&gt;  &lt;p&gt;Every modern development environment I know of provides the ability to make an HTTP call and consume a web service. This means you will have access to your Advantage data from literally any programming language and on any device platform.&lt;/p&gt;  &lt;p&gt;Configuration will be VERY simple. Add the path to the database you want to expose to a configuration file, and that’s it. You will immediately be able to securely (via HTTPS) request and update data from your Advantage server via web URI’s.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Consumption Examples&lt;/h3&gt;  &lt;p&gt;I’ve included a few examples below of this web service retrieving a set of records. These examples are by no means complete, but provide a quick glimpse at the consumption of this API on a variety of platforms and devices.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web Browser&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The easiest way to test the service is to simply enter a URI into your browser.&lt;/p&gt;  &lt;p&gt;For example, entering the following URI into your browser after installing the server:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://myserver:6282/adsweb/v1/test_db/tables/orders"&gt;https://myserver:6282/adsweb/v1/test_db/tables/orders&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;would return:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GFOFxoBQlsY/TIgR_mvQ3PI/AAAAAAAAKHY/T9ETZGGV8ZA/s1600-h/web3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="web" border="0" alt="web" src="http://lh3.ggpht.com/_GFOFxoBQlsY/TIgSA9VXViI/AAAAAAAAKHg/ujGSfABSSxE/web_thumb1.png?imgmax=800" width="587" height="507" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;.NET&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Consumption from the .NET framework is accomplished using the built in &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx" target="_blank"&gt;WebClient class&lt;/a&gt; in combination with the &lt;a href="http://json.codeplex.com/" target="_blank"&gt;JSON.NET library&lt;/a&gt; for JSON serialization and de-serialization:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; min-height: 260px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 260px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; WebClient w = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WebClient();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; w.Headers.Add( &lt;span style="color: #006080"&gt;&amp;quot;Authorization&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Basic &amp;quot;&lt;/span&gt; + &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;    Convert.ToBase64String( Encoding.ASCII.GetBytes( &lt;span style="color: #006080"&gt;&amp;quot;adssys:&amp;quot;&lt;/span&gt; ) ) );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; w.Encoding = Encoding.UTF8;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; result = w.DownloadString( &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;    &lt;span style="color: #006080"&gt;&amp;quot;https://myserver:6282/adsweb/v1/test_db/tables/orders&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; sr = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringReader( result );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; olist = (oDataResults&amp;lt;Orders&amp;gt;)serializer.Deserialize( &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; JsonTextReader( sr ), &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;                                                       &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;( oDataResults&amp;lt;Orders&amp;gt; ) );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Results are now ready to use in an object list&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( olist.d.results.Count &amp;gt; 0 )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;    MessageBox.Show( &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format( &lt;span style="color: #006080"&gt;&amp;quot;First order ID is {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;                     olist.d.results[0].id.ToString() ) );&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iPhone/iPad (Objective-C)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consumption in Objective-C is accomplished using the URLWithString constructor and the &lt;a href="http://code.google.com/p/touchcode/wiki/TouchJSON" target="_blank"&gt;TouchJSON library&lt;/a&gt;:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; min-height: 210px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 210px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; NSString *jsonString = [NSString stringWithContentsOfURL:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    [NSURL URLWithString: &lt;span style="color: #006080"&gt;@&amp;quot;https://myserver:6268/adsweb/v1/test_db/tables/orders&amp;quot;&lt;/span&gt;]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;           encoding: NSUTF8StringEncoding error:&amp;amp;error];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #008000"&gt;// deserialize&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; NSDictionary *dictionary = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;    [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&amp;amp;error];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000"&gt;// save reference to the rows&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; _rows = [[NSMutableArray alloc] initWithArray:[dictionary objectForKey:&lt;span style="color: #006080"&gt;@&amp;quot;d&amp;quot;&lt;/span&gt;]];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; [_rows retain];&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Android (Java)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consumption in Java is accomplished using the WebClient class and the &lt;a href="http://code.google.com/p/google-gson/" target="_blank"&gt;Gson library&lt;/a&gt;:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; min-height: 260px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 260px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; WebClient ordersClient = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WebClient( &lt;span style="color: #006080"&gt;&amp;quot;https://myserver:6282/adsweb/v1/test_db/tables/orders&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; String jsonOrders = ordersClient.GetData( &lt;span style="color: #006080"&gt;&amp;quot;total&amp;gt;50000&amp;quot;&lt;/span&gt; )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; Gson gson = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Gson();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; OrdersListWrapper ordersList = gson.fromJson( jsonOrders, OrdersListWrapper.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000"&gt;// The deserialized Results are now contained in the &amp;quot;d&amp;quot; object array.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( ordersList.d.Count &amp;gt; 0 ) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;    TextView tvResults = (TextView)mainView.findViewById( R.id.txtResults );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;    tvResults.setText( &lt;span style="color: #006080"&gt;&amp;quot;The First Order ID is &amp;quot;&lt;/span&gt; + &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;                       (&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Integer( ordersList.d[0].id ).toString() ));&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The following example consumes the API using Javascript in a browser, and uses the JQuery framework to quickly manipulate the JSON data and present a table:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; min-height: 260px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 260px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &amp;lt;script language=&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;   $.getJSON(&lt;span style="color: #006080"&gt;'https://myserver:6282/adsweb/v1/test_db/tables/orders'&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data, status){&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     $.each( data.d, &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(i, item) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;      $(&lt;span style="color: #006080"&gt;'#res'&lt;/span&gt;).append( &lt;span style="color: #006080"&gt;'&amp;lt;li&amp;gt;Order '&lt;/span&gt; + item.OrderNo + &lt;span style="color: #006080"&gt;' : $'&lt;/span&gt; + item.AmountPaid + &lt;span style="color: #006080"&gt;'&amp;lt;/li&amp;gt;'&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     } );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;  });&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; &amp;lt;ul&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;   &amp;lt;div id=res&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;   &amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; &amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The following example consumes the API using PHP, and uses the CURL extension and built in json_decode function:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; min-height: 430px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 430px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; $session = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;   curl_init(&lt;span style="color: #006080"&gt;&amp;quot;https://localhost:6282/adsweb/pupdir/v1/query/select%20*%20from%20test1&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #008000"&gt;// configure CURL to trust our server with self-signed cert&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; curl_setopt($session, CURLOPT_SSL_VERIFYPEER, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000"&gt;// set db password&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; curl_setopt($session, CURLOPT_USERPWD, &lt;span style="color: #006080"&gt;&amp;quot;adssys:&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: #008000"&gt;// setup curl_exec to return the data instead of printing it&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; curl_setopt($session, CURLOPT_RETURNTRANSFER, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #008000"&gt;// set headers&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; curl_setopt($session, CURLOPT_HTTPHEADER, &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;array&lt;/span&gt; ( &lt;span style="color: #006080"&gt;&amp;quot;Accept: application/json; charset=utf-8&amp;quot;&lt;/span&gt; ) );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color: #008000"&gt;// get the data&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; $response = curl_exec($session);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; curl_close($session);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color: #008000"&gt;// decode the json into an object&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( ! $dataset = json_decode( $response ) )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;   trigger_error( json_last_error() );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt; &lt;span style="color: #008000"&gt;// spit out a simple table (normally would use a view, but not in small example)&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;print&lt;/span&gt;( &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;th&amp;gt;Lastname&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Firstname&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; ( $dataset-&amp;gt;d-&amp;gt;results &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; $row )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;print&lt;/span&gt;( &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;$row-&amp;gt;LASTNAME&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$row-&amp;gt;FIRSTNAME&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;print&lt;/span&gt;( &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Beta Testing and Discussion&lt;/h2&gt;

&lt;p&gt;The beta program is underway and we are ready for testers to try the new web API. If you would like to be included in the beta process, &lt;a href="http://response.sybase.com/forms/ADS_WebAPI_Beta" target="_blank"&gt;please register here&lt;/a&gt; and we will email you download and documentation links. &lt;/p&gt;

&lt;p&gt;In addition, you can visit the &lt;a href="news://devzone.advantagedatabase.com/advantage.webapi" target="_blank"&gt;Advantage.webapi newsgroup&lt;/a&gt; for Advantage Web API discussions and updates. If you can not access NNTP newsgroups, feel free to email me (Jeremy.Mullin at Sybase.com) with any feedback you may have.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-4161115586243927454?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/fB0CeFZARVY" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-05T09:41:35.781-07:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_GFOFxoBQlsY/TIgSA9VXViI/AAAAAAAAKHg/ujGSfABSSxE/s72-c/web_thumb1.png?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/09/advantage-web-api.html</feedburner:origLink></entry><entry><title type="text">Advantage Version 10 Tips</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/-vP1y1wAMew/advantage-version-10-tips.html" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-07-08T11:32:39-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1094153700622405348</id><content type="html">&lt;p&gt;If you didn’t catch Chris’ series of tips on utilizing the new functionality in Advantage version 10, he has created &lt;a href="http://blog.advantageevangelist.com/2010/07/advantage-10-tips-recap.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+ViewsFromAnAdvantageEvangelist+(Views+from+an+Advantage+Evangelist)" target="_blank"&gt;a post with links to all 25 tips&lt;/a&gt;. Great material in bite-sized chunks, and much better than sitting down and reading a help file.&amp;#160; :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1094153700622405348?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/-vP1y1wAMew" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T11:32:39.598-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/07/advantage-version-10-tips.html</feedburner:origLink></entry><entry><title type="text">Boise Software Mentoring</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/D8jTIU5wPL8/boise-software-mentoring.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-12-17T13:44:16-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-4541314973558839595</id><content type="html">&lt;p&gt;Last night &lt;a href="http://twitter.com/davidcohen" target="_blank"&gt;David Cohen&lt;/a&gt; from &lt;a href="http://www.techstars.org/" target="_blank"&gt;TechStars&lt;/a&gt; presented at a local TechBoise event. He explained how TechStars helped to generate a software startup community and ecosystem in Boulder Colorado that feeds itself. Entrepreneurs, investors and mentors generating more entrepreneurs, more investors, and more mentors. It was motivational, to say the least. It was also hard to see why this couldn’t work in Boise. In fact, &lt;a href="http://nebula-shift.com/" target="_blank"&gt;Nebula Shift&lt;/a&gt; was announced a few months ago and plans to use a similar approach.&lt;/p&gt;  &lt;p&gt;I don’t plan on leaving my corporate job any time soon, but I’m fascinated with the software startup story. David’s presentation helped me realize my position in the community might be as a mentor. I want to contribute, and mentoring seems like the most immediate way to get involved.&lt;/p&gt;  &lt;p&gt;At the end of this post I offer up a little information about myself, not in the context of “look at me”, but rather as a quick overview of things I’m interested in, past endeavors, and areas I might be able to contribute. Some of these things I know in depth, some I’ve only played with for a week or two, some I’d be interested in learning more about and could only provide direction to resources and research. The list is certainly not complete, but hopefully provides a quick overview. &lt;/p&gt;  &lt;p&gt;I’m not a TechStars caliber mentor:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I can’t provide business advice (at least nothing credible). &lt;/li&gt;    &lt;li&gt;I’ve never started a company. &lt;/li&gt;    &lt;li&gt;I’ve never made millions. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I do love writing software, talking about software, and using software.&lt;/p&gt;  &lt;p&gt;I can provide architecture and framework suggestions, beta feedback, and general “have you heard of”, or “have you considered” types of conversations. I can help you locate and evaluate contractors. I can review and test the code contractors deliver as well as give you an independent assessment of the reality of their schedules. I can even write a few modules for you on a weekend every now and then.&lt;/p&gt;  &lt;p&gt;My day job working on developer tools exposes me to an outrageous number of technologies. My communication skills make it easy for me to effectively discuss these technologies with people of varying technical backgrounds. Some of the most helpful mentoring I have done so far has been helping those with little to no technical background get a handle on what is necessary, and what to expect, when implementing their business ideas.&lt;/p&gt;  &lt;p&gt;I hope a few colleagues will join me, and perhaps we can start a mentors directory on the TechBoise web site. Until a directory like that exists, feel free to email me directly.&lt;/p&gt;  &lt;p&gt;J.D. Mullin, &lt;a href="mailto:jeremy.d.mullin@gmail.com"&gt;jeremy.d.mullin@gmail.com&lt;/a&gt;, &lt;a href="http://twitter.com/jdmullin" target="_blank"&gt;@jdmullin&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;What I Currently Do&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Software developer and R&amp;amp;D manager for an embedded database server and its client APIs and drivers &lt;/li&gt;    &lt;li&gt;Develop and write server and desktop client software using a variety of platforms and languages &lt;/li&gt;    &lt;li&gt;Understand of a wide variety of database technologies, development environments and programming frameworks &lt;/li&gt;    &lt;li&gt;Manage feature prioritization and roadmap &lt;/li&gt;    &lt;li&gt;Handle scheduling and dev team (they are awesome and low maintenance, though, so this job is easy) &lt;/li&gt;    &lt;li&gt;Train and interact with other software developers (we mostly sell to ISV’s) &lt;/li&gt;    &lt;li&gt;Constantly evaluating development environments and frameworks is part of my job. Provides a breadth of knowledge, but not always much depth &lt;/li&gt;    &lt;li&gt;Ship a successful software product that was conceived and is still currently developed here in Boise &lt;/li&gt;    &lt;li&gt;Read way too many software blogs &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;General Interests&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;RESTful services &lt;/li&gt;    &lt;li&gt;Scalability &lt;/li&gt;    &lt;li&gt;Concurrent programming &lt;/li&gt;    &lt;li&gt;Web APIs &lt;/li&gt;    &lt;li&gt;Post-mortem debugging &lt;/li&gt;    &lt;li&gt;Mobile device development (synchronization, data access, etc.) &lt;/li&gt;    &lt;li&gt;Social graphs &lt;/li&gt;    &lt;li&gt;Big dogs, beer, camping, motorcycles &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Past&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://careers.stackoverflow.com/jdmullin" target="_blank"&gt;My resume&lt;/a&gt; is probably the best list of past work &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-4541314973558839595?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/D8jTIU5wPL8" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-17T13:44:16.070-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/04/boise-software-mentoring.html</feedburner:origLink></entry><entry><title type="text">Advantage v10 Delphi SQL Property Editor</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/vdRLEG7FASI/advantage-v10-delphi-sql-property.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-02-25T10:30:52-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-7392065670520374550</id><content type="html">&lt;p&gt;One of my favorite new features in Advantage version 10 (beta at the end of March) is the new TAdsQuery.SQL property editor in Delphi/C++Builder. No longer will users be greeted with the default Delphi string list editor:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_GFOFxoBQlsY/S4bBckYCfzI/AAAAAAAADRg/h8_F3bEkxMg/s1600-h/boring%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="boring" border="0" alt="boring" src="http://lh4.ggpht.com/_GFOFxoBQlsY/S4bBdIiV8kI/AAAAAAAADRo/V3E16xWOyDE/boring_thumb%5B1%5D.png?imgmax=800" width="357" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Instead, you will see the familiar SQL Utility from the Advantage Data Architect:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_GFOFxoBQlsY/S4bBdUyK_2I/AAAAAAAADRw/k3_vEhvCtBk/s1600-h/qeditor%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="qeditor" border="0" alt="qeditor" src="http://lh5.ggpht.com/_GFOFxoBQlsY/S4bBd6ovS4I/AAAAAAAADR4/zQKNQLuOPec/qeditor_thumb%5B2%5D.png?imgmax=800" width="515" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What does this mean? Now, without leaving your work flow in Delphi/C++Builder, you will have:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;syntax highlighting&lt;/li&gt;    &lt;li&gt;code templates&lt;/li&gt;    &lt;li&gt;access to the query plan&lt;/li&gt;    &lt;li&gt;ability to create indexes to help optimize the query&lt;/li&gt;    &lt;li&gt;ability to export the query results&lt;/li&gt;    &lt;li&gt;find and replace functionality&lt;/li&gt;    &lt;li&gt;ability to run and preview query results&lt;/li&gt;    &lt;li&gt;ability to verify query syntax&lt;/li&gt;    &lt;li&gt;ability to debug SQL scripts&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Write your query, preview it, and debug it. Then just click OK and the query is saved to your TAdsQuery instance. It’s all ball bearings these days.&lt;/p&gt;  &lt;p&gt;Another cool feature is this is the exact same interface you use inside the Advantage Data Architect (ARC), no need to learn any new functionality, it will all be familiar.&lt;/p&gt;  &lt;p&gt;To preview some of the other upcoming features in Advantage version 10 be sure to register for Chris’s &lt;a href="http://marketing.ianywhere.com/forms/Advantage10PS" target="_blank"&gt;upcoming webinars&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-7392065670520374550?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/vdRLEG7FASI" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T10:30:52.143-08:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_GFOFxoBQlsY/S4bBdIiV8kI/AAAAAAAADRo/V3E16xWOyDE/s72-c/boring_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/02/advantage-v10-delphi-sql-property.html</feedburner:origLink></entry><entry><title type="text">Object-Relational Mapping (ORM) Technology</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Uvt2Q5_d0Gk/object-relational-mapping-orm.html" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2010-01-20T07:33:59-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-8209512293602991779</id><content type="html">&lt;p&gt;Sharing an interesting post by Shawn Wildermuth, &lt;a href="http://wildermuth.com/2010/01/18/Are_ORMs_Solving_Anything" target="_blank"&gt;Are ORM’s Solving Anything&lt;/a&gt;. Be sure to read the comments as well for more insight from his readers.&lt;/p&gt;  &lt;p&gt;I’m also fond of our colleague Glenn Paulley’s recent presentation, “ORMs: Friend or Foe?”, which can be found and downloaded from his &lt;a href="http://iablog.sybase.com/paulley/presentations/" target="_blank"&gt;presentations page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’ve written my own “poor man’s ORM” solutions in the past to facilitate object generation from a database result set, but have yet to fully embrace the latest generation of ORM technology. Like many developers, I’m a control freak and I love my database. Putting a middle man and smoke and mirrors between us is not fun for me. However, reducing the need to crank out endless lines of redundant data access code certainly is appealing. For writing simple applications, I really like the idea of using an ORM to just “get the job done”. &lt;/p&gt;  &lt;p&gt;I wish the Advantage team had the resources to support all of the ORM’s currently available, but that just isn’t possible. I could name at least 7 off the top of my head, and I bet with 5 minutes of web searching I could easily find another 10. &lt;/p&gt;  &lt;p&gt;I’m also concerned about the long term maintenance requirements. Supporting ORMs is not as basic as providing an interface to our database. We then have to deal with optimizing overly complex queries generated by the ORM (see Glenn’s presentation), record locking and visibility issues, transaction issues, etc.&lt;/p&gt;  &lt;p&gt;For now we support the .NET Entity Framework. &lt;a href="http://en.wikipedia.org/wiki/Hibernate_(Java)" target="_blank"&gt;Hibernate&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Nhibernate" target="_blank"&gt;NHibernate&lt;/a&gt; are on our radar, but no decisions have been made yet to move forward with solutions for those frameworks. There are feature requests for both on our &lt;a href="http://feedback.advantagedatabase.com" target="_blank"&gt;feedback page&lt;/a&gt;. I’d encourage you to vote for those or submit your own requests. Also please feel free to comment on this post to share your insights or thoughts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-8209512293602991779?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Uvt2Q5_d0Gk" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-20T07:33:59.918-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2010/01/object-relational-mapping-orm.html</feedburner:origLink></entry><entry><title type="text">Ken Levy “Advantage with VFP” Screencast</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/wTXlz_c9kG4/ken-levy-advantage-with-vfp-screencast.html" /><category term="Screencasts" /><category term="FoxPro" /><category term=".NET" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-12-16T07:53:15-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1333666439032882431</id><content type="html">&lt;p&gt;Ken has recorded a cool screencast that covers the following topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Advantage Database Server (ADS) Components &lt;/li&gt;    &lt;li&gt;ADS Overview &lt;/li&gt;    &lt;li&gt;ADS Scenarios with Visual FoxPro &lt;/li&gt;    &lt;li&gt;Demo: ADS for VFP and .NET &lt;/li&gt;    &lt;li&gt;Resources&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The screencast can be found here: &lt;a href="http://video.sybase.com/products/advantage/Sybase_ADS_VFP.wmv"&gt;http://video.sybase.com/products/advantage/Sybase_ADS_VFP.wmv&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1333666439032882431?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/wTXlz_c9kG4" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T07:53:15.064-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/12/ken-levy-advantage-with-vfp-screencast.html</feedburner:origLink></entry><entry><title type="text">Delphi Help System WITHOUT Microsoft SDK</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/5kE7B45E4uo/delphi-help-system-without-microsoft.html" /><category term="Delphi" /><category term="Delphi DYK" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-12-10T12:31:32-08:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-5459458265692499235</id><content type="html">&lt;p&gt;The help system in newer versions of Delphi and C++Builder is a pain to navigate. This blog post describes a way you can remove the Microsoft SDK from the help system. This significantly increases the odds you will find the Delphi methods/properties/etc you are looking for instead of Microsoft SDK info you likely don’t care about and can already search for on MSDN.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.embarcadero.com/deeelling/2009/12/07/38310"&gt;http://blogs.embarcadero.com/deeelling/2009/12/07/38310&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In addition, if you would like to see the SDK documentation removed by default in the future, leave Dee a comment.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-5459458265692499235?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/5kE7B45E4uo" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T12:31:32.795-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/12/delphi-help-system-without-microsoft.html</feedburner:origLink></entry><entry><title type="text">Advantage Delphi Components</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Sk2tz3LSALE/advantage-delphi-components.html" /><category term="Delphi" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-10-15T09:43:15-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-7641432172653987740</id><content type="html">&lt;p&gt;I’m currently in Delphi modifying and improving some of the Advantage property editors (the dialogs that help you read and set property values in the Object Inspector).&lt;/p&gt;  &lt;p&gt;If you have ideas for improvements, or if there are things that drive you crazy, post a comment to this post and I’ll see what I can do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-7641432172653987740?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Sk2tz3LSALE" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-15T09:43:15.078-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/10/advantage-delphi-components.html</feedburner:origLink></entry><entry><title type="text">Advantage Delphi Components for RAD Studio 2010 Posted</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Es4Twwd5LUU/advantage-delphi-components-for-rad.html" /><category term="Delphi" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-09-21T14:05:48-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-8748829258420028107</id><content type="html">&lt;p&gt;Advantage support for Delphi/RAD Studio 2010 was &lt;a href="http://devzone.advantagedatabase.com/dz/content.aspx?key=44&amp;amp;id=8d81d194-c6a7-e544-9ace-84685eb9bda7" target="_blank"&gt;released today&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-8748829258420028107?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Es4Twwd5LUU" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-21T14:05:48.353-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/09/advantage-delphi-components-for-rad.html</feedburner:origLink></entry><entry><title type="text">Advantage CHM Help File</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/k9Atd2axzuk/advantage-chm-help-file.html" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-09-15T12:16:45-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-806937349879631280</id><content type="html">&lt;p&gt;The next Advantage 9.1 service update will include a CHM help file to replace the WinHelp files we are currently shipping. If you would like to try it out early, you can download a copy from &lt;a href="http://devzone.advantagedatabase.com/jeremym/advantage_chm.zip"&gt;http://devzone.advantagedatabase.com/jeremym/advantage_chm.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the past we only installed the help files for the client kits and products you where using. While this kept the installations smaller, it would often hide the fact that other clients existed and had functionality you might be interested in. This new help file is an “all-in-one” help file that contains ALL Advantage documentation, and is still a relatively small help file (roughly 7MB).&lt;/p&gt;  &lt;p&gt;This CHM help file will work in Windows Vista and Windows 7 without the buggy WinHelp plugin that was required in the past. Note if you want to view a CHM file stored on a network drive you will need to download and run &lt;a href="http://www.ec-software.com/products_hhreg.html" target="_blank"&gt;this utility from EC Software&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Our new help file is built using &lt;a href="http://www.ec-software.com/" target="_blank"&gt;Help &amp;amp; Manual from EC Software&lt;/a&gt;. So far it has been a great tool. I really like having access to the raw XML files the help is built from. In the event I need to manipulate the content and H&amp;amp;M doesn’t have the functionality I need, I can quickly write a Ruby or Perl script to zip through the help files and make my changes.&lt;/p&gt;  &lt;p&gt;If you encounter any problems with the help file or notice any formatting errors please use the feedback email button to send us bug reports.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-806937349879631280?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/k9Atd2axzuk" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-15T12:16:45.201-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/09/advantage-chm-help-file.html</feedburner:origLink></entry><entry><title type="text">Advantage Delphi 2010 Support</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/9Nrn4CnRq_o/advantage-delphi-2010-support.html" /><category term="Delphi" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-08-31T10:22:31-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-6339806603796335782</id><content type="html">&lt;p&gt;As many of you have heard, &lt;a href="http://www.embarcadero.com/products/rad-studio" target="_blank"&gt;Delphi 2010&lt;/a&gt; (or “RAD Studio 2010”) has shipped. We will be updating the Advantage Delphi Components and releasing 8.1 and 9.1 updates in the next few weeks.&lt;/p&gt;  &lt;p&gt;Our first update will include basic changes in the &lt;a href="http://devzone.advantagedatabase.com/dz/content.aspx?key=20&amp;amp;Release=13&amp;amp;Product=10&amp;amp;Platform=6" target="_blank"&gt;Advantage Delphi Components&lt;/a&gt; to support Delphi 2010. This update will let you use our components in Delphi 2010 just as you do in Delphi 2009 and older versions today.&amp;#160; A subsequent release will include updates that expand on some of the new functionality in Delphi (verb hints in the Object Inspector, JSON serialization, etc.).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-6339806603796335782?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/9Nrn4CnRq_o" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T10:22:31.131-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/08/advantage-delphi-2010-support.html</feedburner:origLink></entry><entry><title type="text">I’m Not Dead Yet</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/Dlbnf8BCMRE/im-not-dead-yet.html" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-07-28T17:38:06-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-6624088186419631546</id><content type="html">&lt;p&gt;Couldn’t resist the Monty Python reference… &lt;/p&gt;  &lt;p&gt;It’s been a long time since I’ve posted to my blog. I’ve been caught up in &lt;a href="http://twitter.com/jdmullin" target="_blank"&gt;Twitter land&lt;/a&gt; which appeals to my lazy programmer side (140 characters is much easier to conjure up than a blog post is). I’ve also been spending most of my free time (when I normally write these blog entries) playing with .NET, Visual Studio, Ruby, Ruby in Steel, and ASP.NET MVC. Add to that some C and Delphi stuff at work, and my brain has been mush for the last few months.&lt;/p&gt;  &lt;p&gt;I’m skipping Southwest Fox this year, but I’ll be in Washington D.C. at the end of August for our next &lt;a href="http://www.sybase.com/adssummit" target="_blank"&gt;Advantage Technical Summit&lt;/a&gt;. I believe we will be hosting a Visual FoxPro user group meeting while we are in town as well.&lt;/p&gt;  &lt;p&gt;As for technical blog content, I hope to post some more soon. I’ve recently had the need to slurp up a specific portion of the ads_err log and post it to a remote exception logger. I hope to publish and post a .NET version of that code when I’m finished. Unless of course some of you have already done that, in which case it would be cool if you could e-mail me the code…&amp;#160; ;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-6624088186419631546?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/Dlbnf8BCMRE" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-28T17:38:06.616-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/07/im-not-dead-yet.html</feedburner:origLink></entry><entry><title type="text">Advantage Data Architect Update</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/62lQzZKDt7M/advantage-data-architect-update.html" /><category term="ARC" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-06-03T10:02:27-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-5242471889661215794</id><content type="html">&lt;p&gt;An update to the Advantage Data Architect (ARC) has been &lt;a href="http://devzone.advantagedatabase.com/dz/content.aspx?Key=20&amp;amp;Release=13&amp;amp;Product=8&amp;amp;Platform=6" target="_blank"&gt;posted to the DevZone&lt;/a&gt; today.&lt;/p&gt;  &lt;p&gt;These recent releases include a fix allowing ARC to be run from a remote desktop connection without the need to modify the ads.ini file. You will no longer receive 5185 (&lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage9.1/mergedProjects/adserror/err5xxx/5185_ae_local_conn_restricted.htm" target="_blank"&gt;AE_LOCAL_CONN_RESTRICTED&lt;/a&gt;) errors when using local server ARC connections from a remote desktop session.&lt;/p&gt;  &lt;p&gt;Also, the changes to the Remote Management Utility I &lt;a href="http://jdmullin.blogspot.com/2009/03/advantage-data-architect-management.html" target="_blank"&gt;mentioned in this post&lt;/a&gt; in March are included in this update. You can now rearrange columns, sort and filter. You can also multi-select users to disconnect, and we added the option to disconnect users to the &amp;quot;Open Files&amp;quot; tab so you can see all users with a particular file open and disconnect all of them.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-5242471889661215794?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/62lQzZKDt7M" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T10:02:27.018-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/06/advantage-data-architect-update.html</feedburner:origLink></entry><entry><title type="text">Advantage Data Architect 9.10.0.9 Crashes</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/o6Utn9guco8/advantage-data-architect-91009-crashes.html" /><category term="ARC" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-06-03T10:02:12-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-1401397817427549635</id><content type="html">&lt;p&gt;I upgraded some third party components we use for the 9.10.0.9 release, and they seem to be causing more problems than they are fixing. Please keep sending in crash reports, just in case they are issues we are not already aware of. &lt;/p&gt;  &lt;p&gt;I'm hoping to have a fix released this week.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;ARC 9.10.0.11 was posted on June 3rd to fix these issues.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-1401397817427549635?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/o6Utn9guco8" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T10:02:12.363-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/06/advantage-data-architect-91009-crashes.html</feedburner:origLink></entry><entry><title type="text">Jump to a Column in the Advantage Data Architect</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JdWasHere/~3/JcCSC0acyVw/jump-to-column-in-advantage-data.html" /><category term="ARC" /><category term="Advantage" /><author><name>J.D. Mullin</name><email>noreply@blogger.com</email><uri>http://www.blogger.com/profile/07358042130535416073</uri></author><updated>2009-05-26T13:04:44-07:00</updated><id>tag:blogger.com,1999:blog-1672233813945040344.post-3355618549532228491</id><content type="html">&lt;p&gt;In the most recent service update of the Advantage Data Architect (version 9.10.0.9), you can now quickly jump to a specific column in a grid.&lt;/p&gt;  &lt;p&gt;The search can be activated by clicking the magnifying glass in the top left corner of the grid, by right-clicking and choosing &amp;quot;find column...&amp;quot; from the quick menu, or by using the keyboard shortcut CTRL-ALT-F.&lt;/p&gt;  

&lt;object width="600" height="400"&gt; &lt;param name="movie" value="http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/jingswfplayer.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/FirstFrame.jpg&amp;containerwidth=600&amp;containerheight=400&amp;loaderstyle=jing&amp;content=http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/2009-05-26_1344.swf"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="600" height="400" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/FirstFrame.jpg&amp;containerwidth=1004&amp;containerheight=800&amp;loaderstyle=jing&amp;content=http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/2009-05-26_1344.swf" allowFullScreen="true" base="http://content.screencast.com/users/jeremym1234/folders/Jing/media/c2026f6c-6df3-4163-be21-5204e7d96de1/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1672233813945040344-3355618549532228491?l=jdmullin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JdWasHere/~4/JcCSC0acyVw" height="1" width="1"/&gt;</content><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-26T13:04:44.577-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://jdmullin.blogspot.com/2009/05/jump-to-column-in-advantage-data.html</feedburner:origLink></entry></feed>

