<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[[SoftRatty] tag: readable]]></title>
    <link>http://www.softratty.com/tag/readable</link>
    <description></description>
    <pubDate>Mon, 17 Nov 2008 17:48:00 +0000</pubDate>
    <generator>iRatty Engine</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Coreboot 3782 (Default branch)]]></title>
      <link>http://www.softratty.com/article/169c4ca75e2457f291b751315c1096ba</link>
      <guid>http://www.softratty.com/article/169c4ca75e2457f291b751315c1096ba</guid>
      <description><![CDATA[Coreboot (formerly known as LinuxBIOS) is a project that aims to replace the normal BIOS with a little bit of hardware initialization and a payload. Payloads can include a compressed Linux kernel,...]]></description>
      <content:encoded><![CDATA[Coreboot (formerly known as LinuxBIOS) is a project that aims to replace the normal BIOS with a little bit of hardware initialization and a payload. Payloads can include a compressed Linux kernel, FILO, GRUB2, OpenBIOS, Open Firmware, SmartFirmware, GNUFI (UEFI), Etherboot, ADLO (for booting Windows and OpenBSD), Plan 9, or memtest86. 
<hr />
<strong>License:</strong> GNU General Public License (GPL)
<hr />
<strong>Changes:</strong><br />
Support was added for the LiPPERT Cool
RoadRunner-LX embedded PC/104 board and the
SST25VF080B and SST25VF032B flash chips. AMD/ATI
SB600 southbridge SPI was added. Intel 810 code
clean-ups and enhancements were made, including
support for multiple DIMMs, both single-sided and
double-sided, as well as most combinations
thereof. msrtool was enhanced to decode MSRs and
print the value of every field in human readable
form. Atmel AT25F512A supported commands were
extended.<br style="clear: both;"/>
<a href="http://www.pheedo.com/click.phdo?s=394888fbd0d81c5173d358b38538ce92&p=1"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.com/img.phdo?s=394888fbd0d81c5173d358b38538ce92&p=1"/></a>
<img src="http://www.pheedo.com/feeds/tracker.php?i=394888fbd0d81c5173d358b38538ce92" style="display: none;" border="0" height="1" width="1" alt=""/>


]]></content:encoded>
      <pubDate>Sun, 30 Nov 2008 08:53:41 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/public license">public license</category>
      <category domain="http://www.softratty.com/tag/human readable form">human readable form</category>
      <category domain="http://www.softratty.com/tag/sst25vf032b flash chips">sst25vf032b flash chips</category>
      <category domain="http://www.softratty.com/tag/license">license</category>
      <category domain="http://www.softratty.com/tag/lippert cool roadrunner-lx">lippert cool roadrunner-lx</category>
      <category domain="http://www.softratty.com/tag/hardware initialization">hardware initialization</category>
      <category domain="http://www.softratty.com/tag/normal bios">normal bios</category>
      <category domain="http://www.softratty.com/tag/combinations thereof">combinations thereof</category>
      <category domain="http://www.softratty.com/tag/coreboot">coreboot</category>
      <source url="http://www.pheedo.com/click.phdo?i=394888fbd0d81c5173d358b38538ce92">Coreboot 3782 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[E-Invoicing Made E-asy: LiveCycle & PDF to the Rescue ]]></title>
      <link>http://www.softratty.com/article/95b6bdcc8ba3f5e7f7b3806567b0097c</link>
      <guid>http://www.softratty.com/article/95b6bdcc8ba3f5e7f7b3806567b0097c</guid>
      <description><![CDATA[No matter how far technology has reached into our personal and professional lives, it seems we just cant get rid of paper cluttering our desks, folders, and cabinets. Despite the ubiquity of PDF...]]></description>
      <content:encoded><![CDATA[<p>No matter how far technology has reached into our personal  and professional lives, it seems we just can&rsquo;t get rid of paper cluttering our  desks, folders, and cabinets.  Despite  the ubiquity of PDF documents and ever-increasing use of the web and computers  for banking and commerce, the bill, statement and invoice still rule the roost  when it comes to  sheer volume of paper.   (OK, next to junk mail, but...)</p>
<p>This problem is exacerbated in the European Union where the  requirement to document and validate value-added taxes (VAT)  results in the creation and  exchange of over 30 billion invoices every year, at an estimated cost of €30  per invoice.  Add to that staggering cost environmental  pressures to &ldquo;go green&rdquo; and reduce waste.   Add to that the loss in business agility resulting from delivery times  and internal routing.  And then add to that  the human errors attendant with the transposition of data from these paper  documents to electronic systems, which can cost over €100 per incident.  Facing a global economic recession, the  benefits of moving to electronic, or e-, invoicing systems are real:  expected cost reductions on the order of 80%!</p>
<p>The EU acted in 2001  to harmonize  invoicing legislation and encourage the use of e-invoicing across all 25 EU  member states (<a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2002:015:0024:0028:EN:PDF">Council  Directive 2001/115/EC</a> ).  These  regulations mandated a common set of master data fields in addition to the use of technologies  to better manage the integrity and authenticity of invoice content.  Yet even with this harmonization framework,  there are still over 200 e-invoicing systems in place all over Europe, making it  very difficult to exchange electronic invoices across national borders.  Given this  challenge, the <a href="http://www.cen.eu/CENORM/businessdomains/businessdomains/isss/activity/einvoicing_2.asp">CEN/ISSS  Workshop on Compliance of eInvoices</a> works to create standards and best  practices for a more universal solution that can be implemented on a broader scale  and provide for improved accessibility, efficiency, and cost-savings.  </p>
<p>A solution based on the  PDF file format (<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=45873">ISO  32000</a>) and <a href="http://www.adobe.com/products/livecycle/">Adobe LiveCycle ES </a> is a good example of those best practices in action.  LiveCycle Enterprise Suite is built  on open standards like PDF and XML.  LiveCycle ES can also protect integrity with  digital signatures; import data into a PDF document; archive those  documents with the <a href="http://www.iso.org/iso/catalogue_detail?csnumber=38920">ISO ratified  PDF/A format</a>; distribute and then also process, verify, and validate e-invoices  on the way back in.</p>
<p><img src="http://blogs.adobe.com/security/clip_image002.gif" alt="Adobe_eInvoicing Architecture.png" width="533" height="400" /></p>
<p>Nick Pope, Technical Editor of the CEN/ISSS Workshop on  Compliance of eInvoices, had this to say about the solution:  &ldquo;By combining two de-facto standards – XML for  data portability and PDF for human readable documents – with the power of  digital signatures, intelligent PDF supports trading between virtually any two  partners with fidelity and easy accessibility.&rdquo;</p>
<p>E-invoicing systems based on LiveCycle ES have already been  successfully deployed by several organizations.  <a href="http://www.adobe.com/cfusion/showcase/index.cfm?event=casestudydetail&amp;casestudyid=380422&amp;loc=en_us">Poste  Italiane</a> estimates that more than 1.5 million pages have been converted to  digital resulting in substantial cost savings.  <a href="http://www.adobe.com/cfusion/showcase/index.cfm?event=casestudydetail&amp;casestudyid=165304&amp;loc=en_us">Cuatrecasas</a>,  Spain&rsquo;s second largest law firm, has reduced invoicing costs by thousands of  euros annually.  And Europcar leveraged  e-invoicing to not only reduce costs but also improve interoperability with  their clients' ERP systems, enhancing the customer experience.</p>
<p>To read more about Adobe&rsquo;s e-invoicing solutions using  PDF and LiveCycle ES, please  read the whitepaper, <a href="http://www.adobe.com/devnet/livecycle/pdfs/lc_eInvoicing_wp_ie.pdf">&ldquo;Applying  best practices for secure, automated electronic invoicing.&rdquo;</a> </p>
<p>Other links:</p>
<ul>
  <li><a href="http://www.e-invoice-gateway.net/">E-Invoice  Gateway</a></li>
  <li><a href="http://www.adobe.com/products/livecycle/digitalsignatures/">LiveCycle  Digital Signatures</a> <br/>
  </li>
</ul>
<!-- #BeginTags -->
<p class="tags">Tags:<a href="http://www.technorati.com/tag/Adobe" rel="tag">Adobe</a>,<a href="http://www.technorati.com/tag/e-invoicing" rel="tag">e-invoicing</a>,<a href="http://www.technorati.com/tag/digital signature" rel="tag">digital signature</a>,<a href="http://www.technorati.com/tag/electronic signature" rel="tag">electronic signature</a>,<a href="http://www.technorati.com/tag/LiveCycle" rel="tag">LiveCycle</a>,<a href="http://www.technorati.com/tag/PDF" rel="tag">PDF</a></p>
<!-- #EndTags -->
]]></content:encoded>
      <pubDate>Sat, 29 Nov 2008 06:28:41 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/livecycle">livecycle</category>
      <category domain="http://www.softratty.com/tag/pdf">pdf</category>
      <category domain="http://www.softratty.com/tag/digital signatures">digital signatures</category>
      <category domain="http://www.softratty.com/tag/digital">digital</category>
      <category domain="http://www.softratty.com/tag/adobe">adobe</category>
      <category domain="http://www.softratty.com/tag/adobe livecycle">adobe livecycle</category>
      <category domain="http://www.softratty.com/tag/pdf document">pdf document</category>
      <category domain="http://www.softratty.com/tag/document">document</category>
      <category domain="http://www.softratty.com/tag/systems">systems</category>
      <source url="http://blogs.adobe.com/security/2008/11/einvoicing_made_easy_livecycle.html">E-Invoicing Made E-asy: LiveCycle &amp; PDF to the Rescue </source>
    </item>
    <item>
      <title><![CDATA[SchemaCrawler 6.0.2 (Default branch)]]></title>
      <link>http://www.softratty.com/article/d057a2b372b72694ccbd81d858ef2c6a</link>
      <guid>http://www.softratty.com/article/d057a2b372b72694ccbd81d858ef2c6a</guid>
      <description><![CDATA[SchemaCrawler is a platform (OS and database) independent command line tool to output your database schema and data in a readable form. The output is designed to be diff-ed with previous versions of...]]></description>
      <content:encoded><![CDATA[SchemaCrawler is a platform (OS and database)
independent command line tool to output your
database schema and data in a readable form. The output is designed to be diff-ed with previous versions of your database schema. SchemaCrawler is also an API that improves on standard JDBC metadata.
<hr />
<strong>License:</strong> GNU Lesser General Public License (LGPL)
<hr />
<strong>Changes:</strong><br />
This release fixes an issue with MySQL schemas.<br style="clear: both;"/>
<a href="http://www.pheedo.com/click.phdo?s=6d0607a22f0c4f5ae7c626d56483c876&p=1"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.com/img.phdo?s=6d0607a22f0c4f5ae7c626d56483c876&p=1"/></a>
<img src="http://www.pheedo.com/feeds/tracker.php?i=6d0607a22f0c4f5ae7c626d56483c876" style="display: none;" border="0" height="1" width="1" alt=""/>

]]></content:encoded>
      <pubDate>Sat, 29 Nov 2008 04:02:23 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/database schema">database schema</category>
      <category domain="http://www.softratty.com/tag/database">database</category>
      <category domain="http://www.softratty.com/tag/schemacrawler">schemacrawler</category>
      <category domain="http://www.softratty.com/tag/standard jdbc metadata">standard jdbc metadata</category>
      <category domain="http://www.softratty.com/tag/public license">public license</category>
      <category domain="http://www.softratty.com/tag/license">license</category>
      <category domain="http://www.softratty.com/tag/mysql schemas">mysql schemas</category>
      <category domain="http://www.softratty.com/tag/readable form">readable form</category>
      <category domain="http://www.softratty.com/tag/output">output</category>
      <source url="http://www.pheedo.com/click.phdo?i=6d0607a22f0c4f5ae7c626d56483c876">SchemaCrawler 6.0.2 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[Agenda XML 0.1.17 (Default branch)]]></title>
      <link>http://www.softratty.com/article/fb1e240a04db943aa7824682db8ba5b3</link>
      <guid>http://www.softratty.com/article/fb1e240a04db943aa7824682db8ba5b3</guid>
      <description><![CDATA[Agemda XML is a simple project time tracker for Gnome and Kde. It places itself in the notification bar and keeps data in a readable XML file in the user's home...]]></description>
      <content:encoded><![CDATA[<img src="http://c.fsdn.com/fm/screenshots/71109_thumb.png"
     align="right" alt="Screenshot" hspace="10" vspace="10">
Agemda XML is a simple project time tracker for
Gnome and Kde. It places
itself in the notification bar and keeps data in a
readable XML file in
the user's home directory.<br style="clear: both;"/>
<a href="http://www.pheedo.com/click.phdo?s=a27980352598dacd960bb1279ff715ea&p=1"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.com/img.phdo?s=a27980352598dacd960bb1279ff715ea&p=1"/></a>
<img src="http://www.pheedo.com/feeds/tracker.php?i=a27980352598dacd960bb1279ff715ea" style="display: none;" border="0" height="1" width="1" alt=""/>


]]></content:encoded>
      <pubDate>Fri, 28 Nov 2008 13:45:00 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/readable xml file">readable xml file</category>
      <category domain="http://www.softratty.com/tag/notification bar">notification bar</category>
      <category domain="http://www.softratty.com/tag/home directory">home directory</category>
      <category domain="http://www.softratty.com/tag/agemda xml">agemda xml</category>
      <category domain="http://www.softratty.com/tag/gnome">gnome</category>
      <category domain="http://www.softratty.com/tag/user">user</category>
      <category domain="http://www.softratty.com/tag/data">data</category>
      <category domain="http://www.softratty.com/tag/kde">kde</category>
      <source url="http://www.pheedo.com/click.phdo?i=a27980352598dacd960bb1279ff715ea">Agenda XML 0.1.17 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[Form Design Code Review]]></title>
      <link>http://www.softratty.com/article/913722973fae6a6be8e692007b70dee3</link>
      <guid>http://www.softratty.com/article/913722973fae6a6be8e692007b70dee3</guid>
      <description><![CDATA[A while ago I was asked to code review a customer form. I enjoy doing this in order to get an understanding of what customers are trying to do with their forms and where their pain points are. In this...]]></description>
      <content:encoded><![CDATA[<p>A while ago I was asked to code review a customer form.&#160; I enjoy doing this in order to get an understanding of what customers are trying to do with their forms and where their pain points are.&#160; In this case, I wanted to share some of the code review on my blog so that others can learn from the experience.&#160; This post is a miscellaneous collection of XFA scripting suggestions arising from one customer form.</p>  <h3>Repetitive Code</h3>  <p>The form had a large block of script that executed before print that looked like:</p>  <blockquote>   <p><font face="Courier New">if (Page1.InvestProdSupp.InvestProdSupp1.MplsInd.rawValue == 0)        <br />&#160;&#160; {Page1.InvestProdSupp.presence = &quot;hidden&quot;;}         <br />&#160;&#160; else         <br />&#160;&#160; {Page1.InvestProdSupp.presence = &quot;visible&quot;;}         <br />        <br />if (Page1.CompMan.CompMan1.MplsInd.rawValue == 0)         <br />&#160;&#160; {Page1.CompMan.presence = &quot;hidden&quot;;}         <br />&#160;&#160; else         <br />&#160;&#160; {Page1.CompMan.presence = &quot;visible&quot;;}         <br />        <br />if (Page1.Oversight.Oversight1.MplsInd.rawValue == 0)         <br />&#160;&#160; {Page1.Oversight.presence = &quot;hidden&quot;;}         <br />&#160;&#160; else         <br />&#160;&#160; {Page1.Oversight.presence = &quot;visible&quot;;}         <br />...</font></p> </blockquote>  <p>This pattern shown 3 times above was repeated 31 times in the method.&#160; A total of around 155 lines of code. Whew.&#160; I enjoy writing code as much as the next person, but this repetitive code is tedious and error prone.&#160; Added or removed a new subform? Don't forget to update this script. Copy and pasted some script code?&#160; Hope you updated all the relevant pieces correctly.</p>  <p>The general pattern is that there are a bunch of fields called &quot;<font face="Courier New">MpIsInd</font>&quot; under nested subforms.&#160; When the value of this field is zero, hide the parent subform, otherwise make it visible.&#160; Here are two alternative approaches:</p>  <h4>Solution 1: Use Recursion</h4>  <p>We could define a method to recursively search for fields called &quot;MpIsInd&quot; and apply the logic to each one we find:</p>  <blockquote>   <p><font face="Courier New">function printPrep(vObject)        <br />{         <br />&#160;&#160;&#160; // Have we found the trigger field?         <br />&#160;&#160;&#160; if (vObject.name == &quot;MplsInd&quot;)         <br />&#160;&#160;&#160; {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (vObject.rawValue == 0)         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vObject.parent.presence = &quot;hidden&quot;;         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; else         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vObject.parent.presence = &quot;visible&quot;; </font></p>    <p><font face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Once we've found the field, we can exit early.        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;         <br />&#160;&#160;&#160; } else if (vObject.className == &quot;subform&quot;)         <br />&#160;&#160;&#160; {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Call this method recursively for each child.         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (var i=0; i&lt;vObject.nodes.length; i++)         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; printPrep(vObject.nodes.item(i));         <br />&#160;&#160;&#160; }         <br />}         <br />// Set visibility based on all the nested MplsInd descendents         <br />printPrep(Page1);</font></p> </blockquote>  <p><font face="tre">The end result is 21 lines of script instead of 155 -- and a form that is easier to maintain.</font></p>  <h4>Solution2: Use wildcards in SOM</h4>  <p>But recursion is not for everyone.&#160; It certainly would not come easily to a novice script writer</p>  <p>The form author could also have used SOM expressions to find all the <font face="Courier New">MplsInd</font> fields.&#160; We are used to using the wildcard character (*) inside braces to indicate &quot;all occurrences&quot;. e.g. <font face="Courier New">po.item[*].subtotal</font>.&#160; I suspect it is not widely known that the wildcard character may also appear in place of an element name to indicate &quot;all elements&quot;.&#160; Using the wildcard this way, our SOM expression to find all <font face="Courier New">MplsInd</font> grandchildren of <font face="Courier New">Page1</font> is : <font face="Courier New">Page1.*.MplsInd.</font></p>  <p>Given that these fields occur as either grandchildren of <font face="Courier New">Page1</font> or as great-grandchildren, we can use two calls to <font face="Courier New">resolveNodes()</font> to find them:</p>  <blockquote>   <p><font face="Courier New">// Generate lists of the descendant MplsInd fields...        <br />var vList1 = xfa.resolveNodes(&quot;Page1.*.MplsInd&quot;);         <br />var vList2 = xfa.resolveNodes(&quot;Page1.*.*.MplsInd&quot;);         <br />for (var i=0; i&lt;vList1.length; i++)         <br />{         <br />&#160;&#160;&#160; var vChild = vList1.item(i);         <br />&#160;&#160;&#160; vChild.parent.presence =         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vChild.rawValue == 0 ? &quot;hidden&quot; : &quot;visible&quot;;         <br />}         <br />for (var i=0; i&lt;vList2.length; i++)         <br />{         <br />&#160;&#160;&#160; var vChild = vList2.item(i);         <br />&#160;&#160;&#160; vChild.parent.presence =&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vChild.rawValue == 0 ? &quot;hidden&quot; : &quot;visible&quot;;         <br />}</font></p> </blockquote>  <h3>Relative SOM expressions</h3>  <p>There are buttons on the form that insert subforms after the current ancestor subform.&#160; The click event script looks like:</p>  <blockquote>   <p><font face="Courier New"><font color="#808080">fields.Page1.RevSec.RevSec2.Table1.Row1.Table2.Row1.Cell1::click - (JavaScript, client)</font>fields.Page1.RevSec.RevSec2.Table1.Row1.instanceManager.insertInstance(this.parent.parent.parent.index+1);</font></p> </blockquote>  <p>That is pretty verbose.&#160; A more readable form of this would use relative references to the instance manager and to the ancestor subform:</p>  <blockquote>   <p><font face="Courier New"><font color="#808080">fields.Page1.RevSec.RevSec2.Table1.Row1.Table2.Row1.Cell1::click - (JavaScript, client)          <br /></font>Table1._Row1.insertInstance(Table1.Row1.index+1);</font></p> </blockquote>  <p><font face="tr">Resolving SOM expressions involves what we call &quot;scoped matching&quot;.&#160; In this case, the starting context is the <font face="Courier New">Cell1</font> button (the field hosting the script).&#160; When asked to find <font face="Courier New">Table1</font>, we look for a match by looking at the children of <font face="Courier New">Cell1</font>.&#160; If not found, we expand the scope of the search by moving up the hierarchy and checking the parent element: <font face="Courier New">Row1</font> and the children of <font face="Courier New">Row1</font>.&#160; This continues until we encounter <font face="Courier New">Table1</font>.&#160; Note that because there were two <font face="Courier New">Row1</font> elements in the hierarchy, we differentiated them by including <font face="Courier New">Table1</font> in the SOM expression.&#160; Note also that we did not worry about which instance of <font face="Courier New">Row1</font> was returned.&#160; The scoped match will find the direct ancestor before any of its siblings.</font></p>  <p>The replacement code found the instance manager using its name: <font face="Courier New">_Row1</font> whereas the original used <font face="Courier New">Row1.instanceManager</font>. Using <font face="Courier New">_Row1</font> is a better practise, because when there are zero instances of a subform, the search for <font face="Courier New">Row1</font> will fail, whereas <font face="Courier New">_Row1</font> is always available.&#160; The naming convention for instance managers is the subform name prefixed with an underscore.</p>  <h3>Locking a form</h3>  <p>The form had a script to lock all the fields in the form:</p>  <p><font face="Courier New">function lockForm(sState){      <br />&#160;&#160;&#160; try{&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Get the field containers from each page.       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (var i = 0; i &lt; xfa.layout.absPageCount(); i++) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var oFields = xfa.layout.pageContent(i, &quot;field&quot;);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var nodesLength = oFields.length;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Set the access type.       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (var j = 0; j &lt; nodesLength; j++) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var oItem = oFields.item(j);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (oItem != this) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; oItem.access = sState;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160; }catch(e){       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; app.alert(&quot;Error in function lockForm() - &quot; + e);       <br />&#160;&#160;&#160; }       <br />}</font></p>  <p>Notice that this script is as efficient as possible when it loops through the children in a list. It declares a variable to hold the size of the list, and uses that variable in the &quot;for loop&quot;. The advantage of doing this is that in a &quot;for loop&quot; the condition gets evaluated for each iteration of the loop.&#160; It is more efficient to reference a JavaScript variable than it is to evaluate a <font face="Courier New">list.length</font> property.&#160; If you have a &quot;for loop&quot; in an area of performance critical code, this is good practise.</p>  <p>Notice another clever part of the script -- it makes sure not to lock the current field.</p>  <p>Unfortunately, it was hard to tell how the script was actually used, because it was not referenced anywhere on the form.&#160; But a couple of observations:</p>  <p>As of Reader 9.0, the access property is now available on subforms.&#160; If your target version is Reader 9, you can code: <font face="Courier New">subform.access = &quot;readOnly&quot;</font> and the result will lock all the descendant fields of the subform.&#160; Setting this property on the root subform would lock the entire form -- in one JavaScript statement.</p>  <h3>Removing a Subform</h3>  <p>The form has buttons to remove subform instances with code that looks like this:</p>  <blockquote>   <p><font face="Courier New"><font color="#808080">fields.Page1.RevSec.RevSec2.Table1.Row1.Table2.Row1.Cell2::click - (JavaScript, client)          <br /></font>fields.Page1.RevSec.RevSec2.Table1.Row1.instanceManager.removeInstance(this.parent.parent.parent.index);</font></p> </blockquote>  <p>For starters, we can simplify the SOM expressions as described above. But the other problem is that this particular <font face="Courier New">Row1</font> subform is defined to have a minimum of one instance.&#160; This means that if the user clicks on the button to remove the last instance of <font face="Courier New">Row1</font>, Reader will generate an error.&#160; The way Reader handles JavaScript errors is to write them to the JavaScript console.&#160; The end user does not get an indication that there was an error.&#160; But in the console you will see:</p>  <blockquote>   <p>GeneralError: Operation failed.      <br />XFAObject.removeInstance:1:XFA:fields[0]:Page1[0]:RevSec[0]:RevSec2[0]:Table1[0]:Row1[0]:Table2[0]:Row1[0]:Cell2[0]:click       <br />The element [min] has violated its allowable number of occurrences.</p> </blockquote>  <p>This version of the script protects against attempting to remove beyond the minimum number of instances:</p>  <blockquote>   <p><font face="Courier New"><font color="#808080">fields.Page1.RevSec.RevSec2.Table1.Row1.Table2.Row1.Cell2::click - (JavaScript, client)          <br /></font>if (Table1._Row1.count &gt; Table1._Row1.min)         <br />&#160;&#160;&#160; Table1._Row1.removeInstance(Table1.Row1.index);</font></p> </blockquote>  <p>If the number of subforms has an upper limit, you should similarly guard code that adds instances.</p>  <p>When testing a form it is good practise to leave the JavaScript console open and make sure that it is clear when testing is complete.&#160; </p>]]></content:encoded>
      <pubDate>Wed, 26 Nov 2008 11:50:54 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/mplsind fields">mplsind fields</category>
      <category domain="http://www.softratty.com/tag/mplsind">mplsind</category>
      <category domain="http://www.softratty.com/tag/current ancestor subform">current ancestor subform</category>
      <category domain="http://www.softratty.com/tag/ancestor subform">ancestor subform</category>
      <category domain="http://www.softratty.com/tag/code">code</category>
      <category domain="http://www.softratty.com/tag/script code">script code</category>
      <category domain="http://www.softratty.com/tag/script">script</category>
      <category domain="http://www.softratty.com/tag/form">form</category>
      <category domain="http://www.softratty.com/tag/descendant mplsind fields">descendant mplsind fields</category>
      <source url="http://blogs.adobe.com/formfeed/2008/11/form_design_code_review.html">Form Design Code Review</source>
    </item>
    <item>
      <title><![CDATA[Arno's IPTABLES Firewall Script 1.9.0-rc4 (Default branch)]]></title>
      <link>http://www.softratty.com/article/c845efdd94f2f78ca036aa4d5e6660d2</link>
      <guid>http://www.softratty.com/article/c845efdd94f2f78ca036aa4d5e6660d2</guid>
      <description><![CDATA[Arno's IPTABLES Firewall Script is a secure stateful firewall for both single and multi-homed machines. It supports NAT and SNAT, port forwarding, ADSL ethernet modems with both static and dynamically...]]></description>
      <content:encoded><![CDATA[Arno's IPTABLES Firewall Script is a secure stateful firewall for both single and multi-homed machines. It supports NAT and SNAT, port forwarding, ADSL ethernet modems with both static and dynamically assigned IPs, MAC address filtering, stealth port scan detection, DMZ support, protection against SYN/ICMP flooding, experimental IPv6 support, multi-interface/aliased-IP support, and extensive user definable logging with rate limiting to prevent log flooding. It has plugin support to add extra features (like SSH Brute Force protection and (Racoon) IPSEC support). It is easy to configure and highly customizable. A filter script that makes your firewall log more readable is also included.
<hr />
<strong>License:</strong> GNU General Public License (GPL)
<hr />
<strong>Changes:</strong><br />
The hfsc plugin and install script were fixed on Ubuntu./usr/share stuff was moved to /usr/local/share (where it belongs). The DynDNS plugin was updated to 0.23BETA. It now automatically creates/removes the cron job. The Traffic Accounting plugin was updated to 0.2BETA. An incorrect configuration file used for the transparent proxy plugin was fixed. An issue where the installer didn't setup a symlink in /etc/rc* to start the firewall at boot was fixed. An uninstall script was added. There were also miscellaneous tweaks and fixes. Updating your config file is strongly recommended.<br style="clear: both;"/>
<a href="http://www.pheedo.com/click.phdo?s=be8f48b5c98cbde1c2f4c8544450e7ea&p=1"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.com/img.phdo?s=be8f48b5c98cbde1c2f4c8544450e7ea&p=1"/></a>
<img src="http://www.pheedo.com/feeds/tracker.php?i=be8f48b5c98cbde1c2f4c8544450e7ea" style="display: none;" border="0" height="1" width="1" alt=""/>

]]></content:encoded>
      <pubDate>Tue, 25 Nov 2008 09:24:05 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/firewall">firewall</category>
      <category domain="http://www.softratty.com/tag/iptables firewall script">iptables firewall script</category>
      <category domain="http://www.softratty.com/tag/plugin">plugin</category>
      <category domain="http://www.softratty.com/tag/hfsc plugin">hfsc plugin</category>
      <category domain="http://www.softratty.com/tag/dyndns plugin">dyndns plugin</category>
      <category domain="http://www.softratty.com/tag/plugin support">plugin support</category>
      <category domain="http://www.softratty.com/tag/support">support</category>
      <category domain="http://www.softratty.com/tag/ipsec support">ipsec support</category>
      <category domain="http://www.softratty.com/tag/dmz support">dmz support</category>
      <source url="http://www.pheedo.com/click.phdo?i=be8f48b5c98cbde1c2f4c8544450e7ea">Arno's IPTABLES Firewall Script 1.9.0-rc4 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[Skyfire Browser Beta 0.85 for S60 - Full Review]]></title>
      <link>http://www.softratty.com/article/820d838eb43f2ccd157fab7347e93eb3</link>
      <guid>http://www.softratty.com/article/820d838eb43f2ccd157fab7347e93eb3</guid>
      <description><![CDATA[Several readers have confirmed that the latest SkyFire Browser Beta can be downloaded and used anywhere in the world. Just point your mobile or PC Browser at get.skyfire.com and download. No...]]></description>
      <content:encoded><![CDATA[<p><img title="Skyfire browser - wapreview.com" src="http://wapreview.com/images/WRsmartFitOff.jpg" alt="Skyfire browser - wapreview.com" width="326" height="246" align="left" />Several readers have confirmed that the latest SkyFire Browser Beta can be downloaded and used anywhere in the  world.  Just point your mobile or PC Browser at <a title="mobile site" href="http://get.skyfire.com/">get.skyfire.com</a> and download.  No registration is required.  Skyfire runs on most Windows Mobile 5 and 6 and Symbian S60 3rd edition phones.</p>
<p>I've been using the new Beta, v 0.85.0.7935, on my N95-3 for a couple of days now - here are my impressions. Keep in mind that <strong>Skyfire is a Beta</strong>. There are parts of Skyfire that are clearly not finished and in my opinion keep Skyfire from being a good choice as your primary browser.  But other aspects of Skyfire are incredibly good.  In this review I'm going to speak frankly about the good and the bad.</p>
<p>If you download Skyfire remember that you are a Beta tester.  Skyfire is not a finished product, there are bugs. If you find a bug please report it to the Skyfire team using the <a href="http://support.skyfire.com/forums/">Beta Forum</a>.</p>
<p><strong>Great For Video</strong></p>
<p>First of all, if you have any interest in watching video on your phone, <strong>get this browser</strong>. There's nothing else like it. Sure, S60 3rd edition phones like have pretty good video capabilities out of the box. They do a great job with mobile video formats and can even play Flash 8 FLVs.  But Flash 8 is old and most web based video sites have upgraded to Flash 9 which S60 can't handle by itself.  I've tried most of the major web video sites  and the only ones where videos actually still play in the N95's native Webkit browser are YouTube and Blip.tv.</p>
<p><img title="SkyFire - fastcompany.com" src="http://wapreview.com/images/FastCompany.jpg" alt="SkyFire - fastcompany.com" width="320" height="240" align="right" />Skyfire can display almost any web based Flash or Silverlight video or animation. I had no trouble watching videos from <em><strong>Daily Motion, Vimeo, Veoh, Hulu uStream, fastcompany.tv, Blip.tv </strong></em>and of course <em><strong>YouTube</strong></em> using Skyfire.  With a good3G connection or WiFi video playback is very smooth, with no stuttering or hangs at all. The latest Skyfire Beta is also very stable when streaming video. I spent about an hour watching videos on all the sites mentioned above with the longest clip being over 15 minutes long and Skyfire handled them all perfectly. This is a huge improvement over the first Skyfire S60 Beta five months ago which consistently crashed after 2 minutes of video streaming.  The Skyfire team has done a great job of archiving faultless video playback and stability. Skyfire is absolutely the best Flash player I've ever used on my N95. I'm also a fan of the standalone player <em><strong>Mobitubia</strong></em>, but it's limited to Flash 8 and its built in catalog and search functions only work with YouTube.  Skyfire is a full-web browser. Using Google you can find and play almost any video on the web.</p>
<p>Like Opera Mini, Skyfire is a proxy based browser. Skyfire servers do most of the work of interpreting and displaying pages and handling user interactions.  The data sent between server and client is not html but a highly compressed binary representation of just the portion of a page that the user is currently viewing. Skyfire uses Firefox as its rendering engine.  <img title="Skyfire - fuzzy scrolling" src="http://wapreview.com/images/FuzzyScrolling.jpg" alt="Skyfire - fuzzy scrolling" width="246" height="326" align="left" />The exact details of how Skyfire works haven't been disclosed but based on hints on the Skyfire forums, I believe that it uses some sort of image based rendering.  Instead of converting pages into a  binary page description language, which is what Opera Mini does, it looks like Skyfire captures an image of all or part of the rendered page,  compresses it and sends it down to the client to display.  There is probably some kind of incremental update that resends just changed parts of the page as needed. You can see evidence of this when scrolling, new parts of the page first appear out of focus and slowly sharpen like a progressive jpeg on a slow connection (image above, left).  Video, which needs to refresh at least 10 times per second, must use a different technique.  Regardless of how Skyfire actually works, pages load very quickly with excellent support for JavaScript and AJAX in addition to Flash and Silverlight. Rendering is very accurate too. Most websites look the same as they do in the desktop Firefox browser.</p>
<p>Video and  JavaScript support and rendering accuracy are the best features of Skyfire at this point in its development. In the rest of this post, I'm going to discuss where I feel the browser needs work.  I'm not doing this to be negative, I think Skyfire is an amazing effort.  It's clear that the Skyfire team has focused their efforts so far on video performance, stability and scaling the back end and they have succeed admirably in these efforts.  What's needed now is attention to  <strong>usability, power consumption</strong> and <strong>connection management</strong>.  Skyfire is already the best S60 video player, with some improvement in these areas Skyfire can be the best S60 browser overall.</p>
<p><strong>Inefficient User Interface</strong></p>
<p>The user experience, especially when dealing with pages that are mostly text leaves a lot to be desired.  It takes more key presses and time to get through common tasks like checking email or keeping up with a hundreds of feeds in Bloglines using Skyfire compared with Opera Mini, Webkit or Opera Mobile.  There are a number of different reasons, all of which are basically usability issues:</p>
<ul>
<li><img title="Skyfire - Focus rectangle" src="http://wapreview.com/images/FocusRectangle.jpg" alt="Skyfire - Focus rectangle" width="246" height="326" align="right" /><em><strong>Issues with zooming</strong></em>: Skyfire is a "keyhole" browser like WebKit or the Opera browsers in "Desktop" mode.  You have a choice of viewing a web page zoomed out which shows a miniaturized overview of the whole page or zoomed in for a detail view of a small portion of the page.  This design maintains the page's original layout and is great for viewing tabular data or fine detail in images.  Skyfire has five levels of zoom and you can quickly zoom in or out a level at a time with the 1 and 3 keys.  The problem is that Skyfire always loads every page fully zoomed out and requires multiple key presses to get to the point where text is readable. First you press the center Dpad button which changes the virtual mouse cursor to magnifying glass.  Then you have to move the cursor before a focus rectangle appears.  Then you move the rectangle to select the portion of the page you wish to view. As soon as you click a link and load a new page you have to repeat the whole process.  The fully zoomed out view is only useful for navigation.  For most sites it would be faster and easier to start fully zoomed at the top left of the page and just start reading - which is the default behavior in other keyhole browsers.  Both Opera in "Desktop" mode and Webkit  initially load pages fully zoomed in and readable and zooming all the way in or out requires only a single key press. Skyfire seems to be moving in that direction, a new feature in 0.85 is that recognized mobile web sites are loaded fully zoomed in. I hope Skyfire adds an option to do this with all sites.</li>
</ul>
<ul>
<li><strong><em>Word wrap problems</em>:</strong> Like all keyhole browsers, Skyfire reformats text into columns that are narrow enough to fit the browser's width so you can read without horizontal scrolling.  Skyfire's implementation, which they call "SmartFit", doesn't always work.  <img title="Skyfire - Yahoo Mail" src="http://wapreview.com/images/YahooMail.jpg" alt="Skyfire - Yahoo Mail" width="246" height="326" align="left" />On many pages including Yahoo Mail (image), gMail, Google Reader and both the classic and Beta versions of Bloglines, Smarfit removes links, truncates text or turns the page into a jumbled mess of overlapping text and images.  The screen shot shows the Yahoo Mail Inbox.  Not only does it look bad but the the title of each message is missing. The title is the link to open the message so with SmartFit on you can't even open your emails.  Fortunately. you can turn SmartFit on and off.  There is even a hotkey to do it with a single keypress.  You often have to turn off SmartFit to navigate and then turn it back on to be able to read text. Toggling SmartFit reloads the page, zooms it out and moves your position to the top of the page so you need more keypresses to find your place and zoom in again. An alternative is to leave SmartFit off all the time but that means that to read text you have to scroll horizontally across each line which I find so frustrating that I refuse to do it.</li>
</ul>
<ul>
<li><strong>No "Fit to Width" mode</strong>:  SmartFit is not the same as "Fit to Width"  With SmartFit, when it works, you still have to scroll left and right to navigate around images, etc. when reading text. With "Fit to Width" the page is reformatted and reflowed so that everything fits in a single column the width of the screen. It's not pretty but is much more efficient for reading large quantities of text. Most mobile browsers have a Fit To Width mode including Opera, PIE, Netfront and the BlackBerry Browser.  When using these browsers I generally use Fit to Width 90% of the time, only switching to Keyhole mode to view tables, videos and detail in images. Fit to Width is so much more efficient for reading text, which is what I do most in a browser.</li>
</ul>
<ul>
<li><em><strong>No dedicated Page Up and Page Down Keys</strong></em>.  Most browsers provide HotKeys that let you perform common actions with one or two clicks.  SkyFire has some Hotkeys; "2" to enter a URL or search phrase, "4" to add a bookmark, "5" refreshes the page, "6" toggles SmartFit, "3" and "1" zoom  in and out respectively,  But what to me is the most critical pair of HotKeys is missing, page up and page down. They are crucial for efficiently reading text. The only way to move through text in SkyFire is line by line. It's easy to undershoot or overshoot the beginning of the next page so that you have to scroll back and forth to find the  last line read.  It's so much faster and easier to just read a screenful, press "Page Down" once, read the next screenful and repeat until you reach the end of the text.</li>
</ul>
<p style="padding-left: 30px;">There are also no hotkeys to go to the start page or to your bookmarks.  I realize that there are only 10 keys available, but surely page up and down and returning to the start page and bookmarks are more common actions than saving a new bookmark or entering a URL.  I'd really like to see SkyFire do something like Opera Mini which has both one key shortcuts and two key ones invoked by pressing * or # followed by another key.  I hardly ever use the menus in Opera Mini because everything is just a click or two away.</p>
<p><strong>Battery Life </strong></p>
<p>The technology that is so good at rendering complex animation and video, also seems to require a constant connection and generates constant traffic between server and client.  This obviously increases power consumption.  My N95 gets noticeably warm just browsing the web with Skyfire without even viewing any videos. That doesn't happen with Webkit or Opera Mini. I didn't do a formal battery run down test but my battery lost about 25% of it's charge in just 30 minutes of surfing.  Skyfire has made reducing power consumption a major goal in the development process. Starting with this release the browser drops the connection after the user is idle for five minutes and reconnects when a key is pressed.  Further optimizations will be needed before my phone's battery will get through my typical day of a couple hours of browsing while simultaneously using the music player plus the odd phone call or text.</p>
<p><strong>Connection Issues</strong></p>
<p>SkyFire doesn't manage connections very well on S60 phones.  There is no way to set a default access point for native applications within the OS and SkyFire doesn't have an access point setting either.  So SkyFire prompts for an access point on startup.  Lots of apps do that and I actually like it as it makes it easy to use a faster WiFi connection when available. The problem is that SkyFire prompts three times during startup while other apps only prompt once.  Plus, SkyFire closes the connection after five minutes of inactivity to conserve battery power.  When you wake SkyFire up it tries to reconnect and again prompts you to choose an access point three times. And when using WiFi, reconnection almost always fails for me, prompting indefinitely for an access point without ever reconnecting.</p>
<p>Another connection related issue is that SkyFire uses non-standard http ports (reportedly 1321 and 4243) so it won't work on many mobile networks that require traffic to pass through a proxy, including Spain's Yoigo and the lower priced data plan from T-Mobile USA.  These proxies only pass traffic to "well-known" ports like 80 and 8080. The nonstandard ports also keep SkyFire from working with some public hotspots.</p>
<p><strong>Conclusions</strong></p>
<p>SkyFire is in many ways the most exciting new mobile browser I've seen this year.  The ability to watch just about any web video simply doesn't exist with any other mobile browser, not even Safari on the iPhone. But at this point, SkyFire is quite immature and needs a bit of work before I can recommend it as a general purpose browser. Of course that's why it's in Beta. In fact, most of the issues I've mentioned above are acknowledged by the SkyFire team and are being worked on.  Download SkyFire and use it.  You will enjoy the experience, especially with video.  If you find something that doesn't work right or is harder to use than it should be, do SkyFire and future users a favor and report it on the <a href="http://support.skyfire.com/forums/">SkyFire Beta Forum</a>.  You can log into the forum with the email address and password that you registered SkyFire with.  If you haven't registered, you should.  Your bookmarks are stored on the SkyFire servers and will be lost when you upgrade to the next Beta release if unless you are registered.<br /><a rel="license" href="http://creativecommons.org/licenses/by/3.0/us/"><img alt="Creative Commons License" style="border-width:0" width="80" height="15" src="http://i.creativecommons.org/l/by/3.0/us/80x15.png"/><br />
<hr /></a></p>

<p><a href="http://feedads.googleadservices.com/~a/YIKbVOiHdeYcw2CtOPyXjdoGfdk/a"><img src="http://feedads.googleadservices.com/~a/YIKbVOiHdeYcw2CtOPyXjdoGfdk/i" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feedproxy.google.com/~f/WapReview?a=2IwPV0qW"><img src="http://feedproxy.google.com/~f/WapReview?i=2IwPV0qW" border="0"></img></a> <a href="http://feedproxy.google.com/~f/WapReview?a=l37YOsGf"><img src="http://feedproxy.google.com/~f/WapReview?i=l37YOsGf" border="0"></img></a> <a href="http://feedproxy.google.com/~f/WapReview?a=mhti65Qw"><img src="http://feedproxy.google.com/~f/WapReview?d=131" border="0"></img></a> <a href="http://feedproxy.google.com/~f/WapReview?a=DYROxPMA"><img src="http://feedproxy.google.com/~f/WapReview?i=DYROxPMA" border="0"></img></a> <a href="http://feedproxy.google.com/~f/WapReview?a=QXWucBoV"><img src="http://feedproxy.google.com/~f/WapReview?d=138" border="0"></img></a>
</div><img src="http://feedproxy.google.com/~r/WapReview/~4/DVZL99pes3M" height="1" width="1"/>]]></content:encoded>
      <pubDate>Mon, 24 Nov 2008 00:15:05 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/beta">beta</category>
      <category domain="http://www.softratty.com/tag/skyfire beta forum">skyfire beta forum</category>
      <category domain="http://www.softratty.com/tag/skyfire beta">skyfire beta</category>
      <category domain="http://www.softratty.com/tag/browser">browser</category>
      <category domain="http://www.softratty.com/tag/blackberry browser">blackberry browser</category>
      <category domain="http://www.softratty.com/tag/mobile browser">mobile browser</category>
      <category domain="http://www.softratty.com/tag/beta versions">beta versions</category>
      <category domain="http://www.softratty.com/tag/beta release">beta release</category>
      <category domain="http://www.softratty.com/tag/release">release</category>
      <source url="http://feedproxy.google.com/~r/WapReview/~3/DVZL99pes3M/">Skyfire Browser Beta 0.85 for S60 - Full Review</source>
    </item>
    <item>
      <title><![CDATA[gtkaml 0.2.2.1 (Default branch)]]></title>
      <link>http://www.softratty.com/article/44f959914e216124c8210d267ff0d574</link>
      <guid>http://www.softratty.com/article/44f959914e216124c8210d267ff0d574</guid>
      <description><![CDATA[gtkaml is an XML syntax and an XML parser that extends the Vala.Parser and transforms all your XML tags into a valid Gtk+ UI class. It features a compact XML syntax for describing the way Gtk widgets...]]></description>
      <content:encoded><![CDATA[<img src="http://c.fsdn.com/fm/screenshots/67899_thumb.png"
     align="right" alt="Screenshot" hspace="10" vspace="10">
gtkaml is an XML syntax and an XML parser that extends the Vala.Parser and transforms all your XML tags into a valid Gtk+ UI class. It features a compact XML syntax for describing the way Gtk widgets are laid out in a (new) custom widget you're creating. Code "islands" (written in Vala) are used for widget signal handling and other methods/signals/properties that you're introducing. It doesn't depend on an external library at run-time, and it is much more readable than the usual UI boilerplate.


<hr />
<strong>License:</strong> GNU Lesser General Public License (LGPL)
<hr />
<strong>Changes:</strong><br />
This release has been upgraded to Vala 0.5.1. Issue #15 ("Should take interfaces into account when searching an add method described in an .implicits file") has been fixed.<br style="clear: both;"/>
<a href="http://www.pheedo.com/click.phdo?s=c416353dfe4f69f8a5e8cfcf822d5ee9&p=1"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.com/img.phdo?s=c416353dfe4f69f8a5e8cfcf822d5ee9&p=1"/></a>
<img src="http://www.pheedo.com/feeds/tracker.php?i=c416353dfe4f69f8a5e8cfcf822d5ee9" style="display: none;" border="0" height="1" width="1" alt=""/>

]]></content:encoded>
      <pubDate>Sun, 23 Nov 2008 21:39:44 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/compact xml syntax">compact xml syntax</category>
      <category domain="http://www.softratty.com/tag/xml syntax">xml syntax</category>
      <category domain="http://www.softratty.com/tag/public license">public license</category>
      <category domain="http://www.softratty.com/tag/vala">vala</category>
      <category domain="http://www.softratty.com/tag/parser">parser</category>
      <category domain="http://www.softratty.com/tag/license">license</category>
      <category domain="http://www.softratty.com/tag/xml parser">xml parser</category>
      <category domain="http://www.softratty.com/tag/gtk widgets">gtk widgets</category>
      <category domain="http://www.softratty.com/tag/widget signal">widget signal</category>
      <source url="http://www.pheedo.com/click.phdo?i=c416353dfe4f69f8a5e8cfcf822d5ee9">gtkaml 0.2.2.1 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[MUSCLE 4.41 (Default branch)]]></title>
      <link>http://www.softratty.com/article/b21868dd36f1c6cecd68ce26eae3ebca</link>
      <guid>http://www.softratty.com/article/b21868dd36f1c6cecd68ce26eae3ebca</guid>
      <description><![CDATA[MUSCLE (Multi User Server Client Linking Environment) is an N-way messaging server and networking API. It includes client-side networking APIs for various languages, including C, C++, C#, Delphi,...]]></description>
      <content:encoded><![CDATA[MUSCLE (Multi User Server Client Linking
Environment) is an N-way messaging server and
networking API. It includes client-side networking
APIs for various languages, including C, C++, C#,
Delphi, Java, and Python. MUSCLE lets programs
communicate over a network via streams of
serialized Message objects. The included server
program ("muscled") lets its clients message each
other and store information in its server-side
hierarchical database. The database supports
flexible queries via hierarchical wildcarding, and
"live" updates via a subscription mechanism.

<hr />
<strong>License:</strong> BSD License (revised)
<hr />
<strong>Changes:</strong><br />
This release adds AddArchiveMessage(), FindArchiveMessage(), and other convenience methods for easier archiving of objects to messages and back. It also redoes the human-readable time values interface to use a class instead of individual value arguments, and fixes several small bugs.<br style="clear: both;"/>
  <img alt="" style="border: 0; height:1px; width:1px;" border="0" src="http://www.pheedo.com/img.phdo?i=f30575f077d8ce5bdcbf7cabbb9dee10" height="1" width="1"/>
<img src="http://www.pheedo.com/feeds/tracker.php?i=f30575f077d8ce5bdcbf7cabbb9dee10" style="display: none;" border="0" height="1" width="1" alt=""/>
]]></content:encoded>
      <pubDate>Mon, 17 Nov 2008 19:06:50 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/hierarchical">hierarchical</category>
      <category domain="http://www.softratty.com/tag/server-side hierarchical database">server-side hierarchical database</category>
      <category domain="http://www.softratty.com/tag/server">server</category>
      <category domain="http://www.softratty.com/tag/muscle">muscle</category>
      <category domain="http://www.softratty.com/tag/bsd license">bsd license</category>
      <category domain="http://www.softratty.com/tag/message objects">message objects</category>
      <category domain="http://www.softratty.com/tag/objects">objects</category>
      <category domain="http://www.softratty.com/tag/server program">server program</category>
      <category domain="http://www.softratty.com/tag/license">license</category>
      <source url="http://www.pheedo.com/click.phdo?i=f30575f077d8ce5bdcbf7cabbb9dee10">MUSCLE 4.41 (Default branch)</source>
    </item>
    <item>
      <title><![CDATA[Rip Dev Releases New Beta of Installer.app for iPhone]]></title>
      <link>http://www.softratty.com/article/44376c47bc0274ae93857000a87ef46d</link>
      <guid>http://www.softratty.com/article/44376c47bc0274ae93857000a87ef46d</guid>
      <description><![CDATA[Rip Dev has announced a new version of Installer.app for the iPhone and promised rapid updates to get it in shape as soon as possible

What's new or fixed in this update
Added user-driven ratings. We...]]></description>
      <content:encoded><![CDATA[<div><a href="http://4.bp.blogspot.com/_o0l_mBOnv9w/SSHY495F0sI/AAAAAAAAIAI/fybfW4Ye4lw/s1600-h/9394-64.png"><img id="BLOGGER_PHOTO_ID_5269731512198484674" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 64px; CURSOR: hand; HEIGHT: 64px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_o0l_mBOnv9w/SSHY495F0sI/AAAAAAAAIAI/fybfW4Ye4lw/s400/9394-64.png" border="0" /></a>Rip Dev has announced a new version of Installer.app for the iPhone and promised rapid updates to get it in shape as soon as possible.<br /><br />What's new or fixed in this update...<br />- Added user-driven ratings. We encourage you to submit your votes for various packages. Once more data will be collected (in a few days), that will be reflected on the Featured page.<br />- SpringBoard is no longer terminated after the software was installed or removed.<br />- Proxies are (again) supported. The support was broken after we moved to libcurl.<br />- Introduced download timeouts (again) that were disabled after the move to libcurl.<br />- Reworked many parts of the engine in an effort to get rid of the occasional GUI stalls.<br />- If a particular source fails to update, it will be moved to "disabled" state for 6 hours and will not be included in the all sources refresh process. The disabled state is listed as the source icon with a red "stop" sign over it. This is done to prevent unnecessary stalls at the sources refresh if one of the sources goes offline for whatever reason. If you'd like to retry it before 12 hour interval, open its info and hit Refresh button there.<br />- Removed customInfo support as it was mostly used for unnecessary ads that were disturbing many people. These pages are normally reachable from the "More Info" link.<br />- Much better error reporting. Forget these "error 3"s and such. The descriptions are much more human readable now. And for script errors, it will show an actual script command that caused an error.<br />- Installer will prevent iPhone/iPod touch from sleeping when it's downloading or installing something.<br />- The app icon badge should behave better now.<br />- Lots of smaller fixes and optimizations I won't list.<br /><br /><a href="http://ripdev.org/2008/11/installer-40b9.html" target="_blank">Read More</a><img id="BLOGGER_PHOTO_ID_5269731516937109426" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 220px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_o0l_mBOnv9w/SSHY5Pi3f7I/AAAAAAAAIAQ/ki8rpK2SSzY/s400/9395.jpeg" border="0" /></div><div class="blogger-post-footer">This blog will tell you how to Unlock Jailbreak Activate and Hack your iPhone and iTouch firmware for FREE</div>
<p><a href="http://feeds.feedburner.com/~a/IphoneAndItouchFirmwareUnlock/HackBlog?a=ZGWzlM"><img src="http://feeds.feedburner.com/~a/IphoneAndItouchFirmwareUnlock/HackBlog?i=ZGWzlM" border="0"></img></a></p><img src="http://feeds.feedburner.com/~r/IphoneAndItouchFirmwareUnlock/HackBlog/~4/456411644" height="1" width="1"/>]]></content:encoded>
      <pubDate>Mon, 17 Nov 2008 17:48:00 +0000</pubDate>
      <category domain="http://www.softratty.com/tag/sources refresh process">sources refresh process</category>
      <category domain="http://www.softratty.com/tag/sources refresh">sources refresh</category>
      <category domain="http://www.softratty.com/tag/app">app</category>
      <category domain="http://www.softratty.com/tag/sources">sources</category>
      <category domain="http://www.softratty.com/tag/installer">installer</category>
      <category domain="http://www.softratty.com/tag/rip dev">rip dev</category>
      <category domain="http://www.softratty.com/tag/app icon badge">app icon badge</category>
      <category domain="http://www.softratty.com/tag/iphone">iphone</category>
      <category domain="http://www.softratty.com/tag/hit refresh button">hit refresh button</category>
      <source url="http://feeds.feedburner.com/~r/IphoneAndItouchFirmwareUnlock/HackBlog/~3/456411644/rip-dev-releases-new-beta-of.html">Rip Dev Releases New Beta of Installer.app for iPhone</source>
    </item>
  </channel>
</rss>
