<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Client Platform? Server Platform?</title>
	<atom:link href="http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/feed/" rel="self" type="application/rss+xml" />
	<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/</link>
	<description>Benji Smith, Software Research</description>
	<lastBuildDate>Mon, 23 Jan 2012 23:42:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Kevin Dahlhausen</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-143724</link>
		<dc:creator>Kevin Dahlhausen</dc:creator>
		<pubDate>Tue, 06 Jan 2009 12:00:17 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-143724</guid>
		<description>+1 for providing a simple C interface.  

I wouldn&#039;t worry about creating an OO facade via the DLL, in fact I would avoid that and let people creating any wrappers handle that.

My app is in python, but I could live with a simple C interface. +1 if there was a way to use the embedded library from a Mac.

I used a tool called &#039;swig&#039; (http://www.swig.org/) when I created python (and a co-contributer created Perl) wrappers for the Fast-Light Gui toolkit.  One set of files generates wrappers for many languages:

*  Tcl 8.0 and newer versions.
* Python 1.5 and newer.
* Perl 5.003 or newer.
* Guile 1.3.4 and newer. 
* Java JDK 1.1 and newer.
* Ruby.
* Mzscheme. 
* PHP
* Objective Caml (Ocaml) and Pike
* C# and the Chicken scheme 
* Allegro CL and Modula-3 
* Lua, CLISP and Common Lisp with UFFI 
* Common Lisp with CFFI 
* R 
* Octave 
* a JavaScript module for SWIG 
* D programming language  
* SWIGEiffel for Eiffel. 

So you could probably have  a big benefit on your hands for folks if you provided a solid swig interface file with your client library.

