<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Paul Todd&#039;s Forum Nokia Blog</title> 
<subtitle type="html">&lt;p&gt;Hi, I&#039;m Paul, but you can also call me Todd and I won&#039;t get upset.&lt;/p&gt;
</subtitle>
 
<updated>2008-12-19T13:48:34+02:00</updated> 
<id>http://www.lifetype.net,1.2/</id>
<link rel="alternate" type="text/html"  hreflang="en" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog" />
 
<rights>Copyright (c) Paul.Todd</rights>
<generator uri="http://www.lifetype.net/" version="1.2">LifeType at Forum Nokia</generator> 
 
<entry> 
<title>Microsoft Airsync protocol now released</title>
<link rel="alternate" type="text/html" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog/2008/12/19/microsoft-airsync-protocol-now-released" /> 
<id>tag:blogs.forum.nokia.com,2008-12-19:1902</id>
 
<updated>2008-12-19T13:48:34+02:00</updated> 
<published>2008-12-19T13:48:34+02:00</published> 
<summary type="html"> 
As part of Microsofts ongoing API release program, the AirSync protocol specs and docs are now avaliaible for download
 
 
Grab them here 
 
  ...</summary> 
<author> 
 
<name>Paul.Todd</name> 
<uri>http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog</uri> 
</author> 
<dc:subject>
Enterprise 
</dc:subject> 
<content type="text/html" xml:lang="en" xml:base="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog"> 
&lt;p&gt;
As part of Microsofts ongoing API release program, the AirSync protocol specs and docs are now avaliaible for download
&lt;/p&gt;
&lt;p&gt;
Grab them here 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc425499.aspx&quot; title=&quot;Airsync Protocol&quot;&gt;http://msdn.microsoft.com/en-us/library/cc425499.aspx&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;And of course the obligatory licencing notice here
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc433488.aspx&quot;&gt;&amp;nbsp;http://msdn.microsoft.com/en-us/library/cc433488.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
 Note that there is no partnering API or support incident cost involved in getting or using them.... 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt; 
</content> 
</entry> 
 
<entry> 
<title>Mobile Firefox for Symbian just kicked off today</title>
<link rel="alternate" type="text/html" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog/2008/12/11/mobile-firefox-for-symbian-just-kicked-off-today" /> 
<id>tag:blogs.forum.nokia.com,2008-12-11:1887</id>
 
<updated>2008-12-11T17:47:35+02:00</updated> 
<published>2008-12-11T17:47:35+02:00</published> 
<summary type="html"> 
Mozilla have today officailly kicked off their port for Fennec (ie Firefox Mobile) for Symbian 
 
 
 More info over at Christian Sejersen&#039;s blog including links to the repository.... 
  ...</summary> 
<author> 
 
<name>Paul.Todd</name> 
<uri>http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog</uri> 
</author> 
<dc:subject>
Enterprise 
</dc:subject> 
<content type="text/html" xml:lang="en" xml:base="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog"> 
&lt;p&gt;
Mozilla have today officailly kicked off their port for Fennec (ie Firefox Mobile) for Symbian 
&lt;/p&gt;
&lt;p&gt;
 More info over at Christian Sejersen&#039;s blog including links to the repository.... 
&lt;/p&gt;
&lt;p&gt;
http://www.christiansejersen.com/blog/2008/12/10/fennec-mobile-firefox-for-symbian/
&lt;/p&gt;
&lt;p&gt;
Various people have already started contributing.
&lt;/p&gt; 
</content> 
</entry> 
 
<entry> 
<title>Reading DM Adapter DDF&#039;s</title>
<link rel="alternate" type="text/html" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog/2008/11/30/reading-dm-adapter-ddf-s" /> 
<id>tag:blogs.forum.nokia.com,2008-11-30:1868</id>
 
<updated>2008-11-30T18:21:24+02:00</updated> 
<published>2008-11-30T18:21:24+02:00</published> 
<summary type="html"> 
DDF&#039;s can be represented as a tree structure and so naturally lead themselves to be described by recursion which most people find difficult to understand. Reading a ddf from the supplied ...</summary> 
<author> 
 
