<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A taste of development &#187; SQL</title>
	<atom:link href="http://simma1990.edublogs.org/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://simma1990.edublogs.org</link>
	<description>Just another Edublogs.org weblog</description>
	<lastBuildDate>Sat, 31 May 2008 03:59:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>The Ala Carting of Video on the Net &#8211; Will it lead to disaster ?</title>
		<link>http://simma1990.edublogs.org/2008/05/29/the-ala-carting-of-video-on-the-net-will-it-lead-to-disaster/</link>
		<comments>http://simma1990.edublogs.org/2008/05/29/the-ala-carting-of-video-on-the-net-will-it-lead-to-disaster/#comments</comments>
		<pubDate>Fri, 30 May 2008 07:55:20 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/29/the-ala-carting-of-video-on-the-net-will-it-lead-to-disaster/</guid>
		<description><![CDATA[Craig Moffett of Bernstein Research spelt an astonishing report gentled And Straight off for the News&#8230;The Emperor Has No Clothes&#8221;. If you can catch a copy, interpret it. Starting with the unsatisfying but waited news that journalism is no longer a service consumers want to pay for, he travels on to the problems presenting Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Craig Moffett of Bernstein Research spelt an astonishing report gentled And Straight off for the News&#8230;The Emperor Has No Clothes&#8221;. If you can catch a copy, interpret it. Starting with the unsatisfying but waited news that journalism is no longer a service consumers want to pay for, he travels on to the problems presenting Internet video. He does a far best job than I of all time did explicating the failings of Internet video and the expectation of liberal content. This is the report I bid I had blogged.</p>
<p>From the report:<br />Ironically, we are headed up down the same self-destructive road for other kinds of traditional media,as good. Five years into the video-over-the-Internet revolution, we have got word two things. For the first time; consumers won&#8221;t pay for content on the web, so it will have to be ad supported. And second; it won&#8221;t be ad supported. </p>
<p>In the cable TV network world, half of all revenues come from affiliate (carriage) fees paid by the Comcasts and <br />DirecTVs of the world. The other half comes from promoting. But in the TV world, a distinctive half hour show bears out an ad load of about 8 minutes. </p>
<p>On the web, other evidence intimates that consumers will tune up out &#8211; click off &#8211; if they are haled to see more than 30 seconds or indeed of publicising up front, and peradventure another 90 seconds of advertising over the next thirty minutes. Hulu.com, for example, which has already been lionized by many as the future of TV, dishs two minutes of advertising for every 22 minutes of programming(i.
<div style="width:100%;padding: 5px 2px 5px 2px;margin: 15px 0 15px 0;height:auto"><a href="http://www.jbTop.com/" title="Live Help Software">Live Help Software</a>: Live Chat with Users on your websites. It is FREE !
</div>
<p>e. the programming duration of a distinctive half hour show from television). Arrogating selfsame CPMs for web video and TV, and after accounting for turned a loss affiliate fees, a 30 narrow program on the web with two minutes of advertising paies around 1/8th as much revenue per viewer. <span id="more-60"></span></p>
<p><em><strong>Are contented producers cooked to shrink production costs&#8230;by 88%? </strong></em></p>
<p>In fact, the factual economics of web-founded video are far, far forged than this. Our 88% decline neglects the vitriolic impact of &#224; la carte on traditional video economics. In the public debate in Washington, the phrase &#224; la carte refers to the idea that a few firm networks require the carriage of a host of unaccented ones, in effect subsidise a much bigger family of channels.(From MC: This is something HDNet vehemently defends and is working towards terminating) But there&#8217;s a much more of import aspect of web-based &#224;la carte that is seldom mentioned-that is, the &#8220;&#224; la carting&#8221; of the few betterest shows from the rest of the day&#8217;s schedule. Or even uncollectible, of the betterest few moments (news stories?) from the rest of the show. On the web, following SportsCenter not but fleeces ESPN of its ability to carry through carriage fees for ESPN Classical and ESPN U (and SoapNet and Toon Disney), it as well, and much more significantly, soaks ESPN of its ability to expend SportsCenter to underpin the economics of the rest of the 24-hour ESPN schedule. And keeping an eye on simply the betterest 30 seconds of SportsCenter fleeces ESPN of its ability to sustain the economics of&#8230; good, you catch the idea. Awaiting a few ad sustained shortclips on the web to substitute for the affiliate fee revenues lost by multiple networks 24 hours a day is lunacy. &#8220;</p>
<p>Bully job Craig.<br /></strong><br />The concept he delineates as the &#8220;ala carting&#8221; of the betterest from the rest is the web video consumers favourite feature, but it&#8217;s as well the largest risk to professional video content producers all over. On the Internet, the producers of the most democratic content don&#8217;t have the promotional platforms that traditional media does. There are no lead ins for Internet shows up. So there is 100 pct uncertainty as to how many people will take in any paid video. For those videos that do turn democratic, a good deal of the popularity is viral, confining the producers ability to monetise the escalation in popularity. </p>
<p>The Darwinian response to this problem has been to serialise shows. The hope is that if a viewer cared a show, they will come backward for more. Which of course signifies they are simulating traditional TV&#8217;s approach to content presentation and engrossing all of the same problems. The changeless need to brush up a show is not simply hard, its expensive. The invariant need to further the show to stand up out in an ala carte universe of an limitless number of shows is still more hard than it is expensive. </p>
<p>Indeed where does this leave behind main video content on the Internet ? The right way in the hands of Google and Youtube and blackened and white-hot hat SEOs.</p>
<p>The ala carting of video on the net will do good those who enable the search for content and can monetise that search.
<div style="width:100%;padding: 5px 2px 5px 2px;margin: 15px 0 15px 0;height:auto"><a href="http://www.j-livesupport.com/affiliate/pages/117.php" title="Live Help Server">Live Help Server</a>: Jerry Messenger Server is Live Chat with Users on your websites.
</div>
<p> The economics of holding content will storm severally brought forth Internet content to be dumbed down to levels that make a stark match for Youtube. There will be SEOs that follow up with arbitrage solutions that will take traffic to parked videos. Contented creators will partner with SEOs and make budgets that think over the CPMs they can realize in and around the video hosted on Youtube against the costs of the SEO geting traffic to the video. SEO support will be the only even marginally efficient way to make baseline traffic to a video/show. </strong></p>
<p>Who could have infered that making financially succesful video on the net would ask the same commercializing skills as laboring traffic to parked domains ?</p>
<p>Content created by and for TV networks will have to create some of import decisions. Why wouldn&#8217;t advertisers desire to be one of only 2 minutes of ads in a 30 narrow TV picture instead than one of 8 mins of ads on traditional TV ? Will they compensate correspondingly bigger CPMs to be on-line ? </p>
<p>Are TV networks creating a vast mistake by laying their current TV schedules online for spare ? If a welled out TV depict merely has 2 mins of commercials, will that take some viewers to choose catching online ? Will it storm networks to shrink their TV usher ad load ? If thus, by how much ? Specially if and when over the top video enables Internet video to be laid out right on TVs. Will shows up be haled to present dissimilar versions of shows, say with unlike ratings as a means of differentiating TV from welled out shows ? The R shoped version of Friday Night Lights online and the PG version on TV ?</p>
<p>Bottom line is that something has let to present. Business as common is not becoming to hack it. The question is whether the dollars the large TV and media companies are making online from the streaming of their current TV lineups are sustainable incremental dollars ? Or is pullulating the video a collateralized video obligation ? The video equivalent of the collateralized debt behind the sub premier mess. Money that fronts sound while its making out in, but could lead to far, far large problems ?</strong></p>
<h6 style="height: 2px;font-size: 1px;border: 0;margin: 0"></h6>
<p>Permalink &#160;|&#160;Email this &#160;|&#160;Linking&#160;Blogs &#160;|&#160;Comments </p>
<p><i><a href="http://jerry35.blogsome.com/2008/05/30/craftsman-style-architecture-doing-a-comeback/" title="Craftsman Style Architecture Doing A Comeback">Craftsman Style Architecture Doing A Comeback</a></i><br /><i><a href="http://greenblog.blogsome.com/2008/05/29/quick-attempt-at-a-formalizing-roman-numeric-parser-lots-of-gotchas/" title="Quick attempt at a formalizing roman numeric parser... Lots of gotchas.">Quick attempt at a formalizing roman numeric parser&#8230; Lots of gotchas.</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/29/the-ala-carting-of-video-on-the-net-will-it-lead-to-disaster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Life Calculus</title>
		<link>http://simma1990.edublogs.org/2008/05/29/life-calculus-2/</link>
		<comments>http://simma1990.edublogs.org/2008/05/29/life-calculus-2/#comments</comments>
		<pubDate>Fri, 30 May 2008 04:43:28 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[workflow system]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/29/life-calculus-2/</guid>
		<description><![CDATA[Yesterday my coworkers redecorated my office.&#160; Pictures in this blog entry are photos of their work.&#160; Funnily enough, I felt myself quite appreciative of their act of vandalism.&#160; Today is my 40th birthday.&#160; Like most other days, I started by taking the air the dog and doing a To-Do list.&#160; Still, today&#8217;s list has a [...]]]></description>
			<content:encoded><![CDATA[<p><img width="160" height="120" src="http://software.ericsink.com/entries/1739_image001.jpg" align="right" hspace="12">Yesterday my coworkers redecorated my office.&#160; Pictures in this blog entry are photos of their work.&#160; Funnily enough, I felt myself quite appreciative of their act of vandalism.&#160; <b> <img src='http://simma1990.edublogs.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </b></p>
<p>Today is my 40<sup>th</sup> birthday.&#160; Like most other days, I started by taking the air the dog and doing a To-Do list.&#160; Still, today&#8217;s list has a particular item:</p>
<ul style='0in' type="disc">
<li>Resolve whether to have a mid-life crisis or not.</li>
</ul>
<p><b> <img src='http://simma1990.edublogs.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </b></p>
<p>I&#8217;ll concede I am not all thrilled about being 40.&#160; It doesn&#8217;t appear that long ago that 40 appeared far aside.&#160; Nowadays that it&#8217;s hither, I see that it&#8217;s not what I required.&#160; I guessed my life at 40 would be dissimilar.</p>
<p><img width="120" height="160" src="http://software.ericsink.com/entries/1739_image002.jpg" align="left" hspace="12">Many who cognise me would affirm that I have nothing to sound off roughly.&#160; And they would be right.&#160; My life has been filled with blessings of all kinds, for which I am truly grateful.&#160; I am a written author.&#160; Most would see me financially successful.&#160; I am in a career where I love my work.</p>
<p>But all the same&#8230;</p>
<p>As the honest-to-goodness supposing moves, nobody lies on their deathbed liking they had passed more time at the office.</p>
<p>Like most everybody else, when I was 30 I bet in front ten years and shaped a picture in my mind.&#160; My life today doesn&#8217;t jibe that picture very easily.&#160; Examples:</p>
<ul style='0in' type="disc">
<li>I thought by nowadays I would be more substantial in the quality of my relationships with my loved ones and in the practice of my faith.</p>
</li>
<li>I thought by nowadays I would be a better guitar player.
</li>
<li>There&#8217;s a mussy pile in my study that has been in that location for ten years.&#160; (Yes, we went six years ago.&#160; The heap went besides.)&#160; I opined it would be stript up by at present.
</li>
<li>I e&#8217;er taken over that by 40 I would have picked up to work on a regular basis and terminate feeding junk food.</li>
</ul>
<p> <span id="more-59"></span>
<p><img width="160" height="120" src="http://software.ericsink.com/entries/1739_image003.jpg" align="right" hspace="12">I move could on.&#160; And on.&#160; But you catch the idea.</p>
<p>I am allured to entertain my regrets, the places where I had a untimely turn, the places where I would have done a saucy choice if I cognised so what I cognise at present.</p>
<p>But this hale line of thinking doesn&#8217;t seem at all contributive to well genial health, indeed today I will prefer to focus on two things which appear more constructive:</p>
<h3>1.&#160; Tapestry</h3>
<p>One of my favourite Star Trek episodes is called up Tapestry.&#160; It is the story of someone consecrated a chance to re-experience a polar moment in his youth so that he can keep off doing the inexpedient choice he did the first time.&#160; But it sprains out that his foolhardy moment was a decisive ingredient in his late successes.</p>
<p>Today I prompt myself that there are no more do-overs, and I&#8217;m not sure I would desire one anyhow.&#160; For every mistake I have done, there were disconfirming consequences and convinced lessons.&#160; I can&#8217;t require to keep off the former and maintain the latter. &#160;They descend in concert as an inseparable package.</p>
<h3>2.&#160; Life Calculus.</h3>
<p>Backward in 2003 I indited an article sent for Career Calculus.&#160; In a nutshell, it alleges that at any contributed moment in your career, what you cognize is far less authoritative than whether you are geting a line.</p>
<p>Today I cue myself that the same principle applies in life.&#160; I am convinced in my first derivative.&#160; Whatever I am today, I intend I will be a best person tomorrow.</p>
<p>Indeed if I&#8217;m withal blogging when I&#8217;m 50, I ask I will be capable to cover progress on some of the items remarked supra.</p>
<p>And simply to be unmortgaged, if that heap of junk on the floor of my study is however in that respect, it will be bigger than it is at present, and I contrive to cover that as progress.&#160; <b> <img src='http://simma1990.edublogs.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </b></p>
<p align="center" style='center'><b><img border="0" width="160" height="120" src="http://software.ericsink.com/entries/1739_image004.jpg"></b></p>
</p>
<p><i>Relating Posts:</i><br /><i><a href="http://medonza.blogsome.com/2008/05/30/a-sited-lambda-calculus/" title="A sited lambda calculus">A sited lambda calculus</a></i><br /><i><a href="http://greenblog.blogsome.com/2008/05/29/appdomains-application-domains-2/">AppDomains (&#8220;application domains&#8221;)</a></i><br /><i><a href="http://medonza.blogsome.com/2008/05/29/residential-veridical-estate-appraiser-secrets-fha-today-taking-line-applications-for-appraisers/" title="Residential Veridical Estate Appraiser Secrets - FHA Today Taking Line Applications For Appraisers">Residential Veridical Estate Appraiser Secrets &#8211; FHA Today Taking Line Applications For Appraisers</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/29/life-calculus-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working large business problems in our minuscule toolbox application. A use case for Project Distributor.</title>
		<link>http://simma1990.edublogs.org/2008/05/29/working-large-business-problems-in-our-minuscule-toolbox-application-a-use-case-for-project-distributor/</link>
		<comments>http://simma1990.edublogs.org/2008/05/29/working-large-business-problems-in-our-minuscule-toolbox-application-a-use-case-for-project-distributor/#comments</comments>
		<pubDate>Thu, 29 May 2008 19:55:13 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/29/working-large-business-problems-in-our-minuscule-toolbox-application-a-use-case-for-project-distributor/</guid>
		<description><![CDATA[Project Distributor: Introduction to our staggered web service modelSo Darren and I have assigned in about a month at present on the Project Distributor website. We are begining to progress to that decisive point where the site is pretty coolheaded, we have plenty of users, we are thinking of operating out of the permissible bandwidth [...]]]></description>
			<content:encoded><![CDATA[<p>Project Distributor: Introduction to our staggered web service model<br />So Darren and I have assigned in about a month at present on the Project Distributor website. We are begining to progress to that decisive point where the site is pretty coolheaded, we have plenty of users, we are thinking of operating out of the permissible bandwidth for the demo site, and all sorts of other things that lean to bechance all at erstwhile. At present, there are some problems you can plan yourself out of, and others that you in truth have to hold some money at. Our up-to-the-minutest enhancements can be summarized up in a little list.</p>
<ul>
<li>Grease one&#8217;s palms a domain name and take up hosting in two places. Project Distributor.com should be up fairly before long to company MarkItUp.ASPXConnection.com</li>
<li>Have people host their ain versions of the application. And that implies a large source release is in the future. At this juncture risk fragmentation.</li>
<li>Design out fragmentation with a series of cunning features that will get everyone desire to employ the application at hand.</li>
</ul>
<p>I&#8217;m hither to talk about the last two, since Darren already corrupted some extra hosting for us. The concept will be to free a fairly static version of the application so that groups can host tools, code snippets and other source/binary releases for their teams to partake in. The application is very lightweight and well-heeled to set-up, so it won&#8221;t require a bunch of hand holding and configuration to get up and running initially. From our standpoint we resolve a number of issues at this juncture. The most obvious problem is what we separate the Lutz Roeder use case..NET Reflector is the central type of application we&#8217;500 love to catch hosted because it makes believe it a bit well-fixed to find oneself, not that Google does a tough job, we&#8217;d simply like to get a bunch of tools in one place, with some features for feedback, novel releases, and some nerveless client tools for printing.</p>
<p> <span id="more-53"></span>
<p>At present, Lutz would set up his application up and he&#8217;d walloped our bandwidth. He is the premier example of someone that should be hosting their ain tools, but peradventure applying our interface. He doesn&#8217;t have to, we haven&#8217;t even asked him yet in fact, but if he decides to do so, then all the better for the web application moving forward. Users such as Lutz belike desire a sure level of control over their ain sites as good in terms of posting and commanding access. This will simply come from hosting the application yourself (and perhaps some other features we&#8217;ll run across later).</p>
<p>From a security standpoint many teams will too desire to host their ain servers. In this manner they catch control over the hardware their sources and binaries are stacked away on. They can take tools up to any maximal (rather of our levyed limits) and leave limitless download bandwidth if they take. Or they can get hold of advantage of our gating mechanisms to get sure their server doesn&#8217;t catch overloaded with downloads and open up their tools up to the public.</p>
<p>The only major problem from this source release is that the initial problem we were proving to lick, advertising the visibility of tools, sets about to fret. You witness, the more sites that host their ain tools the harder it is to witness the right-hand site with the right-hand tools. We are stressing to resolve this in a number of ways. The first is taking into account users of a site to stash away bookmarks to other projects and outside resources. This is exclusively a irregular fix, because it stock-still doesn&#8217;t permit a mass search and categorization infrastructure required to in truth push the visibility of the tools being hosted. We have to occur up with a solution that takes all of the sites, but we don&#8221;t want to create&nbsp;just another portal or gateway site. That is drilling. Nowadays you have the background, thusly how will we lick the fragmentation issue?</p>
<p>Planing off Fragmentation<br />I won&#8221;t lie to you, I&#8217;ve implemented this model several times, but have never had a project that was capable of really showing off the feature set we are about to talk about. The concept is to commix all of the sites, by leaving them to easy handle views of data from all of the sites aggregated. Each site possesss their ain content, keeps their ain users, but in turn peers with other sites to find extra content.</p>
<p>Web services allow for a double feature kicked in this model. At the current level they permit us to yield really heavy client-side tools for pulling off, intimately, your tools! We have a drop-client target right at present so you can trail and drop newfangled releases to subsisting projects in just now a few seconds. Some raw tools for working with build systems to push the source code up to the server are in the works. We natively integrate with your RSS reader and will have our ain watchful services in the drop client simply in case you don&#8221;t have one. There aren&#8217;t any search or local hoarding features, but those are as well planned for the drop client so you can background download raw releases, simply like Windows Update.</p>
<p>That doesn&#8217;t work out fragmentation though, that simply prepares me realise how much work I have bequeathed to do. The second feature of web services lies in the ability for each site to aggregative data from the many other sites that are out at that place hosting the application. Think of, everything we give uncommitted at the service layer can likewise at present be remoted. The more stashing we put into the data layer, the more performant the full process will be, and we can yet tune up the caching depending on whether the data layer is mixing off-site contents or database contents.</p>
<p>Peer Sites<br /></strong>I&#8217;m surely there is another name out at that place somewhere, but for the past 2 years I&#8217;ve sent for these peer sites. Each instance of the project distributor will have a number of options allowing imparting peers that will be combined and added to the local collection while users cross the site. The first step is to start out the peer sites running in a read-only mode. And typeset up some really with child options so the intact process can be ensured. This resolves a number of use case scenarios for us including the surveiling.</p>
<ul>
<li>Fragmentation can be mitigated through right configuration. If everyone combines 5 or 6 sites into their peers, and then we have a vast network at present of interlinked peers and users can cull and select which one they use for purposes of looking for the tool network.</li>
<li>Peer connections are unidirectional or bidirectional. Access is configurable. Teams can admit tools from international sites while saving their ain tools completely secret. They can exist behind a DMZ or a secret network.</li>
<li>Users can host their ain personal tool sites in the same manner as the team sites. They can configure statically which contrives to create uncommitted yet. In this way you can establish a collection of personal tools that you bang, and have the up-to-the-minutest information mechanically update on your machine for your perusal.</li>
</ul>
<p>Peer sites figure out plenty of visibility issues, but that is pretty much all they solve for at present. We nonetheless desire to enable all of the features uncommitted to the client tools. After all, the web service methods and proxy infrastructure is in place to do so much more.</p>
<p>Master Sites<br />Well, we desire to resolve another problem. That is where you cut your data. A master site is where the users, groups, projects, etc&#8230; are all hosted, but thankfully, you&#8217;ll be capable to log in through any site (accepting it is peered with your master site) and and so edit out your ain projects and such. This is a outside master context and is really one of the nerveless features associated with the peering functionality of project distributor. We&#8217;ll be fully untroubled in our login and credentials region, but regrettably we&#8217;ll stock-still be transplanting data in unresolved text in the little term. Mayhap we&#8217;ll pay off that with enough push backward.</p>
<p>Clone Rides<br />A clone site is where we indue a site to act on behalf of a master site. For me, my local project distributor is presently cloned to the independent project distributor site. What does this mean? Right nowadays it haves in mind I grow all of the data from PD, and that users who desire my site can log-in to their project distributor accounts and cross edit data. Pretty skillful if you enquire me. It fundamentally implies you can full host a project distributor installation and ne&#8217;er, of all time have to instal a database server. Users can simply follow up on behalf of a outside server.</p>
<p>Configuration<br /></strong>This isn&#8217;t a tiptop recyclable model like some of those you read some in the democratic software architecture books, and it in all likelihood accounts for why master/peer/clone sites don&#8221;t exist very often. The considerations for every option are to a great extent customized to the problem being worked, and I&#8217;m certain we&#8217;ll be producing modifications or updating the configuration context for a while. Right at present you can severally configure your basal server type, whether master or clone, whether or not users can employ you for a pass-through authentication and edit server, whether or not web services are enabled so peers can enable unidirectional only communications, preparing up asymmetrical security credentials. Man, you mention it and it is in there</p>
<p>For the peer section we have total and selective modes. A wide-cut peer draws all of the data on the distant peer topically for display (in a delay hiving up manner, exactly like you&#8217;d require, unless you planted up a scheduled pull which is too potential). I ask most people to configure replete peers because they truly are really loose to set up up and keep. A selective peer is where you particularise the groups/projects that you desire to exhibit. This is best for a user arranging up their ain personal toolbox who requires to take a couple of items from many dissimilar peers.</p>
<p>We have an extensively thorough configuration module already and we&#8217;ll be unceasingly imparting more to it. The concept is to easy change your toolbox to your ain designs without having to extend to the code. If we haven&#8221;t given you enough options to satisfy your need then we&#8217;ll have to make something up, because I&#8217;m just about running out <img src='http://simma1990.edublogs.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>These are the basics of the model ideas I have for project distributor. That doesn&#8217;t think Darren doesn&#8217;t have other with child ideas passing off as intimately. He has some pretty extended UI enhancements, but I&#8217;ll get him talk about those. We yet have another product idea that is kind of a bolt-on for project distributor, but that is belike a couple of months out laying it into next&nbsp;year. Unluckily we have too many ideas for our ain ripe right at present. Better than not having any ideas I hazard. I&#8217;ll render to set down some code with some of the ideas supra, that way you can make a look at how the intact system is followed up. I have some diagrams as considerably, but I&#8217;m far besides fatigued right at present to supply the img tags to the HTML view.</p>
<p><i>Relating Posts:</i><br /><i><a href="http://greenblog.blogsome.com/2008/05/29/which-side-of-the-foresightful-tail-should-you-initiate-on/" title="Which Side of the Foresightful Tail Should You Initiate On?">Which Side of the Foresightful Tail Should You Initiate On?</a></i><br /><i><a href="http://jerry35.blogsome.com/2008/05/29/connect-love-09212007/" title="09/21/2007">Connect Love: 09/21/2007</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/29/working-large-business-problems-in-our-minuscule-toolbox-application-a-use-case-for-project-distributor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There can be only if one&#8230; with data</title>
		<link>http://simma1990.edublogs.org/2008/05/29/there-can-be-only-if-one-with-data/</link>
		<comments>http://simma1990.edublogs.org/2008/05/29/there-can-be-only-if-one-with-data/#comments</comments>
		<pubDate>Thu, 29 May 2008 19:43:12 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[CRM software]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[workflow system]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/29/there-can-be-only-if-one-with-data/</guid>
		<description><![CDATA[Sean &#38; Scott &#160;[fixated link]: The example you yielded is outstanding, although I would advise something a little more robust, specifically you believably desire to take into account data to pass between the already escaping instance and the newfangled one made (this takes into account you to mobilise the command line arguments). I pent an [...]]]></description>
			<content:encoded><![CDATA[<p><P>Sean &amp; Scott &nbsp;[fixated link]: The example you yielded is outstanding, although I would advise something a little more robust, specifically you believably desire to take into account data to pass between the already escaping instance and the newfangled one made (this takes into account you to mobilise the command line arguments). I pent an article on this last year&#8230; however holding up data marhsalling makes believe the code much much more awful.</P> <P>BTW, there were some underage bugs in the single instance logic that were fixed in next article in the series.</P></p>
<p><i>Relating Posts:</i><br /><i><a href="http://jerry35.blogsome.com/2008/05/29/crucial-changes-to-the-base-element-for-ie-7/" title="Crucial changes to the BASE element for IE 7">Crucial changes to the BASE element for IE 7</a></i><br /><i><a href="http://jerry35.blogsome.com/2008/03/21/when-will-foreign-ownership-of-us-sports-teams-start-2/" title="When Will Foreign Ownership of US Sports Teams Start ?">When Will Foreign Ownership of US Sports Teams Start ?</a></i><br /><i><a href="http://kerryzan.blogsome.com/2008/05/29/obviate-devpath/" title="Obviate DevPath">Obviate DevPath</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/29/there-can-be-only-if-one-with-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beating Google ?</title>
		<link>http://simma1990.edublogs.org/2008/05/29/beating-google/</link>
		<comments>http://simma1990.edublogs.org/2008/05/29/beating-google/#comments</comments>
		<pubDate>Thu, 29 May 2008 09:55:20 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/29/beating-google/</guid>
		<description><![CDATA[Is there anything more fun than riding about, developing your hair, pledging a Bud while listening to Jethro Tull and ruminating how to exchange the balance of power in the search world and unseat Google ?Best search ? Too immanent. Better monetization ? After the fact. Best User Interface ? Will we cognise it when [...]]]></description>
			<content:encoded><![CDATA[<p>Is there anything more fun than riding about, developing your hair, pledging a Bud while listening to Jethro Tull and ruminating how to exchange the balance of power in the search world and unseat Google ?<br />Best search ? Too immanent. Better monetization ? After the fact. Best User Interface ? Will we cognise it when we fancy it ? A newfangled and dissimilar search ? Semantic ? Human powered ? We won&#8221;t know till we know.</p>
<p>But what about the Google Index, all the websites that are indexed by Google ? What is it deserving to be in the Google Index ? What would you, as a website owner require in order to take your site from the Google Index and no longer be uncommitted when someone does a google search ? </p>
<p>It should simply be a matter of dollars and cents and sense, shouldn&#8217;t it ? </p>
<p>How many websites would have to recuse themselves from the Google Index before Google Search was negatively touched on ? <br />Mahalo.com intends it demands to sustain the 25k most common search terms in order to be successful. What would encounter if MicroSoft or Yahoo or a MicroHoo attended the 5 top results for the top 25k searches and compensated them to allow the Google Index ? </p>
<p>A theoretic maximum of 125k sites, but with overlap, in all probability closer to 100k or less, times how much per site on average ?</p>
<p>The math starts out to pay back interesting. At $1,000 per site median times 100k sites, thats only when $ 1 Billion Dollars. The distribution would plain favour the bigger sites, indeed of that billion dollars, would the top 1k sites get hold of 500k each and the resting 99k parted the rest ?<span id="more-46"></span></p>
<p>Kicked in the stakes, why stop at $ 1 Billion Dollars ? Would the top 1k most inspected sites accept a coolheaded $1mm each, plus a committment from MicroSoft or Yahoo to labor traffic through their search engines to more than make up up for the turned a loss Google Traffic. After all, one time consumers realised that Google no longer had valid search results for the top 25k searchs, that traffic would most belike go to MicroSoft and Yahoo.</p>
<p>And why we are at it, why not ask that these 100k sites switch from Googles Publisher Network to Yahoo&#8217;s or MicroSofts ? It would start up to take in backward the $1 Billion compensated out very apace. </p>
<p>On top of that, in order to grease the skids even further, why not make out publicising credits to the sites that exchanged off Google ? Its delicate dollars, that would sweeten the pot and take more traffic.</p>
<p>IN essence, its no dissimilar that any other content aggregation play. Its paying for content. But, It would accept some heavy ones to consent it and visit if it turned. Still, without question, every search engine has some number of core sites, that when removed from its index , destabilises the value of its search. </p>
<p>The question is how many ? What would it bed to get down that number of sites to move around Google off and rest off, and would the traffic created as users switch from Google more than compensate for the cost ?</p>
<p>Or would Google know the risk and leap in and offer up more to websites to rest ?</p>
<p>For certain would be interesting to chance out.</p>
<h6 style="height: 2px;font-size: 1px;border: 0;margin: 0"></h6>
<p>Permalink &#160;|&#160;Email this &#160;|&#160;Linking&#160;Blogs &#160;|&#160;Comments </p>
<p><i>Relating Posts:</i><br /><i><a href="http://greenblog.blogsome.com/2008/03/25/reserve-judgement-lest-thou-be-judged-too/" title="Reserve judgement lest thou be judged too...">Reserve judgement lest thou be judged too&#8230;</a></i><br /><i><a href="http://jerry35.blogsome.com/2008/05/29/connect-love-09212007/" title="09/21/2007">Connect Love: 09/21/2007</a></i><br /><i><a href="http://jerry35.blogsome.com/2008/05/29/online-marketing-in-veridical-estate-firm-start-to-stagnation/" title="Online Marketing in Veridical Estate - Firm Start to Stagnation">Online Marketing in Veridical Estate &#8211; Firm Start to Stagnation</a></i><br /><i><a href="http://greenblog.blogsome.com/2008/03/25/sometimes-its-the-small-things-2/" title="Sometimes, it's the small things..">Sometimes, it&#8217;s the small things..</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/29/beating-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Microsoft Tagspace</title>
		<link>http://simma1990.edublogs.org/2008/05/02/introducing-microsoft-tagspace/</link>
		<comments>http://simma1990.edublogs.org/2008/05/02/introducing-microsoft-tagspace/#comments</comments>
		<pubDate>Sat, 03 May 2008 03:32:59 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/05/02/introducing-microsoft-tagspace/</guid>
		<description><![CDATA[Also see: Single source code base for Silverlight and WPF solutions Also see: Video games Also see: JSR-294 Superpackages Tagspace * is a social bookmarking service for software professionals** that&#160;encourages sound sleep and sweet dreams by enabling you to be&#160;better informed, better connected, and more productive. The more you use Tagspace, the more you&#8217;ll wonder [...]]]></description>
			<content:encoded><![CDATA[<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/23/single-source-code-base-for-silverlight-and-wpf-solutions/" title="Single source code base for Silverlight and WPF solutions">Single source code base for Silverlight and WPF solutions</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/25/video-games/" title="Video games">Video games</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/jsr-294-superpackages/" title="JSR-294 Superpackages">JSR-294 Superpackages</a></i></p>
<p><P>Tagspace * is a social bookmarking service for software professionals** that&nbsp;encourages sound sleep and sweet dreams by enabling you to be&nbsp;better informed, better connected, and more productive. The more you use Tagspace, the more you&#8217;ll wonder how you survived for so long in the cramped quarters of your Web browser&#8217;s Favorites folder.</P><br />
<BLOCKQUOTE><br />
<P>WARNING:&nbsp;TAGSPACE IS ADDICTIVE. REPEATED USAGE MAY CAUSE&nbsp;INCREASED PRODUCTIVITY.<BR>*Tagspace has been shown to be effective in helping to prevent and reduce memory decay.<BR>**No animals or software engineers were harmed in the making or testing of Tagspace.</P></BLOCKQUOTE><br />
<P>For more information about Tagspace, see:</P><br />
<BLOCKQUOTE><br />
<BLOCKQUOTE><br />
<P><STRONG>Screencast (direct stream):</STRONG> intro2tagspace.wvx Screencast (on MSN Soapbox): intro2tagspace.wmv Text Overview: Tagspace Beta Refresh Overview <BR>Product Roadmap: Microsoft.Community Today and Tomorrow &nbsp; (&#8230;because this is just the beginning.)<BR>Tagspace: In the News <BR><STRONG>Subscribe: RSS </STRONG></P></BLOCKQUOTE></BLOCKQUOTE><img src="http://blogs.msdn.com/aggbug.aspx?PostID=2161287" width="1" height="1"><br />
http://blogs.msdn.com/korbyp/archive/2007/04/16/introducing-microsoft-tagspace.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/05/02/introducing-microsoft-tagspace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppDomains (&#8220;application domains&#8221;)</title>
		<link>http://simma1990.edublogs.org/2008/03/26/appdomains-application-domains/</link>
		<comments>http://simma1990.edublogs.org/2008/03/26/appdomains-application-domains/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 11:00:17 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/03/26/appdomains-application-domains/</guid>
		<description><![CDATA[Also see: Applied Metamodelling: A Foundation for Language Driven Development An AppDomain is a light-weight process.&#160; Well, if you actually measure the costs associated with an AppDomain – especially the first one you create, which has some additional costs that are amortized over all subsequent ones – then “light-weight” deserves some explanation: &#160; A Win32 [...]]]></description>
			<content:encoded><![CDATA[<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/applied-metamodelling-a-foundation-for-language-driven-development-2/" title="A Foundation for Language Driven Development">Applied Metamodelling: A Foundation for Language Driven Development</a></i></p>
<p><P><FONT face="Tahoma" size="2">An<br />
AppDomain is a light-weight process.&nbsp;<br />
Well, if you actually measure the costs associated with an AppDomain –<br />
especially the first one you create, which has some additional costs that are<br />
amortized over all subsequent ones – then “light-weight” deserves some<br />
explanation:</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">A Win32<br />
process is heavy-weight compared to a Unix process.&nbsp; A Win32 thread is heavy-weight compared<br />
to a Unix thread, particularly if you are using a non-kernel user threads<br />
package on Unix.&nbsp; A good design for<br />
Windows will create and destroy processes at a low rate, will have a small<br />
number of processes, and will have a small number of threads in each<br />
process.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Towards<br />
the end of V1, we did some capacity testing using ASP.NET.&nbsp; At that time, we were able to squeeze<br />
1000 <I>very</I> simple applications /<br />
AppDomains into a single worker process.&nbsp;<br />
Presumably that process would have had 50-100 threads active in it, even<br />
under heavy load.&nbsp; If we had used OS<br />
processes for each application, we would have 1000 CLRs with 1000 GC heaps.&nbsp; More disturbing, we would have at least<br />
10,000 threads.&nbsp; This would reserve<br />
10 GB of VM just for their default 1 MB stacks (though it would only commit a<br />
fraction of that memory).&nbsp; All those<br />
threads would completely swamp the OS scheduler.</FONT></P><br />
<span id="more-39"></span><P><FONT face="Tahoma" size="2">&nbsp;</FONT></P></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/infrequent-blogging-2/" title="Infrequent blogging">Infrequent blogging</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/we-live-in-an-open-book-world-the-lie-of-information-overload-2/">We Live in an &#8220;Open Book&#8221; World, the Lie of Information Overload</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/the-pdc-and-application-compatibility-but-still-no-hosting/" title="The PDC and Application Compatibility, but still no Hosting">The PDC and Application Compatibility, but still no Hosting</a></i></p>
<p><P><FONT face="Tahoma" size="2">Also, if<br />
you execute a lot of processes, it’s key that those processes are filled with<br />
shared pages (for example, the same code loaded at the same preferred addresses)<br />
rather than private pages (like dynamically allocated data).&nbsp; Unfortunately, JITted code results in<br />
private pages.&nbsp; Our NGEN mechanism<br />
can be used to create pre-JITted images that can be shared across<br />
processes.&nbsp; But NGEN is not a<br />
panacea: NGEN images must be explicitly generated; if their dependencies change<br />
through versioning, modifications to security policy, etc., then the loader will<br />
reject the images as invalid and quietly fall back on JITting; NGEN images<br />
improve load time, but they actually insert a small steady-state cost to some<br />
operations, due to indirections; and NGEN can do a worse job of achieving<br />
locality than JITting and dynamically loading types (at least in the absence of<br />
a training scenario).</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Over<br />
time, I think you’ll see NGEN address many of these limitations and become a<br />
core part of our execution story.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P></p>
<div>Multisoft Group: <a href="http://www.multisoftgroup.com/" title="Custom Software">Custom Software Development</a> and Consulting Service.
</div>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/23/ide-day-in-genoa-italy/" title="IDE Day in Genoa, Italy">IDE Day in Genoa, Italy</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/why-should-i-be-optimistic-about-trolltech-and-nokia-2/" title="Why should I be optimistic about Trolltech and Nokia?">Why should I be optimistic about Trolltech and Nokia?</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/24/what-are-you-destined-to-be-2/" title="What Are You Destined to Be ?">What Are You Destined to Be ?</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/24/2433-unread-emails-i-feel-your-pain/" title="2,433 Unread Emails, I feel your pain..">2,433 Unread Emails, I feel your pain..</a></i></p>
<p><P><FONT face="Tahoma" size="2">Of<br />
course, I wouldn’t recommend that you actually run a process with 1000<br />
AppDomains either.&nbsp; For example,<br />
address space is an increasingly scarce resource – particularly on servers.&nbsp; The version of the CLR we just shipped<br />
now supports 3 GB of user address space, rather than the 2 GB that is normally<br />
available.&nbsp; (You need to boot the<br />
system for this, and sacrifice OS buffer space, so don’t do it unless you really<br />
need it).&nbsp; 64-bit systems, including<br />
a 64-bit CLR, cannot come soon enough for certain scenarios.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Compared<br />
to our goals, it still takes too long to create and destroy AppDomains.&nbsp; The VM and working set hits are too<br />
high.&nbsp; And the cost of crossing an<br />
AppDomain boundary is embarrassing.&nbsp;<br />
But the general architecture is sound and you should see improvements in<br />
all these areas in future releases.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P></p>
<div>Developing <a href="http://www.multisoftgroup.com/projects.html" title="Customer Relationship Management ">Customer Relationship Management</a> Solutions. Web, e-Commerce, Database Design and Software Development.
</div>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/sourcegear-at-sd-west-next-week-2/" title="SourceGear at SD West next week">SourceGear at SD West next week</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/determining-whether-a-file-is-an-assembly-2/" title="Determining Whether a File Is an Assembly">Determining Whether a File Is an Assembly</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/avoid-devpath-2/" title="Avoid DevPath">Avoid DevPath</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/26/quick-attempt-at-a-validating-roman-numeral-parser-lots-of-gotchas-2/" title="Quick attempt at a validating roman numeral parser... Lots of gotchas.">Quick attempt at a validating roman numeral parser&#8230; Lots of gotchas.</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/26/the-influence-of-style-upon-methodology/" title="The influence of style upon methodology...">The influence of style upon methodology&#8230;</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/infrequent-blogging-2/" title="Infrequent blogging">Infrequent blogging</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/when-will-foreign-ownership-of-us-sports-teams-start-2/" title="When Will Foreign Ownership of US Sports Teams Start ?">When Will Foreign Ownership of US Sports Teams Start ?</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/should-membership-stores-be-permitted-in-redmonds-manufacturing-park-zone-2/">Should &#8220;Membership Stores&#8221; Be Permitted in Redmond&#8217;s Manufacturing Park Zone?</a></i></p>
<p><P><FONT face="Tahoma" size="2">It’s too<br />
simplistic to say that AppDomains are just light-weight OS processes.&nbsp; There is more to say in several<br />
dimensions:</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Security</FONT><br />
 <LI><FONT face="Tahoma" size="2">Instance lifetime </FONT><br />
 <LI><FONT face="Tahoma" size="2">Type identity</FONT><br />
 <LI><FONT face="Tahoma" size="2">Domain-neutrality</FONT><br />
 <LI><FONT face="Tahoma" size="2">Per-AppDomain state like static fields</FONT><br />
 <LI><FONT face="Tahoma" size="2">Instance-agility</FONT><br />
 <LI><FONT face="Tahoma" size="2">Configuration and assembly binding</FONT><br />
 <LI><FONT face="Tahoma" size="2">Unloading and other resource management</FONT><br />
 <LI><FONT face="Tahoma" size="2">Programming model</FONT></LI></UL></p>
<div><a href="http://www.j-livesupport.com/affiliate/pages/117.php" title="Live Person Server">Live Person Server</a>: Live Chat Server for Online Customer Service on Website.
</div>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/23/ide-day-in-genoa-italy/" title="IDE Day in Genoa, Italy">IDE Day in Genoa, Italy</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/23/single-source-code-base-for-silverlight-and-wpf-solutions/" title="Single source code base for Silverlight and WPF solutions">Single source code base for Silverlight and WPF solutions</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/passing-the-community-torch-in-search-of-a-new-chief-executive-in-redmond-2/" title="In Search of a New Chief Executive in Redmond">Passing the Community Torch: In Search of a New Chief Executive in Redmond</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/26/from-c-to-java-part-5-2/" title="From C# to Java:  Part 5">From C# to Java:  Part 5</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/26/the-influence-of-style-upon-methodology/" title="The influence of style upon methodology...">The influence of style upon methodology&#8230;</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/natural-sorting-in-c-2/" title="Natural Sorting in C#">Natural Sorting in C#</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/loadassemblyname-2/" title="Load(AssemblyName)">Load(AssemblyName)</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/26/why-yahoo-should-say-yes-to-microsoft-2/" title="Why Yahoo should say Yes to MicroSoft">Why Yahoo should say Yes to MicroSoft</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/important-changes-to-the-base-element-for-ie-7-2/" title="Important changes to the BASE element for IE 7">Important changes to the BASE element for IE 7</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/23/presentations/" title="Presentations...">Presentations&#8230;</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/ui-design/" title="UI design">UI design</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/is-this-the-best-nba-season-ever-2/" title="Is this the best NBA season ever ?">Is this the best NBA season ever ?</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/spring-web-flow-features-and-feedback-request/" title="Spring Web Flow features and feedback request">Spring Web Flow features and feedback request</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/24/introducing-microsoft-tagspace-2/" title="Introducing Microsoft Tagspace">Introducing Microsoft Tagspace</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/26/my-presidential-endorsement-2/" title="">My Presidential Endorsement:</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/java-concurrency-another-series-on-its-issues/" title="Java Concurrency, another series on its issues">Java Concurrency, another series on its issues</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/help-john-baez-and-mike-stay-2/" title="Help John Baez and Mike Stay!">Help John Baez and Mike Stay!</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/infrequent-blogging-2/" title="Infrequent blogging">Infrequent blogging</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/25/this-guy-proves-anyone-with-a-keyboard-can-be-stupid/" title="This Guy Proves Anyone with a Keyboard can be Stupid">This Guy Proves Anyone with a Keyboard can be Stupid</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/the-pdc-and-application-compatibility-but-still-no-hosting/" title="The PDC and Application Compatibility, but still no Hosting">The PDC and Application Compatibility, but still no Hosting</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/jsr-294-superpackages/" title="JSR-294 Superpackages">JSR-294 Superpackages</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/uniqueness-typing-simplified-2/" title="Uniqueness Typing Simplified">Uniqueness Typing Simplified</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/23/blogging-and-newspapers-a-lesson-in-how-not-to-brand-and-market-2/" title="Blogging and Newspapers, a Lesson in How Not to Brand and Market">Blogging and Newspapers, a Lesson in How Not to Brand and Market</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/infrequent-blogging-2/" title="Infrequent blogging">Infrequent blogging</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/link-love-09212007-2/" title="09/21/2007">Link Love: 09/21/2007</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/25/finally-the-killer-app/" title="Finally, the Killer App">Finally, the Killer App</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/jsr-294-superpackages/" title="JSR-294 Superpackages">JSR-294 Superpackages</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/the-2-technology-magazines-you-should-read-2/" title="The 2 Technology Magazines You Should Read">The 2 Technology Magazines You Should Read</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/should-membership-stores-be-permitted-in-redmonds-manufacturing-park-zone-2/">Should &#8220;Membership Stores&#8221; Be Permitted in Redmond&#8217;s Manufacturing Park Zone?</a></i></p>
<p><P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Security</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">Code<br />
Access Security only works within an OS process.&nbsp; Threads freely call through AppDomain<br />
boundaries, so the CLR must be able to crawl stacks across those boundaries to<br />
evaluate permission demands.&nbsp; In<br />
fact, it can crawl compressed stacks that have been disassociated from their<br />
threads, accurately evaluating permissions based on AppDomains that have already<br />
been unloaded.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">It’s<br />
conceivable that one day we will have a sufficiently strong notion of<br />
distributed trust that we can usefully propagate compressed stacks into other<br />
processes.&nbsp; However, I don’t expect<br />
we’ll see that sort of distributed security for at least another couple of<br />
releases.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">It’s<br />
possible to apply different security policy or different security evidence at<br />
the granularity of an AppDomain.&nbsp;<br />
Any grants that would result based on AppDomain evidence and policy are<br />
intersected with what would be granted by policy at other levels, like machine<br />
or enterprise. &nbsp;For example,<br />
Internet Explorer attaches a different codebase to an AppDomain to indicate the<br />
origin of the code that’s running in it.&nbsp;<br />
There are two ways for the host to control security at an AppDomain<br />
granularity.&nbsp; Unfortunately, both<br />
techniques are somewhat flawed:</FONT></P></p>
<div><a href="http://www.multisoftgroup.com/" title="Softwre Development">Softwre Development</a> for small and middle size companies. World-class software applications.
</div>
<p><P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">1)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<FONT face="Tahoma" size="2">The host can pre-load a set of<br />
highly-trusted assemblies into an AppDomain.&nbsp; Then it can modify the security policy<br />
to be more restrictive and start loading less-trusted application code.&nbsp; The new restricted policy will only<br />
apply to these subsequent loads.&nbsp;<br />
This approach is flawed because it forces the host to form a closure of<br />
the initial highly-trusted set of assemblies.&nbsp; Whatever technique the host uses here is<br />
likely to be brittle, particularly in the face of versioning.&nbsp; Any dependent assemblies that are<br />
forgotten in the initial load will be limited by the restricted policy.&nbsp; Furthermore, it is unnecessarily<br />
expensive to eagerly load assemblies, just so they can escape a particular<br />
security policy.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P></p>
<div><a href="http://www.j-livesupport.com/affiliate/pages/117.php" title="Live Person Server">Live Person Server</a>: Live Chat Server for Online Customer Service on Website.
</div>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/25/finally-the-killer-app/" title="Finally, the Killer App">Finally, the Killer App</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/the-obligatory-halo-2-partial-review-and-thumbs-up-2/" title="The obligatory Halo 2 partial review and thumbs up.">The obligatory Halo 2 partial review and thumbs up.</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/ui-design/" title="UI design">UI design</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/single-source-code-base-for-silverlight-and-wpf-solutions-2/" title="Single source code base for Silverlight and WPF solutions">Single source code base for Silverlight and WPF solutions</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/note-to-self-blog-about-using-service-broker/" title="Blog about using Service Broker">Note to self: Blog about using Service Broker</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/23/generics-and-net-2/" title="Generics and .NET">Generics and .NET</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/25/important-changes-to-the-base-element-for-ie-7-2/" title="Important changes to the BASE element for IE 7">Important changes to the BASE element for IE 7</a></i></p>
<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/24/eriskay-a-programming-language-based-on-game-semantics-2/" title="a Programming Language Based on Game Semantics">Eriskay: a Programming Language Based on Game Semantics</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/24/2433-unread-emails-i-feel-your-pain/" title="2,433 Unread Emails, I feel your pain..">2,433 Unread Emails, I feel your pain..</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/26/important-changes-to-the-base-element-for-ie-7-2/" title="Important changes to the BASE element for IE 7">Important changes to the BASE element for IE 7</a></i></p>
<p><P><FONT face="Tahoma" size="2">2)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<FONT face="Tahoma" size="2">The host can load the application<br />
assemblies with extra evidence.&nbsp;<br />
When the security system evaluates the grant set for these assemblies,<br />
this extra evidence can be considered and the application assemblies will get<br />
reduced permissions.&nbsp; This technique<br />
allows the host to lazily load highly trusted assemblies into the same<br />
AppDomain, since these won’t have the extra evidence attached to them.&nbsp; Unfortunately, this technique also has a<br />
rough edge.&nbsp; If an application<br />
assembly has a dependency on a second application assembly, what is going to<br />
attach extra evidence to the 2<SUP>nd</SUP> assembly?&nbsp; I suppose the host could get the<br />
1<SUP>st</SUP> assembly’s dependencies and eagerly load them.&nbsp; But now we are back on a plan where<br />
transitive closures must be eagerly loaded in order to remain secure.&nbsp; And, in future releases, we would like<br />
to give each assembly a chance to run initialization code.&nbsp; There’s a risk that such initialization<br />
code might run and fault in the dependencies before the host can explicitly load<br />
them with extra evidence.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">We need<br />
to do better here in a future release.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Until<br />
then, code injection remains a real concern.&nbsp; A host carefully prepares an AppDomain<br />
and loads some partially trusted application code there for execution.&nbsp; If the application code can inject<br />
itself into a different AppDomain (especially the default AppDomain, which is<br />
presumably where the fully trusted host is executing), then it can escape the<br />
policy and extra evidence that is constraining it.&nbsp; This is one reason that we don’t provide<br />
AppDomain enumeration services to partially trusted code.&nbsp; If you can find an AppDomain, you can<br />
perform an AppDomain.DoCallBack into it passing a delegate.&nbsp; This has the effect of marshaling the<br />
delegate into that AppDomain and then dispatching to it there.&nbsp; The assemblies containing the delegate<br />
and the target of the delegate will be created in the specified<br />
AppDomain.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Today,<br />
if a host exercises great care, it can use AppDomains as the basis of building a<br />
secure environment.&nbsp; In the future,<br />
we would like to reduce the amount of care required of the host.&nbsp; One obvious way to do this is to involve<br />
the host in any assembly loads that happen in any AppDomain.&nbsp; Unfortunately, that simple approach<br />
makes it difficult to make wise decisions on loading assemblies as<br />
domain-neutral, as we’ll see later.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Instance<br />
Lifetime</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">The CLR<br />
contains a tracing GC which can accurately, though non-deterministically, detect<br />
whether an object is still reachable.&nbsp;<br />
It is accurate because, unlike a conservative GC, it knows how to find<br />
all the references.&nbsp; It never leaves<br />
objects alive just because it can’t distinguish an object reference from an<br />
integer with the same coincidental set of bits.&nbsp; Our GC is non-deterministic because it<br />
optimizes for efficient memory utilization.&nbsp; It collects portions of the GC heap that<br />
it predicts will productively return memory to the heap, and only when it thinks<br />
the returned memory warrants the effort it will expend.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If the<br />
GC can see an orphaned cycle where A refers to B and B refers to A (but neither<br />
A nor B are otherwise reachable), it will collect that cycle.&nbsp; However, you can create cycles that the<br />
GC cannot trace through and which are therefore uncollectible.&nbsp; A simple way to do this is to have<br />
object A refer to object B via a GCHandle rather than a normal object<br />
reference.&nbsp; All handles are<br />
considered part of the root-set, so B (and thus A) is never<br />
collected.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">The GC<br />
cannot trace through unmanaged memory either.&nbsp; Any cycles that involve COM objects will<br />
be uncollectible.&nbsp; It is the<br />
application’s responsibility to explicitly break the cycle by nulling a<br />
reference, or by calling ReleaseComObject, or by some other technique.&nbsp; Of course, this is standard practice in<br />
the COM world anyway.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Nor can<br />
the GC trace across processes.&nbsp;<br />
Instead, Managed Remoting uses a system of leases to achieve control over<br />
distributed lifetime.&nbsp; Calls on<br />
remote objects automatically extend the lease the client holds.&nbsp; Leases can trivially be made infinite,<br />
in which case the application is again responsible for breaking cycles so that<br />
collection can proceed.&nbsp;<br />
Alternatively, the application can provide a sponsor which will be<br />
notified before a remote object would be collected.&nbsp; This gives the application the<br />
opportunity to extend leases “on demand”, which reduces network<br />
traffic.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">By<br />
default, if you don’t access a remote object for about 6 minutes, your lease<br />
will expire and your connection to that remote object is lost.&nbsp; You can try this yourself, with a remote<br />
object in a 2<SUP>nd</SUP> process.&nbsp;<br />
But listen carefully:&nbsp; you<br />
can also try it with a remote object in a 2<SUP>nd</SUP> AppDomain.&nbsp; If you leave your desk for a cup of tea,<br />
your cross-AppDomain references can actually timeout and disconnect!</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Perhaps<br />
one day we will build a distributed GC that is accurate and non-deterministic<br />
across a group of processes or even machines.&nbsp; Frankly, I think it’s just as likely<br />
that we’ll continue to rely on techniques like configurable leases for<br />
cross-process or cross-machine lifetime management.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">However,<br />
there’s no good reason for using that same mechanism cross-AppDomain. &nbsp;There’s a relatively simple way for us to<br />
trace object references across AppDomain boundaries – even in the presence of<br />
AppDomain unloading.&nbsp; This would be<br />
much more efficient than what we do today, and would relieve developers of a big<br />
source of problems.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">We<br />
should fix this.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Type<br />
Identity</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">Managed<br />
objects can be marshaled across AppDomain boundaries according to one of several<br />
different plans:</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Unmarshalable</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">This is the default for all types.&nbsp;<br />
If an object is not marked with the Serializable custom attribute, it<br />
cannot be marshaled.&nbsp; Any attempt to<br />
pass such an object across an AppDomain boundary will result in an<br />
exception.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Marshal-by-value</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">This is the default for all types that are marked as Serializable, unless<br />
they inherit from MarshalByRefObject.&nbsp;<br />
During a single marshal of a graph of objects, identity is<br />
preserved.&nbsp; But if the same object<br />
is marshaled on two separate calls from AppDomain1 to AppDomain2, this will<br />
result in two unrelated instances in AppDomain2. </FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Marshal-by-reference</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">Any Serializable types that inherit from System.MarshalByRefObject will<br />
marshal by reference.&nbsp; This causes<br />
an identity-preserving proxy to be created in the client’s AppDomain.&nbsp; Most calls and any field accesses on<br />
this proxy will remote the operation back to the server’s AppDomain.&nbsp; There are a couple of calls, defined on<br />
System.Object (like GetType), which might actually execute in the client’s<br />
AppDomain.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Marshal-by-bleed</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">Certain objects are allowed to bleed.&nbsp; For the most part, this bleeding is an<br />
optional performance optimization.&nbsp;<br />
For example, if you pass a String object as an argument on a call to a<br />
remoted MarshalByRefObject instance, the String is likely to bleed across the<br />
AppDomain boundary.&nbsp; But if you<br />
create a value type with an Object[] field, put that same String into the<br />
Object[], and pass the struct, the current marshaler might not bleed your<br />
String.&nbsp; Instead, it’s likely to be<br />
marshaled by value.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In<br />
other cases, we absolutely require that an instance marshal by bleed.&nbsp; System.Threading.Thread is a good<br />
example of this.&nbsp; The same managed<br />
thread can freely call between AppDomains.&nbsp;<br />
Since the current marshaler cannot guarantee that an instance will always<br />
bleed, we have made Thread unmarshalable by the marshaler for now.&nbsp; Then the CLR bleeds it without using the<br />
marshaler when you call Thread.CurrentThread.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Identity-preserving marshal-by-value</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">As<br />
we’ve seen, objects which marshal by value only preserve identity in a single<br />
marshaling operation, like a single remoted call.&nbsp; This means that, the more you call, the<br />
more objects you create.&nbsp; This is<br />
unacceptable for certain objects, like certain instances of System.Type.&nbsp; Instead, we marshal the type specifier<br />
from one AppDomain to another, effectively do a type load in the 2<SUP>nd</SUP><br />
AppDomain (finding any corresponding type that has already been loaded, of<br />
course) and then treat that type as the result of the unmarshal.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Custom marshaling</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">The Managed Remoting and serialization architectures are quite<br />
flexible.&nbsp; They contain sufficient<br />
extensibility for you to define your own marshaling semantics.&nbsp; Some researchers at Microsoft tried to<br />
build a system that transparently migrated objects to whatever client process<br />
was currently using them.&nbsp; I’m not<br />
sure how far they got.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">How does<br />
all this relate to type identity?&nbsp;<br />
Well, instances of System.Type, and the metaobjects reachable from them<br />
like MethodInfos and PropertyInfos, can be marshaled in two different ways.&nbsp; If the underlying assembly was loaded as<br />
domain-neutral into the two AppDomains involved in a remote operation, then the<br />
metaobjects from that assembly will be marshaled-by-bleed.&nbsp; If instead the underlying assembly was<br />
loaded per-domain, then the metaobjects from that assembly will be<br />
identity-preserving marshaled-by-value.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Domain-neutrality</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">So<br />
what’s this domain-neutral vs. per-domain distinction?&nbsp; Remember when I said that a key to good<br />
performance is to have lots of shared pages and to minimize private pages?&nbsp; At the time, I was talking about sharing<br />
pages across processes.&nbsp; But the<br />
same is true of sharing pages across AppDomains.&nbsp; If all the AppDomains in a process can<br />
use the same JITted code, MethodTables, MethodDescs and other runtime<br />
structures, this will give us a dramatic performance boost when we create more<br />
AppDomains in that process.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If an<br />
assembly is loaded domain-neutral, we just mean that all these data structures<br />
and code are available in all the different AppDomains.&nbsp; If that same assembly is loaded<br />
per-domain, we have to duplicate all those structures between<br />
AppDomains.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In V1<br />
and V1.1 of the CLR, we offer the following policies for determining which<br />
assemblies should be domain-neutral:</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">1)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<FONT face="Tahoma" size="2">Only share mscorlib.dll.&nbsp; This choice is the default.&nbsp; We must always share mscorlib, because<br />
the operating system will only load one copy of mscorwks.dll (the CLR) into a<br />
process.&nbsp; And there are many 1:1<br />
references backwards and forwards between mscorwks and mscorlib.&nbsp; For this reason, we need to be sure<br />
there’s only a single mscorlib.dll, shared across all the different<br />
AppDomains.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">2)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<FONT face="Tahoma" size="2">Share all strongly-named<br />
assemblies.&nbsp; This is the choice made<br />
by ASP.NET.&nbsp; It’s a reasonable<br />
choice for them because all ASP.NET infrastructure is strongly-named and happens<br />
to be used in all AppDomains.&nbsp; The<br />
code from web pages is not strongly-named and tends to be used only from a<br />
single AppDomain anyway.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">3)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<FONT face="Tahoma" size="2">Share all assemblies.&nbsp; I’m not aware of any host or application<br />
which uses this choice.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Wait a<br />
second.&nbsp; If sharing pages is such a<br />
great idea, why isn’t everyone using “Share all assemblies”?&nbsp; That’s because domain-neutral code has a<br />
couple of drawbacks.&nbsp; First and most<br />
importantly, domain-neutral code can never be unloaded.&nbsp; This is an unfortunate consequence of<br />
our implementation, though fixing it will be quite hard.&nbsp; It may be several more releases before<br />
we even try.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">A second<br />
drawback is that domain-neutral code introduces a few inefficiencies.&nbsp; Usually the working set benefits quickly<br />
justify these inefficiencies, but there may be some scenarios (like<br />
single-AppDomain processes!) where this isn’t true.&nbsp; These inefficiencies include a 1:M<br />
lookup on all static field accesses and some high costs associated with deciding<br />
when to execute class constructors.&nbsp;<br />
That’s because the code is shared across all AppDomains, yet each<br />
AppDomain needs its own copy of static fields which are initialized through its<br />
own local execution of a.cctor method.&nbsp;<br />
You can reduce the overhead associated with.cctors (whether in<br />
domain-neutral code or not) by marking your.cctors with tdBeforeFieldInit.&nbsp; I’ve mentioned this in prior<br />
blogs.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Finally,<br />
in V1 &amp; V1.1, we don’t allow you to combine NGEN with domain-neutral<br />
code.&nbsp; This may not be a concern for<br />
you, given the other limitations associated with NGEN today.&nbsp; And I’m confident that we’ll remove this<br />
particular restriction in a future release.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Okay,<br />
but this still sucks.&nbsp; Why are these<br />
choices so limited?&nbsp; Ideally a host<br />
would specify a set of its own assemblies and some FX assemblies for<br />
sharing.&nbsp; Since these assemblies<br />
would be intrinsic to the operation of the host, it wouldn’t matter that they<br />
can never unload.&nbsp; Then the<br />
application assemblies would be loaded per-domain.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">We can’t<br />
support this because, if one assembly is loaded as domain-neutral, all the other<br />
assemblies in its binding closure must also be loaded as domain-neutral.&nbsp; This requirement is trivially satisfied<br />
by the first and third policies above.&nbsp;<br />
For the 2<SUP>nd</SUP> policy, we rely on the fact that strong-named<br />
assemblies can only early-bind to other strong-named assemblies.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If we<br />
didn’t require an entire binding closure to be domain-neutral, then references<br />
from a domain-neutral assembly to a per-domain assembly would require a 1:M<br />
lookup, similar to what we do for static field accesses.&nbsp; It’s easy to see how this sort of lookup<br />
can work for static field access.&nbsp;<br />
But it’s much harder to see what kind of indirections would allow a<br />
domain-neutral type to inherit from a per-domain one.&nbsp; All the instance field offsets, base<br />
class methods, and VTable slots would need biasing via a 1:M lookup.&nbsp; Ouch.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In fact,<br />
long term we’re not trying to find some more flexible policies for a host to<br />
specify which assemblies can be loaded domain-neutral.&nbsp; It’s evil to have knobs that an<br />
application must set.&nbsp; We really<br />
want to reach a world where the CLR makes sensible decisions on the most<br />
appropriate way to execute any application.&nbsp; To get there, we would like to remove<br />
the inefficiencies and differing semantics associated with domain-neutral code<br />
and make such assemblies unloadable.&nbsp;<br />
Then we would like to train our loader to notice those AppDomains which<br />
will necessarily make identical binding decisions (more on this later).&nbsp; This will result in maximum automatic<br />
sharing.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">It’s not<br />
yet clear whether/when we can achieve this ideal.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Per-AppDomain state like static<br />
fields</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">As<br />
stated above, domain-neutrality would ideally be a transparent optimization that<br />
the system applies on behalf of your application.&nbsp; There should be no observable semantics<br />
associated with this decision, other than performance.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Whether<br />
types are domain-neutral or not, each AppDomain must get its own copy of static<br />
fields.&nbsp; And a class constructor<br />
must run in each of those AppDomains, to ensure that these static fields are<br />
properly initialized.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Instance-agility</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">We just<br />
discussed how domain-neutrality refers to assemblies and how they are shared<br />
between AppDomains.&nbsp;<br />
Instance-agility refers to object instances and how they are allowed to<br />
flow between AppDomains.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">An agile<br />
instance must necessarily be of a type we loaded as domain-neutral.&nbsp; However, the converse is not true.&nbsp; The vast majority of domain-neutral<br />
types do not have agile instances.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If an<br />
instance marshals-by-bleed or if it performs identity-preserving<br />
marshal-by-value, then by definition it is agile.&nbsp; The effect is the same in both cases:<br />
it’s possible to have direct references to the same instance from multiple<br />
AppDomains.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">This is<br />
in contrast to normal non-agile instances which are created, live and die in a<br />
single AppDomain.&nbsp; We don’t bother<br />
to track which AppDomain these instances belong to, because we can infer<br />
this.&nbsp; If a thread is accessing an<br />
instance, then the instance is clearly in the same AppDomain that the thread is<br />
currently executing in.&nbsp; If we find<br />
references to an instance further back on a thread’s stack, then we can use the<br />
AppDomain transitions which are recorded on that stack to determine the correct<br />
AppDomain.&nbsp; And – for per-domain<br />
types – the type itself can tell us which AppDomain the instance belongs<br />
to.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Although<br />
we don’t normally track the AppDomain which contains an instance, there are some<br />
exceptions.&nbsp; For example, a<br />
Finalizable object must be finalized in the AppDomain it lives in.&nbsp; So when an instance is registered for<br />
finalization, we always record the current AppDomain at that time.&nbsp; And the finalizer thread(s) take care to<br />
batch up instances in the same AppDomain to minimize transitions.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">For an<br />
instance to be agile, it must satisfy these rules:</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">It must be of a type that was loaded as<br />
 domain-neutral.&nbsp; (Today, we<br />
 restrict ourselves to types in mscorlib.dll, which is always<br />
 domain-neutral).</FONT><br />
 <LI><FONT face="Tahoma" size="2">The type must not be unloaded until the last instance has<br />
 died.&nbsp; (Today, we never unload<br />
 these types).</FONT><br />
 <LI><FONT face="Tahoma" size="2">Instances must not have references to any other instances<br />
 that are not themselves agile.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Based on<br />
these rules, it’s actually possible for the loader to identify some types as<br />
having legally agile instances.&nbsp;<br />
System.String is a good example, because it is sealed and has no<br />
references to other instances.&nbsp;<br />
However, this automatic detection would be inadequate for our<br />
purposes.&nbsp; We need some additional<br />
objects like System.Threading.Thread to be agile.&nbsp; Since Thread can contain references to<br />
many objects that are clearly not agile (like managed thread local storage,<br />
which contains arbitrary application objects), we have to be very careful<br />
here.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In this<br />
case, being careful means that we partition some of the Thread’s state in a<br />
per-AppDomain manner.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If<br />
you’ve read my earlier blogs, you know that static fields can be per-AppDomain,<br />
per-Thread, per-Context, or per-process (RVA-based statics).&nbsp; Now you know why the per-Thread and<br />
per-Context statics are still partitioned by AppDomain.&nbsp; And you understand why the per-process<br />
statics are restricted from containing arbitrary object references.&nbsp; They can only contain scalars, Strings<br />
(agile instances!) and value types that are themselves similarly<br />
constrained.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">If<br />
you’ve done much debugging with AppDomains and exceptions, you’ve probably<br />
noticed that the first pass of exception handling is always terminated at an<br />
AppDomain boundary.&nbsp; It’s annoying:<br />
if the exception goes unhandled and you take your last chance as a trap to the<br />
debugger, you’ve lost the original context of the exception.&nbsp; But now it’s clear why this<br />
happens.&nbsp; If an exception instance<br />
isn’t agile, it must be marshaled from one AppDomain to the next as the dispatch<br />
occurs.&nbsp; (We make a special<br />
exception for an AppDomain-agile OutOfMemoryException that we pre-create, so<br />
that it’s available when we don’t have enough memory to make a per-AppDomain<br />
instance).</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In fact,<br />
there’s a lot of complexity involved in ensuring that instances are only<br />
accessible from one AppDomain, or that they follow the discipline necessary for<br />
agility.&nbsp; You may be wondering why<br />
we care.&nbsp; We care because AppDomain<br />
isolation is a fundamental guarantee of the managed environment, on which many<br />
other guarantees can be built.&nbsp; In<br />
this sense, it is like separate address spaces for OS processes.&nbsp; Because of AppDomain isolation, we can<br />
build certain security guarantees and we can reclaim resources correctly when<br />
AppDomains are unloaded.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Configuration and Assembly Binding</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">Since<br />
each AppDomain is expected to execute a different application, each AppDomain<br />
can have its own private paths for binding to its assemblies, its own security<br />
policy, and in general its own configuration.&nbsp; Even worse, a host can listen to the<br />
AssemblyResolveEvent and dynamically affect binding decisions in each<br />
AppDomain.&nbsp; And the application can<br />
modify configuration information like the AppDomain’s private path – even as it<br />
runs.&nbsp; This sets up terrible data<br />
races, which rely on unfortunate side effects like the degree of inlining the<br />
JIT is performing and how lazy or aggressive the loader is in resolving<br />
dependent assemblies.&nbsp; Applications<br />
that rely on this sort of thing are very fragile from one release of the CLR to<br />
the next.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">This<br />
also makes it very difficult for the loader to make sensible and efficient<br />
decisions about what assemblies can be shared.&nbsp; To do a perfect job, the loader would<br />
have to eagerly resolve entire binding closures in each AppDomain, to be sure<br />
that those AppDomains can share a single domain-neutral assembly.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">Frankly,<br />
we gave the host and the application a lot of rope to hang themselves.&nbsp; In retrospect, we screwed up.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">I<br />
suspect that in future versions we will try to dictate some reasonable<br />
limitations on what the host and the AppDomain’s configuration can do, at least<br />
in those cases where they want efficient and implicit sharing of domain-neutral<br />
assemblies to happen.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><B><FONT size="2"><FONT face="Tahoma">Unloading</FONT></FONT></B></P><br />
<P><FONT face="Tahoma" size="2">A host or<br />
other sufficiently privileged code can explicitly unload any AppDomain it has a<br />
reference to, except for the default AppDomain which is not unloadable.&nbsp; The default AppDomain is the one that is<br />
created on your behalf when the process starts.&nbsp; This is the AppDomain a host typically<br />
chooses for its own execution.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">The<br />
steps involved in an unload operation are generally as follows.&nbsp; As in many of these blogs, I’m<br />
describing implementation details and I’m doing so without reading any source<br />
code.&nbsp; Hopefully the reader can<br />
distinguish the model from the implementation details to understand which parts<br />
of the description can change arbitrarily over time.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Since the thread that calls AppDomain.Unload may itself<br />
 have stack in the doomed AppDomain, a special helper thread is created to<br />
 perform the unload attempt.&nbsp; This<br />
 thread is cached, so every Unload doesn’t imply creation of a new thread.&nbsp; If we had a notion of task priorities<br />
 in our ThreadPool, we would be using a ThreadPool thread here.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">The unload thread sends a DomainUnload event to any<br />
 interested listeners.&nbsp; Nothing bad<br />
 has happened yet, when you receive this event.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">The unload thread freezes the runtime.&nbsp; This is similar to the freeze that<br />
 happens during (portions of) a garbage collection.&nbsp; It results in a barrier that prevents<br />
 all managed execution.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">While the barrier is in place for all managed execution,<br />
 the unload thread erects a finer-grained barrier which prevents entry into the<br />
 doomed AppDomain.&nbsp; Any attempt to<br />
 call in will be rejected with a DomainUnloaded exception.&nbsp; The unload thread also examines the<br />
 stacks of all managed threads to decide which ones must be unwound.&nbsp; Any thread with stack in the doomed<br />
 AppDomain – even if it is currently executing in a different AppDomain – must<br />
 be unwound.&nbsp; Some threads might<br />
 have multiple disjoint regions of stack in the doomed AppDomain.&nbsp; When this is the case, we determine<br />
 the base-most frame that must be unwound before this thread is no longer<br />
 implicated in the doomed AppDomain.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">The unload thread unfreezes the runtime.&nbsp; Of course, the finer-grained barrier<br />
 remains in place to prevent any new threads from entering the doomed<br />
 AppDomain.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">The unload thread goes to work on unwinding the threads<br />
 that it has identified.&nbsp; This is<br />
 done by injecting ThreadAbortExceptions into those threads.&nbsp; Today we do this in a more<br />
 heavy-weight but more scalable fashion than by calling Thread.Abort() on each<br />
 thread, but the effect is largely the same.&nbsp; As with Thread.Abort, we are unable to<br />
 take control of threads that are in unmanaged code.&nbsp; If such threads are stubborn and never<br />
 return to the CLR, we have no choice but to timeout the Unload attempt, undo<br />
 our partial work, and return failure to the calling thread.&nbsp; Therefore, we are careful to unwind<br />
 the thread that called Unload only after all the others have unwound.&nbsp; We want to be sure we have a thread to<br />
 return our failure to, if a timeout occurs!</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">When threads unwind with a ThreadAbortException, the Abort<br />
 is propagated in the normal undeniable fashion.&nbsp; If a thread attempts to catch such an<br />
 exception, we automatically re-raise the exception at the end of the catch<br />
 clause.&nbsp; However, when the<br />
 exception reaches that base-most frame we identified above, we convert the<br />
 undeniable ThreadAbortException to a normal DomainUnloaded<br />
 exception.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">No threads can execute in the doomed AppDomain – except for<br />
 a Finalizer thread which is now given a special privilege.&nbsp; We tell the Finalizer thread to scan<br />
 its queue of ready-to-run finalizable objects and finalize all the ones in<br />
 this AppDomain.&nbsp; We also tell it<br />
 to scan its queue of finalizable but still reachable objects (not ready to<br />
 run, under normal circumstances) and execute them, too.&nbsp; In other words, we are finalizing<br />
 reachable / rooted objects if they are inside the doomed AppDomain.&nbsp; This is similar to what we do during a<br />
 normal process shutdown.&nbsp;<br />
 Obviously the act of finalization can create more finalizable<br />
 objects.&nbsp; We keep going until they<br />
 have all been eliminated.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">During finalization, we are careful to skip over any agile<br />
 reachable instances like Thread instances that were created in this<br />
 AppDomain.&nbsp; They effectively<br />
 escape from this AppDomain in a lazy fashion at this time.&nbsp; When these instances are eventually<br />
 collected, they will be finalized in the default AppDomain, which is as good<br />
 as anywhere else.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">If we have any managed objects that were exposed to COM via<br />
 CCWs, their lifetimes are partially controlled via COM reference counting<br />
 rules.&nbsp; If the managed objects are<br />
 to agile instances, we remove them from their AppDomain’s wrapper cache and<br />
 install them in the default AppDomain’s wrapper cache.&nbsp; Like other agile objects, they have<br />
 lazily survived the death of the AppDomain they were created<br />
in.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">For all the non-agile CCWs (the vast majority), the managed<br />
 objects are about to disappear.&nbsp;<br />
 So we bash all the wrappers so that they continue to support AddRef and<br />
 Release properly.&nbsp; All other calls<br />
 return the appropriate HRESULT for DomainUnloadedException.&nbsp; The trick here, of course, is to<br />
 retain enough metadata to balance the caller’s stack properly.&nbsp; When the caller drives the refcount to<br />
 0 on each wrapper, it will be cleaned up.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Now we stop reporting all the handles, if they refer to the<br />
 doomed AppDomain, and we trigger a full GC.&nbsp; This should collect all the objects<br />
 that live in this AppDomain.&nbsp; If<br />
 it fails to do so, we have a corrupted GC heap and the process will soon die a<br />
 terrible death.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<UL><br />
 <LI><FONT face="Tahoma" size="2">Once this full GC has finished, we are free to unmap all<br />
 the memory containing JITted code, MethodTables, MethodDescs, and all the<br />
 other constructs.&nbsp; We also unload<br />
 all the DLLs that we loaded specifically for this AppDomain.</FONT></LI></UL><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In a<br />
perfect world, that last step returns all the memory associated with the<br />
AppDomain.&nbsp; During V1, we had a leak<br />
detection test that tried to verify this.&nbsp;<br />
Once we reached a steady-state in the test cycle, after unloading the<br />
first few AppDomains, we got pretty close to our ideal.&nbsp; It’s harder to measure than you might<br />
imagine, due to things like delayed coalescing of OS heap structures.&nbsp; According to our measurements, we were<br />
leaking 12 bytes per unloaded AppDomain – of which 4 bytes was almost by<br />
design.&nbsp; (It was the ID of the<br />
unloaded AppDomain).&nbsp; I have no idea<br />
how well we are doing these days.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">In a<br />
scenario where lots of unloads are happening, it’s unfortunate that we do a full<br />
GC for each one.&nbsp; For those cases,<br />
we would like to defer the full GC and the reclamation of resources until the<br />
next time that the GC is actually scheduled.&nbsp; …One day.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">There’s<br />
so much more I had intended to write about.&nbsp; For example, some ambiguities exist when<br />
unmanaged (process-wide) code calls into Managed C++ and has to select a target<br />
AppDomain.&nbsp; This can be controlled<br />
by flags in the VTFixup entries that are used by the IJW thunks.&nbsp; And customers often ask us for<br />
alternatives to AppDomain unloading, like unloading individual methods,<br />
unloading individual assemblies, or unloading unreferenced domain-neutral<br />
assemblies.&nbsp; There are many<br />
interesting programming model issues, like the reason why we have a<br />
CreateInstance<B>AndUnwrap</B> method on<br />
AppDomain.</FONT></P><br />
<P><FONT face="Tahoma" size="2">&nbsp;</FONT></P><br />
<P><FONT face="Tahoma" size="2">But even<br />
I think this blog is getting way too long.</FONT></P><img src="http://blogs.msdn.com/aggbug.aspx?PostID=51466" width="1" height="1"><br />
http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/03/26/appdomains-application-domains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We Live in an &#8220;Open Book&#8221; World, the Lie of Information Overload</title>
		<link>http://simma1990.edublogs.org/2008/03/25/we-live-in-an-open-book-world-the-lie-of-information-overload/</link>
		<comments>http://simma1990.edublogs.org/2008/03/25/we-live-in-an-open-book-world-the-lie-of-information-overload/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 04:48:15 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[workflow system]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/03/25/we-live-in-an-open-book-world-the-lie-of-information-overload/</guid>
		<description><![CDATA[Also see: Introducing Microsoft Tagspace In school, there were two kinds of tests. The regular kind where you learned and memorized all you could and then did your best on the test. The 2nd kind was the Open Book Test. Where you could use your notes and text books to figure out the answer to [...]]]></description>
			<content:encoded><![CDATA[<p><i>Also see: <a href="http://spacechat.blogsome.com/2008/03/24/introducing-microsoft-tagspace-2/" title="Introducing Microsoft Tagspace">Introducing Microsoft Tagspace</a></i></p>
<p>In school, there were two kinds of tests. The regular kind where you learned and memorized all you could and then did your best on the test. The 2nd kind was the Open Book Test. Where you could use your notes and text books to figure out the answer to a question. </p>
<p>The 2nd was always preferable to the first because it was always a lot easier to prepare reference than to memorize. </p>
<p>Come finals time, a schedule of traditional tests meant packaging hours and hours to study. It was the ultimate experience of Information Overload. It also was the quickest way to forget everything you just learned the minute the tests were over. In fact, if you hung out with my friends and me, the minute tests were over, every penny we had was destined to be spent on beverages that killed more than a few braincells. </p>
<p>Today, life is so much simpler. I can&#8217;t remember the last time I had to go to the library or bookstore to search for a book on a topic that was important to me. I can&#8217;t remember the last time I HAD to invest the time to read a book as opposed to choosing to read a book that I wanted to read. </p>
<p>There was a time when I would scour online forums looking for any information that would give me an edge. Those days are long gone.</p>
<p>Today, I still read a ton of magazines that I both enjoy and which give me a solid foundation of information that help me professionally and personally, but I don&#8217;t stress that I might miss something. I don&#8217;t stress if I don&#8217;t read an issue immediately when it com<span id="more-35"></span>es out, or if I&#8217;m out of town when its delivered. I used to. </p>
<p>Two things have
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/24/silverlight-and-wpf-control-developer-huddle-at-mix08-2/" title="Silverlight and WPF Control Developer Huddle at Mix08">Silverlight and WPF Control Developer Huddle at Mix08</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/23/youtube-tries-to-get-legal-2/" title="YouTube Tries to Get Legal">YouTube Tries to Get Legal</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/interested-in-artificial-intelligence-what-about-wikis-well-now-you-can-have-both/" title="Interested in Artificial Intelligence? What about Wiki's? Well, now you can have both.">Interested in Artificial Intelligence? What about Wiki&#8217;s? Well, now you can have both.</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/24/claimspace-a-long-tail-recognition-system-2/" title="Claimspace, a Long Tail Recognition System">Claimspace, a Long Tail Recognition System</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/23/presentations/" title="Presentations...">Presentations&#8230;</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/26/why-yahoo-should-say-yes-to-microsoft-2/" title="Why Yahoo should say Yes to MicroSoft">Why Yahoo should say Yes to MicroSoft</a></i></p>
<p><i>Also see: <a href="http://thelivechatsoftware.blogsome.com/2008/03/25/channel-9-interview-2/" title="Channel 9 Interview">Channel 9 Interview</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/22/snippet-compiler-update/" title="Snippet Compiler update">Snippet Compiler update</a></i></p>
<p><i>Also see: <a href="http://annil12.blogsome.com/2008/03/25/vsnet-macro-to-group-and-sort-your-using-statements-2/" title="VS.NET Macro To Group and Sort Your Using Statements">VS.NET Macro To Group and Sort Your Using Statements</a></i></p>
<p>changed dramatically over the past 5 years. The first is that search engines have matured to the point where just about everything is indexed, from webpages to books to videos. Life has become an open book test. Between Google for News, video and web, Live.com for images, Icerocket.com for blog and RSS and Amazon for books, its pretty easy to find everything and anything from anywhere. It doesn&#8217;t matter if I&#8217;m in front of my PC, or sitting on an airplane or just with my phone at a game. Information is available.</p>
<p>The 2nd is the threading of information. Sites like Techmeme connect articles so that its easy to not only keep up with technology topics of interest, but to follow related conversations. Techmeme like sites are popping up for most vertical categories, so keeping up is far far easier than the old days of waiting for your PC Week , InfoWorld and Computer Reseller News !</p>
<p>Information overload is having to read everything and remember it. Open Book life means knowing where to look to catch up when you are ready to catch up.. I will take the Open Book Life anytime<br />
<h6></h6>
<p>Permalink &#160;|&#160;Email this &#160;|&#160;Linking&#160;Blogs &#160;|&#160;Comments </p>
<p>http://www.blogmaverick.com/2008/03/10/we-live-in-an-open-book-world-the-lie-of-information-overload/</p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/03/25/we-live-in-an-open-book-world-the-lie-of-information-overload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPC 2007 Dual Monitor support</title>
		<link>http://simma1990.edublogs.org/2008/03/25/vpc-2007-dual-monitor-support/</link>
		<comments>http://simma1990.edublogs.org/2008/03/25/vpc-2007-dual-monitor-support/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 23:00:10 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[workflow system]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/03/25/vpc-2007-dual-monitor-support/</guid>
		<description><![CDATA[Also see: Chicago geek dinner 11/22 I have been trying to find a way to&#160;allow you to run Virtual PC 2007 with multiple monitors.&#160; Natively VPC 2007 doesnt support more than 1 monitor, however you can &#8220;trick&#8221; it by using various techniques that expand the desktop area into a larger virtual desktop. I tried using&#160;the [...]]]></description>
			<content:encoded><![CDATA[<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/chicago-geek-dinner-1122/" title="Chicago geek dinner 11/22">Chicago geek dinner 11/22</a></i></p>
<p>I have been trying to find a way to&nbsp;allow you to run Virtual PC 2007 with multiple monitors.&nbsp; Natively VPC 2007 doesnt support more than 1 monitor, however you can &#8220;trick&#8221; it by using various techniques that expand the desktop area into a larger virtual desktop.</p>
<p>I tried using&nbsp;the awesome MaxiVista tool which can extend your screen across separate PC&#8217;s (think &#8220;push&#8221; remote desktop), but the new multi-monitor compatibility feature of VPC 2007 (which inexplicably does not add multi-monitor support) made this difficult since it ensures that your desktop recaptures your mouse when you move it outside of the VPC window thus preventing the extended screen from being accessible.</p>
<p>So, instead I tried the Remote Desktop approach mentioned in Steven Harman&#8217;s blog post.&nbsp;&nbsp; </p>
<p>Here is a quick rundown on how it works:</p>
<p>Connect 2 monitors to your&nbsp;PC (more than 2 typically don&#8217;t work with this approach).&nbsp;&nbsp; Make sure to extend your desktop onto the 2nd screen via <b>Display Properties -&gt; Settings.</b>&nbsp; Then launch Remote Desktop (mstsc.exe) with the &#8220;/span&#8221; flag:</p>
<pre>
<div><b>mstsc /</b><b>span</b></div>
</pre>
<p>Then just use Remote Desktop as usual by specifying your VPC&#8217;s computer name in the connection dialog.</p>
<p><span id="more-31"></span>
<p>When I first tried this, it still didnt work exactly right.&nbsp; It kept giving me annoying scrollbars instead of going full screen, so I added this extra flag to force it into fullscreen:</p>
<pre>
<div><b>mstsc /span /</b><b>f</b></div>
</pre>
<p>Also, since I didnt want VPC to have the extra overhead of maintaining 2 sessions (the console and my new RDP session), I threw in one more flag to make it simply take-over the initial console window:</p>
<div>
<pre>
<div><b>mstsc /span /f /</b><b>console</b></div>
</pre>
</div>
<p><b>NOTE</b>: The <b><i>/span</i></b> flag is only present on the very latest version of Remote Desktop Connection.&nbsp; Therefore, you must either be running Vista on both PC&#8217;s, or install the update specified here:</p>
<div><a href="http://www.multisoftgroup.com/" title="Help Desk Software">Help Desk Software</a>: for your business. Java Custom Software Soulutions and Service.
</div>
<p>http://support.microsoft.com/kb/925876 </p>
<p>There are limitations on how your&nbsp; monitors must be configured in order for this flag to work.</p>
<p>Also, keep in mind that this technique only enlarges your desktop area sufficiently large enouch to span both monitors, but it DOES NOT behave exactly like the native dual-monitor support you may be accustomed to.&nbsp; For example, when you maximize a window, it maximizes across BOTH monitors instead of maximizing within the confines of a single monitor.&nbsp;&nbsp; For now, I&#8217;m just dealing with that by avoiding maximizing and just manually resizing windows to fit 1 screen.</p>
<p>&nbsp;</p>
<p><b>Advanced Users:</b></p>
<p>One way to avoid having to arrange windows each time is to use a cryptic,&nbsp;yet&nbsp;incredible tool called Hawkeye ShellInit. ShellInit is a small application that helps you manipulate your desktop &amp; application windows via script.&nbsp;&nbsp; Here is a small script that will move Visual Studio over the right-hand screen (assuming 1280&#215;1024 resolution) and enlarge it to the correct size.<br />
</p>
<div>
<pre>
<div><b>Position Window, *Microsoft Visual Studio, wndclass_desked_gsk, 1280, 0, 1288, 1002 </b></div>
</pre>
</div>
<div><a href="http://www.j-livesupport.com/affiliate/pages/117.php" title="Live Help Server">Live Help Server</a>: Jerry Messenger Server is Live Chat with Users on your websites.
</div>
<p>If you decide to use this tool, make sure and read the readme.txt file for some good sample scripts and ideas.<b></b> </p>
<p><img src="http://weblogs.asp.net/aggbug.aspx?PostID=4524121" width="1" height="1"><br />
http://weblogs.asp.net/lhunt/archive/2007/10/11/vpc-2007-dual-monitor-support.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/03/25/vpc-2007-dual-monitor-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Types a la Carte</title>
		<link>http://simma1990.edublogs.org/2008/03/24/data-types-a-la-carte/</link>
		<comments>http://simma1990.edublogs.org/2008/03/24/data-types-a-la-carte/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 02:00:11 +0000</pubDate>
		<dc:creator>simma1990</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://simma1990.edublogs.org/2008/03/24/data-types-a-la-carte/</guid>
		<description><![CDATA[Also see: There can be only one&#8230; with data Also see: UI design Also see: A quick update on me. Data Types a la Carte. Wouter Swierstra. This paper describes a technique for assembling both data types and functions from isolated individual components. We also explore how the same technology can be used to combine [...]]]></description>
			<content:encoded><![CDATA[<p><i>Also see: <a href="http://chatter.blogsome.com/2008/03/24/there-can-be-only-one-with-data/" title="There can be only one... with data">There can be only one&#8230; with data</a></i></p>
<p><i>Also see: <a href="http://kerrysoft16.edublogs.org/2008/03/24/ui-design/" title="UI design">UI design</a></i></p>
<p><i>Also see: <a href="http://chatter.blogsome.com/2008/03/24/a-quick-update-on-me-2/" title="A quick update on me.">A quick update on me.</a></i></p>
<p>Data Types a la Carte. Wouter Swierstra.</p>
<blockquote><p>This paper describes a technique for assembling both data types and functions from isolated individual components. We also explore how the same technology can be used to combine free monads and, as a result, structure Haskell’s monolithic IO monad.</p>
</blockquote>
<p>This new Functional Pearl has been mentioned twice in comments (1 , 2 ), and has now also appeared with comments on Phil Wadler&#8217;s blog. Obviously it&#8217;s time to put it on the front page.</p>
<p>
http://lambda-the-ultimate.org/node/2700</p>
]]></content:encoded>
			<wfw:commentRss>http://simma1990.edublogs.org/2008/03/24/data-types-a-la-carte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