I&#039;m no longer interested in the other languages, so I now use a tool called Pyrex for creating python modules from C libraries because it is simpler to use.</description>
		<content:encoded><![CDATA[<p>+1 for providing a simple C interface.  </p>
<p>I wouldn&#8217;t worry about creating an OO facade via the DLL, in fact I would avoid that and let people creating any wrappers handle that.</p>
<p>My app is in python, but I could live with a simple C interface. +1 if there was a way to use the embedded library from a Mac.</p>
<p>I used a tool called &#8217;swig&#8217; (<a href="http://www.swig.org/" rel="nofollow">http://www.swig.org/</a>) when I created python (and a co-contributer created Perl) wrappers for the Fast-Light Gui toolkit.  One set of files generates wrappers for many languages:</p>
<p>*  Tcl 8.0 and newer versions.<br />
* Python 1.5 and newer.<br />
* Perl 5.003 or newer.<br />
* Guile 1.3.4 and newer.<br />
* Java JDK 1.1 and newer.<br />
* Ruby.<br />
* Mzscheme.<br />
* PHP<br />
* Objective Caml (Ocaml) and Pike<br />
* C# and the Chicken scheme<br />
* Allegro CL and Modula-3<br />
* Lua, CLISP and Common Lisp with UFFI<br />
* Common Lisp with CFFI<br />
* R<br />
* Octave<br />
* a JavaScript module for SWIG<br />
* D programming language<br />
* SWIGEiffel for Eiffel. </p>
<p>So you could probably have  a big benefit on your hands for folks if you provided a solid swig interface file with your client library.</p>
<p>I&#8217;m no longer interested in the other languages, so I now use a tool called Pyrex for creating python modules from C libraries because it is simpler to use.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gili Tzabari</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-108215</link>
		<dc:creator>Gili Tzabari</dc:creator>
		<pubDate>Tue, 17 Jun 2008 06:07:05 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-108215</guid>
		<description>I use Java on both the client and server end.

I self-host for now under Windows (Tomcat) but plan on migrating to a dedicated server in the future as the need arises.</description>
		<content:encoded><![CDATA[<p>I use Java on both the client and server end.</p>
<p>I self-host for now under Windows (Tomcat) but plan on migrating to a dedicated server in the future as the need arises.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitriy</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-108062</link>
		<dc:creator>Dmitriy</dc:creator>
		<pubDate>Mon, 16 Jun 2008 12:59:47 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-108062</guid>
		<description>.NET 2.0 (C#).
Considering using Qt for the next product.

Servers:
1. A bunch of local servers (Windows 2003, Solaris 10, Fedora 9, openSUSE 10.3) on VMWare Server and Microsoft Virtual Server).
2. Web hosting account with VERIO. Cannot install custom .exe&#039;s.
3. Virtual Server account (with full Admin privileges) with VPSLAND. Here, I *can* install my custom executables, - using Remote Desktop.

No, no Java yet. Might have to switch the current DBMS to Sun JavaDB (or, IBM Cloudscape, or Apache Derby) for the next release: if so, will need Java runtime then.</description>
		<content:encoded><![CDATA[<p>.NET 2.0 (C#).<br />
Considering using Qt for the next product.</p>
<p>Servers:<br />
1. A bunch of local servers (Windows 2003, Solaris 10, Fedora 9, openSUSE 10.3) on VMWare Server and Microsoft Virtual Server).<br />
2. Web hosting account with VERIO. Cannot install custom .exe&#8217;s.<br />
3. Virtual Server account (with full Admin privileges) with VPSLAND. Here, I *can* install my custom executables, &#8211; using Remote Desktop.</p>
<p>No, no Java yet. Might have to switch the current DBMS to Sun JavaDB (or, IBM Cloudscape, or Apache Derby) for the next release: if so, will need Java runtime then.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sohail</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107991</link>
		<dc:creator>Sohail</dc:creator>
		<pubDate>Mon, 16 Jun 2008 07:08:12 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107991</guid>
		<description>Ugh... I pulled a noob: XML in blog comment.. Sorry!</description>
		<content:encoded><![CDATA[<p>Ugh&#8230; I pulled a noob: XML in blog comment.. Sorry!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sohail</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107990</link>
		<dc:creator>Sohail</dc:creator>
		<pubDate>Mon, 16 Jun 2008 07:07:43 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107990</guid>
		<description>Just write a generator yourself. Say its driven from a api.xml file:


  
    
      Some doc here
    
    
      Some doc here
      Some doc here
      ...
  
   
  ...
  


So given the above Foo class, your C-API would look like:

// _1 b/c number of parameters (C doesn&#039;t allow overloading)
foo*
new_foo_1(int something);

void
delete_foo(foo * fooptr);

int
foo_bar_1(foo * fooptr, int some_param);

Should take you all about one day to write per language you want to target. Try C++ to start. I&#039;ve done this too many times to count.</description>
		<content:encoded><![CDATA[<p>Just write a generator yourself. Say its driven from a api.xml file:</p>
<p>      Some doc here</p>
<p>      Some doc here<br />
      Some doc here<br />
      &#8230;</p>
<p>  &#8230;</p>
<p>So given the above Foo class, your C-API would look like:</p>
<p>// _1 b/c number of parameters (C doesn&#8217;t allow overloading)<br />
foo*<br />
new_foo_1(int something);</p>
<p>void<br />
delete_foo(foo * fooptr);</p>
<p>int<br />
foo_bar_1(foo * fooptr, int some_param);</p>
<p>Should take you all about one day to write per language you want to target. Try C++ to start. I&#8217;ve done this too many times to count.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: benji</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107981</link>
		<dc:creator>benji</dc:creator>
		<pubDate>Mon, 16 Jun 2008 03:05:48 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107981</guid>
		<description>I&#039;m planning on an embeddable library with C bindings, but I&#039;m a little bit unsure about how to proceed.

I think most users of high level (and primarily object-oriented) languages will balk at an API that consists entirely of free functions. So the language-specific wrappers will almost certainly create an object-oriented facade around those functions.

But I&#039;m not really sure how to do that. Anyone have any tips? Maybe links to some articles describing a good set of techniques?</description>
		<content:encoded><![CDATA[<p>I&#8217;m planning on an embeddable library with C bindings, but I&#8217;m a little bit unsure about how to proceed.</p>
<p>I think most users of high level (and primarily object-oriented) languages will balk at an API that consists entirely of free functions. So the language-specific wrappers will almost certainly create an object-oriented facade around those functions.</p>
<p>But I&#8217;m not really sure how to do that. Anyone have any tips? Maybe links to some articles describing a good set of techniques?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sohail</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107979</link>
		<dc:creator>Sohail</dc:creator>
		<pubDate>Mon, 16 Jun 2008 02:41:22 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107979</guid>
		<description>Focus on one and you&#039;re unnecessarily cutting people off. If I have learnt anything in my short time here, platforms are difficult to predict but every platform from now till the machines achieve sentience will need to interface with C.

Write a C dll which does all the work, export nicely to each language, profit. Feel free to use .NET behind the scenes though.</description>
		<content:encoded><![CDATA[<p>Focus on one and you&#8217;re unnecessarily cutting people off. If I have learnt anything in my short time here, platforms are difficult to predict but every platform from now till the machines achieve sentience will need to interface with C.</p>
<p>Write a C dll which does all the work, export nicely to each language, profit. Feel free to use .NET behind the scenes though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107958</link>
		<dc:creator>Doug</dc:creator>
		<pubDate>Sun, 15 Jun 2008 23:13:16 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107958</guid>
		<description>Desktop app is C++ with MFC.  Server is a custom server built using C++ (also Windows only).  Some day it might integrate with PHP but right now it uses simple templates.</description>
		<content:encoded><![CDATA[<p>Desktop app is C++ with MFC.  Server is a custom server built using C++ (also Windows only).  Some day it might integrate with PHP but right now it uses simple templates.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yanic</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107952</link>
		<dc:creator>Yanic</dc:creator>
		<pubDate>Sun, 15 Jun 2008 22:06:00 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107952</guid>
		<description>Using java for a cross-platform development tool - an editor for UML sequence diagrams, check my link.</description>
		<content:encoded><![CDATA[<p>Using java for a cross-platform development tool &#8211; an editor for UML sequence diagrams, check my link.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jon Lundberg</title>
		<link>http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/comment-page-1/#comment-107943</link>
		<dc:creator>Jon Lundberg</dc:creator>
		<pubDate>Sun, 15 Jun 2008 21:07:58 +0000</pubDate>
		<guid isPermaLink="false">http://benjismith.net/index.php/2008/06/15/client-platform-server-platform/#comment-107943</guid>
		<description>I&#039;m currently using WTL, but that is likely to change to C#/.NET 3.X for my next project.

Server side I&#039;m using a shared LAMP host.  I&#039;d consider Wordpress as a benchmark for accessibility and ease of install.</description>
		<content:encoded><![CDATA[<p>I&#8217;m currently using WTL, but that is likely to change to C#/.NET 3.X for my next project.</p>
<p>Server side I&#8217;m using a shared LAMP host.  I&#8217;d consider Wordpress as a benchmark for accessibility and ease of install.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