<name>Paul.Todd</name> 
<uri>http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog</uri> 
</author> 
<dc:subject>
Enterprise 
S60 
Symbian C++ 
</dc:subject> 
<content type="text/html" xml:lang="en" xml:base="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog"> 
&lt;p&gt;
DDF&#039;s can be represented as a tree structure and so naturally lead themselves to be described by recursion which most people find difficult to understand. Reading a ddf from the supplied adapter is fairly easy, the problems are the recursive nature of the solution that describes the ddf.
&lt;/p&gt;
&lt;p&gt;
The two important methods on CSmlDmAdapter are DDFStructureL and the other one is DDFVersionL. The DDFStructureL function takes as an arguement, an implementation for an MSmlDmDDFObject. This will be the root node for the DDF and typically this will be the name of the DDF&amp;nbsp; e.g. AP for access points)
&lt;/p&gt;
&lt;p&gt;
As the adapter builds the DDF, it will call back on the methods of MSmlDmDDFObject to set the &lt;br /&gt;
various parameters that describe the node. You will need to derive a class from this and &lt;br /&gt;
CBase and provide implementations to all the methods of the MSmlDmDDFObject. &lt;br /&gt;
It is up to you to track the relationships between the nodes, so each time AddChildObjectL&lt;br /&gt;
or AddChildObjectGroupL is called, it will require a new instance of the object implementing&amp;nbsp; &lt;br /&gt;
the MSmlDmDDFObject interface to be created. This new node will be added as a child of the&lt;br /&gt;
current node. If the DDF tree is being stored then it will be up to you to keep track of &lt;br /&gt;
the objects you create.&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
In order to construct the tree, AddChildObjectL is used to add a named node and &lt;br /&gt;
AddChildObjectGroupL is used to add an anonymous or ununamed node (these are denoted as &lt;br /&gt;
&amp;lt;x&amp;gt; is in the ddf specification). Both of these functions return a new instance of an &lt;br /&gt;
object implementing the MSmlDmDDFObject.
&lt;/p&gt;
&lt;p&gt;
One of the tricky aspects to this is that some of the adapters put their name in the ecom data and others do not, so generally you need to read the DDF for the adapter in order to get the name of the adapter if you are using it to set specific settings. 
&lt;/p&gt;
&lt;p&gt;
A partial example to read the ddf..&lt;br /&gt;
For the purposes of this example, we will assume that we already have an adapter &lt;br /&gt;
instantiated via RECOMSession::CreateImplementationL&lt;br /&gt;
&lt;br /&gt;
//This class is used to store the ddf&lt;br /&gt;
class CDmDDFNode : public CBase, public MSmlDmDDFObject&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CDMDDFNode();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ~CDMDDFNode()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iChildren.ResetAndDestroy();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
public: // MSmlDmDDFObject&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .... // Implementations of the pure virtual &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get and set methods of MSmlDmDDFObject&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MSmlDmDDFObject&amp;amp; AddChildObjectGroupL()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return AddChildObjectL(_L8(&amp;quot;&amp;lt;x&amp;gt;&amp;quot;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MSmDmDDFObject&amp;amp; AddChildObjectL(const TDesC8&amp;amp; aNodeName)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CDmDDFNode* node = new (ELeave) CDmDDFNode;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CleanupStack::PushL(node);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iChildren.AppendL(node);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CleanupStack::Pop(node);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return *node;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; RPointerArray&amp;lt;CDMDDFNode&amp;gt; iChildren;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;
&lt;br /&gt;
When calling DDFStructure...&lt;br /&gt;
&lt;br /&gt;
CDMDDFNode* root = new (ELeave) CDMDDFNode;&lt;br /&gt;
CleanupStack::PushL(root);&lt;br /&gt;
adapter-&amp;gt;DDFStructureL(*root);&lt;br /&gt;
CleanupStack::Pop(root);&lt;br /&gt;
&lt;br /&gt;
const TDesC8&amp;amp; name= node-&amp;gt;Name(); // the root node is the adapter name.&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
Once the DDF has been read, it is then possible to get the version of the DDF.&lt;br /&gt;
The DDF version is important as it allows differentiation of features as well as identifying&lt;br /&gt;
possible issues with bugs fixed from earlier releases.&lt;br /&gt;
&lt;br /&gt;
CBufFlat* buf = CBufFlat::NewL(64);&lt;br /&gt;
CleanupStack::PushL(buf);&lt;br /&gt;
adapter-&amp;gt;DDFVersionL(*buf);&lt;br /&gt;
HBufC8* DDFVersion = buf-&amp;gt;Ptr(0).AllocL();&lt;br /&gt;
// .... create store this somewhere&lt;br /&gt;
CleanupStack::PopAndDestroy(2, buf);&lt;br /&gt;
&lt;br /&gt;
Next Part...&lt;br /&gt;
Setting simple single values...
&lt;/p&gt; 
</content> 
</entry> 
 
