<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>caml &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/caml/</link>
	<description>Feed of posts on WordPress.com tagged "caml"</description>
	<pubDate>Sun, 12 Oct 2008 19:52:31 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[OCaml Batteries Included, version alpha]]></title>
<link>http://dutherenverseauborddelatable.wordpress.com/?p=183</link>
<pubDate>Sat, 11 Oct 2008 13:35:42 +0000</pubDate>
<dc:creator>yoric</dc:creator>
<guid>http://dutherenverseauborddelatable.fr.wordpress.com/2008/10/11/ocaml-batteries-included-version-alpha/</guid>
<description><![CDATA[It has landed
The first alpha version of OCaml Batteries Included has landed. It is now available as]]></description>
<content:encoded><![CDATA[<h1 style="text-align:justify;">It has landed</h1>
<p style="text-align:justify;">The first alpha version of OCaml Batteries Included has landed. It is now available as source code, <a href="https://forge.ocamlcore.org/frs/?group_id=17&#38;release_id=44">from the Forge</a> or as a <a href="http://godi.camlcity.org/godi/toc/toc-3.10.html">GODI</a> package. You may find the API documentation <a href="http://forge.ocamlcore.org/docman/index.php?group_id=17&#38;selected_doc_group_id=49&#38;language_id=1">here</a> and the complete documentation <a href="http://forge.ocamlcore.org/docman/index.php?group_id=17&#38;selected_doc_group_id=59&#38;language_id=1">there</a>.</p>
<p style="text-align:justify;">Remember, this is alpha-level code, use at your own risk. Also note that documentation generation is very slow (10+ minute on my laptop), so don't worry if installation seems to last forever, it's nearly true but not quite.</p>
<p style="text-align:justify;">Reviews, comments, suggestions and bug reports are particularly welcome. We have a few <a href="https://forge.ocamlcore.org/tracker/?group_id=17">trackers</a> for these, as well as <a href="https://forge.ocamlcore.org/forum/?group_id=17">a forum</a>, so don't hesitate to use them. We're also looking for volunteers to give us a hand, so please consider stepping forward.</p>
<h1 style="text-align:justify;">What is OCaml Batteries Included?</h1>
<p style="text-align:justify;">Twenty years ago, a language was just a compiler. You could measure the quality of a language from the beauty of its semantics, the clarity of its syntax, the speed of generated code. That was then.  In the meantime, the Java and .Net nuclear plants have been built, while the Python and Ruby communities have gradually developed their own powerhouses. All these platforms have amply demonstrated that a language can only be as beautiful, clear and fast as the libraries which developers are actually going to use for their work. In other words, it's not about the language anymore, it's about the platform.</p>
<p style="text-align:justify;">At this point in time, out-of-the-box, OCaml isn't a usable platform. There is no Unicode, there are no modern user interface toolkits, no distributed programming infrastructures, no network services, no type-safe communications, no analysis of other languages, no interfacing with industrial platforms, no XML, non modern two- or three-dimensional drawing engine, etc. This would not be too much of a problem if OCaml provided an easy way of installing new libraries and of using these libraries once they are installed.  This would also not be too much of a problem if OCaml could somehow guarantee that trivial data structures didn't need to be reinvented by most projects and that communication between libraries happened lawlessly.</p>
<p style="text-align:justify;">So no, out of the box, OCaml isn't a usable platform. However, no matter what you're trying to do, chances are that the community has already developed or adapted a tool to make your life easier. Easy installation of OCaml packages is quite possible, if you are using Debian or Ubuntu (apt-get), Fedora or Red Hat (yum) or actually, any Unix-compatible platform, including MacOS X and Windows (GODI). Simple and reliable usage of installed libraries can be done with Findlib.  A comprehensive Unicode library is available (Camomile), as well as a modern user interface toolkit or two (LablGtk, OCamlRT), a number of distributed programming infrastructures (OCamlMPI, BSML, Opis, Camlp3l, OCamlNAE), libraries to interface with industrial platforms<br />
(OCamlJava, SpiderCaml ...), to analyse other languages (CIL, Dalton/FlowCaml, ...), to read or write XML (PXP, Expat, ...), to draw in two or three dimensions (Cairo, OpenGL), to test your programs (OUnit), etc. OCaml even offers a built-in tool to customize the language itself (Camlp4).</p>
<p style="text-align:justify;">What's missing? A few things. For now, not all important libraries are available as simple-to-install packages. That problem is being addressed by the devoted packagers of Debian, Fedora and GODI, while the possibility exists that the recently announced Symbiosis will also help address the issue.  The other missing part is a standard set of libraries, language extensions and data structures which developers could be assured to find on every OCaml installation, and which would let them write programs without having to endlessly reinvent the same basic wheels, and without spending their time writing adapters between libraries which should work well together but don't use the same conventions. OCaml Batteries Included is one possible answer to this problem.</p>
<p style="text-align:justify;">OCaml Batteries Included consists in</p>
<ul style="text-align:justify;">
<li>A core set of libraries, designed to define the basic standard data structures. This set, largely based on both the Base library of OCaml and ExtLib, extends the basic strings, arrays, lists... provided with OCaml and introduces numerous data structures, including enumerations, lazy lists, extendable inputs<br />
and outputs, dynamic arrays, unicode ropes...</li>
<li>A uniformization layer, the glue, on top of chosen existing libraries. Note that we are not forking any of these libraries, only providing an additional layer on top of them.  The libraries may be installed manually by the user or, preferably, by automatic dependency resolution thanks to apt-get, yum, GODI or some other packaging tool. The uniformization layer serves to guarantee that libraries play together nicely, that only one manner of reading from a file or writing to the output is necessary, that every data provided by a library may be decoded by another, etc.</li>
<li>Additional documentation on whichever library for which we provide glue, including both low-level documentation ("what the heck does this function do?"), mid-level documentation ("why should I use that function?") and high-level documentation ("ok,I'm new here, where do I start?")</li>
<li>A handful of language extensions, provided as Camlp4 modules, to solve common issues, automatically generate boilerplate code, improve readability, ...</li>
<li>In the future, possibly a set of external tools.</li>
<li>Build tools to make all of this transparent.</li>
<li>And, of course, a logo.</li>
</ul>
<div style="text-align:justify;">
[caption id="attachment_184" align="alignnone" width="439" caption="(Batteries courtesy of Benjamin Pavie, Camel courtesy of John Olsen, no animals injured) "]<img class="size-full wp-image-184" title="batteries_large" src="http://dutherenverseauborddelatable.wordpress.com/files/2008/10/batteries_large.png" alt="OCaml Batteries Included" width="439" height="300" />[/caption]
</div>
<p style="text-align:justify;">
<p style="text-align:justify;">OCaml Batteries Included is a project maintained by the community, which means that it depends on you. If you have ideas, suggestions, complaints, bug reports, if you want to participate, to write code, documentation, tutorials, build tools, review code, have a word in policies, if you want a package to be included in the Batteries, or just to contact us, please visit <a href="http://forge.ocamlcore.org/batteries">our website</a> and take advantage of our <a href="http://forge.ocamlcore.org/tracker/?atid=151&#38;group_id=17&#38;func=browse">bug trackers</a>, <a href="http://forge.ocamlcore.org/tracker/?atid=309&#38;group_id=17&#38;func=browse">request for features trackers</a>, <a href="http://forge.ocamlcore.org/forum/?group_id=17">forums</a>, etc. (courtesy of <a href="http://ocamlcore.org/">OCaml Core</a>). We can also often be seen <a href="irc://irc.freenode.net/#ocaml">on irc, on server freenode, channel #ocaml</a> and, of course on the <a href="http://caml.inria.fr/pub/ml-archives/caml-list/index.en.html">OCaml Mailing-List</a>.</p>
<p style="text-align:justify;">OCaml Batteries Included is also a work-in-progress. The version you have in front of your eyes does not contain everything we want to put in it, nor even all the code we have written for it. But we'll get there.  We intend to integrate additional libraries progressively, from minor release to minor release, with major milestones approximately twice per year. This policy is not written in stone and is largely subject to debate, so don't hesitate to comment on the subject.</p>
<p style="text-align:justify;">For more informations on the contents of OCaml Batteries Included, follow us towards <a href="api/index.html">the manual</a>.</p>
<h1 style="text-align:justify;">Relations to other libraries</h1>
<h2 style="text-align:justify;">Project Gallium's Base Library</h2>
<p style="text-align:justify;">First, a word on vocabulary. We call "Base library" <a href="http://caml.inria.fr">the library provided by INRIA with the default distribution of OCaml</a>. We don't call it "standard library" for the simple reason that there are several libraries vying for the status of standard, including Batteries Included.</p>
<p style="text-align:justify;">The relation between Batteries Included and the Base Library is simple: the Base Library is one of the libraries for which Batteries Included provides a uniformization layer. We are not forking the library, merely providing additional functions, additional documentation, boilerplate code...</p>
<p style="text-align:justify;">The complete Base Library is available in Batteries Included as module <code>Legacy</code>. Most modules are also available inside the Batteries module hierarchy, sometimes under different names, and usually completed by numerous new functions. A few modules are considered obsolete and appear only in <code>Legacy</code>.</p>
<h2 style="text-align:justify;">Jane Street's Core</h2>
<p style="text-align:justify;"><a href="http://ocaml.janestcapital.com/">Jane Street's Core</a> is another library vying for the status of standard, this time produced by Jane Street Capital. This library is comparable in purpose and design to the core of Batteries Included (actually, we draw some inspiration from them and we hope that they are going to draw some inspiration from us, too) but there is no code shared between Batteries Included and Jane Street's Core for the moment.</p>
<p style="text-align:justify;">In the future, Batteries Included may depend on Jane Street's Core. This is not the case yet as, according to one of Jane Street's Core's authors, this library may change quite a lot, and in what we understand as possibly incompatible ways, before reaching version 1.0.</p>
<p style="text-align:justify;">We already depend on two components of Jane Street's Core: Type-Conv (a general infrastructure which may be used to generate boilerplate code) and Sexplib (an instance of Type-Conv used to generate code for serializing to/deserializing from human-readable S-Expressions). We intend to extend this to a third component of Jane Street's Core: Bin-Prot, another instance of Type-Conv, used this time to generate serialization to/from binary protocols.</p>
<h2 style="text-align:justify;">ExtLib</h2>
<p style="text-align:justify;"><a href="http://code.google.com/p/ocaml-extlib/">ExtLib</a> is another extension of the OCaml Base Library. ExtLib was designed as a relatively small addition, with the idea of fitting nicely within the OCaml Base Library. Since 2005, ExtLib has essentially stopped growing, following a conscious choice from the maintainers.</p>
<p style="text-align:justify;">OCaml Batteries Included is largely based on ExtLib. Indeed, the core of Batteries is essentially a fork of ExtLib. We intend to maintain  ascending compatibility with ExtLib (with the exception of changes in module names), although we have added a great number of features,  fixed bugs, split code, etc. For most purposes, OCaml Batteries Included contains ExtLib and, in our mind, superseeds this library. We hope that the maintainers and developers of ExtLib will consider migrating to OCaml Batteries Included and helping us with their skills.</p>
<h2 style="text-align:justify;">Community OCaml</h2>
<p style="text-align:justify;"><a href="http://github.com/thelema/ocaml-community/tree/master">Community OCaml</a> is an attempt to turn OCaml into an out-of-the-box complete development platform, including numerous libraries.  We have joined forces with the developers of Community OCaml and we share most of our code. Although the design of Community OCaml is not completely decided yet, it is quite possible that this will end up as distribution consisting in OCaml + Batteries Included + some package manager.</p>
<h2 style="text-align:justify;">OCamlNet</h2>
<p style="text-align:justify;"><a href="http://projects.camlcity.org/projects/ocamlnet.html">OCamlNet</a> is an implementation of numerous Internet protocols for OCaml, along with so many utilities that it almost constitues a complete general-purpose development library for OCaml.</p>
<p style="text-align:justify;">OCaml Batteries Included will depend on OCamlNet and incorporate OCamlNet into its hierarchy. In particular, for the moment, OCaml Batteries Included provides little in the way of libraries for interacting with the operating system, as we intend to use OCamlNet for that purpose.</p>
<h2 style="text-align:justify;">Caml Development Kit</h2>
<p style="text-align:justify;">The <a href="http://pauillac.inria.fr/cdk/">Caml Development Kit</a>, or CDK, was another attempt to build a development platform around OCaml by bundling together OCaml itself and a number of interesting libraries and tools. By opposition to Batteries Included, this was a monolithic distribution, with a custom compiler and very little documentation. Development on CDK seems to have died around 2001.</p>
<p style="text-align:justify;">There is no relation between CDK and Batteries Included other than the common goal. Any feedback from former CDK users or developers will be welcome, though.</p>
<h2 style="text-align:justify;">GODI, Apt, Yum</h2>
<p style="text-align:justify;"><a href="http://godi.camlcity.org/godi/index.html">GODI</a>, <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">Apt</a> and <a href="http://docs.fedoraproject.org/yum/en/">Yum</a> are the three main package managers available for OCaml users. The first one is OCaml-specific, the second one lives in Debian/Ubuntu/Knoppix world and the third one in the Red Hat/Fedora world.</p>
<p style="text-align:justify;">OCaml Batteries Included has no direct relation with either package manager, nor does it replicate the work of any of these managers. However, as Batteries relies on numerous external libraries, use of a package manager is strongly recommended.</p>
<h2 style="text-align:justify;">Findlib</h2>
<p style="text-align:justify;"><a href="http://www.camlcity.org/archive/programming/findlib.html">Findlib </a>is a compile-time package manager for OCaml. It lets developers easily specify which libraries are required and manages compile-time dependencies between installed libraries.</p>
<p style="text-align:justify;">OCaml Batteries Included uses Findlib extensively.</p>
<h1 style="text-align:justify;">Comparable projects, somewhere else</h1>
<h2 style="text-align:justify;">Python Batteries Included</h2>
<p style="text-align:justify;">To the best of our knowledge, the term "Batteries Included" was first coined by the Python community to describe the standard distribution of Python, which in addition to usual data structures, contains modules for handling databases, compression, a number of file format (de)coders including JSON, (X)HTML, XML, CSV, cryptography, logging, text interfaces, threading, inter-process communication, implementation of client and server protocols from SMTP to HTTP, communication with external webbrowsers, image and sound manipulation, internationalization, lexing and parsing, graphical interfaces, unit testing, sandboxing, reflexivity, OS-specific services, ...</p>
<p style="text-align:justify;">This massive number of out-of-the-box features, along with the conciseness of the language, are probably the two main reasons of the success of Python: simple tasks, even those which require complex libraries, may often be programmed with only a few lines and in a few minutes.</p>
<p style="text-align:justify;">Well, obviously, we're trying to provide something as useful with OCaml Batteries Included, but with the added safety and speed of OCaml.</p>
<h2 style="text-align:justify;">Haskell Batteries Included</h2>
<p style="text-align:justify;">The <a href="http://www.haskell.org/haskellwiki/Haskell_Platform">Haskell Platform</a> (although known as "Haskell Batteries Included") is a recent project undertaken by the Haskell community with objectives comparable to OCaml Batteries Included: "provides a comprehensive,<br />
stable and quality tested base for Haskell projects to work from."  At the time of this writing, the Haskell Platform has not released any software, although a first release is expected within a few weeks.</p>
<p style="text-align:justify;">As OCaml Batteries, the Haskell Platform is community-led and relies on a number of decentralized libraries.  As OCaml Batteries, the Haskell Platform requires package management.There are a number of differences in the methods, though.</p>
<p style="text-align:justify;">Some differences are probably trivial: where we strive to work with any of the major package management systems, the Haskell Platform is based solely on Cabal, which may allow them a better integration. Where OCaml Batteries attempts to reclassify existing libraries into one uniform hierarchy of modules, the Haskell Platform keeps the original module names, as decided by their original authors, pre-Platform.</p>
<p style="text-align:justify;">Others are quite far-reaching: OCaml Batteries provides an extended core of libraries to serve as support for standardization and uniformization, while the Haskell Platform doesn't. Similarly, the Haskell Platform doesn't add any uniformization layer, which means that the task of getting libraries to work together lies upon the end-user. Some Haskell libraries may be patched into compliance and uniformization, but this is not always possible, short of creating cyclic dependencies between libraries which should work together but don't. Finally, the Haskell Platform has much stricter guidelines regarding libraries which can or can't make it into the Platform. This is a good thing if library authors are willing to fix whichever problems prevent the inclusion of their work -- something which we don't assume for OCaml Batteries, at least not yet.</p>
<p style="text-align:justify;">Despite these differences, both projects seem based on solid foundations. And hopefully, both will achieve large success.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Whoami in SharePoint]]></title>
<link>http://beradrian.wordpress.com/?p=97</link>
<pubDate>Tue, 23 Sep 2008 21:25:08 +0000</pubDate>
<dc:creator>Adrian</dc:creator>
<guid>http://beradrian.fr.wordpress.com/2008/09/23/whoami-in-sharepoint/</guid>
<description><![CDATA[One of the nicest things in SharePoint is that you can access it not only through the web interface,]]></description>
<content:encoded><![CDATA[<p>One of the nicest things in <strong>SharePoint</strong> is that you can access it not only through the web interface, but through its web services as well. Combining this with <strong>AJAX</strong>, you can build pretty good user interfaces with a SharePoint backend.<br />
When doing this you'll definitely be interested in knowing who is currently logged in.<br />
So if you are modifying a SharePoint generated page (like NewForm.aspx, EditForm.aspx or a page associated with a view) and add (D)HTML code to it, you can easily access the <code>_spUserId</code> variable which holds the current logged in user ID in SharePoint.<br />
From this point on if you're interested in more details you just simply run a query against the user list using SharePoint web services.<br />
If you want to have these information in a page of your own, you can simply run that query using the <strong>CAML</strong> tag <code>UserID</code>. </p>
<blockquote><p><code>
<pre>
&#60;Query&#62;
  &#60;Where&#62;
    &#60;Eq&#62;
      &#60;FieldRef Name="ID"/&#62;
      &#60;Value Type="Integer"&#62;&#60;UserID Type="Integer"/&#62;&#60;/Value&#62;
    &#60;/Eq&#62;
  &#60;/Where&#62;
&#60;/Query&#60;
</pre>
<p></code></p></blockquote>
<p>Just as a note, don't forget to put <code>Type="Integer"</code> in there.</p>
<p>If you wonder how I got over this, you should read my other <a href="http://beradrian.wordpress.com/2008/09/23/discover-caml-by-examples/">article</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Discover CAML by examples]]></title>
<link>http://beradrian.wordpress.com/?p=112</link>
<pubDate>Tue, 23 Sep 2008 18:53:26 +0000</pubDate>
<dc:creator>Adrian</dc:creator>
<guid>http://beradrian.fr.wordpress.com/2008/09/23/discover-caml-by-examples/</guid>
<description><![CDATA[CAML is the SQL of SharePoint. If you will access SharePoint through its web services you will defin]]></description>
<content:encoded><![CDATA[<p><strong>CAML</strong> is the SQL of <strong>SharePoint</strong>. If you will access SharePoint through its <em>web services</em> you will definately need to be familiar to a certain degree with <strong>CAML</strong>. You can read the <a href="http://msdn.microsoft.com/en-us/library/aa134892.aspx">documentation</a> from MSDN, but I will tell you how to learn it through examples. And actually to create your own examples.<br />
There are a few <strong>CAML builders</strong> out there, but if you know how to use SharePoint, you have a basic one hidden in there.<br />
Let's take it step by step.</p>
<ol>
<li>Go to your SharePoint</li>
<li>Create a list</li>
<li>Create a view for the list (for the sake of simplicity let's name it <code>My View</code>)</li>
<li>Choose the conditions that you're interested in for the query, let's say all the items modified today, and save the view.<br />
[caption id="attachment_118" align="aligncenter" width="300" caption="View filter in SharePoint"]<a href="http://beradrian.files.wordpress.com/2008/09/myfilter.gif"><img src="http://beradrian.wordpress.com/files/2008/09/myfilter.gif?w=300" alt="View filter in SharePoint" title="View filter in SharePoint" width="300" height="178" class="size-medium wp-image-118" /></a>[/caption]
</li>
<li>Go to the list settings and save the list as a template<br />
[caption id="attachment_120" align="aligncenter" width="300" caption="Save list as template in SharePoint"]<a href="http://beradrian.files.wordpress.com/2008/09/mytemplate.gif"><img src="http://beradrian.wordpress.com/files/2008/09/mytemplate.gif?w=300" alt="Save list as template in SharePoint" title="Save list as template in SharePoint" width="300" height="151" class="size-medium wp-image-120" /></a>[/caption]<br />
[caption id="attachment_122" align="aligncenter" width="300" caption="List template is saved"]<a href="http://beradrian.files.wordpress.com/2008/09/mytemplatesaved.gif"><img src="http://beradrian.wordpress.com/files/2008/09/mytemplatesaved.gif?w=300" alt="List template is saved" title="List template is saved" width="300" height="84" class="size-medium wp-image-122" /></a>[/caption]
</li>
<li>Go to the template list library<br />
[caption id="attachment_128" align="aligncenter" width="300" caption="List template gallery"]<a href="http://beradrian.wordpress.com/files/2008/09/mygallery.gif"><img src="http://beradrian.wordpress.com/files/2008/09/mygallery.gif?w=300" alt="List template gallery" title="List template gallery" width="300" height="80" class="size-medium wp-image-128" /></a>[/caption]
</li>
<li>Download the template</li>
<li>The template is actually a zip file. Rename it from <code>mylist.stp</code> to <code>mylist.zip</code> and extract the <code>manifest.xml</code> file from it.</li>
<li>Now open the XML file (with FireFox) and go to the element <code>/ListTemplate/UserLists/List/Metadata/Views/View[@DisplayName = 'My View']</code>(the first <code>/ListTemplate/UserLists/List/Metadata/Views/View</code> for which the attribute <code>DisplayName</code> is <code>My View</code>). Under this element you will find a <code>Query</code> element. This is what you need, your <strong>CAML query</strong>.<br />
<a href="http://beradrian.files.wordpress.com/2008/09/manifest_xml.gif"><img src="http://beradrian.wordpress.com/files/2008/09/manifest_xml.gif?w=300" alt="" title="manifest.xml" width="300" height="251" class="aligncenter size-medium wp-image-130" /></a>
</li>
</ol>
<p>And that <code>manifest.xml</code> file is also the source of some other useful stuff like the internal name of the fields (the <code>StaticName</code> attribute of the <code>/ListTemplate/UserLists/List/Metadata/Fields/Field</code> elements).</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[CAML Queries..]]></title>
<link>http://hlndn.wordpress.com/?p=3</link>
<pubDate>Thu, 18 Sep 2008 14:24:17 +0000</pubDate>
<dc:creator>hlndn</dc:creator>
<guid>http://hlndn.fr.wordpress.com/2008/09/18/caml-queries/</guid>
<description><![CDATA[I&#8217;ll let my first post be about CAML queries in Sharepoint&#8230; 
I was trying to write Caml ]]></description>
<content:encoded><![CDATA[<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">I'll let my first post be about CAML queries in Sharepoint... </span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">I was trying to write Caml Query to retrieve list items from Sharepoint, so I decided to write a post about that. First; Operators in Caml Queries are;</span></p>
<ul type="disc">
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Eq<span>                           </span>Equals</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Neq<span>                        </span>Not equal</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Gt<span>                           </span>Greater than</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Ge<span>                           </span>Greater than or equal</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Lt<span>                            </span>Lower than</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Le<span>                           </span>Lower than</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">IsNull<span>                    </span>Is null</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">BeginsWith<span>         </span>Begins with</span></li>
<li class="MsoNormal"><span style="font-size:10pt;font-family:'Book Antiqua',serif;">Contains<span>              </span>Contains</span></li>
</ul>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">Here comes a simple query, which can get list items whose FieldA property is equal to ChoiceB; </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Where&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Eq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldA</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="Choice"&#62;</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">ValueB</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Eq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;"><span> </span>&#60;/Where&#62;</span><span style="font-size:10pt;font-family:'Book Antiqua',serif;">  </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;font-family:'Book Antiqua',serif;"> </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;font-family:'Book Antiqua',serif;"><span> </span>You can add as many filters as you like by using And or Or. And lets compare Date values now;    </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;font-family:'Book Antiqua',serif;"> </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Where&#62; </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;"> <span>               </span>&#60;And&#62; </span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldStartDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">&#60;Today/&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldEndDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">&#60;Today/&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Where&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;"> </span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;"> You can use &#60;Today/&#62; to give today’s date. Or you can use &#60;Now/&#62; if you want to also take time part account.</span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">By the way, you can use something like &#60;Today OffsetDays=”+3” /&#62; if you want to say 3 days after today.</span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">To get previous days use (-) (negative numbers), or to get next days use (+) (positive numbers)</span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">I searched but could not find something like OffsetMonths, if you know, please let me know.</span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">Also I should say, one of the common mistakes, I am always doing; writing more than 2 statements inside an “And” or “Or”. You should not write more than 2 statements! </span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">Just write it like;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Where&#62; </span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;"> <span>               </span>&#60;And&#62; </span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;"> <span>               </span>&#60;And&#62; </span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">…..</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">…..</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">…..</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Where&#62;</span></p>
<p class="MsoNormal" style="line-height:14.25pt;margin:0 0 10pt;"><span style="font-size:10pt;color:#000000;font-family:'Book Antiqua',serif;">And finally order statement should look like that;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;OrderBy&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldA</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" Ascending="True"/&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/OrderBy&#62;</span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;line-height:115%;font-family:'Book Antiqua',serif;"> </span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;line-height:115%;font-family:'Book Antiqua',serif;">Take a look at my final CAML query; (just as an example)</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Query&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Where&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Eq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldA</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="Choice"&#62;ChoiceA&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Eq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Or&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Or&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldStartDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today/&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldStartDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today OffsetDays="+10" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Leq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldEndDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldEndDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today OffsetDays="+10" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 216pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Leq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Or&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 72pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldStartDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Leq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Geq&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldEndDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" /&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 144pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Value Type="DateTime" IncludeTimeValue="False"&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;Today OffsetDays="+10" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 180pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Value&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Geq&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 108pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Or&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0 0 0 36pt;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/And&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Where&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;OrderBy&#62;</span></p>
<p class="MsoNoSpacing" style="text-indent:36pt;margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;FieldRef Name="</span><span style="font-size:10pt;color:#ff66cc;font-family:'Book Antiqua',serif;">FieldStartDate</span><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">" Ascending="True" /&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/OrderBy&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"><span style="font-size:10pt;color:#6699ff;font-family:'Book Antiqua',serif;">&#60;/Query&#62;</span></p>
<p class="MsoNoSpacing" style="margin:0;"> </p>
<p class="MsoNoSpacing" style="margin:0;"><span style="color:#000000;font-family:Book Antiqua;">Found out that there is a CAML Builder tool, you can check that out from <a title="Caml Builder" href="http://www.u2u.be/res/Tools/SharePointCamlQueryBuilder.aspx" target="_blank">this site</a>...</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Creating multiuser columns in CAML schemas]]></title>
<link>http://sharepointnutbag.wordpress.com/?p=40</link>
<pubDate>Thu, 11 Sep 2008 13:35:05 +0000</pubDate>
<dc:creator>jmiller980</dc:creator>
<guid>http://sharepointnutbag.fr.wordpress.com/2008/09/11/creating-multiuser-columns-in-caml-schemas/</guid>
<description><![CDATA[ If you want to create a mulituser column then you should not only declare the Type as &#8220;User]]></description>
<content:encoded><![CDATA[<p> If you want to create a mulituser column then you should not only declare the Type as "UserMulti" (obvious) but you also have to add an attribute Mult="TRUE" to get it working (not obvious). I really don't know why you have to, it's not explained in the slightest in the SDK documentation. Here's my example:</p>
<p> &#60;Field<br />
    ID="{5B9985AC-C959-458d-BE78-A464A013C0C9}"<br />
    Name="SecondaryBusinessSponsor"<br />
    DisplayName="Secondary Business Sponsors"<br />
    Type="UserMulti"  <br />
    Group="TMG Columns"<br />
  Mult="TRUE"&#62;<br />
  &#60;/Field&#62;</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Functional programming: Examples, Methods and Concepts]]></title>
<link>http://mauriziostorani.wordpress.com/?p=434</link>
<pubDate>Fri, 29 Aug 2008 14:02:53 +0000</pubDate>
<dc:creator>Maurizio Storani</dc:creator>
<guid>http://mauriziostorani.fr.wordpress.com/2008/08/29/functional-programming-examples-methods-and-concepts/</guid>
<description><![CDATA[In computer science, functional programming is a programming paradigm that treats computation as the]]></description>
<content:encoded><![CDATA[<p><img class="alignleft" style="margin:3px 8px;" src="http://www.computerhistory.org/timeline/images/1945_zuse_large.jpg" alt="" width="230" height="312" />In computer science, <strong>functional programming</strong> is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast with the imperative programming style that emphasizes changes in state.</p>
<p>The <a title="Lambda calculus" href="http://en.wikipedia.org/wiki/Lambda_calculus" target="_blank">lambda calculus</a> provides the model for functional programming. Modern functional languages can be viewed as embellishments to the lambda calculus.</p>
<p>While not fully functional, both the original <a title="Lisp (programming language)" href="http://en.wikipedia.org/wiki/Lisp_%28programming_language%29" target="_blank">Lisp</a> and <a title="APL (programming language)" href="http://en.wikipedia.org/wiki/APL_%28programming_language%29" target="_blank">APL</a> were important in the development of functional programming. Later versions of Lisp such as Scheme and variants of APL did provide full functional support. Other important functional languages include <a title="Erlang (programming language)" href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29" target="_blank">Erlang</a>, <a title="Haskell (programming language)" href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29" target="_blank">Haskell</a>, and <a title="ML (programming language)" href="http://en.wikipedia.org/wiki/ML_%28programming_language%29" target="_blank">ML</a>.</p>
<p>Functional programming languages, especially purely functional ones, have largely been emphasized in <span class="mw-redirect">academia</span> rather than in commercial software development. However, notable functional programming languages used in industry and commercial applications include Erlang, <a title="Objective Caml" href="http://en.wikipedia.org/wiki/Objective_Caml" target="_blank">OCaml</a>, Haskell, Scheme (since 1986) and <span class="mw-redirect">domain-specific programming languages</span> like R (statistics), Mathematica (symbolic math), J and K (financial analysis), and <span class="mw-redirect">XSLT</span> (XML).</p>
<h2>What is a purely functional language</h2>
<p>Functional programming languages are informally classified into pure and impure languages. The precise meaning of this distinction has been a matter of controversy. We therefore investigate a formal definition of purity. We begin by showing that some proposed definitions that rely on confluence, soundness of the beta axiom, preservation of pure observational equivalences, and independence of the order of evaluation, do not withstand close scrutiny. We propose instead a definition based on parameter-passing independence. Intuitively, the definition implies that functions are pure mappings from arguments to results; the operational decision of how to pass the arguments is irrelevant. In the context of Haskell, our definition is consistent with the fact that the traditional call-by-name denotational semantics coincides with the traditional call-by-need implementation. Furthermore, our definition is compatible with the stream-based, continuationbased, and monad-based integration of computational effects in Haskell. Finally, we observe that call-by-name reasoning principles are unsound in compilers for monadic Haskell.</p>
<h3><span class="mw-headline">Functional programming in non-functional languages</span></h3>
<p>It is possible to employ a functional style of programming in languages that are not traditionally considered functional languages. Some non-functional languages have borrowed features such as <span class="mw-redirect">higher-order functions</span>, and <span class="mw-redirect">list comprehensions</span> from functional programming languages. This makes it easier to adopt a functional style when using these languages. Functional constructs such as higher-order functions and lazy lists can be obtained in C++ via libraries.<sup class="reference">[15]</sup> In C one can use function pointers to get some of the effects of higher-order functions, for example one can implement the common function map using function pointers. Widespread declarative domain specific languages like SQL and Lex/Yacc, while not always <span class="mw-redirect">Turing-complete</span>, use some elements of functional programming, especially in eschewing mutable values.</p>
<h2><span class="mw-headline">Coding styles</span></h2>
<p>Imperative programs tend to emphasize the series of steps taken by a program in carrying out an action, while functional programs tend to emphasize the composition and arrangement of functions, often without specifying explicit <em>steps</em>. A simple example of two solutions to the same programming goal (using the same multi-paradigm language Python) illustrates this.</p>
<div style="text-align:left;" dir="ltr">
<pre class="source-python"><span class="co1"># imperative style</span>
target = <span class="br0">[</span><span class="br0">]</span> <span class="co1"># create empty list</span>
<span class="kw1">for</span> item <span class="kw1">in</span> source_list: <span class="co1"># iterate over each thing in source</span>
    trans1 = G<span class="br0">(</span>item<span class="br0">)</span> <span class="co1"># transform the item with the G() function</span>
    trans2 = F<span class="br0">(</span>trans1<span class="br0">)</span> <span class="co1"># second transform with the F() function</span>
    target.<span class="me1">append</span><span class="br0">(</span>trans2<span class="br0">)</span> <span class="co1"># add transformed item to target</span></pre>
</div>
<p>A functional version has a different feel to it:</p>
<div style="text-align:left;" dir="ltr">
<pre class="source-python"><span class="co1"># functional style</span>
<span class="co1"># FP-oriented languages often have standard compose()</span>
compose2 = <span class="kw1">lambda</span> F, G: <span class="kw1">lambda</span> x: F<span class="br0">(</span>G<span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span>
target = <span class="kw2">map</span><span class="br0">(</span>compose2<span class="br0">(</span>F, G<span class="br0">)</span>, source_list<span class="br0">)</span></pre>
</div>
<p>In contrast to the imperative style that describes the steps involved in building <code>target</code>, the functional style describes the mathematical relationship between <code>source_list</code> and <code>target</code>.</p>
<h2><strong>List of functional programming topics</strong></h2>
<h3><span class="mw-headline">Foundational concepts</span></h3>
<ul>
<li><a title="Programming paradigm" href="http://en.wikipedia.org/wiki/Programming_paradigm">Programming paradigm</a></li>
<li><a title="Declarative programming" href="http://en.wikipedia.org/wiki/Declarative_programming">Declarative programming</a>
<ul>
<li><a title="Declarative programming language" href="http://en.wikipedia.org/wiki/Declarative_programming_language">Declarative programming language</a></li>
</ul>
</li>
<li><a class="new" title="Programs as mathematical objects (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Programs_as_mathematical_objects&#38;action=edit&#38;redlink=1">Programs as mathematical objects</a></li>
<li><a title="Function-level programming" href="http://en.wikipedia.org/wiki/Function-level_programming">Function-level programming</a></li>
<li><a title="Purely functional" href="http://en.wikipedia.org/wiki/Purely_functional">Purely functional</a></li>
<li><a class="mw-redirect" title="Lambda programming" href="http://en.wikipedia.org/wiki/Lambda_programming">Lambda programming</a></li>
<li><a title="Scope (programming)" href="http://en.wikipedia.org/wiki/Scope_%28programming%29">Static scoping</a></li>
<li><a title="Higher-order function" href="http://en.wikipedia.org/wiki/Higher-order_function">Higher-order function</a></li>
<li><a title="Referential transparency" href="http://en.wikipedia.org/wiki/Referential_transparency">Referential transparency</a></li>
</ul>
<p><a id="Lambda_calculus" name="Lambda_calculus"></a></p>
<h3><span class="mw-headline"><a title="Lambda calculus" href="http://en.wikipedia.org/wiki/Lambda_calculus">Lambda calculus</a></span></h3>
<ul>
<li><a title="Currying" href="http://en.wikipedia.org/wiki/Currying">Currying</a></li>
<li><a class="mw-redirect" title="Lambda abstraction" href="http://en.wikipedia.org/wiki/Lambda_abstraction">Lambda abstraction</a></li>
<li><a class="mw-redirect" title="Church-Rosser theorem" href="http://en.wikipedia.org/wiki/Church-Rosser_theorem">Church-Rosser theorem</a></li>
<li><a title="Extensionality" href="http://en.wikipedia.org/wiki/Extensionality">Extensionality</a></li>
<li><a class="mw-redirect" title="Church numeral" href="http://en.wikipedia.org/wiki/Church_numeral">Church numeral</a></li>
</ul>
<p><a id="Combinatory_logic" name="Combinatory_logic"></a></p>
<h3><span class="mw-headline"><a title="Combinatory logic" href="http://en.wikipedia.org/wiki/Combinatory_logic">Combinatory logic</a></span></h3>
<ul>
<li><a title="Fixed point combinator" href="http://en.wikipedia.org/wiki/Fixed_point_combinator">Fixed point combinator</a></li>
<li><a title="SKI combinator calculus" href="http://en.wikipedia.org/wiki/SKI_combinator_calculus">SKI combinator calculus</a></li>
<li><a title="B,C,K,W system" href="http://en.wikipedia.org/wiki/B,C,K,W_system">B,C,K,W system</a></li>
<li><a title="SECD machine" href="http://en.wikipedia.org/wiki/SECD_machine">SECD machine</a></li>
<li><a title="Graph reduction machine" href="http://en.wikipedia.org/wiki/Graph_reduction_machine">Graph reduction machine</a></li>
</ul>
<p><a id="Intuitionistic_logic" name="Intuitionistic_logic"></a></p>
<h3><span class="mw-headline"><a title="Intuitionistic logic" href="http://en.wikipedia.org/wiki/Intuitionistic_logic">Intuitionistic logic</a></span></h3>
<ul>
<li><a title="Sequent" href="http://en.wikipedia.org/wiki/Sequent">Sequent</a>, <a title="Sequent calculus" href="http://en.wikipedia.org/wiki/Sequent_calculus">sequent calculus</a></li>
<li><a title="Natural deduction" href="http://en.wikipedia.org/wiki/Natural_deduction">Natural deduction</a></li>
<li><a title="Intuitionistic type theory" href="http://en.wikipedia.org/wiki/Intuitionistic_type_theory">Intuitionistic type theory</a></li>
<li><a class="mw-redirect" title="BHK interpretation" href="http://en.wikipedia.org/wiki/BHK_interpretation">BHK interpretation</a></li>
<li><a class="mw-redirect" title="Curry-Howard" href="http://en.wikipedia.org/wiki/Curry-Howard">Curry-Howard</a></li>
<li><a title="Linear logic" href="http://en.wikipedia.org/wiki/Linear_logic">Linear logic</a></li>
<li><a title="Game semantics" href="http://en.wikipedia.org/wiki/Game_semantics">Game semantics</a></li>
</ul>
<p><a id="Type_theory" name="Type_theory"></a></p>
<h3><span class="mw-headline"><a title="Type theory" href="http://en.wikipedia.org/wiki/Type_theory">Type theory</a></span></h3>
<ul>
<li><a title="Typed lambda calculus" href="http://en.wikipedia.org/wiki/Typed_lambda_calculus">Typed lambda calculus</a></li>
<li><a class="mw-redirect" title="Typed and untyped languages" href="http://en.wikipedia.org/wiki/Typed_and_untyped_languages">Typed and untyped languages</a></li>
<li><a title="Type signature" href="http://en.wikipedia.org/wiki/Type_signature">Type signature</a></li>
<li><a title="Type inference" href="http://en.wikipedia.org/wiki/Type_inference">Type inference</a></li>
<li><a class="mw-redirect" title="Datatype" href="http://en.wikipedia.org/wiki/Datatype">Datatype</a></li>
<li><a title="Algebraic data type" href="http://en.wikipedia.org/wiki/Algebraic_data_type">Algebraic data type</a></li>
<li><a class="mw-redirect" title="Type variable" href="http://en.wikipedia.org/wiki/Type_variable">Type variable</a></li>
<li><a class="mw-redirect" title="First-class value" href="http://en.wikipedia.org/wiki/First-class_value">First-class value</a></li>
<li><a class="mw-redirect" title="Polymorphism (computer science)" href="http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29">Polymorphism</a></li>
<li><a title="Calculus of constructions" href="http://en.wikipedia.org/wiki/Calculus_of_constructions">Calculus of constructions</a></li>
</ul>
<p><a id="Denotational_semantics" name="Denotational_semantics"></a></p>
<h3><span class="mw-headline"><a title="Denotational semantics" href="http://en.wikipedia.org/wiki/Denotational_semantics">Denotational semantics</a></span></h3>
<ul>
<li><a title="Domain theory" href="http://en.wikipedia.org/wiki/Domain_theory">Domain theory</a>
<ul>
<li><a class="mw-redirect" title="Directed complete partial order" href="http://en.wikipedia.org/wiki/Directed_complete_partial_order">Directed complete partial order</a></li>
<li><a class="mw-redirect" title="Knaster-Tarski theorem" href="http://en.wikipedia.org/wiki/Knaster-Tarski_theorem">Knaster-Tarski theorem</a></li>
</ul>
</li>
</ul>
<p><a id="Category_theory" name="Category_theory"></a></p>
<h3><span class="mw-headline"><a title="Category theory" href="http://en.wikipedia.org/wiki/Category_theory">Category theory</a></span></h3>
<ul>
<li><a class="mw-redirect" title="Cartesian-closed category" href="http://en.wikipedia.org/wiki/Cartesian-closed_category">Cartesian-closed category</a></li>
<li><a title="Yoneda lemma" href="http://en.wikipedia.org/wiki/Yoneda_lemma">Yoneda lemma</a></li>
</ul>
<p><a id="Operational_issues" name="Operational_issues"></a></p>
<h3><span class="mw-headline">Operational issues</span></h3>
<ul>
<li><a title="Graph reduction" href="http://en.wikipedia.org/wiki/Graph_reduction">Graph reduction</a>
<ul>
<li><a class="mw-redirect" title="Combinator graph reduction" href="http://en.wikipedia.org/wiki/Combinator_graph_reduction">Combinator graph reduction</a></li>
</ul>
</li>
<li><a class="mw-redirect" title="Non-strict programming language" href="http://en.wikipedia.org/wiki/Non-strict_programming_language">Non-strict programming language</a></li>
<li><a title="Lazy evaluation" href="http://en.wikipedia.org/wiki/Lazy_evaluation">Lazy evaluation</a>, <a title="Eager evaluation" href="http://en.wikipedia.org/wiki/Eager_evaluation">eager evaluation</a></li>
<li><a class="mw-redirect" title="Speculative evaluation" href="http://en.wikipedia.org/wiki/Speculative_evaluation">Speculative evaluation</a></li>
<li><a class="mw-redirect" title="Side-effect (computer science)" href="http://en.wikipedia.org/wiki/Side-effect_%28computer_science%29">Side-effect</a></li>
<li><a title="Assignment (computer science)" href="http://en.wikipedia.org/wiki/Assignment_%28computer_science%29">Assignment</a>
<ul>
<li><a class="new" title="Setq (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Setq&#38;action=edit&#38;redlink=1">Setq</a></li>
</ul>
</li>
<li><a class="mw-redirect" title="Continuation passing style" href="http://en.wikipedia.org/wiki/Continuation_passing_style">Continuation passing style</a></li>
<li><a title="Operational semantics" href="http://en.wikipedia.org/wiki/Operational_semantics">Operational semantics</a></li>
<li><a title="State transition system" href="http://en.wikipedia.org/wiki/State_transition_system">State transition system</a></li>
<li><a title="Simulation preorder" href="http://en.wikipedia.org/wiki/Simulation_preorder">Simulation preorder</a></li>
<li><a title="Bisimulation" href="http://en.wikipedia.org/wiki/Bisimulation">Bisimulation</a></li>
<li><a class="mw-redirect" title="Monads in functional programming" href="http://en.wikipedia.org/wiki/Monads_in_functional_programming">Monads in functional programming</a></li>
<li><a title="Exception handling" href="http://en.wikipedia.org/wiki/Exception_handling">Exception handling</a></li>
<li><a title="Garbage collection (computer science)" href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29">Garbage collection (computer science)</a></li>
</ul>
<p><a id="Languages" name="Languages"></a></p>
<h3><span class="mw-headline">Languages</span></h3>
<ul>
<li><a class="mw-redirect" title="Clean programming language" href="http://en.wikipedia.org/wiki/Clean_programming_language">Clean programming language</a></li>
<li><a class="mw-redirect" title="Erlang programming language" href="http://en.wikipedia.org/wiki/Erlang_programming_language">Erlang programming language</a></li>
<li><a class="mw-redirect" title="FP programming language" href="http://en.wikipedia.org/wiki/FP_programming_language">FP programming language</a></li>
<li><a class="mw-redirect" title="F Sharp programming language" href="http://en.wikipedia.org/wiki/F_Sharp_programming_language">F# programming language</a>,</li>
<li><a title="Haskell (programming language)" href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29">Haskell programming language</a>
<ul>
<li><a title="Glasgow Haskell Compiler" href="http://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler">Glasgow Haskell Compiler</a></li>
<li><a title="Hugs" href="http://en.wikipedia.org/wiki/Hugs">Hugs</a></li>
<li><a title="Template Haskell" href="http://en.wikipedia.org/wiki/Template_Haskell">Template Haskell</a></li>
</ul>
</li>
<li><a title="ISWIM" href="http://en.wikipedia.org/wiki/ISWIM">ISWIM</a></li>
<li><a title="Kent Recursive Calculator" href="http://en.wikipedia.org/wiki/Kent_Recursive_Calculator">Kent Recursive Calculator</a></li>
<li><a class="new" title="Kogut programming language (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Kogut_programming_language&#38;action=edit&#38;redlink=1">Kogut programming language</a></li>
<li><a class="mw-redirect" title="Lisp programming language" href="http://en.wikipedia.org/wiki/Lisp_programming_language">Lisp</a>
<ul>
<li><a title="AutoLISP" href="http://en.wikipedia.org/wiki/AutoLISP">AutoLISP</a></li>
<li><a title="Common Lisp" href="http://en.wikipedia.org/wiki/Common_Lisp">Common Lisp</a></li>
<li><a title="Emacs Lisp" href="http://en.wikipedia.org/wiki/Emacs_Lisp">Emacs Lisp</a></li>
<li><a title="Scheme (programming language)" href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29">Scheme programming language</a></li>
<li><a title="Lush (programming language)" href="http://en.wikipedia.org/wiki/Lush_%28programming_language%29">Lush programming language</a></li>
</ul>
</li>
<li><a class="mw-redirect" title="Mercury programming language" href="http://en.wikipedia.org/wiki/Mercury_programming_language">Mercury programming language</a></li>
<li><a class="mw-redirect" title="Miranda programming language" href="http://en.wikipedia.org/wiki/Miranda_programming_language">Miranda programming language</a></li>
<li><a class="mw-redirect" title="ML programming language" href="http://en.wikipedia.org/wiki/ML_programming_language">ML programming language</a>
<ul>
<li><a title="ML programming language family" href="http://en.wikipedia.org/wiki/Category:ML_programming_language_family">Category:ML programming language family</a></li>
<li><a title="Objective Caml" href="http://en.wikipedia.org/wiki/Objective_Caml">Objective Caml</a></li>
<li><a title="Standard ML" href="http://en.wikipedia.org/wiki/Standard_ML">Standard ML</a></li>
</ul>
</li>
<li><a title="Scala (programming language)" href="http://en.wikipedia.org/wiki/Scala_%28programming_language%29">Scala</a></li>
<li><a title="SISAL" href="http://en.wikipedia.org/wiki/SISAL">SISAL</a></li>
</ul>
<h2>Curry: A Truly Integrated Functional Logic Language</h2>
<p>Curry is a universal programming language aiming to amalgamate the most important declarative programming paradigms, namely functional programming and logic programming. Moreover, it also covers the most important operational principles developed in the area of integrated functional logic languages: "residuation" and "narrowing" (there is an older survey and a newer survey on functional logic programming).</p>
<p>Curry combines in a seamless way features from functional programming (nested expressions, higher-order functions, lazy evaluation), logic programming (logical variables, partial data structures, built-in search), and concurrent programming (concurrent evaluation of expressions with synchronization on logical variables). Moreover, Curry provides additional features in comparison to the pure languages (compared to functional programming: search, computing with partial information; compared to logic programming: more efficient evaluation due to the deterministic and demand-driven evaluation of functions).</p>
<p>The development of Curry is an international initiative intended to provide a common platform for the research, teaching and application of integrated functional logic languages. The design of Curry is mainly discussed in the Curry mailing list. A detailed report describing the language is available here. To get an idea of Curry, you may have a look into the short list of Curry's features or a tutorial on Curry. (<a href="http://www.informatik.uni-kiel.de/~curry,/" target="_blank">more</a>)</p>
<h2>Microsoft moves on F# functional language</h2>
<p><strong>F#</strong> (pronounced <strong>F Sharp</strong>) is a multi-paradigm programming language, targeting the .NET Framework, that encompasses functional programming as well as imperative object-oriented programming disciplines. It is a variant of ML and is largely compatible with the <span class="mw-redirect">OCaml</span> implementation. F# was initially developed by <span class="new">Don Syme</span> at Microsoft Research but is now being developed at Microsoft Developer Division and will be distributed as a fully supported language in the .NET Framework and Visual Studio ecosystem.</p>
<p>F# is a programming language that provides the much sought-after combination of   <strong>type safety</strong>,  <strong>performance</strong> and <strong>scripting</strong>, with all the advantages of running on a high-quality,   well-supported modern runtime system.  F# gives you a combination of (<a href="http://research.microsoft.com/fsharp/fsharp.aspx" target="_blank">more</a>)</p>
<h2>Haskell</h2>
<p>Haskell is an advanced purely functional programming language. The product of more than twenty years of cutting edge research,  it allows rapid development of robust, concise, correct software. With strong support for <span class="external text">integration with other languages</span>, built-in <span class="external text">concurrency and parallelism</span>, debuggers, profilers, <span class="external text">rich libraries</span> and an active community, Haskell makes it easier to produce flexible, maintainable  high-quality software. (<a href="http://www.haskell.org/" target="_blank">more</a>)</p>
<h3>Simon Peyton Jones on Functional Programming and Haskell on www.se-radio.net</h3>
<p>We start our discussion with a brief look at what Haskell is and how a pure  functional language is different from non-pure languages. We then look at the  basic building blocks and the philosophy of the language, discussing concepts  such as the lambda calculus, closures, currying, immutability, lazy evaluation,  memoization, and the role of data types in functional languages. A significant  part of the discussion is then spent on the management of side effects in a pure  language - in other words, the importance of monads. We conclude the episode  with a look at Haskell's importance and community today.</p>
<p>[audio=http://media.libsyn.com/media/seradio/seradio-episode108-simonPeytonJonesOnFunctionalProgramming.mp3]</p>
<p><a href="http://www.se-radio.net/podcast/2008-08/episode-108-simon-peyton-jones-functional-programming-and-haskell" target="_blank">link</a></p>
<h2>Objective Caml</h2>
<p><strong>Objective Caml</strong> (<strong>OCaml</strong>) is the main implementation of the Caml programming language, created by Xavier Leroy, <span class="new">Jérôme Vouillon</span>, Damien Doligez, <span class="new">Didier Rémy</span> and others in 1996. OCaml is an open source project managed and principally maintained by <span class="mw-redirect">INRIA</span>.</p>
<p>OCaml extends the core Caml language with object-oriented constructs.</p>
<p>OCaml's toolset includes an interactive toplevel interpreter, a bytecode compiler, and an optimizing <span class="mw-redirect">native code</span> compiler. It has a large standard library that makes it useful for many of the same applications as Python or Perl, as well as robust modular and object-oriented programming constructs that make it applicable for large-scale software engineering.</p>
<p>OCaml is the successor to Caml Light. The acronym CAML originally stood for <em>Categorical Abstract Machine Language</em>, although OCaml abandons this abstract machine. (<a href="http://caml.inria.fr/" target="_blank">more</a>)</p>
<h2>Coq</h2>
<p>As it turns out Coq is really a dependently typed functional programming language masquerading as a proof assistant! I’ve spent quite a lot of time over the past few weeks writing total functional programs in Coq and proving properties about them. I’ve done a bunch of simple things so far, including a proof of correctness for various properties of insertion sort. I started with merge sort, but stalled when it got too complicated. I’m starting to get a feel for using Coq however and large proofs are getting much easier. (<a href="http://www.rubrication.net/2007/03/07/coq/" target="_blank">more</a>)</p>
<h2>Functional Programming with Python (RuPy 2008)</h2>
<p><strong>Python</strong> is a general-purpose, high-level programming language. Its design philosophy emphasizes programmer productivity and code readability. Python's core syntax and semantics are minimalist, while the standard library is large and comprehensive. It is unusual among popular programming languages in using whitespace as block delimiters.</p>
<p>Python supports multiple programming paradigms (primarily object oriented, imperative, and functional) and features a fully <span class="mw-redirect">dynamic type</span> system and automatic memory management; similar to Perl, Ruby, Scheme, and Tcl.</p>
<p>Python was first released by Guido van Rossum in 1991. The language has an open, community-based development model managed by the non-profit Python Software Foundation. While various parts of the language have formal specifications and standards, the language as a whole is not formally specified. The <em>de facto</em> standard for the language is the CPython.</p>
<p style="text-align:center;">[slideshare id=370124&#38;doc=functionalpython-1208997222437657-8&#38;w=425]</p>
<p style="text-align:center;">
<p style="text-align:right;"><em>[www.wikipedia.org]<br />
[http://caml.inria.fr/]<br />
[http://www.informatik.uni-kiel.de/~curry,/]<br />
[http://www.haskell.org/]<br />
[http://www.infoworld.com]<br />
[http://citeseerx.ist.psu.edu]<br />
[http://www.rubrication.net/2007/03/07/coq/]<br />
[http://research.microsoft.com/fsharp/fsharp.aspx]</em></p>
<p><!-- AddThis Button BEGIN --> <a title="Bookmark and Share" href="http://www.addthis.com/bookmark.php?wt=nw&#38;logo=http://mauriziostorani.wordpress.com/files/2008/07/logo_for_add.jpg&#38;pub=flamel&#38;url=http://mauriziostorani.wordpress.com/2008/08/29/functional-programming-examples-methods-and-concepts&#38;title=Functional programming: Examples, Methods and Concepts" target="_blank"><img class="alignleft" src="http://s9.addthis.com/button1-bm.gif" border="0" alt="Bookmark and Share" width="125" height="16" /></a><br />
<!-- AddThis Button END --></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Client Memcached pour Objective Caml]]></title>
<link>http://stephanelegrand.wordpress.com/?p=81</link>
<pubDate>Wed, 27 Aug 2008 19:55:07 +0000</pubDate>
<dc:creator>Stéphane Legrand</dc:creator>
<guid>http://stephanelegrand.fr.wordpress.com/2008/08/27/client-memcached-pour-objective-caml/</guid>
<description><![CDATA[
Introduction :

Nous allons voir comment développer un client pour le logiciel serveur Memcached a]]></description>
<content:encoded><![CDATA[<ul>
<li>Introduction :</li>
</ul>
<p>Nous allons voir comment développer un client pour le logiciel serveur Memcached avec le langage Objective Caml. Le logiciel Memcached permet en résumé de stocker des données en mémoire vive ce qui offre des accès très rapides. Une valeur est simplement indexée par une clef unique qui est utilisée par le client pour écrire, modifier ou lire cette donnée. Memcached est typiquement utilisé pour stocker des valeurs temporaires afin de gérer un cache d'où son nom. Son protocole est relativement simple ce qui en fait un bon candidat pour une première approche du développement en Objective Caml.</p>
<p>Le code source complet est disponible <a title="Archive code source Memcache Objective Caml" href="http://www.mediafire.com/?qu5muzn2ngc" target="_blank">dans cette archive</a>.</p>
<p><!--more--></p>
<ul>
<li>Protocole Memcached :</li>
</ul>
<p>La documentation disponible sur le protocole donne un premier aperçu des fonctions qui seront nécessaires :</p>
<p>- Les commandes simples comme la demande de version du serveur ou le "flush_all" nécessitent simplement l'envoi d'une seule ligne de texte au serveur qui enverra en réponse une ligne de texte.</p>
<p>- Les commandes plus complexes comme les statistiques ou l'écriture d'une donnée nécessitent de gérer l'envoi ou la réception de plusieurs lignes.</p>
<p>- Il sera nécessaire de pouvoir vérifier si la réponse du serveur à une commande du client ne correspond pas à une erreur.</p>
<p>- Nous aurons évidemment besoin d'une fonction pour ouvrir et fermer la connexion au serveur Memcached.</p>
<p>- Chaque commande prévue par le protocole sera implémentée par une fonction dédiée.</p>
<ul>
<li>Typage :</li>
</ul>
<p>Le protocole nous indique également les types à gérer. Il est par exemple souvent fait référence à des entiers non signés en 16, 32 ou 64 bits. Comme la notion d'entier non signé n'est pas disponible nativement en Objective Caml, nous allons gérer ces différents types par l'intermédiaire de modules dédiés.</p>
<p>Prenons l'exemple le plus simple qui est celui des entiers non signés 16 bits. La signature de ce module sera définie dans un fichier appelé "memcache_int16u.mli" :</p>
<p>[sourcecode language="java"]<br />
	type t<br />
	exception Overflow of t<br />
	val zero : t<br />
	val min : t<br />
	val max : t<br />
	val to_string : t -> string<br />
	val of_string : string -> t<br />
	val of_int : int -> t<br />
[/sourcecode]</p>
<p>Le type "t" correspondra au type Objective Caml natif pour stocker l'entier. En l'occurrence, pour les entiers non signés 16 bits, il s'agira du type "int". L'exception "Overflow" sera levée si l'entier dépasse les limites. Ici ce sera le cas si le nombre est négatif ou bien dépasse la valeur 65535 (2^16 - 1).</p>
<p>On définie également les valeurs zéro (0), minimale (0) et maximale (65535). On aura également à notre disposition trois fonctions de conversions pour par exemple transformer une chaîne de caractères représentant un nombre vers le type entier non signé 16 bits.</p>
<p>Les trois modules dédiés à la gestion des entiers non signés auront cette même signature. Seule l'implémentation sera différente. Comme la signature de ce module reste très simple, il a été facile de la rédiger directement. Pour les signatures plus complexes, il est possible de générer automatiquement une première version à partir du fichier .ml d'implémentation grâce à l'option "-i" du compilateur Objective Caml.</p>
<p>Un autre type important correspond à la structure qui nous servira à stocker les informations pour la connexion au serveur :</p>
<p>[sourcecode language="java"]<br />
	type connection = {<br />
	  host: string; (** adresse IP du serveur *)<br />
	  port: int; (** numéro de port *)<br />
	  in_channel: in_channel; (** canal de communication entrant *)<br />
	  out_channel: out_channel; (** canal de communication sortant *)<br />
	};;<br />
[/sourcecode]</p>
<p>Un enregistrement de ce type sera passé en paramètre à toutes les fonctions qui auront besoin d'échanger des données avec le serveur Memcached.</p>
<ul>
<li>Implémentation :</li>
</ul>
<p>Passons maintenant au développement des fonctions proprement dites. Nous en détaillerons uniquement certaines pour donner un aperçu du langage Objective Caml.</p>
<p>Prenons par exemple la fonction chargée de recevoir plusieurs lignes en provenance du serveur :</p>
<p>[sourcecode language="java"]<br />
(**<br />
  Reçoit plusieurs lignes du serveur.<br />
  @param connection Informations pour la connexion (déjà ouverte).<br />
  @return Une FIFO contenant les lignes dans l'ordre de réception + une chaîne de caractères concaténation des lignes reçues et séparées par \n.<br />
*)<br />
let receive_lines_from_server ~connection =<br />
  (* c'est par le canal de communicatio entrant que notre client reçoit les données du serveur *)<br />
  let in_channel = connection.in_channel in<br />
  (* on créé une structure FIFO pour stocker les lignes reçues du serveur *)<br />
  let queue_lines = Queue.create () in<br />
  (* on créé un tampon qui stockera lui aussi les lignes reçues du serveur mais sous forme de chaîne de caractères *)<br />
  let text_lines = Buffer.create 1024 in<br />
  (* on créé une variable "l" (une référence sur une chaîne vide) qui servira à stocker une ligne reçue *)<br />
  let l = ref "" in<br />
  (* on définie une fonction récursive "one_line" qui servira à traiter une ligne *)<br />
  let rec one_line () =<br />
    (* on récupère la ligne courante qui provient du serveur *)<br />
    l := input_line in_channel;<br />
    (* on supprime les fins de lignes *)<br />
    l := Str.global_replace regexp_trail_eol "" !l;<br />
    (* si ce n'est pas la dernière ligne *)<br />
    if (!l <> end_line) then (<br />
      (* on stocke la ligne courante dans la FIFO et dans le tampon *)<br />
      Queue.add !l queue_lines;<br />
      Buffer.add_string text_lines (!l ^ "\n");<br />
      (* on rappelle la fonction pour traiter la prochaine ligne *)<br />
      one_line ();<br />
    )<br />
    (* plus de ligne à traiter, on peut renvoyer le résultat *)<br />
    else (<br />
      (queue_lines, Buffer.contents text_lines)<br />
    )<br />
  in<br />
    (* il faut appeler une première fois la fonction "one_line" pour commencer le traitement *)<br />
    one_line ()<br />
;;<br />
[/sourcecode]</p>
<p>Notez que la variable "l" est une référence sur une chaîne vide dont la valeur est modifiée dans la fonction "one_line". Pour assigner une nouvelle valeur à une référence, il est nécessaire d'utiliser le signe ":=". Et pour obtenir le contenu (la valeur) de la référence, on utilise le signe "!" devant le nom de la variable.</p>
<p>La fonction renvoie un tuple (une liste de valeurs) dont le premier élément est la suite des lignes reçues du serveur. Il s'agit de la variable "queue_lines" qui est une file FIFO. Le deuxième élément renvoyé est une chaîne de caractères qui contient la concaténation des lignes reçues du serveur. Les deux éléments contiennent donc au final les mêmes données. L'intérêt de renvoyer ces données sous deux formes différentes est de pouvoir selon les besoins traiter la réponse du serveur soit comme une suite de lignes soit comme une chaîne de caractères.</p>
<p>Voyons ensuite la fonction qui envoie la commande pour stocker une valeur auprès du serveur :</p>
<p>[sourcecode language="java"]<br />
(**<br />
  Commandes de stockage d'une clef/valeur.<br />
  @param cmd Commande (voir la section "Storage commands" du protocole).<br />
  @param key Clef de la valeur.<br />
  @param flag Valeur "flag" d'une commande de stockage (voir la section "Storage commands" du protocole).<br />
  @param time Expiration.<br />
  @param bytes Nb d'octets des données à stocker.<br />
  @param data Les données à stocker.<br />
  @param connection Informations pour la connexion (déjà ouverte).<br />
  @raise Bad_answer_from_server Réponse inattendue du serveur.<br />
  @return Indique si la valeur a été stockée ou pas.<br />
*)<br />
let storage ~cmd ~key ~flag ~time ~bytes ~data ~connection =<br />
  (* on construit la commande de stockage à partir des paramètres *)<br />
  let s = (cmd ^ " " ^ key ^ " " ^ (Int16u.to_string flag) ^ " " ^ (string_of_int time) ^ " " ^ (string_of_int bytes)) in<br />
  (* on envoie la ligne au serveur *)<br />
  let () = send_one_line_to_server ~connection ~s in<br />
  (* et ensuite on envoie au serveur la donnée à stocker *)<br />
  let s = Buffer.contents data in<br />
  let () = send_one_line_to_server ~connection:connection ~s:s in<br />
  (* le serveur doit nous retourner une réponse *)<br />
  let answer = receive_one_line_from_server ~connection:connection in<br />
  (* on vérifie que cette réponse ne correspond pas à une erreur *)<br />
  let () = check_error_answer_from_server ~answer:answer in<br />
  (* on examine ensuite cette réponse qui doit correspondre à une des réponses possibles pour la commande de stockage *)<br />
  let new_value =<br />
    match answer with<br />
      &#124; "STORED" -> Stored<br />
      &#124; "NOT_STORED" -> Not_stored<br />
      &#124; _ -> raise (Bad_answer_from_server answer)<br />
  in<br />
    (* la fonction retourne cette réponse sous forme d'un type "storage_answer" que nous avons défini *)<br />
    new_value<br />
;;<br />
[/sourcecode]</p>
<p>La fonction prend en paramètres toutes les données nécessaires au traitement qu'elle effectue. Notez que le caractère "~" au début de chaque paramètre indique que ce sont des paramètres nommés. C'est à dire que lorsque la fonction sera appelée, il sera possible d'indiquer ce nom pour chaque valeur de paramètre ce qui permet ainsi de s'affranchir du respect de l'ordre de définition des paramètres. La fonction peut ainsi être appelée de cette manière :</p>
<p>[sourcecode language="java"]<br />
	storage ~connection:connexion ~flag:(Int16u.of_int 32) ~time:1219422874 ~bytes:1024 ~cmd:"commande" ~key:"clef" ~data:tampon<br />
[/sourcecode]</p>
<p>On peut voir que l'on rappelle pour chaque paramètre son nom défini lors de la déclaration de la fonction. Il n'est donc pas obligatoire de respecter le même ordre dans les paramètres. Si le nom des paramètres est suffisamment explicite, c'est également une manière de rendre plus clair le code.</p>
<p>Notez que le caractère "^" est utilisé pour la concaténation des chaînes de caractères. C'est l'équivalent du caractère "." dans le langage PHP.</p>
<p>Pour finir, remarquez une construction très utilisée dans le langage Objective Caml qui est le "match". Ici, cela permet de comparer la valeur de la variable "answer" avec les chaînes de caractères "STORED" et "NOT_STORED" et selon le cas de stocker dans "new_value" soit "Stored" soit "Not_stored". Si la comparaison échoue, le défaut indiqué par le caractère "_" est de lever l'exception "Bad_answer_from_server". La construction "match" ne s'applique pas uniquement à des chaînes de caractères. Elle peut par exemple s'appliquer à des listes ou à un type défini dans le programme. Vous êtes invité à consulter la documentation du langage Objective Caml pour plus de détails.</p>
<p>Pour finir, voyons la fonction qui permet d'obtenir les statistiques globales du serveur :</p>
<p>[sourcecode language="java"]<br />
(**<br />
  Statistiques globales du serveur.<br />
  @param connection Informations pour la connexion (déjà ouverte).<br />
  @raise Bad_answer_from_server Si réponse inattendue ou si une des réponses n'est pas dans la liste "names_stats".<br />
  @return Une liste de paires (nom, valeur) correspondant aux statistiques.<br />
*)<br />
let stats ~connection =<br />
  (* on envoie la commande "stats" au serveur *)<br />
  let s = "stats" in<br />
  let () = send_one_line_to_server ~connection:connection ~s:s in<br />
  (* on reçoit la réponse en plusieurs lignes de la part du serveur *)<br />
  let (lines, answer) = receive_lines_from_server ~connection:connection in<br />
  (* on doit au moins recevoir une ligne *)<br />
  (* si ce n'est pas le cas, on lève une exception *)<br />
  let () =<br />
    if (Queue.length lines <= 0) then (raise (Bad_answer_from_server answer))<br />
  in<br />
  (* fonction qui traite une seule ligne des statistiques reçues *)<br />
  let one_line acc l =<br />
    (* les lignes sont de la forme "STAT <nom> <valeur>" *)<br />
    let r = Str.regexp ("^STAT \\([^ ]+\\) \\(.+\\)") in<br />
      (* si la ligne est au bon format *)<br />
      if (Str.string_match r l 0) then (<br />
        try<br />
          (* on récupère la partie "nom" *)<br />
          let name = Str.matched_group 1 l in<br />
          (* on récupère la partie "valeur" *)<br />
          let value = Str.matched_group 2 l in<br />
          (* on vérifie que les clefs/valeurs reçues sont bien autorisées *)<br />
          let () =<br />
            if (not (List.mem_assoc name names_stats)) then (raise (Bad_answer_from_server answer))<br />
          in<br />
          (* conversion des valeurs en entiers non signés *)<br />
          let new_value =<br />
          let type_value = List.assoc name names_stats in<br />
            match type_value with<br />
              &#124; Ts_32u _ -> Ts_32u (Int32u.of_string value)<br />
              &#124; Ts_64u _ -> Ts_64u (Int64u.of_string value)<br />
              &#124; Ts_string _ -> Ts_string value<br />
              &#124; Ts_2x_32u _ -> Ts_2x_32u value<br />
            in<br />
            (* on ajoute le tuple (nom, valeur) à la liste qui sera renvoyée par la fonction *)<br />
              (name, new_value) :: acc<br />
        with<br />
          &#124; Not_found -> raise (Bad_answer_from_server answer) (* une des lignes n'est pas au bon format *)<br />
      )<br />
      else (<br />
        raise (Bad_answer_from_server answer) (* une des lignes n'est pas au bon format *)<br />
      )<br />
  in<br />
    (* pour chaque ligne reçue du serveur, on appelle la fonction "one_line" *)<br />
    Queue.fold (one_line) [] lines<br />
;;<br />
[/sourcecode]</p>
<p>On peut voir que la fonction "one_line" a notamment comme paramètre une variable appelée "acc" (pour "accumulateur"). Ce type de paramètre est souvent présent en Objective Caml. Il permet en effet d'accumuler le résultat d'appels successifs à une fonction donnée. Ici, la fonction "one_line" est appelée autant de fois qu'il y a de lignes à traiter grâce à l'utilisation de la fonction "Queue.fold". On peut également voir dans l'appel à cette fonction que l'accumulateur a comme valeur de départ une liste vide.</p>
<p>On retrouve aussi la construction "match...with" dont nous avons déjà parlé. Cette fois-ci, la comparaison porte sur les types d'entiers non signés que nous avions définis.</p>
<ul>
<li>Compilation "bytecode" :</li>
</ul>
<p>Objective Caml offre deux modes de compilation :</p>
<p>- Un mode qui permet d'obtenir un exécutable natif, de la même manière que l'on obtiendrait un exécutable depuis des sources en langage C. L'avantage est de produire un programme avec de très bonnes performances. En contre-parti, ce programme fonctionnera uniquement sur la plate-forme (par exemple un système FreeBSD sur PC) pour lequel il a été compilé.</p>
<p>- Un mode "bytecode" qui produira un programme destiné à être exécuté par la machine virtuelle Objective Caml. C'est un mécanisme similaire à celui utilisé par le langage Java. L'exécution sera plus lente qu'avec un programme natif mais il ne sera plus dépendant de la plate-forme.</p>
<p>Vous trouverez dans l'archive contenant les sources un script shell indiquant les commandes pour compiler le code en mode "bytecode" et ainsi obtenir une librairie et un exécutable de démonstration.</p>
<p>Par exemple, pour compiler le fichier memcache_int16u.ml qui contient l'implémentation des entiers 16 bits non signés, la commande est la suivante :</p>
<p>[sourcecode language="java"]<br />
	ocamlc -c memcache_int16u.ml<br />
[/sourcecode]</p>
<p>Ce qui produira un fichier objet "memcache_int16u.cmo".</p>
<ul>
<li>Références :</li>
</ul>
<p>Protocole Memcached : <a title="Protocole Memcached" href="http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt">http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt</a></p>
<p>Site officiel Objective Caml : <a title="Site officiel Objective Caml" href="http://www.ocaml.org/">http://www.ocaml.org/</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Building CAML queries from C# code.]]></title>
<link>http://virtualservergallery.wordpress.com/?p=327</link>
<pubDate>Wed, 27 Aug 2008 06:30:40 +0000</pubDate>
<dc:creator>glezalex</dc:creator>
<guid>http://virtualservergallery.com/2008/08/27/building-caml-queries-from-c-code/</guid>
<description><![CDATA[One of the biggest problems, when you are developing for SharePoint, is to generate CAML queries fro]]></description>
<content:encoded><![CDATA[<p>One of the biggest problems, when you are developing for SharePoint, is to generate CAML queries from C# code.<br />
Probably, in many cases, you could find another way to solve your problems, but you will live occasions when you need this (terrible) queries, and in that cases, you have two options.</p>
<p>- Try to build the queries fighting with raw strings.<br />
- Or use CAML .Net.</p>
<p>CAML .Net is a personal project, from CodePlex, that gives to you the possibility to build the queries, in a very easy way, using object oriented programming. Just fantastic.</p>
<p>To take a look on CAML .Net, you can click <a href="http://www.codeplex.com/camldotnet">here</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Stramit SharePoint 2007 Caml Viewer]]></title>
<link>http://butaji.wordpress.com/?p=72</link>
<pubDate>Wed, 13 Aug 2008 20:19:44 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.fr.wordpress.com/2008/08/13/stramit-sharepoint-2007-caml-viewer/</guid>
<description><![CDATA[http://www.codeplex.com/SPCamlViewer
Так же тулза из раздела &#8220;мастхе]]></description>
<content:encoded><![CDATA[<p><a href="http://www.codeplex.com/SPCamlViewer">http://www.codeplex.com/SPCamlViewer</a></p>
<p>Так же тулза из раздела "мастхев" для wss девелоперов. Позволяет просмотреть структуру списков, представлений, а так же выполнять и генерировать код запросов для приложений.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[U2U Community Tools]]></title>
<link>http://butaji.wordpress.com/?p=70</link>
<pubDate>Wed, 13 Aug 2008 20:17:05 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.fr.wordpress.com/2008/08/13/u2u-community-tools/</guid>
<description><![CDATA[http://www.u2u.info/
У ребят имеются очень полезные наработочки]]></description>
<content:encoded><![CDATA[<p><a href="http://www.u2u.info/">http://www.u2u.info/</a></p>
<p>У ребят имеются очень полезные наработочки по шарику. Одна из них используется мною практически каждый день. Называется приспособление U2U Caml Query Builder 2007 v.3.1. (Качать тут <a href="http://www.u2u.info/SharePoint/U2U%20Community%20Tools/Forms/AllItems.aspx">http://www.u2u.info/SharePoint/U2U%20Community%20Tools/Forms/AllItems.aspx</a>). Тулза позволяет генерить и отлаживать CAML запросы.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[SharePoint Reference Sheet]]></title>
<link>http://abstractspaces.wordpress.com/2008/08/01/sharepoint-reference-sheet/</link>
<pubDate>Fri, 01 Aug 2008 13:20:44 +0000</pubDate>
<dc:creator>sanghvinirav</dc:creator>
<guid>http://abstractspaces.fr.wordpress.com/2008/08/01/sharepoint-reference-sheet/</guid>
<description><![CDATA[While creating Features, Web Parts, Web Service calls or Site Templates or even basic DataViews at m]]></description>
<content:encoded><![CDATA[<p>While creating Features, Web Parts, Web Service calls or Site Templates or even basic DataViews at many places you required to have some short of reference chart mostly to write CAML related stuff.</p>
<p>So after having my few hours I created this handy reference sheet useful at many places.</p>
<p>You can use this sheet at many places like "BaseType" values (just below) are always useful as part of SPSiteDataQuery :</p>
<p>&#60;Lists BaseType='0' MaxListLimit='0'/&#62; or similar goes for "Server Template"</p>
<p>&#60;Lists ServerTemplate='303' MaxListLimit='0'/&#62;</p>
<p>Another handy example is  "FieldType" again which is useful in CAML queries.</p>
<p>&#60;FieldRef Name='MyLookupField'/&#62;&#60;Value Type='Lookup'&#62;</p>
<p>Endless possibilities.  Be patient to load this huge page (And sincere apology for <b>SMALL fonts</b>, hard to fit in screen) </p>
<p>Don't forget to comment back If I am missing something that should be here too .</p>
<div>
<table style="border-collapse:collapse;" border="0">
<tbody>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:12pt;color:black;"><strong>Type</strong></span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="font-size:12pt;color:black;"><strong>Name</strong></span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="font-size:12pt;color:black;"><strong>Value</strong></span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;" valign="middle">
<p style="text-align:center;"><span style="font-size:12pt;color:black;"><strong>Summary</strong></span>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:#2b91af;">SPBaseType</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">GenericList</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">0</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Generic type of list template used for most lists.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">or</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DocumentLibrary</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;">
<span style="color:black;font-size:7pt;font-family:Tahoma;">1</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Document library.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">BaseType</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Unused</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">2</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Unused.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DiscussionBoard</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">3</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Discussion board.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Survey</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">4</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Survey list.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Issue</span></td>
<td style="border-top:none;border-left:none;border-right:none;">
<p style="text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">5</span>
</td>
<td style="border-top:none;border-left:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Issue-tracking list.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">UnspecifiedBaseType</span></td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;">
<p style="text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">-1</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:#2b91af;">SPListCategoryType</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">None</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">0</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Libraries</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">1</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Communications</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">2</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Tracking</span></td>
<td style="border-top:none;border-left:none;border-right:none;">
<p style="text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">3</span>
</td>
<td style="border-top:none;border-left:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">CustomLists</span></td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;">
<p style="text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">4</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:#2b91af;">SPListTemplateType</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">GenericList</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">100</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Custom list.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">or</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DocumentLibrary</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">101</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Document library.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;"><br />
ServerTemplate</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Survey</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">102</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Survey.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Links</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">103</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Links.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Announcements</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">104</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Announcements.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Contacts</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">105</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Contacts.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Events</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">106</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Calendar.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Tasks</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">107</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Tasks.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DiscussionBoard</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">108</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Discussion board.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">PictureLibrary</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">109</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Picture library.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DataSources</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">110</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Data sources for a site.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">WebTemplateCatalog</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">111</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Site template gallery.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">UserInformation</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">112</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">User Information.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">WebPartCatalog</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">113</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Web Part gallery.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">ListTemplateCatalog</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">114</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">List template gallery.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">XMLForm</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">115</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">XML Form library.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">MasterPageCatalog</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">116</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Master Page gallery.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">NoCodeWorkflows</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">117</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">No Code Workflows.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">WorkflowProcess</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">118</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Custom Workflow Process.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">WebPageLibrary</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">119</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Wiki Page Library.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">CustomGrid</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">120</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Custom grid for a list.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">DataConnectionLibrary</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">130</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">WorkflowHistory</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">140</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Workflow History.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">GanttTasks</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">150</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Project Tasks.</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Meetings</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">200</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Meeting Series (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Agenda</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">201</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Agenda (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">MeetingUser</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">202</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Attendees (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">Decision</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">204</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Decisions (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">MeetingObjective</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">207</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Objectives (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">TextBox</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tahoma;">210</span>
</td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="font-size:7pt;font-family:Tahoma;color:green;">Text Box (Meeting).</span></td>
</tr>
<tr>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;"><span style="color:black;font-size:7pt;font-family:Tahoma;">ThingsToBring</span></td>
<td style="border-top:none;border-left:none;border-bottom:none;border-right:none;text-align:center;"><span style="color:black;font-size:7pt;font-family:Tah