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

<channel>
	<title>APF</title>
	<atom:link href="http://apfwork.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://apfwork.org</link>
	<description></description>
	<lastBuildDate>Thu, 15 Dec 2011 12:50:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Download</title>
		<link>http://apfwork.org/?p=179</link>
		<comments>http://apfwork.org/?p=179#comments</comments>
		<pubDate>Fri, 09 Dec 2011 12:12:50 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://apfwork.org/?p=179</guid>
		<description><![CDATA[APF Canvas Source code download link Binaries with Installation Setup will be uploaded soon.. How to make APF Canvas run : Install Eclipse IDE for Java Developers (soon APF will be independent of Eclipse) From &#8220;Help &#62; Install New Software&#8221; &#8230; <a href="http://apfwork.org/?p=179">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>APF Canvas</h2>
<p><a href="/downloads/APF-Canvas.zip">Source code download link</a></p>
<p>Binaries with Installation Setup will be uploaded soon..</p>
<p>How to make APF Canvas run :</p>
<ol>
<li>Install <a href="http://www.eclipse.org/downloads/">Eclipse IDE</a> for Java Developers (soon APF will be independent of Eclipse)</li>
<li>From &#8220;Help &gt; Install New Software&#8221; menu, install &#8216;<a href="http://eclipse.org/gef/updates/index.php">Graphical Editing Framework</a>&#8216;</li>
<li>Run APF Source code in your Eclipse IDE</li>
<li>Search for Code Abstracts from searchbox in right, or browse for <a href="http://apfwork.org/?p=22">Code Abstracts</a> from your machine</li>
</ol>
<h2>APF Assembler</h2>
<p><a href="/downloads/apf-assembler.py">Source code download link</a></p>
<p>Binaries with Installation Setup will be uploaded soon..</p>
<p>How to run APF Assembler :</p>
<ol>
<li>Save output from APF Canvas on your local hardisk</li>
<li>Supply input of Canvas file to Assembler by typing path of Canvas output file in source code of Assmembler.py</li>
<li>Run Assembler.py and watch it generate the code in path specified inside it</li>
</ol>
<h1>Credits</h1>
<p>(in alphabetical order): Bhupinder Bisht, Mohammad Khalid, Ravinder Singh Sandhu, Tarsem Singh, Tushar Goswami</p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=179</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why APF</title>
		<link>http://apfwork.org/?p=176</link>
		<comments>http://apfwork.org/?p=176#comments</comments>
		<pubDate>Fri, 09 Dec 2011 11:57:46 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://apfwork.org/?p=176</guid>
		<description><![CDATA[Why APF? Existing attempts in Automatic Programming field have been through Code Generators, Domain Specific Languages (DSL), and Language Workbenches. Problem with Code Generators : You have to use &#8216;a different&#8217; code generator for every domain. This makes automation very &#8230; <a href="http://apfwork.org/?p=176">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1>Why APF?</h1>
<p style="margin-bottom: 0.625em;">Existing attempts in Automatic Programming field have been through <a href="http://en.wikipedia.org/wiki/Comparison_of_code_generation_tools">Code Generators</a>, <a href="http://en.wikipedia.org/wiki/Domain-specific_language">Domain Specific Languages</a> (DSL), and <a href="http://martinfowler.com/articles/languageWorkbench.html">Language Workbenches</a>.</p>
<ul style="font-size: 12px; list-style: none;">
<li><span><strong>Problem with Code Generators :</strong></span>
<p>You have to use &#8216;a different&#8217; code generator for every domain. This makes automation very limited. Soon when using a Code Generator, you realize that you must write rest of the code by yourself. So for example if you are auto coding a video game software using some popular game code generator, you easily saved lots of time. But now you wanted this video game to do some serious database handling, but this video game code generator isn&#8217;t as powerful as a separate code generator which specializes in code generation for database management. Even if you use a database management code generator, you cannot fuse the code generated by these 2 generators together. Hence the limited automation</li>
<li><strong>Drawbacks of DSL :</strong>
<p>Like Code Generators, DSLs have similar problem. Two DSLs developed by 2 different organizations may not automatically integrate together. Though DSLs are better than Code Generators as you don’t have to learn a generic programming language (such as C++, or .NET) to make your game. Rather the <a href="http://en.wikipedia.org/wiki/Reserved_word">reserved keywords</a> of DSL are named in such an easy manner that if you know the domain (say &#8216;game programming concepts&#8217; such as collision detection), you will find the Domain Specific Language familiar &#8211; and easy to grasp. But thats still not as simple as APF which lets you type requirements of your software in plain english (with sentences and punctuation) &amp; build your software</li>
<li><strong>Drawbacks of Language Workbenches :</strong><br />
Language Workbenches produce Domain Specific Languages. Learning curve is significant if you want to create new DSL. Learning curve is also involved in using a DSL because each DSL has a fresh new naming of reserved keywords. You cannot build software by typing simple to understand English sentences. Also, DSL programming is done typically for larger domains (such as voice synthesis, database management) than for niche domains (such as &#8216;windows registry manipulation&#8217; or &#8216;common calculations in dentistry&#8217; or &#8216;common functions in internet marketing&#8217;) because creating a dedicated programming language rich with reserved keywords may not make sense for a domain is small &amp; requires only half a dozen functions. Vacuum of lots of such niche domains results in a limited automation, with reasonable chances that you will need to code rest portion of your code on your own by using generic programming language</li>
</ul>
<p><strong>How is APF different :</strong></p>
<ol>
<li>Less Learning curve for programmers: learning curve may be less for programmers because <a href="/?p=22">a brief page</a> explains them how their code can become auto integrateable.</li>
<li>Less Learning curve for power users: no need to learn reserved keywords to program your software. Describe your software in plain English like <a>in a demonstration here</a> and auto code your software</li>
<li>Support for niche domains: Because converting even a slightest snippet of code into auto integrateable code is easy, and APF accepts contribution from anyone and everyone in its central repository (with loose moderation but tight ratings), hence APF has more chances to auto code niche functions such as &#8216;windows registry manipulations, or common dentistry functions, or any other function which are rare in domain specific languages or code generator packages</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=176</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Example software generated using APF so far</title>
		<link>http://apfwork.org/?p=174</link>
		<comments>http://apfwork.org/?p=174#comments</comments>
		<pubDate>Fri, 09 Dec 2011 11:51:20 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://apfwork.org/?p=174</guid>
		<description><![CDATA[APF has successfully shipped some real life software. Few include : Installer for LetoDMS RSS Feed Aggregator and Twitter poster (source will be uploaded soon) Feature additions of Version 0.2 of APF Canvas (the repository search box in APF Canvas. &#8230; <a href="http://apfwork.org/?p=174">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>APF has successfully shipped some real life software. Few include :</p>
<ol>
<li><a href="http://apfwork.org/examples-generated/letodms_installer(dot)php.txt">Installer for LetoDMS</a></li>
<li>RSS Feed Aggregator and Twitter poster (source will be uploaded soon)</li>
<li>Feature additions of Version 0.2 of APF Canvas (the repository search box in APF Canvas. source will be uploaded soon)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=174</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Submit Code</title>
		<link>http://apfwork.org/?p=170</link>
		<comments>http://apfwork.org/?p=170#comments</comments>
		<pubDate>Fri, 09 Dec 2011 11:34:49 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://apfwork.org/?p=170</guid>
		<description><![CDATA[3 steps to submit your code : Metacode your re-useable code Test your metacode using APF Canvas Make your submission live Or, if you dont have code you can create a wiki page of it, so that someone else posts &#8230; <a href="http://apfwork.org/?p=170">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>3 steps to submit your code :</strong></p>
<ol>
<li><a href="http://apfwork.org/?p=22">Metacode</a> your re-useable code</li>
<li>Test your metacode using <a href="http://apfwork.org/?p=179">APF Canvas</a></li>
<li><a href="http://community.apfwork.org">Make your submission</a> live</li>
</ol>
<p>Or, if you dont have code you can create a wiki page of it, so that someone else posts code against it.</p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=170</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Report of how efficiency of APF increases with increase in repository</title>
		<link>http://apfwork.org/?p=127</link>
		<comments>http://apfwork.org/?p=127#comments</comments>
		<pubDate>Fri, 16 Sep 2011 22:27:44 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=127</guid>
		<description><![CDATA[Under construction..]]></description>
			<content:encoded><![CDATA[<p>Under construction..</p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=127</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Existing auto programming attempts, &amp; how APF contrasts with each of them</title>
		<link>http://apfwork.org/?p=121</link>
		<comments>http://apfwork.org/?p=121#comments</comments>
		<pubDate>Fri, 16 Sep 2011 22:07:49 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=121</guid>
		<description><![CDATA[Under Construction]]></description>
			<content:encoded><![CDATA[<p>Under Construction</p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=121</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>auto integrate walk through</title>
		<link>http://apfwork.org/?p=118</link>
		<comments>http://apfwork.org/?p=118#comments</comments>
		<pubDate>Fri, 16 Sep 2011 22:01:27 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=118</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=118</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What qualifies as source code unit</title>
		<link>http://apfwork.org/?p=116</link>
		<comments>http://apfwork.org/?p=116#comments</comments>
		<pubDate>Fri, 16 Sep 2011 21:58:51 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=116</guid>
		<description><![CDATA[(Rough draft) Any portion of code which is re-used. This can be a small function, or a single line of code, or a bunch of several modules containing lots of code. Any such portion of code qualifies to be a &#8230; <a href="http://apfwork.org/?p=116">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>(Rough draft)</h2>
<p>Any portion of code which is re-used. This can be a small function, or a single line of code, or a bunch of several modules containing lots of code. Any such portion of code qualifies to be a &#8216;code unit&#8217; and can be submitted in APF if it can be re-used in a larger software.</p>
<p>Read more on <a href="/?p=22" title="Metacoding in detail">&#8216;How Metacoding works&#8217;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=116</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get Involved</title>
		<link>http://apfwork.org/?p=107</link>
		<comments>http://apfwork.org/?p=107#comments</comments>
		<pubDate>Fri, 16 Sep 2011 21:38:52 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=107</guid>
		<description><![CDATA[Planning phase : Critique or agree with approach of metacoding and assembling code units, to form larger software Prepare atleast 10 more walkthroughs where some software is built by assembling smaller code units Efficiency of APF improves as repository of &#8230; <a href="http://apfwork.org/?p=107">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Planning phase :</p>
<ol>
<li>Critique or agree with approach of <a href="/?p=22" title="metacoding" target="_blank">metacoding</a> and <a href="/?p=29" title="assembling" target="_blank">assembling</a> code units, to form larger software</li>
<li>Prepare atleast 10 more <a href="/?p=29" title="assembling" target="_blank">walkthroughs</a> where some software is built by assembling smaller code units</li>
<li>Efficiency of APF improves as repository of APF increases. Prepare <a href="/?p=127" title="assembling" target="_blank">report</a> of &#8216;How many code units must repository contain to auto code a typical software&#8217;</li>
</ol>
<p>Development phase :</p>
<ol start=4>
<li>Ship first version of Assembler CASE tool, repository server, Metacoding IDE plugins</li>
<li>Identify code units which are in most demand, metacode them for submission in APF repository</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=107</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demo of how a real project is assembled with APF</title>
		<link>http://apfwork.org/?p=29</link>
		<comments>http://apfwork.org/?p=29#comments</comments>
		<pubDate>Fri, 16 Sep 2011 11:20:53 +0000</pubDate>
		<dc:creator>Tushar Goswami</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://playground.wickedleo.com/projects/APF/?p=29</guid>
		<description><![CDATA[In this demo, we would watch how small code units once metacoded can be used to &#8216;automatically assemble&#8217; a larger software. For the sake of this demo, the software we would try to auto build is pretty &#8216;simple&#8217;. This small &#8230; <a href="http://apfwork.org/?p=29">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In this demo, we would watch how small code units once metacoded can be used to &#8216;automatically assemble&#8217; a larger software. For the sake of this demo, the software we would try to auto build is pretty &#8216;simple&#8217;. This small software was requested on an open source community forum &#8211; from volunteer programmers. Lets start</p>
<p><span style="text-decoration: underline;">The Project:</span><br />
<em><strong>Installation script for LetoDMS</strong></em><br />
There is this open source &#8216;Document Management Software&#8217; called <a href="http://www.letodms.com/">LetoDMS</a>. At the time of writing of this article, there is no installation script to install LetoDOMS. So to install LetoDMS on your machine, user has to manually perform several installation steps listed here. A LetoDMS user posted on forum requesting volunteers to develop a simple script which performs the installation steps described in here</p>
<p style="margin-bottom: 0px;"><span style="text-decoration: underline;">Our Ingredients &amp; Tools:</span><br />
that we would use to auto code this installation script :</p>
<ol>
<li><strong>Various code units which were <a href="/?p=22">metacoded</a> and contributed by community</strong>. These code units (written by a programmer) when assembled together would build our installation script.</li>
<li><strong>Assembler tool which reads metacode of code units, to help power user automatically assemble them together</strong>. Rather than a programmer, now using the Assembler tool &#8211; a power user can assemble the code units to build our installation script.</li>
</ol>
<p>Lets first look at our ingredient &#8216;code units&#8217; described on #1 above. Later on, we will walkthrough the &#8216;Assembler Tool&#8217; described in #2 above.</p>
<p>Lets enumerate the code units, which our repository must possess in order to auto build the LetoDMS installer script. We can enumerate these code units by analyzing &#8216;manual installation guide of LetoDMS&#8217;. Below on the left, we have copy pasted the installation steps of LetoDMS. On the right, I have written comments against each manual installation step &#8211; describing the code unit our ADF repository must have so that a power user is able to pick that code unit from repo, and assemble it with other code units to auto code the installation script :</p>
<p><iframe style="border: 1px solid #dddddd;" src="http://crocodoc.com/AMGlLH7?embedded=true" width="100%" height="600"></iframe></p>
<p>We have listed 8 code units above &#8211; which would be contributed by programmers in APF repository. Let us now walkthrough the Assembler IDE to see how a power user would search above 8 code units from repository, and assemble them together to auto code the installer </p>
<p style="margin-bottom:0px;"><span style="text-decoration: underline;">Walkthrough of Assembler IDE</span></p>
<p>The first thing Power User wants in his installer script is to create a web form which prompts user for inputs necessary to perform installation of LetoDMS. He wants his web form to look like the figure below:<br />Fig1.screenshot of a fully developed web form</p>
<p><img src="/wp-content/uploads/2011/09/InputForm.png" alt="" title="InputForm" width="656" height="406" class="alignleft size-full wp-image-74" /></p>
<div style="clear:both;"></div>
<p>This would meet requirement #7 listed in requirements document above. To create this web form, Power User searches in APF code repository for keyword &#8216;create form&#8217; and following search results are shown : <br />Figure 2.screenshot of search result page</p>
<p><img src="/wp-content/uploads/2011/09/Searchresult.png" alt="" title="Searchresult" width="598" height="427" class="alignleft size-full wp-image-76" /></p>
<div style="clear:both;"></div>
<p>From this screen, Power User chooses &#8216;create web form&#8217; code unit. This code unit is drawn on Assembler Canvas &#8211; like shown in figure below :<br />Figure3.Screenshot of assembler ide with &#8216;create new web form&#8217; code unit placed </p>
<p><img src="/wp-content/uploads/2011/09/codeunit.png" alt="" title="codeunit" width="500" height="550" class="alignleft size-full wp-image-79" /></p>
<div style="clear:both;"></div>
<p>Dropping the code unit on canvas prompts power user to supply inputs which were needed for &#8216;create web form&#8217; code unit to work. These inputs are determined by assembler IDE by parsing the metacode of code unit. Power User can supply these inputs by either connecting output of some other code unit with these inputs, or by typing some input manually. </p>
<p>To create form like in fig1, power user starts typing name of each text field as input against &#8216;create web form&#8217; code unit placed on canvas. On supplying the text field names, the code unit starts exposing its Outputs like in fig4. These outputs contain value typed in text fields by end user<br />
Figure4. screenshot of outputs exposed by code unit</p>
<p><img src="/wp-content/uploads/2011/09/exposed.png" alt="" title="exposed" width="501" height="600" class="alignleft size-full wp-image-82" /></p>
<div style="clear:both;"></div>
<p>Power user has now finished prompting end user with input form &#038; collected information of user such as DB Name, DB Username, and  DB Password. The power user is now ready to connect to database and execute the SQL statement (as in requirement #4). For this the power user searches for &#8216;execute sql&#8217; keyword in APF repository, picks a code unit which connects to a database and executes a sql query. When this code unit is dropped on canvas, it appears as below<br /> Figure5. Screenshot of &#8216;Execute SQL Statement&#8217; code unit dropped on canvas</p>
<p><img src="/wp-content/uploads/2011/09/SQL.png" alt="" title="SQL" width="950" height="900" class="alignleft size-full wp-image-98" /></p>
<div style="clear:both;"></div>
<p>When placing this new code unit on canvas, power user specifies that he wants to call this code unit on &#8216;submit button click&#8217; event of &#8216;create web form&#8217;. The list of events appearing under &#8216;create web form&#8217; code unit were determined by assembler IDE by parsing the metacode of code unit. </p>
<p>Several of the inputs required by &#8216;execute sql query&#8217; code unit are actually the outputs returned by &#8216;create web form&#8217; code unit. So power user &#8220;connects&#8221; the outputs of &#8216;create web form&#8217; code unit with inputs of &#8216;execute sql query&#8217; code unit as below :<br />Figure7. Screenshot of inputs n outputs connected together </p>
<p><img src="/wp-content/uploads/2011/09/SQL2.png" alt="" title="SQL2" width="950" height="700" class="alignleft size-full wp-image-100" /></p>
<div style="clear:both;"></div>
<p>This process of :</p>
<ul>
<li>searching for code units</li>
<li>connecting inputs outputs of code units</li>
<li>assigning execution of a code unit under event of other code unit</li>
</ul>
<p>is repeated until power user draws the entire installer script on Assembler IDE canvas and meets 8 requirements of project like below :</p>
<p><a href="/wp-content/uploads/2011/09/EntireCanvas.png"><img src="/wp-content/uploads/2011/09/EntireCanvas-1024x438.png" alt="" title="EntireCanvas" width="1024" height="349" class="aligncenter size-large wp-image-101" /></a></p>
<div style="clear:both;"></div>
<p>The notable thing here is that Assembler IDE was tightly following the metacode of code units and :</p>
<ul>
<li>alerting power user when he would try to connect incompatible inputs with outputs</li>
<li>preferring those code units in search results which have past record of &#8216;getting integrated&#8217; with code units on canvas</li>
<li>preferring those code units in search results which have inputs/outputs compatible with inputs/outputs of code units on canvas</li>
</ul>
<p>This process also attains the benefits of <a href="/">Why APF</a></p>
]]></content:encoded>
			<wfw:commentRss>http://apfwork.org/?feed=rss2&#038;p=29</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