<entry> 
<title>Scalability</title>
<link rel="alternate" type="text/html" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog/2007/08/22/scalability" /> 
<id>tag:blogs.forum.nokia.com,2007-08-22:678</id>
 
<updated>2007-08-22T23:47:48+03:00</updated> 
<published>2007-08-22T23:47:48+03:00</published> 
<summary type="html">One of the things engineers are going to have to think about when the new  widgets api&#039;s  come out is not just to think about the device, but rather to think about the server side. I mean how ...</summary> 
<author> 
 
<name>Paul.Todd</name> 
<uri>http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog</uri> 
</author> 
<dc:subject>
Enterprise 
General 
Testing 
</dc:subject> 
<content type="text/html" xml:lang="en" xml:base="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog"> 
One of the things engineers are going to have to think about when the new &lt;a href=&quot;http://www.forum.nokia.com/main/resources/technologies/browsing/widgets.html&quot; target=&quot;undefined&quot;&gt;widgets api&#039;s&lt;/a&gt; come out is not just to think about the device, but rather to think about the server side. I mean how great is your widget going to be if your server is being hosed by millions of clients.&lt;br /&gt;
&lt;br /&gt;
The biggest problem I believe is going to be dealing with scalability issues on the server side as there are plenty more phones than laptops and with wifi being cheap and data plans becoming cheaper there could be a whole load of problems dealing with orders of magnitude more connections than a regular windows based clients.&lt;br /&gt;
&lt;br /&gt;
That why one of my favourite feeds is the &lt;a href=&quot;http://highscalability.com/&quot; target=&quot;undefined&quot;&gt;high scalability&lt;/a&gt; website where they cover how the really big sites on the web work and scale.&lt;br /&gt;
Recently they have covered the architectures for flickr, youtube, digg and typepad. 
</content> 
</entry> 
 
<entry> 
<title>Google Developer Day</title>
<link rel="alternate" type="text/html" href="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog/2007/06/06/google-developer-day" /> 
<id>tag:blogs.forum.nokia.com,2007-06-06:569</id>
 
<updated>2007-06-06T14:22:18+03:00</updated> 
<published>2007-06-06T14:22:18+03:00</published> 
<summary type="html">Between moving house, two projects in crisis, no broadband and google dev day I hav&#039;nt had the chance to do any decent coding for the blog.  I was however really impressed with what google gears ...</summary> 
<author> 
 
<name>Paul.Todd</name> 
<uri>http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog</uri> 
</author> 
<dc:subject>
Connectivity 
Enterprise 
Symbian C++ 
</dc:subject> 
<content type="text/html" xml:lang="en" xml:base="http://blogs.forum.nokia.com/blog/paul-todds-forum-nokia-blog"> 
Between moving house, two projects in crisis, no broadband and google dev day I hav&#039;nt had the chance to do any decent coding for the blog.&lt;br /&gt;&lt;br /&gt;I was however really impressed with what google gears potentional was on a mobile device, especially for Enterprise applications.&lt;br /&gt;&lt;br /&gt;It makes development much simpler as the code can be written in Javascript and the code takes care of syncing it with the backend services.&lt;br /&gt;&lt;br /&gt;Currently C++/Symbian Signed&amp;#160; is just too expensive for Enterprise applications and whilst Red Five&#039;s .net version is awsome, its not 3rd edition compliant yet.&lt;br /&gt;&lt;br /&gt;Hopefully Nokia will add the needed extensions to the webkit to allow native javascript addons via ecom.&lt;br /&gt;&lt;br /&gt;Google refused to be drawn on this issue when the question was asked :( 
</content> 
</entry> 
 
</feed>