<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Pete&#39;s Information feed</title>
	<description>Pete&#39;s Information feed</description>
	<link>http://blog.willow-media.nl</link>
	<lastBuildDate>Thu, 23 Feb 2012 03:10:40 GMT</lastBuildDate>
	<docs>http://www.willow-media.nl</docs>
	<generator>Willow.Cms.Plugins.RssPlugin</generator>
	<item>
		<title>SmtpClient.cs fix</title>
		<description>Na eindelijk de mailing van Willow &#39;altijd&#39; goed te hebben, bleek na de laatste mailing dat er toch nog iets mis ging. Niet in mij eigen code, maar in de SMTP implementatie van Mono. Postfix, de mailserver die ik gebruikt, stelt dat elke regel in de mail, die met een punt begint, verdubbeld moet worden. Ge-escaped, zoals het heet. Dit, omdat volgens het protocol, het DATA deel van de e-mail, afgesloten moet worden met Cr+LF.Cr+LF. Dus een regel met een enkele punt. Na in het bestand  /mcs/class/System/System.Net.Mail/SmtpClient.cs te hebben gekeken, blijkt dat de Mono implementatie dit niet zo doet. Mogelijk doet Mono dit, om 100% compatible te zijn met .Net, waarvan bekend is dat er bugs in de SMTP implementatie zitten. Nou kan ik een alternatief implementeren, of Mono aanpassen. Ik heb gekozen voor het laatste. 100% .Net compatibiliteit vind ik niet interessant, maar dat mijn mail goed verstuurd wordt wel. Vandaar de onderstaande aanpassing in SmtpClient.cs#define WILLOW_SMTP_FIXprivate void SendData (string data) {        if (String.IsNullOrEmpty (data)) {                writer.Write(&quot;\r\n&quot;);                writer.Flush();                return;        }        StringReader sr = new StringReader (data);        string line;        bool escapeDots = deliveryMethod == SmtpDeliveryMethod.Network;        while ((line = sr.ReadLine ()) != null) {                CheckCancellation ();                if (escapeDots) {#if WILLOW_SMTP_FIX                        if (line.Length &amp;gt; 0 &amp;&amp; line[0] == &#39;.&#39;)                                writer.Write (&#39;.&#39;);#else                        int i;                        for (i = 0; i &amp;lt; line.Length; i++) {                                if (line[i] != &#39;.&#39;)                                        break;                        }                        if (i &amp;gt; 0 &amp;&amp; i == line.Length) {                                line += &quot;.&quot;;                        }#endif                }                writer.Write (line);                writer.Write (&quot;\r\n&quot;);        }        writer.Flush ();}...</description>
		<pubDate>Thu, 02 Feb 2012 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11146/SmtpClient.cs+fix</guid>
		<link>http://blog.willow-media.nl/content/14,11146/SmtpClient.cs+fix</link>
	</item>
	<item>
		<title>Mono for Android via windows VM</title>
		<description>Na een update van het Mono for Android pakket onder Windows, besloot ik toch maar 1 van mijn licenties te gebruiken, om op kantoor ook te kunnen ontwikkelen. De licentie is nodig om niet via de emulator te werken. Op zich werkte het via de emulator wel, maar mijn Windows draait in een VM (VirtualBox) en om daar nu de emulator in te draaien, ben ik en veel van mijn geheugen kwijt en/of het is bijzonder langzaam. Dus, deployen op een echt apparaat is wel fijn. Na de update dus de licentie toegevoegd en een tutorial gestart om te testen. Helaas krijg ik het dus mooi niet op het apparaat. Met de hand ben ik de adb tool gaan testen en via Linux kon ik wel direct het apparaat vinden enzo. Dus toch een probleem met windows of de vm. Als optie bedacht ik me dat adb onder linux via de windows VM aangesproken moest kunnen worden. En dat kan! Om het simpel te zeggen: adb onder linux, maakt de connectie met het device en een ssh-tunnel vanaf de windows machine zorgt dat de windows apps, op de linux adb connecten. Via deze constructie zou het ook mogelijk moeten zijn om zonder snelheids problemen met de emulator te werken. Hier de how-to:Start de ADB server onder linux (de SDK staat bij mij onder mijn user account ~/android-sdk-linux):$ cd ./android-sdk-linux/platform-tools/$ ./adb kill-server$ ./adb connect localhost$ ./adb start-serverVervolgens kunnen we even controleren of hij het apparaat ziet (deze moet natuurlijk wel aangesloten zijn via USB en niet door de VM opgepakt zijn)$ ./adb devicesList of devices attached BCOKAS156664	deviceOnder windows heb ik putty en plink gedownload en in de c:\windows folder neergezet. Hierdoor zijn ze beide direct via de command prompt te benaderen. Start een command prompt via windows+r en dan &#39;cmd&#39; te typen. Vanaf de windows machine gaan we via plink een ssh-tunnel maken, die vanaf localhost:5037 uitkomt op linux machine. De 5037 poort van ADB draait op localhost, dus is niet direct bereikbaar:&amp;gt; cd AppData\Local\Xamarin\MonoForAndroid\AndroidSDK\android-sdk-windows\platform-tools&amp;gt; adb kill-server&amp;gt; plink -L 127.0.0.1:5037:localhost:5037 peter@[IP linux server]Na het inloggen op de linux machine via dit commando wordt de tunnel via de ssh server gemaakt en komt op de localhost:5037 uit. Open een 2de cmd op de windows machine en type het volgende (er vanuitgaande dat als het scherm opent, het huidge pad het pad van het gebruikers account is):&amp;gt; cd AppData\Local\Xamarin\MonoForAndroid\AndroidSDK\android-sdk-windows\platform-tools&amp;gt; adb devicesList of devices attachedBCOKAS156664    deviceen hierbij wordt dus het device herkend. Vervolgens als MonoDevelop gestart wordt, zal bij het runnen dit device ook zichtbaar zijn en zal hij het project daarop kunnen deployen. Probleem opgelost....</description>
		<pubDate>Fri, 27 Jan 2012 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11121/Mono+for+Android+via+windows+VM</guid>
		<link>http://blog.willow-media.nl/content/14,11121/Mono+for+Android+via+windows+VM</link>
	</item>
	<item>
		<title>IsCrawler en browscap.ini</title>
		<description>Het herkennen van de o.a. zoekmachines is in asp.net vrij eenvoudig. De boolean Context.Request.IsCrawler geeft dit weer. Er is echt wel een maar, want blijkbaar herkend hij (Mono in dit geval) niet alle, vooral recentere zoekmachines. Last, maar zeer makkelijk op te lossen. Het herkennen van deze crawlers staat gedefinieerd in het browscap.ini bestand. Deze staat op mijn werkstation (Ubuntu 11.10) onder /etc/mono, maar op een andere machine vond ik hem onder /usr/share/mono/browscap.ini. Het blijkt dat dit bestand uit 2009 stamt. Na een kleine zoektocht, vond ik een recentere versie op het volgende url:http://browsers.garykeith.com/downloads.aspEven downloaden, over de originele browscap.ini file heen kopieren en dan na een herstart toont mijn log mij Bing en Baidu nu wel herkend worden![23-12-2011 0:53:53|10] Debug: request is crawler: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)[23-12-2011 0:53:55|7] Debug: request is crawler: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)Dit is overigens niet alleen voor Mono, maar ook voor Windows+IIS een oplossing!...</description>
		<pubDate>Fri, 23 Dec 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11100/IsCrawler+en+browscap.ini</guid>
		<link>http://blog.willow-media.nl/content/14,11100/IsCrawler+en+browscap.ini</link>
	</item>
	<item>
		<title>Sip connectie met Empathy</title>
		<description>Empathy is Gnome&#39;s default messenger tegenwoordig. Ik vind het prima, want het connect met Google en optioneel met msn, wat ik nooit meer gebruik. Maar ja, je weet maar nooit. Om Empathy ook als telefoon (sip) te kunnen gebruiken moet er even een extra pakket geinstalleerd worden. Onder Ubuntu (11.10):sudo apt-get install telepathy-sofiasipVervolgens kan er bij accounts een sip account toegevoegd worden. Let op dat je username@domain invoert. De rest gaat vanzelf. Zet wel even &quot;Use this account to call landlines and mobile phones&quot; aan....</description>
		<pubDate>Mon, 28 Nov 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11085/Sip+connectie+met+Empathy</guid>
		<link>http://blog.willow-media.nl/content/14,11085/Sip+connectie+met+Empathy</link>
	</item>
	<item>
		<title>Fotos 05-11</title>
		<description>...</description>
		<pubDate>Tue, 08 Nov 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11077/Fotos+05-11</guid>
		<link>http://blog.willow-media.nl/content/14,11077/Fotos+05-11</link>
	</item>
	<item>
		<title>Limiteren van resources MySql</title>
		<description>Webhosting is vaak een lastig punt, als het gaat om het limiteren van de resources die een gebruiker kan gebruiken. Als de gebruiker een onjuist geconfigureerde database maakt, of slechte queries, kunnen zij acties de andere gebruikers in de weg zitten doordat de server te druk wordt. Erg vervelend natuurlijk. MySql heeft schijnbaar wat functionaliteit ingebouwt hiervoor.Op een forum vond ik deze tekst:Lightwave 04-15-2005, 10:01 PMOriginally posted by John[H4Y] http://dev.mysql.com/doc/mysql/en/user-resources.htmlIt looks like versions of MySQL 4.02 may introduce more controls on a per-account basis. I have never experimented with this, but looks like it is worth a shot. With 4.0.2+ You can do per user restrictionsAs a prerequisite for using this feature, the user table in the mysql database must contain the resource-related columns. Resource limits are stored in the max_questions, max_updates, max_connections, and max_user_connections columns. If your user table doesn&#39;t have these columns, it must be upgraded; see Section 2.10.7, “Upgrading the Grant Tables”. http://dev.mysql.com/doc/mysql/en/upgrading-grant-tables.htmlTo set resource limits with a GRANT statement, use a WITH clause that names each resource to be limited and a per-hour count indicating the limit value. For example, to create a new account that can access the customer database, but only in a limited fashion, issue this statement:mysql&amp;gt; GRANT ALL ON customer.* TO &#39;francis&#39;@&#39;localhost&#39;-&amp;gt; IDENTIFIED BY &#39;frank&#39;-&amp;gt; WITH MAX_QUERIES_PER_HOUR 20-&amp;gt; MAX_UPDATES_PER_HOUR 10-&amp;gt; MAX_CONNECTIONS_PER_HOUR 5-&amp;gt; MAX_USER_CONNECTIONS 2;What you want is something like:mysql&amp;gt; GRANT USAGE ON *.* TO &#39;francis&#39;@&#39;localhost&#39;-&amp;gt; WITH MAX_USER_CONNECTIONS 20;assuming francois@localhost is the user you wish to restrict.Dit heb ik natuurlijk even geprobeerd, en dat werkt! Weer wat geleerd. Voor meer informatie is er natuurlijk wel wat te vinden op de MySql website: http://dev.mysql.com/doc/refman/5.5/en/user-resources.html...</description>
		<pubDate>Tue, 25 Oct 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11064/Limiteren+van+resources+MySql</guid>
		<link>http://blog.willow-media.nl/content/14,11064/Limiteren+van+resources+MySql</link>
	</item>
	<item>
		<title>Twitter post fix</title>
		<description>Elke keer als ik vanuit Willow een twitter post uitvoerde waar unicode characters inzaten, bleek dat er een 401 optrad. Voor het posten gebruik ik een stukje code wat ik van het net heb afgeplukt. Helaas ben ik het url kwijt waar het vandaan kwam. Na wat onderzoek blijkt dat de tool de postdata opnieuw op een eigen manier urlencoded. Niks mis mee, lijkt, maar het bleek dat de door de code zelf al ge-urlencode bij het decoderen niet helemaal goed ging. Na dit aangepast te hebben, wordt de data wel goed omgezet, maar kreeg ik nog steeds een 401.Na wat verder gegoogled te hebben, kwam ik bij een gemelde issue voor een ruby library, waarin een oplossing leek te zijn, dat voor het urlencoden (escaping is ook wel een benaming trouwens) eerst de characters naar utf8 omgezet moet worden, voordat het geescaped wordt.protected string unreservedChars = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~&quot;;public string UrlEncode(string strval) {	StringBuilder result = new StringBuilder();	UTF8Encoding enc = new UTF8Encoding(false, false);	foreach (char symbol in strval) {		if (unreservedChars.IndexOf(symbol) != -1) {			result.Append(symbol);		} else {			// we should first encode to utf8 and then escape the 			byte[] buffer = enc.GetBytes(new char[] { symbol });			foreach (byte b in buffer)				result.Append(String.Format(&quot;%{0:X2}&quot;, b));		}	}	return result.ToString();}In de code wordt het character wat niet in de lijst van unreservedChars staat, naar een utf8 byte array omgezet, die vervolgens ge-escaped wordt. Dit getest, en... het werkt! Dus fixed in rev. 3967....</description>
		<pubDate>Thu, 29 Sep 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11057/Twitter+post+fix</guid>
		<link>http://blog.willow-media.nl/content/14,11057/Twitter+post+fix</link>
	</item>
	<item>
		<title>Test met TagLib</title>
		<description>Vanuit het Banshee project komt de taglib-sharp library. Deze library zou in staat moeten zijn van diverse bestanden de properties/tags te kunnen lezen. Zoals de ID3 tags van een mp3tje, maar ook de exiv info in een jpg. Nou, even testen dus.foreach (string file in Directory.GetFiles(&quot;.&quot;, &quot;*.mp3&quot;)) { 	TagLib.File tfile = TagLib.File.Create(file);	Console.WriteLine(&quot;{0:d2}. {1}&quot;, tfile.Tag.Track, tfile.Tag.Title); }Simpeler kan het niet! Dit gaan we dus fijn mee experimenteren!http://www.novell.com/products/linuxpackages/opensuse11.1/taglib-sharp.htmlhttp://download.banshee.fm/taglib-sharp/2.0.4.0/...</description>
		<pubDate>Fri, 16 Sep 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11054/Test+met+TagLib</guid>
		<link>http://blog.willow-media.nl/content/14,11054/Test+met+TagLib</link>
	</item>
	<item>
		<title>XML parsing with XmlTextReader</title>
		<description>Example code for using the XmlTextReader for parsing an xml file and process it to a custom object.using System;using System.Collections.Generic;using System.IO;using System.Xml;using System.Text;namespace bla {	public class ReadXml {		public static void Main(string[] args) {			ReadXml rx = new ReadXml();			rx.Read(args[0]);		}		public void Read(string Filename) {			// using (StreamReader fs = new StreamReader(Filename, Encoding.UTF8)) {			using (FileStream fileStream = new FileStream(Filename, FileMode.Open, FileAccess.Read)) {				MyXmlItem xmlfile = ParseFile(fileStream);				Console.WriteLine(xmlfile);			}		}		public MyXmlItem ParseFile(Stream xmlstream) {			XmlTextReader reader = new XmlTextReader(xmlstream);			MyXmlItem item = null;			while (reader.Read()) {				switch (reader.NodeType) {				case XmlNodeType.Element:					Console.WriteLine(&quot;ParseFirst: found element &#39;{0}&#39;&quot;, reader.Name);					item = ParseElement(reader, 0);					break;				case XmlNodeType.XmlDeclaration:				case XmlNodeType.Whitespace:				case XmlNodeType.Comment:					Console.WriteLine(&quot;ParseFirst: skipping node &#39;{0}&#39; ({1})&quot;, reader.Name, reader.NodeType);					break;				default:					Console.WriteLine(&quot;ParseFirst: Unhandled {1}=&#39;{0}&#39;&quot;, reader.Name, reader.NodeType);					break;				}				if (item != null)					break;			}			return item;		}		private string Tabs(int ident) {			string res = &quot;&quot;;			for (int i=0; i&amp;lt;ident; i++)				res+= &quot;\t&quot;;			return res;		}		private MyXmlItem ParseElement(XmlTextReader reader, int ident) {			Console.WriteLine(				&quot;{4}ParseElement:Element name &#39;{0}&#39;, IsEmptyElement={1}, HasAttributes={2}, HasValue={3}&quot;, 				reader.Name, 				reader.IsEmptyElement, 				reader.HasAttributes, 				reader.HasValue,				Tabs(ident)			);			bool isEmpty = reader.IsEmptyElement;			MyXmlItem item = new MyXmlItem();			item.Name = reader.Name;			if (reader.HasAttributes) {				while (reader.MoveToNextAttribute()) {	   				// Adding attribute					Console.WriteLine(&quot;{2}ParseElement:Attribute {0}={1}&quot;, reader.Name, reader.Value, Tabs(ident)); 					item.Attributes.Add(reader.Name, reader.Value);				}			}			if (!isEmpty) {				while (reader.Read()) {					switch (reader.NodeType) {					case XmlNodeType.Text:						Console.WriteLine(&quot;{0}ParseElement:Setvalue&quot;, Tabs(ident));						item.Value = reader.Value;						break;					case XmlNodeType.EndElement:						Console.WriteLine(&quot;{1}ParseElement:EndElement (name={0})&quot;, reader.Name, Tabs(ident));						return item;					case XmlNodeType.Element:						Console.WriteLine(&quot;{0}ParseElement:Found child element declaration&quot;, Tabs(ident));						// found a child element						MyXmlItem childItem = ParseElement(reader, ident+1);						if (childItem != null) {							Console.WriteLine(&quot;{0}ParseElement:add child element to current item&quot;, Tabs(ident));							item.Childs.Add(childItem);						}						break;					default:						Console.WriteLine(&quot;{1}ParseElement:unhandled nodetype={0}&quot;, reader.NodeType, Tabs(ident));						break;					}				}			}			return item;		}	}	public class MyXmlItem {		public string Name = string.Empty;		public string Value = null;		public List&amp;lt;MyXmlItem&amp;gt; Childs = new List&amp;lt;MyXmlItem&amp;gt;();		public Dictionary&amp;lt;string, string&amp;gt; Attributes = new Dictionary&amp;lt;string, string&amp;gt;();		public override string ToString() {			return this.ToString(0);		}		public string ToString(int ident) {			StringBuilder sb = new StringBuilder();			for (int i=0; i&amp;lt;ident; i++) {				sb.Append(&quot;\t&quot;);			}			sb.Append(&quot;&amp;lt;&quot;).Append(this.Name);			foreach (string key in Attributes.Keys) {				sb.Append(&quot; &quot;).Append(key).Append(&quot;=\&quot;&quot;).Append(Attributes[key]).Append(&quot;\&quot;&quot;);			}			sb.Append(&quot;&amp;gt;&quot;);			if (Childs.Count &amp;gt; 0) {				sb.Append(&quot;\n&quot;);				foreach (MyXmlItem child in Childs) {					sb.Append(child.ToString(ident+1));				}				//sb.Append(&quot;\n&quot;);				for (int i=0; i&amp;lt;ident; i++) {					sb.Append(&quot;\t&quot;);				}			} else if (this.Value != null) {				sb.Append(this.Value);			} 			sb.Append(&quot;&amp;lt;/&quot;).Append(this.Name).Append(&quot;&amp;gt;\n&quot;);			return sb.ToString();		}	}}...</description>
		<pubDate>Fri, 05 Aug 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11040/XML+parsing+with+XmlTextReader</guid>
		<link>http://blog.willow-media.nl/content/14,11040/XML+parsing+with+XmlTextReader</link>
	</item>
	<item>
		<title>MySql 5.5 configuratie</title>
		<description>Na het testen van Willow met MySql 5.5 (foutje gefixed in het bepalen van de indexen op een tabel) wou ik nog even de configuratie van de server aanpassen. Het blijkt dat deze niet helemaal hetzelfde is als bij 5.1. In dit geval gaat het over een Fedora 15 installatie overigens:sudo nano /etc/my.cnf[mysqld]...bind-address=127.0.0.1collation_server=utf8_unicode_cicharacter_set_server=utf8Bij de vorige installatie werd de character set aangepast met &#39;default_character_set&#39;. Hiernaast zet Fedora MySql standaard open voor de buiten wereld. Dat vind ik niet zo&#39;n goed plan, dus daarom de &#39;bind-address&#39; even toegevoegd....</description>
		<pubDate>Thu, 04 Aug 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11039/MySql+5.5+configuratie</guid>
		<link>http://blog.willow-media.nl/content/14,11039/MySql+5.5+configuratie</link>
	</item>
	<item>
		<title>Ubuntu 11.04 + Gnome 3 + Bluetooth bestanden ontvangen</title>
		<description>Mijn kennismaking met Unity van Ubuntu 11.04 was heel kort. Na het opstarten heb ik de ppa van Gnome 3 toegevoegd en sinds dien ben ik alleen in Gnome 3 bezig. Ik vermaak me er prima mee! Ik kreeg laatst alleen even het heen en weer omdat ik wel een pairing kan opzetten met bluetooth, met mijn Android telefoon, maar ik kan geen bestanden ontvangen. Erg onhandig als dat wel de bedoeling is. In de instelling (System settings) kan je bluetooth aan en uit zetten en regelen of de machine zichtbaar is, maar geen instellingen mbt verzenden/ontvangen. Ik besloot daarom maar eens op de gok om te kijken of ik de instelling in de gconf editor kon vinden. Laten we even oneerbiedig zeggen, dat de gconf-editor de registry editor van Gnome is. Er zijn veel voor en tegen standers van het principe, maar het zal mij allemaal een spreekwoordelijke worst wezen. Start de gconf-editor op via alt+f2 en type: gconf-editor. Er zal een scherm tevoorschijn komen met een tree aan de linker kant. Via de menu&#39;s of control+f kan je het zoekscherm openen. Zoek daar op bluetooth (met Search also in key names) en taadaa. Bij mij stonden niet alle vinkjes aan, maar na dat te wijzigen (en even opnieuw inloggen??) werkte het....</description>
		<pubDate>Mon, 01 Aug 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11038/Ubuntu+11.04+%2b+Gnome+3+%2b+Bluetooth+bestanden+ontvangen</guid>
		<link>http://blog.willow-media.nl/content/14,11038/Ubuntu+11.04+%2b+Gnome+3+%2b+Bluetooth+bestanden+ontvangen</link>
	</item>
	<item>
		<title>mod_mono global </title>
		<description>Op een bepaalde server configuraties heb ik 2 apache instanties draaien. 1 Staat via de proxy (module) achter de andere. De reden dat ik dit gedaan heb, is als ik de instantie op poort 80 herstart, dat de mono instantie die aan de 2de zit gekoppeld niet herstart wordt. Het viel me alleen op dat beide instantie een mono global process proberen te maken:/usr/bin/mono /usr/lib/mono/2.0/mod-mono-server2.exe --filename /tmp/mod_mono_server_global --master ....Nou lukt dat dus niet als ze allebei dit proberen aan te maken op /tmp/mod_mono_server_global. Na wat zoek werk blijkt de global gebruikt te worden voor dynamisch toevoegen van sites, of zo iets. In dit geval heb ik het ieder geval niet nodig en het bleek ook een probleem voor een aantal sites te zijn. Het verwijderen van deze instantie is simpel. Voeg de volgende regel toe aan de mod_mono.conf, op de regel voor de eerste AddType. In mijn geval is die te vinden op /etc/apache2/mod_mono.conf....MonoAutoApplication disabledAddType application/x-asp-net .aspx......</description>
		<pubDate>Thu, 21 Jul 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11033/mod_mono+global+</guid>
		<link>http://blog.willow-media.nl/content/14,11033/mod_mono+global+</link>
	</item>
	<item>
		<title>Dokan</title>
		<description>Misschien nog een keer interessant: User mode file system library for windows; FUSE for windowshttp://dokan-dev.net/...</description>
		<pubDate>Thu, 16 Jun 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11016/Dokan</guid>
		<link>http://blog.willow-media.nl/content/14,11016/Dokan</link>
	</item>
	<item>
		<title>Willow revision 3523</title>
		<description>Changelog:Update ckeditor (3.5.3) and moved it to the script folderAdded placeholder support for text, date &amp; password fields. Just add attribute placeholder=&quot;some text&quot; to the elementPlaceholder funtionality for the date element/control. If the placeholder is not set, and the autoplaceholder is true (which is now default) the placeholder will be filled with the date format of the cultureCode cleanup as usualAdded install.sh script (src/tools/script). Copy it with the new revision archive and execute the script, which is in the source folder with the destination as parameter...</description>
		<pubDate>Mon, 18 Apr 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,11000/Willow+revision+3523</guid>
		<link>http://blog.willow-media.nl/content/14,11000/Willow+revision+3523</link>
	</item>
	<item>
		<title>Willow rev.3508</title>
		<description>Changelog till rev. 3508 Added DeleteSymlinkOnDispose (not tested yet)Updated the RemoteConverter to report better exceptions, and updated it with the latest providers (ms access + ms excel)Cleaned up some codeDevelopment of the RemoteConverterCollection. Now temperary in the NetwerkVSP plugin, but when not experimental anymore, it should be a default plugin (maybe in IO?)Example:In some init, the converter should be loaded:&amp;lt;willow type=&quot;action&quot;&amp;gt;	&amp;lt;action&amp;gt;		&amp;lt;loadplugin&amp;gt;NetwerkVSP.Plugin.NvspPlugin.dll&amp;lt;/loadplugin&amp;gt;				&amp;lt;NetwerkVSP&amp;gt;			&amp;lt;RegistrateRemoteCollection&amp;gt;				&amp;lt;id&amp;gt;remcollvspsort&amp;lt;/id&amp;gt;				&amp;lt;ServiceUrl&amp;gt;http://(service ip|hostname)/test/Service.asmx&amp;lt;/ServiceUrl&amp;gt;				&amp;lt;LocalFilePath&amp;gt;../share&amp;lt;/LocalFilePath&amp;gt;				&amp;lt;RemoteUncFilePath&amp;gt;\\(local ip|hostname)\test$&amp;lt;/RemoteUncFilePath&amp;gt;				&amp;lt;FileAccess&amp;gt;Clone&amp;lt;/FileAccess&amp;gt;			&amp;lt;/RegistrateRemoteCollection&amp;gt;		&amp;lt;/NetwerkVSP&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/willow&amp;gt;After that, the collection can be called like a normal collection:&amp;lt;willow type=&quot;table&quot;&amp;gt;	&amp;lt;collection&amp;gt;		&amp;lt;url&amp;gt;RemoteCollection://remcollvspsort&amp;lt;/url&amp;gt;		&amp;lt;Filename&amp;gt;../some.excelfile.xls&amp;lt;/Filename&amp;gt;		&amp;lt;table&amp;gt;table$&amp;lt;/table&amp;gt;	&amp;lt;/collection&amp;gt;	&amp;lt;arguments&amp;gt;		&amp;lt;renderallfields/&amp;gt;	&amp;lt;/arguments&amp;gt;&amp;lt;/willow&amp;gt;Call it without a table defined, and the tables from the file will be returnedChangelog from revision before this one:3496Added GeoIPCulture, which attempts to translate the 2 character iso code to a culture with the (incomplete) iso3166 tableParseToBoolean should now also parse strings True, Ja, Yes, Y, False, Nee, No and NCleanup more AppProvider.Value.Debug to Debug.Log(...Added validationtype IPRemoved the tracker code etc. New tracker should be made with using the event methods and a thread that logs the tracker information to the DBWillowSession Domain will now also keep track of the requested domain idUpdate of the social media module. Using layout to post to twitter. For every publishing record, a layout can be added. Facebook is not yet implemented!!!Removed tracker from the DB xmlUpdated the GeoIP.dat3497Update for the CallbackService; the element return can now have a element name: &amp;lt;ondynamiccallback return=&quot;element=MyElementName&quot; /&gt;The javascript willow.ajaxPostBack( can have the calling object or the name of the calling object as parameter3500First attempt to put caching in a single request object, that only exists during the creation of the page. On server navigation, the cache should be &#39;emptied&#39; for possible changed. During the rest of the runtime, the same cached tables should be used3503Moved RawSMTP object to Willow.Web.SMTP3504Added the OnPageException event to the CmsModuleContainer and moved CMS exception logging to the new event modulesAdded exception logging to the WebServiceHandlerWillowFormControl now uses the WillowCmsRequest.CurrentRequest.Setting(...), instead of the parent.settings()Value xml domain now uses the domain cache filter methodOn clear of the WillowFormControl, the current requests its caches are cleared. If on navigation the caches need update, it will do soDebugXmlResponse service can be used for exception testing (query = /exception or /404)3507Initial start of RemoteConverterCollection, for easy usage of the converter...</description>
		<pubDate>Wed, 13 Apr 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10998/Willow+rev.3508</guid>
		<link>http://blog.willow-media.nl/content/14,10998/Willow+rev.3508</link>
	</item>
	<item>
		<title>Willow updates rev. 3496</title>
		<description>r3496...</description>
		<pubDate>Thu, 07 Apr 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10993/Willow+updates+rev.+3496</guid>
		<link>http://blog.willow-media.nl/content/14,10993/Willow+updates+rev.+3496</link>
	</item>
	<item>
		<title>Willow rev.3490</title>
		<description>Changelog:Changed the log table and default logging will include session information, including the domainUpdated the log viewerCreated the BufferedQueryCollection, which loads database info in segments (default on 100 records). This should save allot of memory on big tablesUpdated the login pages to do more extensive loggingCreated the VSPSortDownloadServiceOpdrachtfile info has the mailbaarheids check information, including the fail boolean...</description>
		<pubDate>Tue, 05 Apr 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10991/Willow+rev.3490</guid>
		<link>http://blog.willow-media.nl/content/14,10991/Willow+rev.3490</link>
	</item>
	<item>
		<title>Willow update tot rev. 3488</title>
		<description>Changelog tot rev. 3488:Added FilterSpecialCharacters switch to the CollectionToFile csv/tab settingsAdded a RemoveFile(string file) to the SharpSSH Sftp connectionUpdated the SSHConnectElement with the delete/remove methodFixed debug info and null reference exception of SSHConnectElementAdded Indexes add/drop to the MetaDataPlugin. A table has to be selected before using itFieldFilterCollection pipe is added. This is to filter a select number of fields from an existing collectionDebug info for MollieTransactionResultFixed issue with collection the data from mollie about a payment, if the payment was falseFixed the go handler. It will check and redirect from /go/(content id)Update for the Social media plugin.. code and pages!!! Twitter authentication fix!Update social media plugin pagina&#39;sAdded ForceNavigate (true|false) to the Menu Element ControlFixed the AlwaysNavigate callback of the Menu elementWillowElementTable has a StoreElementValueState property, to force on using the pager, that the element values stay intactCleanup from some code and debug text...</description>
		<pubDate>Mon, 04 Apr 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10985/Willow+update+tot+rev.+3488</guid>
		<link>http://blog.willow-media.nl/content/14,10985/Willow+update+tot+rev.+3488</link>
	</item>
	<item>
		<title>Willow Rev.3476</title>
		<description>Deze release van Willow heeft ondersteuning voor een nieuwe pipe collectie. Deze pipe is bedoeld om van een bestaande collectie, maar een geselecteerd aantal velden te laten zien. Dit is handig voor bijvoorbeeld exports of weergaves waarbij er geen velden geselecteerd kunnen worden.&amp;lt;willow type=&quot;table&quot;&amp;gt;	&amp;lt;collection&amp;gt;		&amp;lt;url&amp;gt;pipe://fieldfilter&amp;lt;/url&amp;gt;		&amp;lt;collection&amp;gt;			&amp;lt;table&amp;gt;tmpdbf8018&amp;lt;/table&amp;gt;			&amp;lt;limit&amp;gt;20&amp;lt;/limit&amp;gt;		&amp;lt;/collection&amp;gt;		&amp;lt;fields&amp;gt;			&amp;lt;field&amp;gt;tmpdbf8018.vspid&amp;lt;/field&amp;gt;			&amp;lt;field&amp;gt;tmpdbf8018.cndrs_naam&amp;lt;/field&amp;gt;		&amp;lt;/fields&amp;gt;	&amp;lt;/collection&amp;gt;	&amp;lt;arguments&amp;gt;&amp;lt;renderallfields/&amp;gt;&amp;lt;/arguments&amp;gt;&amp;lt;/willow&amp;gt;Al eerder was er 1 pipe collectie, om geografische info aan een collectie met een IP te kunnen koppelen:&amp;lt;collection&amp;gt;	&amp;lt;url&amp;gt;pipe://GeoTag&amp;lt;/url&amp;gt;	&amp;lt;collection&amp;gt;		&amp;lt;table&amp;gt;someTableWithIPfield&amp;lt;/table&amp;gt;	&amp;lt;/collection&amp;gt;	&amp;lt;ipfield&amp;gt;someTableWithIPfield.remoteaddr&amp;lt;/ipfield&amp;gt;&amp;lt;/collection&amp;gt;Deze pipe maakt een extra veld aan, &#39;geolocation&#39;, waarin de geo locatie per records wordt opgeslagen.Changelog (not really complete)Added FilterSpecialCharacters switch to the CollectionToFile csv/tab settingsAdded a RemoveFile(string file) to the SharpSSH Sftp connectionUpdated the SSHConnectElement with the delete/remove methodFixed debug info and null reference exception of SSHConnectElementAdded Indexes add/drop to the MetaDataPlugin. A table has to be selected before using itFieldFilterCollection pipe is added. This is to filter a select number of fields from an existing collection...</description>
		<pubDate>Thu, 31 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10979/Willow+Rev.3476</guid>
		<link>http://blog.willow-media.nl/content/14,10979/Willow+Rev.3476</link>
	</item>
	<item>
		<title>Willow rev.3473</title>
		<description>Zoals al eerder geschreven, heeft de IO plugin nu ook een file GZipUncompress. Hiernaast kan er nu via &amp;lt;io&amp;gt;&amp;lt;size&amp;gt;(filename)&amp;lt;/size&amp;gt;&amp;lt;/io&amp;gt; ook de grote van een bestand opgevraagd worden. GZip is nu ook een &#39;bekend&#39; mimetype binnen Willow (application/x-gzip). &amp;lt;willow type=&quot;action&quot;&amp;gt;	&amp;lt;action&amp;gt;		&amp;lt;loadplugin&amp;gt;Willow.Cms.Plugins.IO.dll&amp;lt;/loadplugin&amp;gt;			&amp;lt;CreateTempFile var=&quot;filename&quot;&amp;gt;			&amp;lt;CollectionToFile&amp;gt;				&amp;lt;collection&amp;gt;					&amp;lt;table&amp;gt;vsp_opdracht&amp;lt;/table&amp;gt;					&amp;lt;fields&amp;gt;						&amp;lt;field&amp;gt;vsp_opdracht.id&amp;lt;/field&amp;gt;					&amp;lt;/fields&amp;gt;				&amp;lt;/collection&amp;gt;				&amp;lt;filename&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/filename&amp;gt;				&amp;lt;filetype&amp;gt;csv&amp;lt;/filetype&amp;gt;			&amp;lt;/CollectionToFile&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;mimetype&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/mimetype&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;io&amp;gt;&amp;lt;size&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/size&amp;gt;&amp;lt;/io&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;io&amp;gt;				&amp;lt;file&amp;gt;					&amp;lt;GzipCompress&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/GzipCompress&amp;gt;				&amp;lt;/file&amp;gt;			&amp;lt;/io&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;mimetype&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/mimetype&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;io&amp;gt;&amp;lt;size&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/size&amp;gt;&amp;lt;/io&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;io&amp;gt;				&amp;lt;file&amp;gt;					&amp;lt;GzipUnCompress&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/GzipUnCompress&amp;gt;				&amp;lt;/file&amp;gt;			&amp;lt;/io&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;mimetype&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/mimetype&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;debug&amp;gt;&amp;lt;io&amp;gt;&amp;lt;size&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/size&amp;gt;&amp;lt;/io&amp;gt;&amp;lt;/debug&amp;gt;			&amp;lt;downloadfile&amp;gt;				&amp;lt;file&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/file&amp;gt;			&amp;lt;/downloadfile&amp;gt;		&amp;lt;/CreateTempFile&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/willow&amp;gt;...</description>
		<pubDate>Wed, 30 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10978/Willow+rev.3473</guid>
		<link>http://blog.willow-media.nl/content/14,10978/Willow+rev.3473</link>
	</item>
	<item>
		<title>Willow rev.3471 Gzip Compressie</title>
		<description>Als toevoeging aan de Willow.Cms.Plugins.IO plugin, kan deze nu een bestand via GZip comprimeren. Uiteraard komt er ook nog een uncompress, maar dat is de volgende versie. Hieronder een voorbeeld, inclusief het wegschrijven van een collectie naar een tijdelijk bestand. Als deze methode klaar is, zullen alle tijdelijke bestand direct opgeruimd worden.&amp;lt;willow type=&quot;action&quot;&amp;gt;	&amp;lt;action&amp;gt;		&amp;lt;loadplugin&amp;gt;Willow.Cms.Plugins.IO.dll&amp;lt;/loadplugin&amp;gt;			&amp;lt;CreateTempFile var=&quot;filename&quot;&amp;gt;			&amp;lt;CollectionToFile&amp;gt;				&amp;lt;collection&amp;gt;					&amp;lt;table&amp;gt;vsp_opdracht&amp;lt;/table&amp;gt;					&amp;lt;fields&amp;gt;						&amp;lt;field&amp;gt;vsp_opdracht.id&amp;lt;/field&amp;gt;					&amp;lt;/fields&amp;gt;				&amp;lt;/collection&amp;gt;				&amp;lt;filename&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/filename&amp;gt;				&amp;lt;filetype&amp;gt;csv&amp;lt;/filetype&amp;gt;			&amp;lt;/CollectionToFile&amp;gt;			&amp;lt;io&amp;gt;				&amp;lt;file&amp;gt;					&amp;lt;GzipCompress&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/GzipCompress&amp;gt;				&amp;lt;/file&amp;gt;			&amp;lt;/io&amp;gt;			&amp;lt;downloadfile&amp;gt;				&amp;lt;file&amp;gt;&amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&amp;lt;/file&amp;gt;				&amp;lt;filename&amp;gt;&amp;lt;now/&amp;gt;&amp;lt;text&amp;gt;.csv.gz&amp;lt;/text&amp;gt;&amp;lt;/filename&amp;gt;			&amp;lt;/downloadfile&amp;gt;		&amp;lt;/CreateTempFile&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/willow&amp;gt;...</description>
		<pubDate>Tue, 29 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10972/Willow+rev.3471+Gzip+Compressie</guid>
		<link>http://blog.willow-media.nl/content/14,10972/Willow+rev.3471+Gzip+Compressie</link>
	</item>
	<item>
		<title>StoringsOverzicht.nl</title>
		<description>Grappig site waar veel providers hun storingen melden:http://www.storingsoverzicht.nl/...</description>
		<pubDate>Fri, 25 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10970/StoringsOverzicht.nl</guid>
		<link>http://blog.willow-media.nl/content/14,10970/StoringsOverzicht.nl</link>
	</item>
	<item>
		<title>Willow rev.3455</title>
		<description>Tijdens het opruimen code, heb ik besloten een aantal namespace weer tot 1 te voegen. Ik kan me niet meer herinneren waarom ik deze ooit gescheiden heb, maar het lijkt me nu beter om het weer als 1 te hebben. Hierbij liep ik snel tegen de problemen aan dat sommige objecten vanuit de code dynamisch worden aangemaakt. Deze objecten worden via hun strongname opgezocht. Bijvoorbeeld: Willow.Cms.WebControls.WillowFormThreadControl. Hiervoor had ik tot nu toe de oplossing, om dan in de &#39;nieuwe&#39; namespace, deze oude namespace ook op te nemen met een object wat overerft van het &#39;nieuwe&#39; object. Dus:Willow.Common.CMS bevat de volgende objecten:namespace Willow.Cms.WebControls {	public WillowFormThreadControl : Willow.Cms.Common.WillowFormThreadControl {		// emtpy	}}namespace Willow.Cms.Common {	public WillowFormThreadControl : ... {		// contains the code	}}Op zich werkt dit, maar bij het activeren van het object, heb je eigenlijk het verkeerde object te pakken en je moet altijd blijven opletten dat alle constructors worden overerft. Niet handig. Daarvoor is de volgende interface toegevoegd:using Willow.Common;namespace Willow.Cms.WebControls {	public class WillowExportImportControl : 		Willow.Cms.Common.WillowExportImportControl, 		iWillowNamespaceCompatibilityObject 	{		// empty on purpose		}}Hiervoor is er nu ook een methode toegevoegd: AppProvider.Value.FindOrLoadType(string StrongName). Deze methode zal het type opzoeken wat gevraagd wordt. Wordt er nu een type gevonden die de interface iWillowNamespaceCompatibilityObject bevat, dan zal de methode de BaseType type terug geven, in plaats van het eigenlijke type. Hiervan kan daarna een instantie gemaakt worden. Deze methode wordt nu in het Willow.Cms.Common.WillowElementDynamicControl toegepast om dynamisch controls te laden. ...</description>
		<pubDate>Thu, 24 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10962/Willow+rev.3455</guid>
		<link>http://blog.willow-media.nl/content/14,10962/Willow+rev.3455</link>
	</item>
	<item>
		<title>Willow rev.3451</title>
		<description>Quick changelog:* Update unarchive methods* Added check for supported archive and DeleteFileOnDone:&amp;lt;DeleteFileOnDone var=&quot;importFile&quot;&amp;gt; 	&amp;lt;filename&amp;gt;		&amp;lt;path&amp;gt;(path to file)&amp;lt;/path&amp;gt;	&amp;lt;/filename&amp;gt; 	&amp;lt;action&amp;gt;		&amp;lt;if&amp;gt;			&amp;lt;action&amp;gt;				&amp;lt;io&amp;gt;					&amp;lt;UnArchiveSupported&amp;gt;&amp;lt;var&amp;gt;importFile&amp;lt;/var&amp;gt;&amp;lt;/UnArchiveSupported&amp;gt;				&amp;lt;/io&amp;gt;			&amp;lt;/action&amp;gt;			&amp;lt;ontrue&amp;gt;				...			&amp;lt;/ontrue&amp;gt;		&amp;lt;/if&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/DeleteFileOnDone&amp;gt;* Updated the FileListCollection with Xml parameters:&amp;lt;iterate&amp;gt;	&amp;lt;collection&amp;gt;		&amp;lt;url&amp;gt;files://&amp;lt;/url&amp;gt;		&amp;lt;recursive&amp;gt;true&amp;lt;/recursive&amp;gt;		&amp;lt;fullpath&amp;gt;true&amp;lt;/fullpath&amp;gt;		&amp;lt;path&amp;gt;&amp;lt;var&amp;gt;tmpPath&amp;lt;/var&amp;gt;&amp;lt;/path&amp;gt;	&amp;lt;/collection&amp;gt;	&amp;lt;action&amp;gt;		...	&amp;lt;/action&amp;gt;&amp;lt;/iterate&amp;gt;...</description>
		<pubDate>Wed, 23 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10961/Willow+rev.3451</guid>
		<link>http://blog.willow-media.nl/content/14,10961/Willow+rev.3451</link>
	</item>
	<item>
		<title>Sitemap</title>
		<description>Informatie over een uniforme methode van sitemaps aanbieden. Wordt door Google (webmaster tools) ondersteund:http://www.sitemaps.org/...</description>
		<pubDate>Wed, 16 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10960/Sitemap</guid>
		<link>http://blog.willow-media.nl/content/14,10960/Sitemap</link>
	</item>
	<item>
		<title>Willow rev. 3381 define function</title>
		<description>From rev. 3381 its possible to define function, which has validation on the parameters. The difference with former development like this, is that the function doesn&#39;t have to be called with &amp;lt;call&amp;gt;, but can be called inline like a action xml.&amp;lt;willow type=&quot;action&quot;&amp;gt;	&amp;lt;action&amp;gt;		&amp;lt;function&amp;gt;			&amp;lt;define&amp;gt;				&amp;lt;name&amp;gt;MyStorageFunction&amp;lt;/name&amp;gt;				&amp;lt;parameters&amp;gt;					&amp;lt;id required=&quot;true&quot; valuetype=&quot;integer&quot; /&amp;gt;					&amp;lt;value required=&quot;true&quot; /&amp;gt;					&amp;lt;debug valuetype=&quot;bool&quot; /&amp;gt;				&amp;lt;/parameters&amp;gt;				&amp;lt;action&amp;gt;					&amp;lt;if&amp;gt;						&amp;lt;istrue&amp;gt;&amp;lt;callpar&amp;gt;debug&amp;lt;/callpar&amp;gt;&amp;lt;/istrue&amp;gt;						&amp;lt;ontrue&amp;gt;							&amp;lt;debug&amp;gt;MyStorageFunction called&amp;lt;/debug&amp;gt;						&amp;lt;/ontrue&amp;gt;					&amp;lt;/if&amp;gt;					&amp;lt;metaobject&amp;gt;						&amp;lt;metadata&amp;gt;SomeTable&amp;lt;/metadata&amp;gt;						&amp;lt;if&amp;gt;							&amp;lt;istrue&amp;gt;&amp;lt;callpar&amp;gt;debug&amp;lt;/callpar&amp;gt;&amp;lt;/istrue&amp;gt;							&amp;lt;ontrue&amp;gt;&amp;lt;sqldebug&amp;gt;true&amp;lt;/sqldebug&amp;gt;&amp;lt;/ontrue&amp;gt;						&amp;lt;/if&amp;gt;						&amp;lt;match&amp;gt;							&amp;lt;field fieldname=&quot;id&quot;&amp;gt;&amp;lt;callpar&amp;gt;id&amp;lt;/callpar&amp;gt;&amp;lt;/field&amp;gt;						&amp;lt;/match&amp;gt;						&amp;lt;setvalue fieldname=&quot;storagevalue&quot;&amp;gt;							&amp;lt;trim&amp;gt;&amp;lt;callpar&amp;gt;value&amp;lt;/callpar&amp;gt;&amp;lt;/trim&amp;gt;						&amp;lt;/setvalue&amp;gt;						&amp;lt;save/&amp;gt;					&amp;lt;/metaobject&amp;gt;					&amp;lt;if&amp;gt;						&amp;lt;istrue&amp;gt;&amp;lt;callpar&amp;gt;debug&amp;lt;/callpar&amp;gt;&amp;lt;/istrue&amp;gt;						&amp;lt;ontrue&amp;gt;							&amp;lt;debug&amp;gt;MyStorageFunction done&amp;lt;/debug&amp;gt;						&amp;lt;/ontrue&amp;gt;					&amp;lt;/if&amp;gt;				&amp;lt;/action&amp;gt;			&amp;lt;/define&amp;gt;		&amp;lt;/function&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/willow&amp;gt;This defines a function named &quot;MyStorageFunction&quot; which will replace (save) the value with the given id to the table &quot;SomeTable&quot;. If this function is defined earlier then the page that is parsed, like in an init page, it can be called like this:&amp;lt;willow type=&quot;action&quot;&amp;gt;	&amp;lt;action&amp;gt;		&amp;lt;MyStorageFunction&amp;gt;			&amp;lt;id&amp;gt;&amp;lt;navvars&amp;gt;__some_id&amp;lt;/navvars&amp;gt;&amp;lt;/id&amp;gt;			&amp;lt;value&amp;gt;&amp;lt;element&amp;gt;MyElement&amp;lt;/element&amp;gt;&amp;lt;/value&amp;gt;			&amp;lt;debug&amp;gt;true&amp;lt;/debug&amp;gt;		&amp;lt;/MyStorageFunction&amp;gt;	&amp;lt;/action&amp;gt;&amp;lt;/willow&amp;gt;If the value or id parameter is missing, and exception is thrown. This is not really wanted behaviour, in future released the errors will be returned with a ActionResult with ok=false. But this is an ideal way to handle repeated actions. This revision also has 2 new validation types: function and contentID. This are used to make sure a function name and a content id for calling a page are valid....</description>
		<pubDate>Tue, 01 Mar 2011 00:00:00 GMT</pubDate>
		<guid>http://blog.willow-media.nl/content/14,10948/Willow+rev.+3381+define+function</guid>
		<link>http://blog.willow-media.nl/content/14,10948/Willow+rev.+3381+define+function</link>
	</item>
	<pubDate>Thu, 02 Feb 2012 00:00:00 GMT</pubDate>
</channel>
</rss>

