<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-753968399721675468</id><updated>2011-08-08T09:24:58.211-07:00</updated><category term='GC'/><category term='Mono'/><category term='WCF'/><category term='Outlook'/><category term='Add-in'/><title type='text'>Noam Lampert's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-4156963387254108155</id><published>2010-11-10T11:35:00.001-08:00</published><updated>2010-11-10T13:37:46.648-08:00</updated><title type='text'>SVG on iPhone !!</title><content type='html'>We at Kontera are beginning to develop an iPhone version of our application.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since our current version is based on flash, it obviously needs a redesign to support this exciting platform. During investigation I decided to try out SVG. I would like to share this interesting experience with you all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SVG has quite a few advantages as a graphic engine. Here are some:&lt;/div&gt;&lt;div&gt;1. SVG is programmable quite easily. I can take an SVG file that I know has an element called 'buttonX', and place an onclick callback that closes the app. I don't really care where this button is situated or how it looks like.&lt;/div&gt;&lt;div&gt;2. Our creative department can handle SVG quite well. This means that I can receive creative assets and incorporate them right into the new code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The alternative - pure HTML - would have a hard time achieving these advantages. I am also guessing that since SVG is better defined than HTML, the amount of cross browser issues will be smaller (when going past iphone).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, there were some challenging issues:&lt;/div&gt;&lt;div&gt;1. Cross domain - since our SVG is not from the domain of the site owner (we are more like a library or plugin) - when we tried to access the SVG contents from our javascript we received cross domain issues. &lt;/div&gt;&lt;div&gt;2. &amp;lt;embed&amp;gt; and transparency - there is a bug in Safari (and Chrome, and probably other WebKit based browsers) that when you &amp;lt;embed&amp;gt; an SVG file, the stage can not be transparent. This was somewhat of a disappointment to our design team. This bug does not happen in Firefox.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our initial workaround was to place the SVG in an iframe (which has a source in our domain). We were figuring we would solve the cross-iframe issues using postmessage, but this is only takes you so far. For instance, if you want to open a new window from the iframe during a user click without having the popup blocker block you, this can be a problem. We also had JSON serialization issues, and in short the iframe was starting to become a can of worms.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On further exploration,  we noticed that if you create the SVG dynamically (using document.createElementNS, element.setAttribute) instead of embedding a static XML file, both problems disappear. The cross domain issues are gone, and also the stage can be transparent. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obvious asking our creative department to work this way was not going to work. Instead, we wrote a cute little tool in ruby that reads the XML file, and generates the appropriate JavaScript code to re-create this XML structure at runtime.  The generated code looks something like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;               function createLayer(_parent) { &lt;/div&gt;&lt;div&gt;                  var svgns='http://www.w3.org/2000/svg';&lt;/div&gt;&lt;div&gt;               var node0=document.createElementNS(svgns, 'svg');&lt;/div&gt;&lt;div&gt;               node0.setAttribute('xmlns:xlink','http://www.w3.org/1999/xlink');&lt;/div&gt;&lt;div&gt;               node0.setAttribute('ontouchmove','event.preventDefault()');&lt;/div&gt;&lt;div&gt;               node0.setAttribute('height','178');&lt;/div&gt;&lt;div&gt;               node0.setAttribute('xmlns','http://www.w3.org/2000/svg');&lt;/div&gt;&lt;div&gt;               node0.setAttribute('width','286');&lt;/div&gt;&lt;div&gt;               var node1=document.createElementNS(svgns, 'g');&lt;/div&gt;&lt;div&gt;               node1.setAttribute('id','main_group');&lt;/div&gt;&lt;div&gt;               var node2=document.createElementNS(svgns, 'title');&lt;/div&gt;&lt;div&gt;               node2.appendChild(document.createTextNode('Layer 1'));&lt;/div&gt;&lt;div&gt;               node1.appendChild(node2);&lt;/div&gt;&lt;div&gt; .....&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;                _parent.append(node0);&lt;/div&gt;&lt;div&gt;                  return node0;&lt;/div&gt;&lt;div&gt;               }&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This did place some limitations on the SVG. We have some problems working with &amp;lt;defs&amp;gt; , but the easiest workaround was to remove them from the SVG and move on. So far, all is well. Hoping to release soon so you can all see it on your iphones ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Noam&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-4156963387254108155?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/4156963387254108155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=4156963387254108155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4156963387254108155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4156963387254108155'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2010/11/svg-on-iphone.html' title='SVG on iPhone !!'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-8039104682809418662</id><published>2010-02-06T22:07:00.000-08:00</published><updated>2010-02-06T22:24:23.745-08:00</updated><title type='text'>Why does Safari/Flash always crash?</title><content type='html'>&lt;div&gt;On a personal note, I have started a new job at &lt;a href="http://www.kontera.com"&gt;Kontera&lt;/a&gt;, involving much more web-related development than I have ever done. I will continue posting experiences from this job I find interesting and worthy of sharing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Safari users may have noticed often crashes when visiting sites that contain Flash. I certainly have. This is not related to a specific OS - it happens both on Windows and on Mac (I personally use a Mac). I noticed this when developing a web component that includes also some Flash, and easily reproduced quite frequent crashes on Safari 4.0.4 and Flash 2010.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interestingly enough, Chrome which is based on the same engine does not have these crashes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From examining the stack of Safari (and also knowing the behavior of my flash app ;-), I think that the crash happens when Safari is trying to do something while Flash is calling JavaScript code via ExternalInterface.call(). Reducing the number of calls from Flash to JavaScript and reducing the time spent in the JavaScript calls causes the probability of a crash to be reduced dramatically. The simplest technique is to modify the JavaScript callback to wrap it in a setTimeout(...) as such:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;function foo(param1, param2) { .....} &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;should be replaced with:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;function foo(param1, param2, afterTimeout) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if (!afterTimeout) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;setTimeout(function() { foo(param1, param2, true) }, 20);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;.... // the original code&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The flash code does not need to be modified at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy hacking,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Noam&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-8039104682809418662?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/8039104682809418662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=8039104682809418662' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/8039104682809418662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/8039104682809418662'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2010/02/why-does-safariflash-always-crash.html' title='Why does Safari/Flash always crash?'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-2852709116219435734</id><published>2009-09-21T07:13:00.000-07:00</published><updated>2009-09-21T07:26:24.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GC'/><category scheme='http://www.blogger.com/atom/ns#' term='Add-in'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><title type='text'>Outlook New Explorer Hook</title><content type='html'>When developing our add-in, we tried to add a callback on the creation of a new Explorer. Something like:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Application.Explorers.NewExplorer += new ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunatly, after a new explorer or two were created, our callback was no longer called by outlook.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What made this more consistent was:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Application.Explorers.NewExplorer += new ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;GC.Collect();&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, the NewExplorer callback was never called !!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;The workaround: Create a global reference to the Explorers object, such as&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Explorers explorers;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;void Startup()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;explorers = Application.Explorers;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;explorers.NewExplorer += new ExplorersEvents_NewExplorerEventHandler(Explorers_NewExplorer);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;....&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It seems that without this reference, the Explorers object, together with my callback, were all collected by the GC.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This would be a good opportunity to thank my co-worker Arina for figuring this out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-2852709116219435734?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/2852709116219435734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=2852709116219435734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/2852709116219435734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/2852709116219435734'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2009/09/outlook-new-explorer-hook.html' title='Outlook New Explorer Hook'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-6855802571392143512</id><published>2009-09-10T06:52:00.000-07:00</published><updated>2009-09-10T07:08:53.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GC'/><category scheme='http://www.blogger.com/atom/ns#' term='Add-in'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><title type='text'>Outlook Add-Ins can be tricky</title><content type='html'>Lately I have been doing some development of an outlook add-in, and I learned that this can be challenging. I would like to share on this blog some of my experiences during this development.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here is one of the more "fun" experiences:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you probably know, it is possible in outlook to open more than one explorer window (the one with list of mail items, or the calendar, etc).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another feature of outlook is that when you exit while there are unsent items in the outbox, you get a message box notifying you, and asking if you want to exit without sending, or send and then exit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had a bug: When the add-in is installed, and the user exits outlook, and there are unsent items in the outbox, the user gets asked if he really wants to exit not once, but several times, as many as the number of explorers that were ever opened in the session.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is an annoying bug. It also doesn't seem connectd to what my add-in was doing, and this was weird. I scrambled to figure out the source of the bug by cutting out code from the add-in until I came to a simple addin reproducing the bug and containing these lines only:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;private void SidebarAddIn_Startup(object sender, System.EventArgs e)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;foreach (Explorer explorer in Application.Explorers)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{ &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A puzzlement indeed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a lot of pondering I came to the conclusion that the foreach() generates Explorer objects that are COM wrappers, and contain reference to the underlying Explorer objects. This keeps COM Explorer objects roaming around, and is probably the cause of this bug. And a simple workaround:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;private void SidebarAddIn_Startup(object sender, System.EventArgs e)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;foreach (Explorer explorer in Application.Explorers)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;{ &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;GC.Collect();&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and the bug is solved.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course in my add-in, this did not actually work. It turns out there are more operations that leak managed Explorer objects. One of them is adding a CustomTaskPane to an explorer and removing it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good luck to all Outlook add-in developers....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Noam&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-6855802571392143512?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/6855802571392143512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=6855802571392143512' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/6855802571392143512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/6855802571392143512'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2009/09/outlook-add-ins-can-be-tricky.html' title='Outlook Add-Ins can be tricky'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-4362905821747312957</id><published>2008-06-15T07:00:00.000-07:00</published><updated>2008-06-15T07:51:35.940-07:00</updated><title type='text'>Stub Generator project</title><content type='html'>I just published a stub generator utility on CodePlex :  &lt;a href="http://www.codeplex.com/StubGenerator"&gt;http://www.codeplex.com/StubGenerator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The stub generator reads a DLL using &lt;a href="http://www.ohloh.net/projects/cecil"&gt;Cecil &lt;/a&gt;and generates C# stubs for the DLL.&lt;br /&gt;&lt;br /&gt;We have tested it on some complex DLLs, and although it is not bug free it pretty much works.&lt;br /&gt;&lt;br /&gt;If someone wants to write a cool U/I this would be greatly appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-4362905821747312957?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/4362905821747312957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=4362905821747312957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4362905821747312957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4362905821747312957'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/06/stub-generator-project.html' title='Stub Generator project'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-5562422505827700816</id><published>2008-06-11T04:29:00.000-07:00</published><updated>2008-06-11T21:55:38.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Syndication - RSS 2.0 working !</title><content type='html'>The &lt;a href="http://msdn.microsoft.com/en-us/library/bb412174.aspx"&gt;RSS 2.0 syndication sample in MSDN &lt;/a&gt;now works in Mono's latest bits.&lt;br /&gt;I believe it is now possible to write a WCF service that consumes and exposes RSS feeds.&lt;br /&gt;&lt;br /&gt;Give it a try and let me know how things work out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-5562422505827700816?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/5562422505827700816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=5562422505827700816' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/5562422505827700816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/5562422505827700816'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/06/syndication-rss-20-working.html' title='Syndication - RSS 2.0 working !'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-2070076703785592581</id><published>2008-06-04T04:25:00.000-07:00</published><updated>2008-06-11T04:45:00.448-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Syndication - RSS 2.0 (almost) working !</title><content type='html'>I have been working in the past few days on getting the basic RSS feed sample from MSDN to work in Mono.&lt;br /&gt;&lt;br /&gt;The sample is at the bottom of this page: &lt;a href="http://msdn.microsoft.com/en-us/library/bb412174.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb412174.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I haven't committed all the fixes yet, but the status is that a valid RSS feed is generated. The part that consumes the RSS feed is not working yet.&lt;br /&gt;&lt;br /&gt;There is also an additional small bug discovered that I did not fix yet in the following code:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Uri baseAddress = &lt;/span&gt;&lt;span style="font-family:courier new;color:blue;"&gt;new&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Uri(&lt;/span&gt;&lt;span style="font-family:courier new;color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"http://localhost:8000/BlogService"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WebServiceHost svcHost = &lt;/span&gt;&lt;span style="font-family:courier new;color:blue;"&gt;new&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; WebServiceHost(typeof(Service), baseAddress); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;svcHost.open();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The host does not listen on the base address. The workaround is to add an additional Endpoint before penning the host, like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;svcHost.AddServiceEndpoint (typeof (IService), new WebHttpBinding (), baseAddress);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I will update when the entire sample is working.&lt;br /&gt;&lt;br /&gt;Noam&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-2070076703785592581?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/2070076703785592581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=2070076703785592581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/2070076703785592581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/2070076703785592581'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/06/syndication-rss-20-almost-working.html' title='Syndication - RSS 2.0 (almost) working !'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-863597833335260170</id><published>2008-06-04T04:23:00.000-07:00</published><updated>2008-06-04T04:25:22.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Serialization of byte[]</title><content type='html'>Across .NET now also works.&lt;br /&gt;&lt;br /&gt;Before it was serialized differently than .NET, so Mono&lt;-&gt;Mono worked but .NET&lt;-&gt;Mono did not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-863597833335260170?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/863597833335260170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=863597833335260170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/863597833335260170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/863597833335260170'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/06/serialization-of-byte.html' title='Serialization of byte[]'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-8191478907915115789</id><published>2008-05-29T09:49:00.001-07:00</published><updated>2008-05-29T10:05:14.850-07:00</updated><title type='text'>WCF work environment</title><content type='html'>I wanted to share the work environment in which I debug Mono's WCF.&lt;br /&gt;&lt;br /&gt;The idea is to run on .NET using the .NET tools and runtime, but taking specific libraries from Mono. The main advantage of this environment is the usage of the visual studio debugger greatly increasing productivity.&lt;br /&gt;&lt;br /&gt;Step 1: Skip public key validation of (some) .NET assemblies&lt;br /&gt;&gt; sn -Vr System.ServiceModel,B77A5C561934E089&lt;br /&gt;&gt; sn -Vr System.Runtime.Serialization,B77A5C561934E089&lt;br /&gt;&lt;br /&gt;Step 2: Place Mono assemblies in the GAC&lt;br /&gt;The visual studio project files of System.ServiceModel and System.Runtime.Serialization have post build steps that do this. The comitted versions are remarked, so you want to remove the remark.&lt;br /&gt;&lt;br /&gt;At this point you want to build the assemblies in VS2008 in order to place them in the GAC.&lt;br /&gt;&lt;br /&gt;Step 3: Run your app&lt;br /&gt;You can place breakpoints in Visual Studio. Very productive environment.&lt;br /&gt;&lt;br /&gt;Step 4: Revert back to .NET&lt;br /&gt;&gt; "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.ServiceModel.dll"&lt;br /&gt;&gt; "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll"&lt;br /&gt;&lt;br /&gt;Good luck,&lt;br /&gt;&lt;br /&gt;Noam&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-8191478907915115789?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/8191478907915115789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=8191478907915115789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/8191478907915115789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/8191478907915115789'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/05/wcf-work-environment.html' title='WCF work environment'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-205289643801183718</id><published>2008-05-29T08:49:00.001-07:00</published><updated>2008-05-29T08:50:44.814-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Dual contracts works</title><content type='html'>I just fixed a bug or two in Mono's WCF with regard to services that implement more than one contract. A simple test now works.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-205289643801183718?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/205289643801183718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=205289643801183718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/205289643801183718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/205289643801183718'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/05/dual-contracts-works.html' title='Dual contracts works'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-753968399721675468.post-4931627344390895802</id><published>2008-05-25T06:18:00.000-07:00</published><updated>2008-05-25T07:22:41.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Mono's WCF</title><content type='html'>Welcome to my blog.&lt;br /&gt;&lt;br /&gt;Since I have recently spent quite some time working on &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt;'s WCF implementation, I thought it might be a good idea to open a blog and share the experience during this development.&lt;br /&gt;&lt;br /&gt;I will tag all the WCF related posts with WCF tag. I think that this group of posts will be useful for people who are using, considering using, or contributing to Mono's WCF implementation.&lt;br /&gt;&lt;br /&gt;I work at &lt;a href="http://dev.mainsoft.com/"&gt;Mainsoft&lt;/a&gt;, managing the development team of Grasshopper. We are interested in supporting WCF in our Grasshopper at some time in the future, and thus my personal interest in WCF at Mono.&lt;br /&gt;&lt;br /&gt;Anyway, what I wanted to mention is that recently over the past couple of weeks, I have seen some usage of WCF on the olive dev list. For instance:&lt;br /&gt;&lt;a href="http://groups.google.com/group/mono-olive/browse_thread/thread/1e68bc3aa7bca05c"&gt;http://groups.google.com/group/mono-olive/browse_thread/thread/1e68bc3aa7bca05c&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/mono-olive/browse_thread/thread/7519b0f91a47cc11"&gt;http://groups.google.com/group/mono-olive/browse_thread/thread/7519b0f91a47cc11&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My point is that although the status of WCF is still initial, bugs in WCF - especially within the constraints of basicHttpBinding - are treated at a fairly high priority. If you can explain the bug you are having, it is likely we will fix it fairly quickly.&lt;br /&gt;&lt;br /&gt;Noam&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/753968399721675468-4931627344390895802?l=noamlampert.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://noamlampert.blogspot.com/feeds/4931627344390895802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=753968399721675468&amp;postID=4931627344390895802' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4931627344390895802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/753968399721675468/posts/default/4931627344390895802'/><link rel='alternate' type='text/html' href='http://noamlampert.blogspot.com/2008/05/monos-wcf.html' title='Mono&apos;s WCF'/><author><name>Noam Lampert</name><uri>http://www.blogger.com/profile/04506535951431931892</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
