<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-23716553</atom:id><lastBuildDate>Fri, 01 May 2026 22:01:37 +0000</lastBuildDate><category>environment</category><category>general programming</category><category>ideas</category><category>general software</category><category>general</category><category>not computer</category><category>legal</category><category>cars</category><category>.NET</category><category>language design</category><category>methodology</category><category>CFL</category><category>vista</category><category>hardware</category><category>music/media</category><category>apple</category><category>PRT</category><category>blogging</category><category>browsers</category><category>deSleeper</category><category>java</category><category>ruby</category><category>XML</category><category>patents</category><category>virtualization</category><category>Window 7</category><category>kindle</category><category>threading</category><category>Google</category><category>Photos</category><category>WPF</category><category>schema</category><title>technorabble</title><description>logic of all sorts</description><link>http://tech.norabble.com/</link><managingEditor>noreply@blogger.com (Ryan Baker)</managingEditor><generator>Blogger</generator><openSearch:totalResults>235</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-3293784478101489347</guid><pubDate>Fri, 01 May 2026 20:41:00 +0000</pubDate><atom:updated>2026-05-01T15:41:03.560-05:00</atom:updated><title>Norabble Moved to Substack</title><description>&lt;div style="text-align: left;"&gt;For the last year, I’ve been writing on Substack, at &lt;a class="markup--anchor markup--p-anchor" data-href="https://substack.norabble.com" href="https://substack.norabble.com" rel="noopener" target="_blank"&gt;https://substack.norabble.com&lt;/a&gt;. I should have mentioned this change a while ago, but the upside is that I’ve now got 35 new articles on Substack to introduce you to.&lt;/div&gt;&lt;p class="graf graf--p" name="00ea"&gt;The new topics over there have been a thread about money and trust:&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="5526"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/money-more-than-just-stuff-its-trust?r=10qod6" href="https://substack.norabble.com/p/money-more-than-just-stuff-its-trust?r=10qod6" rel="noopener" target="_blank"&gt;Money: More Than Just Stuff, It’s Trust&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="6124"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/money-trust-and-loans" href="https://substack.norabble.com/p/money-trust-and-loans" rel="noopener" target="_blank"&gt;Money, Trust, and Loans&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="bc10"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/trust-money-and-companies" href="https://substack.norabble.com/p/trust-money-and-companies" rel="noopener" target="_blank"&gt;Trust, Money, and Companies&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="adb1"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-technologies-of-trust" href="https://substack.norabble.com/p/the-technologies-of-trust" rel="noopener" target="_blank"&gt;The Technologies of Trust&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="ef18"&gt;A thread about Abundance:&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="842e"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/trust-is-not-free" href="https://substack.norabble.com/p/trust-is-not-free" rel="noopener" target="_blank"&gt;Trust is not free&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="8ec3"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-strategic-case-for-abundance" href="https://substack.norabble.com/p/the-strategic-case-for-abundance" rel="noopener" target="_blank"&gt;The Strategic Case for Abundance&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="933e"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/is-abundance-elitist" href="https://substack.norabble.com/p/is-abundance-elitist" rel="noopener" target="_blank"&gt;Is Abundance Elitist?&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="2bee"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/rural-abundance-is-possible" href="https://substack.norabble.com/p/rural-abundance-is-possible" rel="noopener" target="_blank"&gt;Rural Abundance is Possible&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="2d23"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/what-is-abundance" href="https://substack.norabble.com/p/what-is-abundance" rel="noopener" target="_blank"&gt;What is Abundance?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="1153"&gt;A thread about AI in general:&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="241d"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-and-the-zero-sum-game" href="https://substack.norabble.com/p/ai-and-the-zero-sum-game" rel="noopener" target="_blank"&gt;AI and the Zero-Sum Game&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="74ba"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-mirage-of-deep-research" href="https://substack.norabble.com/p/the-mirage-of-deep-research" rel="noopener" target="_blank"&gt;The Mirage of Deep Research&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="bfcd"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/writing-with-ai" href="https://substack.norabble.com/p/writing-with-ai" rel="noopener" target="_blank"&gt;Writing with AI&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="eb9b"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-and-the-social-ecosystem" href="https://substack.norabble.com/p/ai-and-the-social-ecosystem" rel="noopener" target="_blank"&gt;AI and the Social Ecosystem&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="29a9"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/what-is-needed-to-advance-the-use" href="https://substack.norabble.com/p/what-is-needed-to-advance-the-use" rel="noopener" target="_blank"&gt;What is needed to advance the use of AI?&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="eeb8"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-slop-scapegoat-ai" href="https://substack.norabble.com/p/the-slop-scapegoat-ai" rel="noopener" target="_blank"&gt;The Slop Scapegoat: AI&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="7385"&gt;Another thread about AI and economics&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="eaad"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-economic-future-from-and-of-ai" href="https://substack.norabble.com/p/the-economic-future-from-and-of-ai" rel="noopener" target="_blank"&gt;The Economic Future from and of AI — Part 1: The Existential Horizon&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="8969"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-economic-future-from-and-of-ai-cf1" href="https://substack.norabble.com/p/the-economic-future-from-and-of-ai-cf1" rel="noopener" target="_blank"&gt;The Economic Future from and of AI — Part 2: Risks in the Practical Horizon&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="ce22"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-architecture-of-a-gamble" href="https://substack.norabble.com/p/the-architecture-of-a-gamble" rel="noopener" target="_blank"&gt;The Architecture of a Gamble&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="f601"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-application-layer" href="https://substack.norabble.com/p/ai-application-layer" rel="noopener" target="_blank"&gt;The AI Reality Check&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="fea6"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-jobs-the-hidden-rules-of-demand" href="https://substack.norabble.com/p/ai-jobs-the-hidden-rules-of-demand" rel="noopener" target="_blank"&gt;AI Jobs: The Hidden Rules of Demand&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="b4bc"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/the-ai-jobs-blind-spot" href="https://substack.norabble.com/p/the-ai-jobs-blind-spot" rel="noopener" target="_blank"&gt;The AI Jobs Blind Spot&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="2bae"&gt;A thread on AI and security:&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="cc3c"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/security-cant-wait" href="https://substack.norabble.com/p/security-cant-wait" rel="noopener" target="_blank"&gt;Security Can’t Wait&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="9d55"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/deployments-cant-wait" href="https://substack.norabble.com/p/deployments-cant-wait" rel="noopener" target="_blank"&gt;Deployments Can’t Wait&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="cec9"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/update-on-ai-cybersecurity" href="https://substack.norabble.com/p/update-on-ai-cybersecurity" rel="noopener" target="_blank"&gt;Update on AI CyberSecurity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="834d"&gt;A thread on AI and software control:&lt;/p&gt;&lt;ul class="postList"&gt;&lt;li class="graf graf--li" name="76e2"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-determinism-and-control-part-1" href="https://substack.norabble.com/p/ai-determinism-and-control-part-1" rel="noopener" target="_blank"&gt;AI, Determinism and Control (Part 1)&lt;/a&gt;&lt;/li&gt;&lt;li class="graf graf--li" name="d03b"&gt;&lt;a class="markup--anchor markup--li-anchor" data-href="https://substack.norabble.com/p/ai-determinism-and-control-part-2" href="https://substack.norabble.com/p/ai-determinism-and-control-part-2" rel="noopener" target="_blank"&gt;AI, Determinism and Control (Part 2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="graf graf--p" name="d51c"&gt;Hope to see you over there! Free subscriptions have full access, any paid subscription is to voluntary support.&lt;/p&gt;</description><link>http://tech.norabble.com/2026/05/norabble-moved-tosubstack.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-8502147831276537007</guid><pubDate>Mon, 24 Apr 2023 05:01:00 +0000</pubDate><atom:updated>2023-04-24T00:01:40.578-05:00</atom:updated><title>Scientific Research Funding</title><description>Funding of Scientific Research is one of those questions where almost everyone agrees there's a problem.&amp;nbsp;&amp;nbsp;I have this impression that research funding processes are often an obstacle, either by making the wrong decisions, or by adding too much friction by the process of decision making. That's not a reflection so much on the people making the decisions.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In theory, yes, if the decision makers were perfect, then the current system would be close to perfect too. But perfection is an unreasonable standard, and the better question is whether the decision makers are the best available.. and in that case I have a reasonable amount of confidence that we're at least close to that standard, and so focusing on who's making the decisions (other than continuing to try to keep up standards) would not produce a lot of extra results.  Instead, it's changes in the process that offers more realistic opportunities for improvement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What improvements do I think of? I look at the current system as fairly command and control.  Funding organizations attempt to evaluate proposals directly, with the view that they will always make the best decisions, if they get all the information.  One of the theoretical problems with that is how it degrades as perfection recedes.  Not all information will be available, and even if the decision makers are the best individuals to evaluate this wide variety of information, absorbing it all is difficult.  That's not the end of it though, as there are biases introduced via those limitations, in that certain proposals will have greater difficulty presenting all information, or making that information consumable by decision makers, and those difficulties may have little to do with the value or viability of the proposal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think of this as similar to the trade-off between a command and control economy and a capitalistic one.  Now, in a sense, capitalism itself is sometimes the remedy to those gaps, but capitalism has a big gap of its own when it comes to research, in that capitalism only rewards those research advances for which the value of them can be captured by a company with the rights to that value.  When the actual value ends up dispersed throughout society, the rewards system of capitalism breaks down and the best outcome is no longer incentivized.  A company founder must be altruistically oriented to pursue that, as well as everyone who funds that company all the way through initial funding to banks and stock market participants.  While idealists do found companies sometimes, their probabilities of success decline when they don't have the support of all those other elements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;So, I like the idea of introducing a funding mechanism that recognizes idealist motivations, and doubles down on them.  One thing nice about idealists is they are less concerned with their own wealth, and more concerned with what they accomplish.  That doesn't mean they can totally ignore those other systems if they live in a society in which the two forms of funding are venture capital, and decision making committees.&lt;br /&gt;&lt;br /&gt;I think you could do this by giving researchers a "research capital" budget, rather than looking at individual projects in detail (obviously, could still do both with different mixes of money).  In this system, a researcher could draw from a research budget that is based upon the value of prior research successes, credentials, or committee decisions.  It's that first one "research successes" that would be the most fundamentally different and the main driver of this system.. the second and third are more of a bootstrap method so that there is a door into this system for new researchers.&lt;br /&gt;&lt;br /&gt;Defining research successes would fall back into a bureaucratic evaluation, as I see no other way to assess uncaptured value from research that's so common to basic research.&lt;br /&gt;&lt;br /&gt;In a way, you might ask, why provide a "research budget" instead of simply providing cash?  One of the main reasons is that cash brings many bad motivations, and we'd then expect there to be many more attempts to defraud committees responsible for this type of evaluation.  A second is that every time a fraud did happen, it would undermine public support more if it was seen that the money got used for personal consumption rather than on research.  Of course, there's still the possibility that fraud happens within research, where what is said to be spent on research is spent on personal consumption.. but one more layer makes it a bit less likely.&lt;br /&gt;&lt;br /&gt;Another reason not to provide cash, is that it's unnecessary to do so if researchers are motivated by ideals.  While you might miss out on some people without that type of motivation, or some mix of that motivation, there's still the capitalist system out there (with its flaws) for them.  It's better, in my mind at least, to make the best possible system for the idealists, than to compromise on that aspect to try and pull in those whose personal motivations are already more drawn toward a capitalistic system.&lt;/div&gt;</description><link>http://tech.norabble.com/2023/04/scientific-research-funding.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-4340179543580489364</guid><pubDate>Tue, 04 Aug 2015 04:26:00 +0000</pubDate><atom:updated>2015-08-03T23:26:13.900-05:00</atom:updated><title>Ag 3.0.. why not 4.0?</title><description>&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
Since David Roberts departure from Grist, Nathanael Johnson is at the top of my list of Grist authors. &lt;a href="http://grist.org/food/how-will-technology-change-farming/"&gt;An article today&lt;/a&gt;&amp;nbsp;clued me into a discussion over "Ag 3.0" going around.&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
I have a vision of a future of farming that goes small in the way "Ag 2.0" went big. &amp;nbsp;If data is 3.0, then I'd call this 4.0. &amp;nbsp;It's not quite here yet, but the capabilities are. &amp;nbsp;Farming machinery has become larger and larger because it's designed around one primary concern, human productivity. &amp;nbsp;For one farmer farm more acres, he needed a bigger and bigger machine, because he could only sit in one driver's seat at a time.&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
&lt;br style="box-sizing: border-box;" /&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
The future though is bringing autonomous devices, which will take us back in the opposite direction in many cases. &amp;nbsp;Sometimes big is more efficient, but often times it's a blunt instrument performing surgery. &amp;nbsp;As farming tech trends back toward the small all kinds of missed out opportunities become possible. &amp;nbsp;Plants can be commingled in fields to support each other nutrient wise (nitrogen fixing alongside nitrogen greedy). &amp;nbsp;Weeds can be spot targeted, rather than carpet bombed. &amp;nbsp;Maybe even mechanically removed as opposed to chemically. &amp;nbsp;Insect infestations likewise, identified, quarantined, and eradicated in a surgical manner.&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
&lt;br style="box-sizing: border-box;" /&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; box-sizing: border-box; color: #3f4549; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; padding: 0px;"&gt;
The end result of these changes would be lower environmental impact, higher yields, and even higher productivity. &amp;nbsp;There are some risks to consider in those changes. &amp;nbsp;Probably highest is to avoid exploitation. &amp;nbsp;When farming takes this future form, the risk of it being pushing out the existing manual labor is large. &amp;nbsp;If that labor has no where else useful to go, it would be bad for society, even if the economics of farming have improved. &amp;nbsp;Economics are not everything after all.&lt;/div&gt;
</description><link>http://tech.norabble.com/2015/08/ag-30-why-not-40.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-6641265747680728061</guid><pubDate>Fri, 24 Jul 2015 22:09:00 +0000</pubDate><atom:updated>2015-07-24T17:09:20.965-05:00</atom:updated><title>Minority rights</title><description>I've had a few conversations about the structure of the U.S. Senate where my conversation partner made the argument that the Senate protects minority rights. &amp;nbsp;While this is to a limited extent accurate as a sentence, the context in which it was said always has led me to believe there is a bit of equivocation going on. &amp;nbsp;That is to say, the phrase, minority rights has multiple meanings, and the one that if fit into that sentence allows it to remain true is not really the one my conversation partner meant.&lt;br /&gt;
&lt;br /&gt;
The first thing to consider is the difference between rights of a specific minority or minorities, and rights of all minorities in general. &amp;nbsp;The second meaning, which we can refer to as the right of minority, is not one we use all that often, but it's an interesting one. &amp;nbsp;Rules that provide individual equality, but require greater than majority rule are example of this type of minority rights. &amp;nbsp;Because all individuals are treated equally, anyone could be part of any specific minority. &amp;nbsp;The theory behind such rights is that it forces greater deliberation, compromise and respect who might be disempowered otherwise.&lt;br /&gt;
&lt;br /&gt;
The other meaning, that of a specific minority, first identifies or benefits the group, and then applies to the individuals. &amp;nbsp;This is the type of minority right we talk of most commonly, though it's useful to note that as a general rule, we're talking about a certain class of such minority rights, disadvantaged minorities rights.&lt;br /&gt;
&lt;br /&gt;
Without that additional qualifier of disadvantaged, this second meaning includes plenty of things that would not instinctively come to mind with the term of minority rights. &amp;nbsp;A king or dictator is the smallest sort of minority, but if someone says they are for minority rights, you can be fairly certain they are not advocating for kings, queens, dictators, barons and such.&lt;br /&gt;
&lt;br /&gt;
So getting back to the Senate, there is some truth if the right of minority is applied to some of the Senate's structure. &amp;nbsp;The fillibuster is one such rule that allowed any minority larger than 33% to be a blocker.&lt;br /&gt;
&lt;br /&gt;
But when I talk about the Senate, and what I see as a flaw in it's structure, I'm talking about the 2 Senators per state, and the unequal representation that each individual gets based upon which state they happen to live in.&lt;br /&gt;
&lt;br /&gt;
That structure does nothing for the right of minority in general, instead it gives a specific minority advantage. &amp;nbsp;This specific minority is not disadvantaged, it's a historical accident. &amp;nbsp;A person in Wyoming has 65 times more representation in the Senate than a Californian.&lt;br /&gt;
&lt;br /&gt;
Is there any logical reason for this advantage? &amp;nbsp;Should California secede from the union and then reapply for statehood as 65 new states? &amp;nbsp;If they did that, would there be a good explanation for why they now held 130 of 228 Senate seats but did not before? &amp;nbsp;Would the voters in Six States of Orange County be now in need of the minority rights they lack today?&lt;br /&gt;
&lt;br /&gt;
No, this form of minority right is completely different from the protection of disadvantaged minorities. &amp;nbsp;The people of the Great State of San Mateo are not more valuable than the people of the lowly San Mateo County.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://tech.norabble.com/2015/07/minority-rights.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-613567988564782503</guid><pubDate>Thu, 16 Jul 2015 19:08:00 +0000</pubDate><atom:updated>2015-07-16T14:08:12.634-05:00</atom:updated><title>Hackers are like water</title><description>Security is always going to be tricky and a sort of arms race, knowing the individual techniques, measures and practices is an important part. &amp;nbsp;That said, I think the main obstacle is motivation. Therefore &lt;a href="http://www.economist.com/news/leaders/21657811-internet-things-coming-now-time-deal-its-security-flaws-hacking"&gt;I like the consideration of liability as part of this&lt;/a&gt;, but even that is too myopic to avoid most of the failures that are likely to occur.&lt;br /&gt;
&lt;br /&gt;
As a professional in the software industry, I see the way that at many levels the motivation to treat security as a critical and uncompromising as it really is breaks down. &amp;nbsp;Even if as a legal entity an organization has motivation by liability, how will this translate to the quarterly outlooks of CEOs and then their reports, each of which has the ability to obfuscate their security failures.. so long as they get lucky enough that nothing bad happens?&lt;br /&gt;
&lt;br /&gt;
There is always a 20/20 hindsight applied to any exploited security vulnerability.. but what I think the public has not wrapped their consciousness around is that for every security vulnerability that has been exploited there are thousands or tens of thousands that no one bothered to exploit.&lt;br /&gt;
&lt;br /&gt;
For that reason, after the fact liability will never reach deep enough into organizational structures to instill the comprehensive responsive necessary. &amp;nbsp;Hackers are like water, leave the main hatch open and they'll flood right through... but close the main entry points and they'll find every little crack, wedging them open with pressure. &amp;nbsp;The ship may sink a little slower, but sink it still will.&lt;br /&gt;
&lt;br /&gt;
To really effect the necessary change, there needs to be penalties that occur before calamity. &amp;nbsp;Penalties for failing security audits is one concept, that if given the proper weight could be effective. &amp;nbsp;But who would assess these penalties? &amp;nbsp;The logical actor is governments, but resistance to regulation of any kind makes that improbable.</description><link>http://tech.norabble.com/2015/07/hackers-are-like-water.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7681834485848269426</guid><pubDate>Fri, 08 May 2015 21:23:00 +0000</pubDate><atom:updated>2015-05-08T16:23:06.121-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><title>Gold plating is 20/20</title><description>It annoys me the sloppy way the phrase gold plating is commonly used. &amp;nbsp;For those non-developers out there, "gold plating" is a phrase that developers often use to describe features that weren't necessary, valuable or not worth their cost. &amp;nbsp;It might be used outside development, certainly the same situation can occur in many professions, I'm just not sure if the same phrase is used.&lt;br /&gt;
&lt;br /&gt;
The problem is that when people conceive of examples of gold plating, then do it retroactively and with 20/20 hindsight. &amp;nbsp;Then they take that conception and apply it to planning. &amp;nbsp;The outcomes are not favorable.&lt;br /&gt;
&lt;br /&gt;
I feel like I need to provide an example to explain that. &amp;nbsp;Say you have manager X, or analyst X. &amp;nbsp;They look at some past projects, look at the feature sets and see that 20% of the features don't generate value equal to their costs. &amp;nbsp;They then conclude that all those features are examples of gold plating at work.&lt;br /&gt;
&lt;br /&gt;
The problem with that conclusion is that it's not useful. &amp;nbsp;If they had looked at the feature plan, and how the different features were ranked during planning, and found that the bottom 20% turned out to not be used, that would be useful. &amp;nbsp;You could cut the bottom 20%. &amp;nbsp;But it doesn't work that way.. in many cases what doesn't get used is pretty hard to see in advance. &amp;nbsp;How many great tools got used for unintended purposes?&lt;br /&gt;
&lt;br /&gt;
So when you start with that first conclusion and then try to apply it to ongoing work, the data gets misused and important things are cut out. &amp;nbsp;Maintainability and extensibility get especially hard hit. &lt;br /&gt;
&lt;br /&gt;
Sure many extensibility features never do get used. &amp;nbsp;But it's a mistake to conclude that means you can cut them all, or just the bottom 80%, because you really don't know what the bottom 80% are. &amp;nbsp;This area is more guess work than other areas. &amp;nbsp;In addition, the unexpected upside to the important extensibility features can be gigantic. &amp;nbsp;Entire industries have been founded on extensibility features which seemed dull when first released. &amp;nbsp;Six months later partners and/or community work made them the most valuable feature of all.</description><link>http://tech.norabble.com/2015/05/gold-plating-is-2020.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-5079436459210017656</guid><pubDate>Wed, 21 Apr 2010 13:55:00 +0000</pubDate><atom:updated>2010-04-21T08:55:32.361-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><title>My Philosophy of Architecture</title><description>&lt;p&gt;The first part of being a good architect is to observe. That means listening to others, using the existing products, inspecting some of the code, or getting involved in some. Unless there is a very specific technical problem you’re faced with day one, applying you’re technical skills day one is probably a mistake.&lt;/p&gt;  &lt;p&gt;The second part is to identify needs. A key part of an architect’s position is to identify the needs that development teams didn’t know they had. Sometimes they do know these needs, but aren’t quite willing to admit it. It’s important to be careful in how you use that information. If you run out in to the office and shout out your findings, it’s unlikely you’ll meet the future steps with much cooperation from the development teams. I have to admit, I’ve had that lesson reinforced the hard way more than once.&lt;/p&gt;  &lt;p&gt;The truth is that while you may be correct about those needs, the damage to trust is real, and justified since it’s likely upper management will see your declaration as a critique on the competence of the development teams. It’s not impossible that your discoveries are valid criticisms of the development teams, but it’s more likely there are historical reasons behind them. Deadlines, an unpredictable shift in technology, or an encumbrance that predates their time are some of the many possible root causes.&lt;/p&gt;  &lt;p&gt;At the same time, it’s necessary to be providing solutions to the needs the teams already know. Sometimes those questions have uncomfortable answers. For example, they may be having problems with performance due to chatty communications. The answer they are hoping for is a super compression algorithm, but no compression algorithm can fix chatty communications. An architect is responsible for more than just solutions, an architect is responsible for mentoring developers and helping them understand why solution A cannot fix their problem and how to avoid ending up in the same trap in the future.&lt;/p&gt;  &lt;p&gt;In the other direction, toward executives, an architect’s role involves setting expectations, and building support for the needs of development. Of course as well, there is much listening involved, because an architect must use information on product plans to determine what long term needs exist in development that have not yet been identified, and to evaluate the priority of those that have. Maybe there is a need to support a different platform, or a different device. Those needs would advocate more attention paid to how the user interface and model are separated.&lt;/p&gt;  &lt;p&gt;Setting expectations not only covers the obvious, underestimation of effort and duration, but also the highlighting those areas where changes in software or hardware have opened new opportunities.&lt;/p&gt;  &lt;p&gt;Since it’s common for development managers to have aggressive schedules, an architect often needs to be the voice advocating for a little more time here or there to get the fundamentals right. These efforts should pay off later, but since those benefits may be outside the project itself, organizational, or just longer term, it may be counter to the incentives given to other managers.&lt;/p&gt;  &lt;p&gt;That conflict of priorities, and how to handle it, is often a greater challenge than the technical problems themselves. It would be appealing to see what would happen if an architecture department had an allocation of some kind such that it could internally compensate development teams for the extra efforts architectural initiatives may introduce to their product cycle. In my experience though, the main credit of an architect is trust. Cultivating trust among development teams and executives, making sure executives understand the benefits to overall development architecture brings. In addition, making sure executives understand the constraints of the development teams will win you trust among the development teams.&lt;/p&gt;  </description><link>http://tech.norabble.com/2010/04/my-philosophy-of-architecture.html</link><thr:total>1</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-3570266737584549140</guid><pubDate>Sun, 14 Feb 2010 22:55:00 +0000</pubDate><atom:updated>2010-02-14T16:55:01.002-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">apple</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">hardware</category><category domain="http://www.blogger.com/atom/ns#">ideas</category><category domain="http://www.blogger.com/atom/ns#">kindle</category><title>How the iPad (or a similar form factor device) can be successful</title><description>&lt;p&gt;iPad rumors circled the Internet for more than a year before the eventual unveiling, and when finally unveiled, reactions were fairly mixed.&amp;#160; Most importantly, they were mixed even among the hard core Apple crowd, showing some deep flaws in the marketability of the device.&lt;/p&gt;  &lt;p&gt;I’m not in that crowd, but I’m similarly nonplused with what was announced.&amp;#160; I own a Kindle and love it.&amp;#160; I can’t see anyway that the iPad would be an appropriate replacement for it.&amp;#160; It also isn’t a replacement for a laptop, and certainly not a cell phone.&amp;#160; No, you’re right, it doesn’t absolutely need to be a replacement for anything, but as a stand alone device, even if you gave me one for free, I can’t see many situations in which I’d choose to put it in my bag.&lt;/p&gt;  &lt;p&gt;All that said, I don’t think it’s entirely doomed.&amp;#160; The problem I see is software more than hardware, though there are some areas for improvement there.&amp;#160; What hardware like the iPad would do well at is as an accessory, not a standalone device.&amp;#160; A touch sensitive screen of that size would make an excellent portable input device if the right software ecosystem existed around it for pairing it with TVs, PCs (this means Windows), music systems, etc.&amp;#160; Essentially what I’m saying is it could be the ultimate remote control, though thinking of it as simply a $500-$830 remote control isn’t going to give you the whole picture.&lt;/p&gt;  &lt;p&gt;I don’t think Apple has the right ethos to pull that off.&amp;#160; Apple has a little too much of the “come to us and play by our rules” mentality to create an ecosystem in which a device like that would succeed.&amp;#160; Apple’s partnerships tend to be either very closed and locked down (AT&amp;amp;T, Adobe for many years) or exploiting their fan base (App Store).&amp;#160; Neither will work in this scenario because their fan base doesn’t make hardware.&lt;/p&gt;  &lt;p&gt;Probably the biggest stumbling block would be the interfaces to PCs.&amp;#160; It doesn’t seem likely Apple would ever consciously create a PC accessory.&amp;#160; Sure they can do that same thing for Macs, but as an accessory it makes far more sense for desktops than for laptops.&amp;#160; As an accessory to a desktop it would give you a convenient input device to remotely control the PC from and get notifications.&amp;#160; That’s useful for AV, for communications, and for simple things.. like finding a recipe online, with a nice keyboard and monitor, then taking your pad into the kitchen.&lt;/p&gt;  &lt;p&gt;Essentially what I’m talking about is a supersized SideShow device that not only hooks up with your PC, but with other hardware using either WiFi and/or Bluetooth.&amp;#160; Still not sure I’d pay $500 for such a device, but it’s certainly something you could get me hooked on pretty easy, and once you’ve done that maybe you could convince me to consolidate devices and stop using a Kindle separately, making the $500 a little more palatable.&lt;/p&gt;  </description><link>http://tech.norabble.com/2010/02/how-ipad-or-similar-form-factor-device.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7530838985764281118</guid><pubDate>Thu, 19 Nov 2009 04:20:00 +0000</pubDate><atom:updated>2009-11-20T00:03:15.197-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">schema</category><category domain="http://www.blogger.com/atom/ns#">XML</category><title>XML Schema 1.0 – Extensibility</title><description>&lt;p&gt;One of the great flaws of the XML Schema specification, at least 1.0, is the great number of limitations placed upon the xs:any construct.  The next version, 1.1, addresses or tries to address the majority of those flaws.  But 1.1 isn’t final yet, and even when it is, the number of tools that need updates insures there will be continued use of 1.0 for some time still.&lt;/p&gt;  &lt;p&gt;I’ve seen a few workarounds (&lt;a href="http://www.xml.com/pub/a/2004/10/27/extend.html?page=2" target="_blank"&gt;a good list&lt;/a&gt;) for those flaws, and no surprise, all have limitations.  I have a new one.  It has limitations as well, but I for most situations, I think they are less important.&lt;/p&gt;  &lt;p&gt;xs:any allows namespace to be declared as either #any, ##other or a list consisting of ##targetNamspace or any other namespace.  #any is appealing except that you’ll nearly certain to run afoul of the determinism flaws of XML Schema 1.0.  ##other is also appealing, but it really only solves your V1 to V2 issues, but leaves V3 not resolved.  What you really need is a list of future namespaces.&lt;/p&gt;  &lt;p&gt;So the solution is pretty simple, pre-declare your future namespaces.  Here’s an example:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;     &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;targetNamespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="qualified"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;attributeFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="unqualified"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum7"&gt;   7:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:complexType&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Name"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum9"&gt;   9:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="FirstName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="xs:string"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum10"&gt;  10:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="LastName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="xs:stirng"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum11"&gt;  11:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:any&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;maxOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="unbounded"&lt;/span&gt; &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color: rgb(255, 0, 0);"&gt;namespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2 http://norabble.com/v3 http://norabble.com/v4 http://norabble.com/v5 http://norabble.com/v6 http://norabble.com/v7 http://norabble.com/v8 http://norabble.com/v9 http://norabble.com/v10"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: rgb(255, 0, 0);"&gt;processContents&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="skip"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum14"&gt;  14:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum15"&gt;  15:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:complexType&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum16"&gt;  16:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;The main difficulty with this solution is maintaining the “any”.  For this purpose I have a “build” tool that among other things takes an XML schema written without the any and adds it.  I’m working on an open source extensible project for that purpose called XsPub, but for various reasons it’s not very complete.  Anyhow, at work I have something similar, just less extensible, and more specific to our needs (and finished ;p).&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;To actually make an extension you need to reference an element from the new namespace, and drop that namespace from your any.&lt;/p&gt;&lt;p&gt;For example:&lt;br /&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;targetNamespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns:v2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="qualified"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;attributeFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="unqualified"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum8"&gt;   8:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:import&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;namespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;schemaLocation&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="v2.xsd"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum9"&gt;   9:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:complexType&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Name"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum11"&gt;  11:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="FirstName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="xs:string"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum12"&gt;  12:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="LastName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="xs:stirng"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum13"&gt;  13:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="v2:MiddleName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum14"&gt;  14:&lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:any&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;minOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;maxOccurs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="unbounded"&lt;/span&gt; &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum15"&gt;  15:&lt;/span&gt;         &lt;span style="color: rgb(255, 0, 0);"&gt;namespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v3 http://norabble.com/v4 http://norabble.com/v5 http://norabble.com/v6 http://norabble.com/v7 http://norabble.com/v8 http://norabble.com/v9 http://norabble.com/v10"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum16"&gt;  16:&lt;/span&gt;         &lt;span style="color: rgb(255, 0, 0);"&gt;processContents&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="skip"&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum17"&gt;  17:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:sequence&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum18"&gt;  18:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:complexType&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum19"&gt;  19:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;And the declaration of the element in the v2 namespace. &lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt; &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;targetNamespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2"&lt;/span&gt; &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2"&lt;/span&gt;  &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="qualified"&lt;/span&gt; &lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: rgb(255, 0, 0);"&gt;attributeFormDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="unqualified"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum7"&gt;   7:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xsd:element&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="MiddleName"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="xs:string"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xs:schema&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The result is a set of schemas, v1 and v2 that both match the below xml document, but for which v2 understands the added content.&lt;br /&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Name&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns:v2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://norabble.com/v2"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum2"&gt;   2:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FirstName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;John&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FirstName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum3"&gt;   3:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;LastName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;Doe&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;LastName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;v2:MiddleName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;Richard&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;v2:MiddleName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&lt;span style="color: rgb(96, 96, 96);" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;p&gt;Enjoy.&lt;/p&gt;&lt;/div&gt;</description><link>http://tech.norabble.com/2009/11/xml-schema-10-extensibility.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7624042382712295567</guid><pubDate>Thu, 12 Nov 2009 04:08:00 +0000</pubDate><atom:updated>2009-11-15T23:08:47.920-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">environment</category><title>US EPA Big Polluters</title><description>&lt;p&gt;Heard of the decision by the EPA to classify CO2 and other greenhouse gasses as pollutants, and regulate them?&amp;#160; Whether you have or not, here’s are three other things you should know.&amp;#160; First that first finding was supported in no small part by the &lt;a href="http://action.sierraclub.org/site/PageServer?pagename=adv_bigpicture_seattle_hearing&amp;amp;autologin=true" target="_blank"&gt;2,000 that gathered in Seattle outside the EPA hearing on that topic&lt;/a&gt;.&amp;#160; Second, the EPA is proposing to move forward to the next step, actual regulation, starting with the “big polluters”, that is, new or modified sources of 25,000 tons or more of CO2 or equivalent emissions. Third, just like with the endangerment finding, the EPA is holding two public hearings, and one of them is next week here in Chicago.&lt;/p&gt;  &lt;p&gt;This is an important event for climate change politics, and you like the 2,000 that gathered in Seattle can play a pivotal role.&amp;#160; &lt;a href="http://docs.google.com/a/norabble.com/fileview?id=0B1cJj2bSh0S4NDc2YWExNzMtZGVjOS00OWJmLThkMTYtMGMyOTVmMzYzZTc5&amp;amp;hl=en" target="_blank"&gt;The Sierra Club is organizing supporters and we would love to see you there&lt;/a&gt;.&amp;#160; There are two ways you can help.&amp;#160; &lt;/p&gt;  &lt;p&gt;First you can attend and testify, telling the EPA that you support the rulemaking.&amp;#160; You don’t need to be a climate scientist, the EPA wants to hear from the public.&amp;#160; In addition, Sierra Club will have a room at the hearing where you can stop by to learn more and get help preparing your testimony.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you don’t testify, attending is still awesome.&amp;#160; Pick up a sticker, listen to others, and show your support.&lt;/p&gt;  &lt;p&gt;Last but not least, spread the word.&lt;/p&gt;  &lt;p&gt;Sierra Club Flyer - &lt;a title="http://tiny.cc/54Kb9" href="http://tiny.cc/54Kb9"&gt;http://tiny.cc/54Kb9&lt;/a&gt;&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/11/us-epa-big-polluters.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-4181645994476949647</guid><pubDate>Sun, 19 Jul 2009 16:12:00 +0000</pubDate><atom:updated>2009-07-19T11:12:07.033-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">methodology</category><title>Software Engineering, Control, Measurement and Trust</title><description>&lt;p&gt;There is much clamor &lt;a href="http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf" target="_blank"&gt;over this article, “Software Engineering, an idea whose time has come and gone?”, by Tom Demarco&lt;/a&gt;.&amp;#160; I love it.&amp;#160; At work, I know a manager who has the tag line “You can’t control what you can’t measure” posted on his office door.&amp;#160; It’s always given me the &lt;a href="http://en.wikipedia.org/wiki/Heebie-jeebies_%28idiom%29" target="_blank"&gt;heebie-jeebies&lt;/a&gt;.&amp;#160; Tom hits one of the main points right on the head, that it implies “that control is an important aspect, maybe the most important, of any software project”,&amp;#160; But as Tom admits, “it isn’t.”&lt;/p&gt;  &lt;p&gt;The other half is the how it plays together with the &lt;a href="http://tech.norabble.com/2006/08/rule.html"&gt;the &amp;quot;What isn't easily measurable, doesn't exist&amp;quot; rule&lt;/a&gt;.&amp;#160; Tom sees this too, and describes it like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Now&amp;#160; apply&amp;#160; “You&amp;#160; can’t&amp;#160; control&amp;#160; what you can’t measure”&amp;#160; to&amp;#160; the&amp;#160; teenager. Most things&amp;#160; that&amp;#160; really matter—honor, dignity, discipline,&amp;#160; personality,&amp;#160; grace&amp;#160; under&amp;#160; pressure,&amp;#160; values,&amp;#160; ethics,&amp;#160; resourcefulness,&amp;#160; loyalty, humor, kindness—aren’t measurable. You must steer your child as best you can without much metric&amp;#160; feedback.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I don’t fully agree with his prescription, to require the product team to be ready to ship in any given week of development.&amp;#160; Like the original guidance, there is a kernel of truth here, but an overreaching of application.&amp;#160; There are many good reasons to pursue a “ready to ship” strategy, but you need to be flexible.&amp;#160; You need to accept that there are some tasks that will break that goal.&amp;#160; You cannot replace important subsystems without causing at least a bump, and sometimes you need to do that.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you have the goal in place, but are flexible, then you can create a branch, do most of the work there, and once it reaches a certain level of maturity (no longer experimental), integrate.&amp;#160; Integration will cause some pain, on both sides, and you have to balance between disruption to the mainline team, and your ready to ship goal, and the probability that if you insist on zero mainline pain that the branch may never merge.&lt;/p&gt;  &lt;p&gt;But anyhow, though it sounds like a prescription, Tom says it’s an example, and as an example it’s perfectly valid.&lt;/p&gt;  &lt;p&gt;Like raising a teenager, when you have important things, that aren’t easy to measure, &lt;a href="http://tech.norabble.com/2006/09/agile-is-path-to-trust-among-other.html" target="_blank"&gt;what you need is trust&lt;/a&gt;.&amp;#160; You need to be able to trust that your team understands your motivations, your goals.&amp;#160; They need to be able to trust that you will treat them fairly if they help achieve those goals.&amp;#160; A ready to ship strategy is just an example of “don’t do anything too crazy”.&amp;#160; It can help build trust because management can visibly see progress, and because hopefully when management sees that they say “thank you”.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/07/software-engineering-control.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-1294922900244752838</guid><pubDate>Mon, 04 May 2009 02:22:00 +0000</pubDate><atom:updated>2009-05-03T21:22:26.471-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">ideas</category><title>S+S Synchronization</title><description>&lt;p&gt;Software and Services (S+S) solutions have a number of attractions, but one common attraction is the ability to work offline.&amp;#160; Some S+S solutions have clients that require persistent internet connections, or are read-only in offline mode.&amp;#160; However, most developers that choose S+S as their architectural blueprint do so, at least in part, with a desire to provide users strong offline capabilities.&lt;/p&gt;  &lt;p&gt;The difficulty with offline editing is the possibility of conflicts and the need to provide conflict resolution.&amp;#160; Some applications ignore this difficulty because they are single user, and are willing to leave that user responsible for any data loss that results from accessing services directly, or from multiple clients without synchronizing work done offline on others.&amp;#160; Other applications are entirely read-only, eliminating the difficulty in a different way.&lt;/p&gt;  &lt;p&gt;Many applications don’t fit inside those constraints, and when they do inevitably synchronization is brought out as a topic.&amp;#160; Discussions of synchronization often start out with a bit of wishful thinking.&amp;#160; That is, someone, or many participants believe there is a synchronization black box they can throw data at and all will be automatically resolved.&amp;#160; To my knowledge, that doesn’t exist.&amp;#160; In fact, I’ll go as far as to say, that I believe it cannot exist.&amp;#160; Unless you design your data to fit a strict structure that communicates your business rules, and those rules never require escalation to human judgment, such a system cannot correctly resolve all conflicts.&lt;/p&gt;  &lt;p&gt;I’ve come to the conclusion that synchronization cannot be a black box.&amp;#160; Synchronization requires more than read/write to be exposed to the developer.&amp;#160; For S+S solutions, the synchronization architectures I prefer are those that expose more data to the client.&amp;#160; There are a number of ways to implement that, but I’ll explain one of the simplest.&lt;/p&gt;  &lt;p&gt;First, begin with a centralized master, your service, that is the authoritative source for data.&amp;#160; This service needs to support two things for every synchronizable item.&amp;#160; First, it needs an identifier that is guaranteed to be unique and unchanging over the lifetime of the item.&amp;#160; Second it needs a versioning identifier.&amp;#160; It could be a sequentially incremented number or timestamp, but I prefer another unique id.&lt;/p&gt;  &lt;p&gt;Next, in your service, implement (or re-use) a read-only caching system.&amp;#160; If this sounds pretty vanilla so far, that’s because it is.&amp;#160; These first two steps can be achieved through the use of HTTP, URI’s and ETags.&lt;/p&gt;  &lt;p&gt;Where many implementations go wrong is the next step, where they attempt to convert their cache into a read-write store.&amp;#160; The most obvious problem with that choice is it breaks everything you’ve built so far, since a cache is one way.&amp;#160; The other problem is you’ve implemented a store that has two sources of data, and have no mechanism to rationalize which one wins.&amp;#160; You could create a mechanism, but there isn’t any perfect mechanism.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK3iBzNwwfjR0I_kKzN3OdoKR00WmdTRpSkR2o5uZdSkbh4RwAp3xcJuPfivNcCZkeUiz7w_imowQnQyXoKSN_FM4EPDQ8VdKPVIrsas4_oRb0AF9HY4S-ToV3JrZGTg6A6nu7/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAJDdAGaOKFDh1ZmTAAuKLOYP4Z0aQvq6JsN2AXbGNf1okp_WFzqUCY-SsIe0-QyUHJUl0WN42f4ANPiIZXJVzZZOZwvSyZU_qBGt0zeaR722ytCjalANxIJSC19vdRdPiDm_f/?imgmax=800" width="468" height="293" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Instead of forcing the cache to transform into something more complex, leave it alone and create a separate store for modifications.&amp;#160; The client is then responsible for attempting to keep that modified store as empty as possible by submitting the modifications to your services.&amp;#160; Every submission is tagged with the versioning identifier of the item that was present in the cache when modification began.&amp;#160; If this sounds like the HTTP “If-Match”, then you have the idea.&amp;#160; Services should not accept modifications that are unaware of the content of the latest version they have accepted.&lt;/p&gt;  &lt;p&gt;Now, if a submission is rejected, you’ve detected a conflict.&amp;#160; Your options are many at this point.&amp;#160; No option is perfect, and the choice is going to depend on many things, not the least of which are your user’s requirements.&amp;#160; But no option has been eliminated yet.&amp;#160; Without any additional implementation you have a first-in-wins strategy, which happens to be the safest bet without more complex insight into the data’s structure, or user intervention.&lt;/p&gt;  &lt;p&gt;If you want a last-in-wins strategy, re-cache, update the versioning identifier and resubmit.&amp;#160; Since this would potentially destroy a previous set of updates, it would be bad practice to do so without some kind of user prompt or notification.. but you and you’re users are in control, not the API.&lt;/p&gt;  &lt;p&gt;If merging is necessary, the essential complexity of the merge itself remains, but not much else.&amp;#160; You have a copy of the original version, you can retrieve a copy of the current version, and you have a copy of the modifications.&amp;#160; Two-way merge, Three-way merge, automated merge, manual merge.. whatever is necessary is possible and not any more difficult than absolutely necessary.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/05/ss-synchronization.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAJDdAGaOKFDh1ZmTAAuKLOYP4Z0aQvq6JsN2AXbGNf1okp_WFzqUCY-SsIe0-QyUHJUl0WN42f4ANPiIZXJVzZZOZwvSyZU_qBGt0zeaR722ytCjalANxIJSC19vdRdPiDm_f/s72-c?imgmax=800" width="72"/><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7093137939862817850</guid><pubDate>Thu, 23 Apr 2009 03:39:00 +0000</pubDate><atom:updated>2009-04-22T22:39:16.312-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">methodology</category><title>How to load test: Step 1 – Create a realistic load</title><description>&lt;p&gt;Load testing isn’t the easiest job invented.&amp;#160; Depending on your business model, load testing can vary from important to absolutely critical.&amp;#160; So despite the pains, every project at least makes a token gesture toward load testing.&amp;#160; Unfortunately, either knowingly, or unknowingly, it’s often not much more than that, a token gesture.&lt;/p&gt;  &lt;p&gt;The primary failure in the average load test is not creating a realistic load.&amp;#160; There are plenty of excuses for this.&amp;#160; There aren’t any servers comparable to the production servers.&amp;#160; It’s too hard to produce test data that simulates true data.&amp;#160; Or worse, you don’t even know what production load will look like.&amp;#160; Those aren’t minor obstacles, calling them excuses isn’t meant to trivialize them, it’s more a reflection of the true importance of load testing, and knowing that when you do it, you do it right.&lt;/p&gt;  &lt;p&gt;The less and less realistic the load you generate, the more your test becomes performance analysis.&amp;#160; Performance analysis is great, but load testing and performance analysis are different animals.&amp;#160; You are doing yourself a disservice if you use a fishing rod to catch a great white, or a harpoon for goldfish.&amp;#160; If half your team is trying to do performance analysis and half is trying to load test then you will waste time you wouldn’t with a clear mission.&lt;/p&gt;  &lt;p&gt;There are other things that distinguish performance analysis from load testing, but the number one is the type of load you generate.&amp;#160; A performance analysis load may sometimes resemble a true load, but it usually should not.&amp;#160; A performance analysis load should be structured to make it easy to pinpoint performance issues.&amp;#160; A true load makes this more difficult by being too complex or too chaotic.&amp;#160; So unless you’re tuning something that only performs badly in complex or chaotic scenarios simplify and isolate for performance analysis.&lt;/p&gt;  &lt;p&gt;Load testing, by definition, needs a true load, or as close to it as you can approximate.&amp;#160; Load testing is a validation.&amp;#160; Load testing is developing reasons to be confident that under expected conditions, your system won’t fall over.&amp;#160; Load testing is about giving assurances that it’s not a bad idea to depend upon the reliability of your system.&lt;/p&gt;  &lt;p&gt;So all that said, how do you create a realistic load?&amp;#160; If your software is like most, there is one, or probably many points where in the real world, a user takes some action.&amp;#160; Since in the real world you have lots of users, you’d ideally want to automate all of those steps.&amp;#160; Sometimes that’s not that difficult, and if it’s not, that’s the path to take.&amp;#160; There are tools that can simulate clicking “submit” on a web form.&amp;#160; Many of those same tools can simulate filling it with some data, or even using an AJAX control.&amp;#160; But all of this has limits.&amp;#160; If you’re within those limits, take the easy path.&amp;#160; If you’re not, you’re either going to have to take the next step, or settle for a sub-par load test.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Moving work from the server to the client is sometimes an effective strategy to improve scalability, among other possible benefits, but it’s definitely going to complicate your ability to automate your steps with cookie cutter solutions.&amp;#160; There are two paths you can take in that situation.&amp;#160; One choice is to start from scratch and use your knowledge of your software to generate data from a template, substituting in values coming from preceding steps, and maybe some randomness.&amp;#160; The second is to reuse code from your application and wire those pieces together.&lt;/p&gt;  &lt;p&gt;Which choice you make is going to depend on your code.&amp;#160; Using your application code has many things going for it, but you have to surmount several common challenges.&amp;#160; First, if you have thousands of users (or millions), you’ll need your application code to simulate more than one.&amp;#160; No matter how minimal your application, it’s very unlikely you can run hundreds or thousands of copies of it on a single box at a time.&amp;#160; &lt;/p&gt;  &lt;p&gt;Depending on how well you meet the first challenge, you may also need to make sure your application code can run in parallel on the same hardware.&amp;#160; Usually this means multiple processes.&amp;#160; Why wouldn’t you need multiple processes?&amp;#160; If you can make one instance of your application code simulate a large number of users, and thus consume the overall load generating capacity of the hardware, then the second challenge can be skipped.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Either way, with a large number of users, you may find that a single machine isn’t going to have the ability to generate sufficient load.&amp;#160; If one, two or three machines are necessary you may feel happy with manually starting instances.&amp;#160; At the least do yourself the favor of using a tool like &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx" target="_blank"&gt;PsExec&lt;/a&gt; to let you do that from a batch file or something.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;Whatever path you’ve taken, you are now generating a load.&amp;#160; The challenges aren’t over though.&amp;#160; Now need to validate you’ve met your load and that it hasn’t caused anything to topple over.&amp;#160; That means monitoring and analyzing stats and logs.&amp;#160;&amp;#160; And if you do find a problem, you’ll need to switch hats back into performance analysis to hone in on the exact cause and find a solution.&amp;#160; Since those aren’t topics to be taken lightly, I’m reserve them for a future date.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/04/how-to-load-test-step-1-create.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-4461701695278514877</guid><pubDate>Sat, 04 Apr 2009 19:33:00 +0000</pubDate><atom:updated>2009-04-04T14:33:02.343-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">cars</category><category domain="http://www.blogger.com/atom/ns#">environment</category><category domain="http://www.blogger.com/atom/ns#">legal</category><title>How higher gas taxes benefit you</title><description>&lt;p&gt;The United States ought to raise the gas tax, and we ought to do it soon.&amp;#160; There are so many good reasons its going to be hard to explain them all.&amp;#160; To start with, we have 1 or 2 years until, crude oil prices start to climb again.&amp;#160; We ought to be prepared for that when it happens and the best way to do that now is to pretend as if those prices are here today, when we can collect the money and send it to the Federal Treasury, rather than pay the price later to a Saudi sheik.&amp;#160; &lt;/p&gt;  &lt;p&gt;The second reason is both current and future prices.&amp;#160; The more effectively we control demand, by making choices that won’t cost us in the future, the better we protect ourselves from high prices in the future too.&amp;#160; In other words, we can delay the rebound in crude oil prices by an extra year or two, maybe even more, by dampening demand through a tax.&amp;#160; Every Prius substituted for a SUV today lowers the pre-tax price of gasoline by some fraction in 2010, 2011, 2012, etc.&amp;#160; It’s also non-linear.&amp;#160; If demand stays below today’s production, prices will stay at today’s prices, or lower.&amp;#160; If demand exceeds production, then all hell breaks lose again.&lt;/p&gt;  &lt;p&gt;Those two reasons are symbiotic.&amp;#160; I’ll illustrate with some hypotheticals.&amp;#160; In the status quo scenario, no additional tax, gas might stay around $2.00/gallon for the next 2 years.&amp;#160; But in the meantime, the economy may (hopefully) recover, and about a year from now with a good economy and low gas prices, I wouldn’t be surprised to see SUVs flying off the shelves all over again.&amp;#160; Keep that up for a year, and demand could grow back from 19.5 mbd to 22mbd.&amp;#160; If that happens, then certainly crude will skyrocket again, and we’ll see $4.00+ gas in later 2011.&lt;/p&gt;  &lt;p&gt;On the other hand, if an additional 50-75 cent gas tax was added, I think we would hear a different message, and demand might even decline a little further, say 18.5 mbd.&amp;#160; Here is an example of what the implications might be in terms of the amount of dollars sent tot he middle east, and the taxes collected.&amp;#160; In the short term there would be some consumer costs, but many of these costs might be offset by tax reductions in other areas.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzFmNRcVIxOV3qEv_PoMspxnTFf8l5rLj8Jb4MHbjzVH3CMYHVXajOo3GzLC3yJbIMRAS7Tl4vxOG2Z3z8zi-y8xoxQ6nFy44HUm4xEQI7vKb3kyZulMZ2wcEkEBFyzAcF-ImH/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiZ-bhhTvBlFZkclSXbL7bJ6cphgO4H9lf-c0ZNUPb9JjN8rLEzhyphenhyphendmj1zGgIC0YSvA2CLBoQovcXdkhOIKL18a_-NcbFPV2k9jdwa5Pmp8Eal1n7xD5L1Q3Tw3AgjBJaaO63Y/?imgmax=800" width="951" height="485" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In the long term, consumer costs actually end up lower because a) they were prepared to use less gas, and b) demand was lower resulting in lower gas prices.&lt;/p&gt;  &lt;p&gt;Most importantly, a 10% difference in demand can translate into a 50% difference in the amount of money sent to the middle east, of which we know a certain percent falls into the hands of terrorists.&amp;#160; With any luck, the people of Saudi Arabia, Iran, or at least those with the checkbooks, will see terrorism as the first “discretionary” spending item and strangle those funds much more than 50%.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/04/how-higher-gas-taxes-benefit-you.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiZ-bhhTvBlFZkclSXbL7bJ6cphgO4H9lf-c0ZNUPb9JjN8rLEzhyphenhyphendmj1zGgIC0YSvA2CLBoQovcXdkhOIKL18a_-NcbFPV2k9jdwa5Pmp8Eal1n7xD5L1Q3Tw3AgjBJaaO63Y/s72-c?imgmax=800" width="72"/><thr:total>2</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-592285104365434276</guid><pubDate>Sat, 04 Apr 2009 03:02:00 +0000</pubDate><atom:updated>2009-04-03T22:02:50.260-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">deSleeper</category><category domain="http://www.blogger.com/atom/ns#">environment</category><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><title>New Version of deSleeper, and manual.</title><description>&lt;p&gt;I’ve posted a new version of &lt;a href="http://desleeper.codeplex.com/"&gt;deSleeper&lt;/a&gt;, v2.0, to codeplex.&amp;#160; This version adds some functions to help network administrators setup a couple hundred machines to work with deSleeper with fairly minimal effort.&amp;#160; And to help the non-admin user (and probably the admin too…), I’ve finally put together a &lt;a title="deSleeper Manual" href="http://desleeper.codeplex.com/Wiki/View.aspx?title=deSleeper%20Manual" target="_blank"&gt;deSleeper manual&lt;/a&gt;.&amp;#160; You’ll always be able to find it on codeplex, but here’s a little RSS copy too.&lt;/p&gt;  &lt;p&gt;If you're setting up deSleeper in a network, you may want to read the &lt;a href="http://desleeper.codeplex.com/Wiki/View.aspx?title=deSleeper%20Architecture&amp;amp;referringTitle=Home"&gt;deSleeper Setup &amp;amp; Architecture Guide&lt;/a&gt; as well. This guide will cover the features of deSleeper from simplest to most complex.&lt;/p&gt;  &lt;h1&gt;Wake Up!&lt;/h1&gt;  &lt;p&gt;If you're using deSleeper, the first screen you'll see is the Wake Up Page. If you're not setting up servers this might be the only tab you ever use.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8O4r99LnQXP2NIlJE4gkm_ziFxjwTTcY-G1Z3KCvhmKSfGNxbDtImLl3m4hlE_Uzyqnc60sxqKxNPR_YwjuA40Y4cWqqMQVIjJRBya8urbkb8pb2mVQqehlen55ZGhOynD76R/s1600-h/WakeUpPage%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WakeUpPage" border="0" alt="WakeUpPage" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_JaUlO2Mh8zBECgW8KQrD4WzN7Q2J6AjCyqxUg64PJgz9Eo7cJ4mwoTCAU7i-tmCDoHKR_SZ0o9Ry61gdpu6A4r5yS80oFyr6ycJaueZ9DoYwse09xzehoKlrp_O-PVQobROO/?imgmax=800" width="644" height="388" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To start off you need to supply information about the computer you're trying to wake up (the &lt;b&gt;&amp;quot;target&amp;quot;&lt;/b&gt;), and how to get your request from your PC to the target.&lt;/p&gt;  &lt;p&gt;Initially you have no targets configured, so click on the &lt;b&gt;New Target&lt;/b&gt; button. You can type whatever you like in the Description field, it's for you alone. If you're using deSleeper, it's probably because you want to use the proxy functions. What's a proxy? It's a service that helps get a message from one place to another. If you setup the proxy, then I hope you know the host name, and if you didn't hopefully your friendly network guy can fill in the blanks. Either way, type the name into the proxy field.&lt;/p&gt;  &lt;p&gt;You've got two choices for how to identify your target, MAC Address, and host name. If you've never heard of a MAC Address, don't fret, you only need one, and host will do fine. For more advanced users, MAC Address is a little more surefire (though a lot harder to memorize!).&lt;/p&gt;  &lt;p&gt;Once that is sorted out, click on &lt;b&gt;Wake Up Now&lt;/b&gt;, and you'll either see a nice little success message, or an ugly yellow error. Let's hope for the first.&lt;/p&gt;  &lt;h1&gt;Network Card Configuration&lt;/h1&gt;  &lt;p&gt;The second most likely place for a casual user to wander is the Network Card Configuration Page. There's not a lot here, but it consolidates three important items you'd have to hunt all over your PC for otherwise.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKgPEIxr2GnJQ6YTx6n2iGp2h25cmGWw2puJgutIDQm3iyt9fAgyhAE8-MX88CwqnJ_GeJeaQxHFPwBTuHtObkrCjsyzQtHS7u8b8Ayxiho_GBUUfFbqVBEGYd3zVW-wNXgrV0/s1600-h/ConfigurationPage%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ConfigurationPage" border="0" alt="ConfigurationPage" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibtJFwoTK3bH5aPbItnrHXt3LVpBYp5KLDwoLlA2QZoxIlP75bfAKLaWt5S-Z1uWvnkj0Hp15gmzX2aLUtEM5hGiwE_0EtRndFVUrD2hpuyvmrbIxPIGRD-GRJKGL9dLJrS4fv/?imgmax=800" width="644" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The first is you can find out your MAC Address here. Of course, it's the MAC Address of the PC you've just run deSleeper on, not the one you're trying to wake up, but there isn't anything preventing you from installing deSleeper to the PC you want to wake up. Actually everything on this page is best down on the PC you’re trying to wake up.&lt;/p&gt;  &lt;p&gt;The second item here is the ability to enable you’re network card to listen for the “magic packets”. Such a nice name. Magic packets are the magic that takes a computer sipping 1 watt and turns it back on as if you walked over and pushed the power button.&lt;/p&gt;  &lt;p&gt;Once deSleeper has given you a reliable way to wake up your PC remotely, you’ll want to configure the PC to use its built-in power saving features. You can configure these in more detail through your computer’s power options control panel, but for convenience the main setting, the sleep timeout can be updated here.&lt;/p&gt;  &lt;h1&gt;Service Installation&lt;/h1&gt;  &lt;p&gt;If no network admin has setup a proxy for you, and “Wake up a machine on your local network” isn’t working, it’s not hard to setup your own. All you need is a PC which will remain on. Most offices, unfortunately, have hundreds of these, so take advantage of one. You install a service through the Service Installation Page&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpHbX10vakJhg7T0XMuoJj6aKXAxGa2DOa46PPcxrP_C_Mt-UlOvse35tmUF5jG5KAcKkJDezVQbTDcG4QbZm5OuB0mtlERO3QhHQbKsAIpAvpPd0jTTjqmZ29IWETtxg-gpTY/s1600-h/ServicePage%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ServicePage" border="0" alt="ServicePage" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-5gsQKww3i2W-iY6ItWnjLthpTBG0h4zli87HnnKeEKNRtiTZfPQ-Ejyhnf81Euizp1FE6tmYl76jgbliRlmJ9m6ce0R7Be5fYlJSLyD4ABajddVw-ExI0lnOKIGQ3mdp1DLN/?imgmax=800" width="644" height="403" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The easiest thing to do is to install deSleeper on the machine you want to use as a proxy, come to this page and click &lt;b&gt;Install&lt;/b&gt;. There is no need to change any of the default settings if you don’t understand them.&lt;/p&gt;  &lt;p&gt;It will however be helpful to type the names of the machines you want to wake up into the Precache Hosts field, before clicking Install. This option makes your first wake up easier and reliable. It’s optional, but highly recommended.&lt;/p&gt;  &lt;p&gt;The other option is to do a remote install. This function is really for more advanced users as it requires access rights the average network user won’t have, and some of the error messages that come back if you’re missing one of those rights are, somewhat of necessity, not all that user friendly.&lt;/p&gt;  &lt;p&gt;One common gotcha of remote installs is that .NET 3.5 SP1 needs to be installed before you hit the Install button. To try and prevent confusion, by default, deSleeper checks to see if .NET (and the right version) is installed. But to do so requires a service, the Remote Registry Service, be enabled, which many users disable for security reasons. To skirt this issue, click suppress check for .NET. If one of the installs fails you may have to manually check if .NET is installed.&lt;/p&gt;  &lt;p&gt;There is yet one more function available from this page. The Prepare Hosts button will take each PC in the Precache Hosts field and attempt to remotely enable the Wake-On-Lan setting on that PCs network card. Like remove service installs, this requires administrator, or close to it, access rights. For the techies, I’ll mention that this feature, and the remote install feature, is made possible by &lt;a href="http://www.geocities.com/gtalon51/projects.html"&gt;RCtrlX&lt;/a&gt;, a utility from Leon Sodhi. Thank you Leon!&lt;/p&gt;  &lt;h1&gt;Summary&lt;/h1&gt;  &lt;p&gt;So that’s about it, if you get an error message when doing anything, you’ve got a couple options. The first is to head over to the &lt;a href="http://desleeper.codeplex.com/Thread/List.aspx"&gt;deSleeper discussion list&lt;/a&gt;. The client writes log entries to a file deSleeperClient.log, which is in the same folder as the executable, C:\Program Files\deSleeper (at least for now.. by all standards it should be in AppData but for now it’s in the much easier location).&lt;/p&gt;  &lt;p&gt;The service writes most errors to the Application or System Event Logs, which you can get to through Event Viewer. As with all networking related tools, it helps to know a little about what your network is composed of, but in the interest of not overcomplicating this little guide, I’ll leave those as topics for another day.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/04/new-version-of-desleeper-and-manual.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_JaUlO2Mh8zBECgW8KQrD4WzN7Q2J6AjCyqxUg64PJgz9Eo7cJ4mwoTCAU7i-tmCDoHKR_SZ0o9Ry61gdpu6A4r5yS80oFyr6ycJaueZ9DoYwse09xzehoKlrp_O-PVQobROO/s72-c?imgmax=800" width="72"/><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7239633765580792851</guid><pubDate>Thu, 26 Mar 2009 14:41:00 +0000</pubDate><atom:updated>2009-03-26T09:41:41.967-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">deSleeper</category><category domain="http://www.blogger.com/atom/ns#">environment</category><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><title>deSleeper Version 1.11</title><description>&lt;p&gt;I’ve released a &lt;a href="http://desleeper.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25287"&gt;new version of deSleeper&lt;/a&gt;.&amp;#160; This update provides an alternative way to “precache” hostnames in a kind of offline ARP table.&amp;#160; Also fixes some errors that occurred when additional types of network cards (such as those VMWare installs) were present.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/03/desleeper-version-111.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-5414994922482821236</guid><pubDate>Sun, 22 Mar 2009 20:30:00 +0000</pubDate><atom:updated>2009-03-22T15:33:58.421-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">deSleeper</category><category domain="http://www.blogger.com/atom/ns#">environment</category><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">ideas</category><title>deSleeper Architecture</title><description>&lt;p&gt;I run an open-source project, &lt;a href="http://desleeper.codeplex.com"&gt;deSleeper&lt;/a&gt;, on Codeplex.&amp;#160; The purpose of this utility is quite simple.&amp;#160; Allow users to remotely wake up their machines from low-power states.&amp;#160; If users use these features they’ll find it more practical to have their PC’s off or in sleep mode more often, thus saving energy.&amp;#160; &lt;/p&gt;  &lt;p&gt;Every network card has the basics to make this work, but there are plenty of obstacles that can get in the way.&amp;#160; The purpose of deSleeper is to give ways around those obstacles, and hopefully simplify the process as well.&amp;#160; I think I’ve succeeded in the first goal, though the second is still a work in progress.&amp;#160; It’s simpler than without deSleeper, but it isn’t average user simple.&amp;#160; &lt;/p&gt;  &lt;p&gt;While I work on that, anyone who uses deSleeper may find it helps to understand the architecture when you're unsure how to setup your system.&amp;#160; I’ve endeavored to help you do this by writing an &lt;a title="deSleeper Architecture and Setup Guide" href="http://desleeper.codeplex.com/Wiki/View.aspx?title=deSleeper%20Architecture&amp;amp;referringTitle=Home"&gt;architecture and setup guide&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;First, you should understand the components that are used for the entire interaction.&amp;#160;&amp;#160; &lt;br /&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt-2iP-izqZBrNp6zOAsWKLPf17gpn2per878AqY_wzsXVLD5HTYWuqLpQhpDVQCMuSfEw7ITtqNGKe0d4wM9XFw6CgA5G19fE41NFPnIgqJ0WD_Msj3imjKJI__olizOrrz47/s1600-h/Components%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Components" border="0" alt="Components" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKDy_XTFJt6_QqCq1L67G2XX66Q5T2JqQjyTtuA90lnkzh1hbY1u-nmAk1J15BCcbgsNQKVR-hyPBxdE_BxLiasJrCniz7fVnK-ybJ2SD7BQuy6VpQ1HkOQKtEjNFI12K2XahF/?imgmax=800" width="825" height="567" /&gt;&lt;/a&gt;     &lt;br /&gt;The three main components are the client, the proxy and the target.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Target -&lt;/strong&gt; The machine that goes to sleep automatically or manually and needs to be reactivated remotely. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Client -&lt;/strong&gt; The machine you're using when you want to wake up the client. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Proxy -&lt;/strong&gt; The machine which listens for requests from clients and uses it's superior network access to get a &lt;a href="http://en.wikipedia.org/wiki/Wake-on-LAN#Magic_Packet"&gt;magic packet&lt;/a&gt; to the network card of the target. &lt;/li&gt; &lt;/ul&gt; &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirk62BQtZMl7DmUNOGcJ8-d5q7BUm4PzS0c_8ffWNwPsaxXMVlTJpS8qInSccHbWQQaFUTbB-2UdrtWMKhnY18AHXzfkIYOvleN9suImPgOyz4E1CTO9V8jTYY3CwkL1IO_FHM/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQdLN8lUvbCw1sJ42VP7-FTOhHPg7DSSgvsXl_to1STL_gNyfHCJ4C0Sw91dy08yorlAR599HyMElxUoekRndrXIobMSSir7cvkEFJFMZeRXAmfBjftb8uZRWKW0xAWPjvR_wW/?imgmax=800" width="883" height="568" /&gt;&lt;/a&gt;   &lt;br /&gt;Understanding these components helps understand the steps necessary to set them up.&amp;#160; &lt;br /&gt;  &lt;br /&gt;These steps are:   &lt;ul&gt;   &lt;li&gt;Configure the target's network interface. It is not always necessary, but many network cards do not have &lt;a href="http://en.wikipedia.org/wiki/Wake-on-LAN"&gt;wake-on-LAN&lt;/a&gt; enabled by default. You don't need deSleeper to do this, but help you avoid hunting around in Device Manager deSleeper provides the &amp;quot;Network Card Configuration&amp;quot; tab. If you know how to do this without deSleeper's help you don't need to install deSleeper on the target. &lt;/li&gt;    &lt;li&gt;Install Proxy Service - Clients usually have obstacles between them and the target. The proxy service needs to be installed on a machine physically located on a network that avoids these obstacles. The safest spot is connected to the same network switch, but depending on your network setup farther away may work as well. There are plenty of variables here so when in doubt closer is better. The &amp;quot;Service Installation&amp;quot; tab is only available if you install the full version. This tab helps configure the proxy service which will run in the background and boot with proxy machine. &lt;/li&gt;    &lt;li&gt;Install Client - The easiest step, install your client. You can use the full version or the client only version. &lt;/li&gt; &lt;/ul&gt;  &lt;br /&gt;Once everything is setup, all that is left to do is send a wake up request.&amp;#160; &lt;br /&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZEu71czBLHzOc0jr_P8PRrr7tM51R58hG99NpkSYBdF2Daa_mwYH56pCwhYhFr1grM7n4yc_McNPhBx1M9i9av8003V52kJuF08sSL5ywjFjgSMU11otrcj953br8gcAe28wE/s1600-h/image%5B25%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh_RkzMhHFaSyToI3UkzQWwND7Q6daEdSap51zCCEalsEGpeDgY9m2AlD1iwRt0UDwsYt6O9ZLUmlaxL9ZgXYe6Yj7GdQkh5iH2_vF-SM6isBOV5BwaMAUW71KQP7FlTHxqMNa/?imgmax=800" width="832" height="613" /&gt;&lt;/a&gt;   &lt;br /&gt;The requests use web-services calls to contact the proxy with the target information. Where this request is sent is the &amp;quot;destination&amp;quot;. deSleeper also supports a &amp;quot;local&amp;quot; destination that does not use a proxy, but requires the client and target not to have obstacles in between each other.   &lt;br /&gt;Either the proxy, or if &amp;quot;local&amp;quot; the client, then constructs a &amp;quot;magic packet&amp;quot;. Essentially a magic packet is a set of bytes in a simple pattern that the network card of the sleeping target can recognize it without the assistance of the CPU. When the network card recognizes a magic packet stamped with it's unique name (known as the MAC address), it sends messages to other components of the machine that turn on the CPU, memory, hard disk, etc, or take them out of super-low power states into operational states.   &lt;br /&gt;What can go wrong?   &lt;ul&gt;   &lt;li&gt;If the network card isn't watching for the magic packet it won't wake up the machine. &lt;/li&gt;    &lt;li&gt;Magic packets are broadcast. Because the machine is off, it's not really possible to direct the request at the target. Networks limit the scope of broadcasts for many reasons. If the machine that broadcasts the magic packet is in a different scope from the target, the broadcast will never reach it. &lt;/li&gt;    &lt;li&gt;When using the &amp;quot;Host Name&amp;quot; wake up method, it needs to be possible to resolve the Host Name into a &lt;a href="http://en.wikipedia.org/wiki/MAC_address"&gt;MAC address&lt;/a&gt;, because the MAC address is a critical part of the magic packet. On most networks it's not possible to do this while a machine is off. For this reason, the proxies maintain a &amp;quot;cache&amp;quot; of host name and MAC address pairs. But to initialize this cache it's necessary to send a wake up request once while the machine is on. Somewhat counter-intuitive to send a wake up request while online, which is why I'm looking into some other solutions, but it works well after the single request. Cache's on a proxy survive shutdowns and restarts, but they may not survive a reinstall of the deSleeper service. &lt;/li&gt; &lt;/ul&gt;  </description><link>http://tech.norabble.com/2009/03/desleeper-architecture.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKDy_XTFJt6_QqCq1L67G2XX66Q5T2JqQjyTtuA90lnkzh1hbY1u-nmAk1J15BCcbgsNQKVR-hyPBxdE_BxLiasJrCniz7fVnK-ybJ2SD7BQuy6VpQ1HkOQKtEjNFI12K2XahF/s72-c?imgmax=800" width="72"/><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-2761159586182931767</guid><pubDate>Sat, 21 Mar 2009 03:29:00 +0000</pubDate><atom:updated>2009-03-20T22:29:39.523-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general programming</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">ideas</category><category domain="http://www.blogger.com/atom/ns#">threading</category><title>Idempotent Sequences, Sets and Interactions</title><description>&lt;p&gt;Idempotency is a funny sounding word with a simple meaning, but a complex reality.&amp;#160; Perhaps it’s even unfair to say it has a simple meaning because I’ve seen many attempts to define it that turn out rather convoluted.&amp;#160; In the simple terms, I would define idempotency as the property of being able to perform the same action twice or more times in sequence, and end up with the same result as if it was performed once.&lt;/p&gt;  &lt;p&gt;Those terms leave a fair bit of wiggle room when you really get down to the details.&amp;#160; For example, those terms say nothing about additional actions occurring in between the first and last occurrence of the idempotent action.&amp;#160; If there is one and only one action that can modify a resource than it’s not necessary to consider those details, but quite often that is not the case.&amp;#160; Even operations like an HTTP PUT are only idempotent when the input is the same.&amp;#160; Every different input for PUT is non-idempotent, with respect to every other input, unless of course If-Match is used and then some inputs are idempotent to other inputs but not to all.&lt;/p&gt;  &lt;p&gt;As I’ve found in relation asynchronicity, a simple word, used without context, can cause more confusion than clarity.&amp;#160; The transmission of a message and the receipt of it’s response may be asynchronous from a user’s perspective, but still remain synchronous from a HTTP protocol perspective.&amp;#160; That is, from the user’s perspective clicking a link in the browser is asynchronous, because while the requests are sent, received, processed and rendered, only any modern computer the user can click on another tab, open another program, etc.&amp;#160; But from the HTTP protocol perspective, even if the HTTP library provides a method like BeginGet, EndGet, some infrastructure is required to construct the request, transmit that request, and do nothing else until the response arrives (Even this is blurring the truth a bit since there is the timeout…).&lt;/p&gt;  &lt;p&gt;So, back to idempotency, I rarely see the context of idempotency discussed or defined in a more clarified structure.&amp;#160; I’ve occasionally seen references to idempotent sequences, but very rarely, not even enough to feel confident that my definition is the same as everyone else’s.&amp;#160; The HTTP RFC gives this description:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A sequence is idempotent if a single execution of the entire sequence always yields a result that is not changed by a reexecution of all, or part, of that sequence.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I wouldn’t be at all surprised to find people who would believe an idempotent sequence was a sequence, that if performed twice or more in a row was idempotent, but the description above goes farther than that.&amp;#160; In that description, the order of first execution of each action must remain constant, but reexecution can occur anytime after this first condition is met.&lt;/p&gt;  &lt;p&gt;I can think of another, stricter set of actions, where the set of actions produces the same result regardless of order entirely, the only requirement to achieve the same result is that every action in a set is executed at least once.&amp;#160; For the lack of knowing anything better to call such a set of action, I’d call them an idempotent set.&lt;/p&gt;  &lt;p&gt;I think it’s not uncommon for architects and developers to overreach at times and assume something that is a collection of independently idempotent actions, is an idempotent set.&amp;#160; You need an idempotent set in order to accommodate fully out of order execution, with a deterministic result.&amp;#160; An idempotent sequence works only if you’re willing to accept a slightly non-deterministic result.&lt;/p&gt;  &lt;p&gt;Another common circumstance that arises, is a set of actions, that will result in the same outcome as long as the first execution of a “final” action follows the initial execution of all other actions.&amp;#160; This circumstance, which I’m struggling to find a good term for, is quite common.&lt;/p&gt;  &lt;p&gt;I would love to hear from others on what definitions, or other common interaction patterns you’ve had experience with that relate to idempotency.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/03/idempotent-sequences-sets-and.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-4457190976201745033</guid><pubDate>Sat, 28 Feb 2009 21:46:00 +0000</pubDate><atom:updated>2009-02-28T15:46:56.394-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">cars</category><category domain="http://www.blogger.com/atom/ns#">general</category><category domain="http://www.blogger.com/atom/ns#">ideas</category><category domain="http://www.blogger.com/atom/ns#">not computer</category><title>Red Light Cameras</title><description>&lt;p&gt;Chicago has been installing red light cameras.&amp;#160; I thought one caught me a few weeks ago, but never got a ticket, so the flash must have been for a car going the opposite direction.&amp;#160; The experience got me wondering about certain aspects of the systems.&lt;/p&gt;  &lt;p&gt;If you search, you’ll find opinions that they are effective at reducing accidents, and others that they are not.&amp;#160; The only definitive &lt;a href="http://www.tfhrc.gov/safety/pubs/05048/05048.pdf"&gt;RLC study I found, conducted by FHWA&lt;/a&gt;, has interesting conclusions.&amp;#160; Bottom line is red light cameras reduce both injuries and costs.&amp;#160; The FHWA study is much better than others, but it’s important to note it’s limitations.&lt;/p&gt;  &lt;p&gt;The FHWA study discusses spillover effect, that is, the effect where RLCs alter the behavior of drivers at intersections without RLCs.&amp;#160; When a city places RLC’s at a few intersections, some drivers pay attention to whether a intersection has a camera, but others become more careful at all intersections.&amp;#160; &lt;/p&gt;  &lt;p&gt;What the study can’t measure, because there is no data for it, is what the effect would be if all drivers acted like the second group, that is, they drove more carefully at all intersections.&amp;#160; This condition would occur if all intersections had cameras or a high enough percentage as that drivers assumed they were present without looking for them.&lt;/p&gt;  &lt;p&gt;This limitation is important because all the benefits of this homogenous state, compared to the current mixed state, favor RLCs.&amp;#160; First, in the mixed state, drivers intentions and expectations vary more than in the homogenous state.&amp;#160; If a driver who knows a RLC is not present at an intersection is following one assumes all intersections are equipped, the following driver may assume the leading driver is less likely to stop than he is, increasing the risk of a rear-end collision.&amp;#160; If all drivers have similar goals, the risk is reduced.&amp;#160; &lt;/p&gt;  &lt;p&gt;Second, if drivers look for RLCs as they approach an intersection, this is a distraction, and increases the risk of any type of accident, especially rear-end collisions.&amp;#160; If they assume the camera is present, plan to stop, and focus their attention on traffic and signals, the risks are lower.&lt;/p&gt;  &lt;p&gt;The point is the proven, but modest benefits the FHWA study finds are underestimating the full value, and while we may each dislike the chance we’ll receive a ticket, ultimately they do save lives, injuries and costs.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/02/red-light-cameras.html</link><thr:total>1</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-9186049277972322686</guid><pubDate>Sun, 15 Feb 2009 20:55:00 +0000</pubDate><atom:updated>2009-02-15T14:55:22.261-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">Google</category><title>Google, Brand and Beta</title><description>&lt;p&gt;Reading &lt;a title="How Google&amp;#39;s layoffs and project cancellations are affecting it&amp;#39;s culture of innovation" href="http://www.25hoursaday.com/weblog/2009/02/15/HowGooglesLayoffsAndProjectCancellationsAreAffectingItsCultureOfInnovation.aspx"&gt;Dare Obasanjo’s thoughts on how layoffs and project trimming at Google affect its culture&lt;/a&gt; led me to thinking about why the fatality rate for side projects at Google has risen so high.&amp;#160; It’s not just the economy, it’s more than that.&amp;#160; I think despite being the major innovator in web based advertising, Google may have failed to understand the meaning of brand internally.&lt;/p&gt;  &lt;p&gt;What Google has been loathe to admit to itself is that a not insignificant part of its success in many areas is something other than the quality of their products.&amp;#160; Not that they don’t have quality, or that quality wasn’t important, but many of their products have succeeded by leveraging the brand built from the success and popularity Google web search and the following press obsession with the periods of rocketing stock prices.&amp;#160; This brand was critical for products like Gmail which asked users to change the way they work.&amp;#160; Gmail asked users to give up something in exchange for something else.&amp;#160; Products like that are a much harder sell then products that provide incremental improvements, and the ability to convince users to temporarily ignore their losses until they understand their gains is critical.&amp;#160; &lt;/p&gt;  &lt;p&gt;That ability is called trust.&amp;#160; Google however has damaged their earned trust in somewhat unexpected ways.&amp;#160; Maintaining trust isn’t as simple as not breaking your promises, because people aren’t fully rational about trust.&amp;#160; Causing confusion is as reliable a mechanism to lose trust as lying, and Google has done a good job of confusing users with their extremely long list of beta products.&amp;#160; Sure, they are called beta’s and the implicit statement there is that it’s not complete, but since some of their beta products have had quality far above others, the meaning of beta changed.&lt;/p&gt;  &lt;p&gt;What Google would benefit from here is to do a much better job of internally vetting the state of quality of their products and projects and communicating that to their users and potential users.&amp;#160; Currently I have a feeling that Google’s main metric of quality is the number of daily users.&amp;#160; That is a poor metric that is self-defeating in the brand arena.&amp;#160; Those products that have succeeded, and are already successful don’t need a stamp of approval, but those that do are left among the rather large and growing bucket of products that either haven’t yet made it, or never will.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/02/google-brand-and-beta.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-2932770999802920603</guid><pubDate>Wed, 28 Jan 2009 06:53:00 +0000</pubDate><atom:updated>2009-01-28T00:53:55.241-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">blogging</category><category domain="http://www.blogger.com/atom/ns#">general</category><category domain="http://www.blogger.com/atom/ns#">Photos</category><title>Photo fun</title><description>&lt;p&gt;One of my many projects over the last few months has been cataloging and uploading my Grandfather’s very large digital photo collection.&amp;#160; It took a bit of time to decide on the right tools for this job, and in all honestly I’ll probably switch again sometime in the future but so far I found the combination of &lt;a href="http://download.live.com/photogallery"&gt;Windows Live Photo Gallery&lt;/a&gt; and &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; to be the best combination.&lt;/p&gt;  &lt;p&gt;Windows Live Photo Gallery beat out it’s competitors for me because of did a better job of managing tags than all the others.&amp;#160; It supports two types of tags, People tags and descriptive tags.&amp;#160; People tags are cool because you can highlight individuals in a photo, but I haven’t yet figured out how this is stored.&amp;#160; Descriptive tags are you’re basic tag but are stored in a form Vista recognizes directly making them very portable and useful for searching even without Windows Live Photo Gallery.&amp;#160; Inside Windows Live Photo Gallery the interface for using the tags is very good too.&amp;#160; I won’t say anymore on that topic other than suggest you try it.&lt;/p&gt;  &lt;p&gt;You might be tempted to think the use of Windows Live Photo Gallery would make it easier to upload to the Windows Live Photos service, but there is an excellent uploader for Flickr built in.&amp;#160; It’s way better than anything Flickr offers on their own, and in some ways better than the built in upload to Windows Live Photos as well.&amp;#160; Once again, a key factor for me was the support for tags.&amp;#160; The uploader in Windows Live Photo Gallery automatically transferred all of the descriptive tags.&amp;#160; The standalone &lt;a href="http://www.flickr.com/tools/"&gt;flickr uploader tool&lt;/a&gt; requires you type all of this in again.. ugh.. no thanks.&lt;/p&gt;  &lt;p&gt;Flickr got my support for a couple reasons.&amp;#160; For one, I had a lot of photos, 50GB or so, that I wanted to upload, and for a number of competitors that would have cost quite a bit.&amp;#160; Actually, until AT&amp;amp;T discontinued their Yahoo services it was free for me.&amp;#160; Now it’s $24.95/year.&amp;#160; Picasa, is kind of expensive past the initial 1GB.&amp;#160; Windows Live Photos was kind of attractive with 25GB of free space, but the online experience isn’t anywhere near the depth of Flickr.&amp;#160; For example, while tags are transferred, they aren’t all that useful due to lack of good search/exploration interfaces.&amp;#160; I think my feelings on that would change a lot of there was a online/offline sync between Gallery and Spaces like Picasa uses, but today it’s just a standard upload/download like Flickr.&lt;/p&gt;  &lt;p&gt;So… now that I have all these photos and a inherent sentimentality toward them I’ll probably be posting links to some of the best in the ol’ blog from time to time.&amp;#160; Hope you enjoy them.&lt;/p&gt;  &lt;p&gt;&lt;a title="IMGP4727 by MeRyan, on Flickr" href="http://www.flickr.com/photos/63457916@N00/3228036756/"&gt;&lt;img title="St. Lucia by Sea" height="681" alt="St. Lucia by Sea" src="http://farm4.static.flickr.com/3122/3228036756_6027d01b06_b.jpg" width="1024" /&gt;&lt;/a&gt;&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/01/photo-fun.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="http://farm4.static.flickr.com/3122/3228036756_6027d01b06_t.jpg" width="72"/><thr:total>4</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-5637327445848442678</guid><pubDate>Mon, 26 Jan 2009 03:57:00 +0000</pubDate><atom:updated>2009-01-25T23:39:52.286-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">vista</category><category domain="http://www.blogger.com/atom/ns#">Window 7</category><title>Remote Desktop 7 on Windows Vista and XP</title><description>&lt;p&gt;While Vista/Windows 2008 Server were in beta there was a &lt;a href="http://tech.norabble.com/2006/07/dual-monitor-remote-desktop-goodness.html"&gt;trick to use RDP 6 on Windows XP&lt;/a&gt;.&amp;#160; Now that Windows 7 is coming, and has a new set of RDP enhancements, including true multi-monitor support.&amp;#160; So, I decided to try the same trick with the new files from Windows 7.&amp;#160; To recap:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Create a folder for you RDP 7.0 (version number will be 6.1.7000) files (don’t place them in System32) &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Copy the files mstsc.exe and mstscax.dll from a Windows 7 installs System32 folder to the new folder. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create a subfolder, en-US. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Copy the files mstsc.exe.mui and mstscax.dll.mui from the Windows 7 installs System32\en-US folder to the subfolder. &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, my testing has had some success under Vista, but not so much under XP.&amp;#160; I did a bit of an odd thing for Vista because I have a 64bit install of Vista and had a 32bit install of Windows 7.&amp;#160; So.. when I copied the files they didn’t initially work until I ran them inside a 32bit version of dependency walker… but I’m pretty sure it will work without that hoop when I copy over the 64bit files, or vice versa if you have two 32bit installs.&lt;/p&gt;  &lt;p&gt;The XP problem is a bit trickier.&amp;#160; Under XP (32bit files/32bit install) I receive the error “The prerelease version of remote desktop connection has expired…”, which happens to be the &lt;a href="http://help.wugnet.com/windows/Remote-Desktop-Connection-XP-SP3ftopic-612825-days0-orderasc-8.html"&gt;same message many users saw during early XP SP3 testing&lt;/a&gt;.&amp;#160; For this reason I have a hunch that the files will work on XP SP2, but not SP3, but don’t quote me on that till I get a chance to try.&amp;#160; Other than that I haven’t thought up anyway to make the files work on XP other than to wait for Microsoft to release an official patch.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/01/remote-desktop-7-on-windows-vista-and.html</link><thr:total>16</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-1448228654975877927</guid><pubDate>Sun, 25 Jan 2009 19:23:00 +0000</pubDate><atom:updated>2009-01-25T14:55:14.114-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">virtualization</category><category domain="http://www.blogger.com/atom/ns#">vista</category><category domain="http://www.blogger.com/atom/ns#">Window 7</category><title>Windows 7, Remote Desktop and Dual\Multi Monitors</title><description>&lt;p&gt;A long time ago I wrote about &lt;a href="http://tech.norabble.com/2006/07/dual-monitor-remote-desktop-goodness.html"&gt;a partial solution to using multiple monitors with Windows XP and Vista&lt;/a&gt;.&amp;#160; There were a few limitations at the time, but now Microsoft is promising to solve even those.&amp;#160; With Windows 7 (and lets cross our fingers and hope the Windows 7 Remote Desktop client becomes available for Windows Vista and XP), you can now use two or more monitors, even with different sizes with remote desktop.&lt;/p&gt;  &lt;p&gt;Some early details, about &lt;a href="http://software.intel.com/en-us/blogs/2009/01/13/windows-7-beta-multi-display-remote-desktop/"&gt;multi-monitor remote desktop on Windows 7&lt;/a&gt;,&amp;#160; are available from the &lt;a href="http://software.intel.com/en-us/blogs/2009/01/13/windows-7-beta-multi-display-remote-desktop/"&gt;Intel networking blog&lt;/a&gt;.&amp;#160; One thing I should point out is that this is much different than /span.&amp;#160; With /span you didn’t get distinct monitors, so maximize wouldn’t work as expected and you all your monitors had to have a common rectangle.&amp;#160; That is, if all your monitors had a consistent height, and were horizontally stacked, then you could use them.&amp;#160; With the Windows 7 change they are actually treated as distinct monitors allowing for distinct sizes, which is rather handy if you have a laptop with an external monitor and the sizes don’t match.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicxT4eoIE_5zAbdjXO0RwFw_uNeUhhn_mMtQN30IlBwONoR6-EsumMD8VgCbIcFgNEkNnXBzdXgcpMyxaojm35pYTI0SXN7slkHBz5v0i2xoSqDPcxHbohZxPaEajpKocUBsB7/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="481" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi48L-tBPzNvZi07G2CKORYYYHgOqgy-y0rBsX18aDxfksdfxRKGe5rt8qNT56K23gALsE32tW0IeU-5ndZq26bBD_vjC1YjFSrYPB3nVS1-6KY4yJnr0g1RXdruFvkOQRTdJDn/?imgmax=800" width="425" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is all nifty and cool, but it’s possible it won’t matter much if the entire remote desktop concept trends more toward the remote application concept.&amp;#160; More on that soon.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/01/windows-7-remote-desktop-and-dualmulti.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi48L-tBPzNvZi07G2CKORYYYHgOqgy-y0rBsX18aDxfksdfxRKGe5rt8qNT56K23gALsE32tW0IeU-5ndZq26bBD_vjC1YjFSrYPB3nVS1-6KY4yJnr0g1RXdruFvkOQRTdJDn/s72-c?imgmax=800" width="72"/><thr:total>2</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-1629126476902962128</guid><pubDate>Sun, 25 Jan 2009 18:15:00 +0000</pubDate><atom:updated>2009-01-25T12:15:13.556-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hardware</category><category domain="http://www.blogger.com/atom/ns#">kindle</category><title>Kindle Case (Solution?)</title><description>&lt;p&gt;I’ve had my Kindle for about a year now, and continue to run into more and more people with one.&amp;#160; The one &lt;a href="http://feedproxy.google.com/~r/ScottHanselman/~3/qqUDGoRgP_U/AYearWithAnAmazonKindleAndNewKindleCases.aspx"&gt;gripe I hear consistently is the case&lt;/a&gt;.&amp;#160; Oddly it’s never bothered me, I’ve found the case, while unconventional, to have worked extremely well at it’s job.&lt;/p&gt;  &lt;p&gt;Maybe I’ve been lucky to get a case that was just better fitted, but I haven’t had the “drop out” issue many complain about.&amp;#160; Yes, the little tab and the back of the Kindle seem to barely hold on, but they always do hold on, except if the battery cover on the back of the Kindle starts to loosen up.&amp;#160; Maybe that’s the trick, or as I said, maybe my case is more perfectly fit than the others.&lt;/p&gt;  &lt;p&gt;When the battery cover is properly tight the curved edge will be totally flush with the curved edge of the kindle.&amp;#160; It’s possible that it might feel like it’s tight before it is, but it will be more obvious if it’s tight.&amp;#160; My apologies if this is all obvious and already tried, but considering my good luck so far, and the off chance that it might work, I thought it worth a try.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/01/kindle-case-solution.html</link><thr:total>0</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-23716553.post-7641921497163139922</guid><pubDate>Thu, 15 Jan 2009 02:20:00 +0000</pubDate><atom:updated>2009-01-14T20:20:49.654-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">environment</category><category domain="http://www.blogger.com/atom/ns#">general software</category><category domain="http://www.blogger.com/atom/ns#">hardware</category><category domain="http://www.blogger.com/atom/ns#">vista</category><title>Low Power PC Tips</title><description>&lt;p&gt;In most cases, PC’s help save power.&amp;#160; Less shipping due to email is one good example.&amp;#160; Still, they do plug into the wall and if not properly configured can use a fair bit more electricity than necessary.&amp;#160; What’s unfortunate is that most PC’s aren’t configured properly because they don’t come from the manufacturer that way.&lt;/p&gt;  &lt;p&gt;I’m going to give you some simple tips to save power.&amp;#160; I’ll start with those tips that won’t produce any noticeable change in the way your computer operates (unless you happen to watch your electricity meter), and then some that save more but have minor inconveniences.&lt;/p&gt;  &lt;h1&gt;Minimal Power Management&lt;/h1&gt;  &lt;p&gt;The first tip is to let your computer take advantage of the power saving features of your CPU.&amp;#160; Modern CPUs can use dramatically less power when idling or under light load, by turning off some cores and slowing down others.&amp;#160; Since they only do this when they don’t have work to do, the effect is unnoticeable.&amp;#160; Unfortunately, most Windows XP computers come configured with these features turned off.&amp;#160; In Windows XP you can enable these features through the power options dialog accessible through your control panel.&lt;/p&gt;  &lt;h2&gt;Windows XP&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinX-GRF5M1vfQS62GCY33i9ampiuFolpM3JvSVcsAVYoP1BDVfmQIh-dX3RbiDCXdNRELrxFGomFB1i5-XxQEDL5B541GrV7osJwgLvPvvc9N7SClKTZorFlFYxsT8LF-5aYij/s1600-h/image%5B38%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="344" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNEGyY_LEovikJ9a9O4jyCkGHWvSUoY-weN5xBKVKyAa0LeBqaeF0O2ZN0V-_dhL3W80ts84OYMyBn3CLZ0VIJjYzyGB14f9O_caFAvYR6m3TiPs-rMUxV-Lm8A3lZjFSZv0KT/?imgmax=800" width="396" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It’s not too obvious here, but choosing minimal power management does more than just change the values of the “Turn off monitor”, “Turn off hard disks” and “System standby”.&amp;#160; It also changes many subtle unseen values.&amp;#160; So the tip here is, set your power scheme in Windows XP to “Minimal Power Management” if it’s currently set to “Home/Office Desk” or “Always On” or “Normal”.&amp;#160; The “Portable/Laptop” and “Max Battery” schemes are roughly the basically the same as “Minimal Power Management”, except with different defaults for the visible settings.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h2&gt;VISTA&lt;/h2&gt;  &lt;p&gt;In Vista, processor power management is something that is on by default.&amp;#160; Also you can see the actual settings, though it’s a bit more involved.&amp;#160; Vista has power plans instead of schemes and they vary a little bit.&amp;#160; In general you’re okay if you don’t choose “High Performance”.&amp;#160; I know it sounds like something you want, who doesn’t want performance, but really the difference is negligible in terms of performance and high in terms of power usage.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2El-Ngxs9l-862ftMb9QOH9AJrG52i5uPy_CF5bn7MJq8QZrS8unIV3PN2l1mIyKJOQcx_42utPbvWmSzNzSvedT0sSbmtFQpEsONeUAavZEcJZ-bpRwfn3trjU-rB0l0kBlS/s1600-h/image%5B15%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="349" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3WWya90dLL9hCPjI-rL5foWh9C0Q55pds7PsgcI7S7ell0asGo_vOy_l-rljXXzmvBqLrQD19barkybbBJC2f8qiwwRjny9BI_eyhHLIlm-_TPYJPJ4T1r4zqfaW97jAKpMUb/?imgmax=800" width="604" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you want simple, choose recommended to get the equivalent of minimal power management.&lt;/p&gt;  &lt;p&gt;On the other hand, if you want to really know what your PC is doing, further down I’ll explain Advanced Power Settings.&lt;/p&gt;  &lt;h1&gt;Turn off monitor&lt;/h1&gt;  &lt;p&gt;Modern LCD monitors and laptop screens use much less power than the older CRT monitors did.&amp;#160; Still, they are one of the primary power draws from using a PC.&amp;#160; Also, unlike CRTs, an LCD turns on and displays an optimal image in less than a second.&amp;#160; So setup your computer to automatically turn the monitor off in case you get up and walk away.&amp;#160; &lt;/p&gt;  &lt;p&gt;Don’t worry about your monitor turning off while watching a video.&amp;#160; Media Player and most other video software keeps the monitor on automatically regardless of this setting.&lt;/p&gt;  &lt;p&gt;Choose whatever timeout feels comfortable, but lower is better.&amp;#160; I set mine to 10 minutes at home and 5 at work (for security mostly).&lt;/p&gt;  &lt;p&gt;Another tip, don’t use a screen saver.&amp;#160; For one, they’re no longer necessary given the design of monitors today.&amp;#160; Second, screen savers have an odd nack for preventing your monitor from being turned off, although they are not supposed to do so.&lt;/p&gt;  &lt;h2&gt;Windows XP&lt;/h2&gt;  &lt;p&gt;Select your time after selecting the appropriate power scheme.&amp;#160; If you set the scheme second the turn off monitor setting will change again.&lt;/p&gt;  &lt;h2&gt;Vista&lt;/h2&gt;  &lt;p&gt;Click on Change plan settings after selecting a plan.&amp;#160; Instead of “Turn off Monitor” use “Turn off the display”.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYY8WBzWay0RJnS9l1zKkscJhICeXkLSoMGKDJ9yrvHjB7Ajp3S9ZWQFLS5OSsEEvM3yqncnsJHoRUsiFoxQJJjayMHTrdFuqo6PwtzreMy293he0oxsEDKOjFYpQnj3ADMGiA/s1600-h/image%5B21%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="349" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbvLseEvxqwNkvYocCGqMkvv1-_f19VzaCYC706BdDasT5S39j9j3yd3Xq5kwuNlBLlx5n8IHgQtR3ItIEMuDwd6Mx7iIu_TknHwFeYHWW-9UGS4UxiTXerU7-oNOIqoUPsvXt/?imgmax=800" width="692" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h1&gt;Turn off hard disks&lt;/h1&gt;  &lt;p&gt;Hard disks turn on and off very quickly too, and depending upon how you use them, they can last quite a bit longer if they get some down time.&amp;#160; It’s generally not good to turn a hard drive on and off rapidly, kind of like a lightbulb, but a few times a day will do more good than harm.&lt;/p&gt;  &lt;p&gt;I’d recommend setting the hard drive off to 10 minutes.&lt;/p&gt;  &lt;h2&gt;Windows XP&lt;/h2&gt;  &lt;p&gt;Once again, select the appropriate time after selecting a scheme.&lt;/p&gt;  &lt;h2&gt;Vista&lt;/h2&gt;  &lt;p&gt;In Vista, turn off hard disks is more complex.&amp;#160; Click on “Change advanced power settings” once into the Change Plan settings.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvQKrQTTKgiDbycKkry0pstFQ38oXbP6mwVhO7r35hWVtc8ZKPsQ0aDCTtPoN-komzVc7VTsh88agIsN7C37aN7-Ew6mLkgLOhaGa9MvEXAbiPH7Hcqefq0HXG3rjEcoxtGdOp/s1600-h/image%5B29%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="450" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzq8xPfpXhbC1eHPfttHFAqHigZvZ__LBCuYpPmFvGYisk2L8R6r9q5h5hayLhRrFSPhyphenhyphen4PHxlTuKjLRmJEKeN0pmcTdGwfMoCR5DsaglVERhj4Fct_gyIEW1d9jSCN1fvTXXC/?imgmax=800" width="422" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is good and bad.&amp;#160; On the bad, this dialog is much more complex.&amp;#160; But on the upside it does allow you do to a lot more than XP did.&amp;#160; Expand the Hard disk node, then “Turn off hard disk after”, and finally select the appropriate timeout if not already set.&amp;#160; You might notice something inside this screen.&amp;#160; A bit further down is “Processor power management”.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQK31e5-jvcRk1gdLKxr8P5sS_V31yIALo5vR-15JoSAJJ57Yf3TOlNye48gni_U3ec39ajWVAM6oAXfwlPtwR6KnmhK2ly6EHKRabg9vA5mdobRXF7hKvRdjQ0TKQylxV0TU/s1600-h/image%5B37%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="450" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf1grHo-uhARSUC2BYJ9T9xwSDjcUim-fcZSI2VK9O_oond2u18rdlgUwNOzrngjM8pYUFK570hvydOaOnRvLoIyiyoAz1q7nYTrlxDeT9feGu4cWOuZhC85MKPSgKDEKDVCNp/?imgmax=800" width="422" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This is the equivalent to “Minimal Power Management”.&amp;#160; 5% and 100% are very good values and should be the default values in your Recommended plan.&lt;/p&gt;  &lt;h1&gt;Sleep/Hibernate&lt;/h1&gt;  &lt;p&gt;The last step in saving power is to enable sleep and/or hibernate.&amp;#160; These features turn your whole computer off, not just little pieces, and allow you to bring it back to life quickly.&amp;#160; Sleep is almost always the faster of the two and the difference in power consumption between sleep and hibernate isn’t huge.&amp;#160; I generally prefer to use hibernate explicitly (as a replacement for explicitly shutting the machine down) and sleep as a “walked away” kind of thing.&amp;#160; If you’re faint of heart, start with standby unless you have a laptop.&lt;/p&gt;  &lt;p&gt;I’d suggest setting this to at least one notch above your monitor off value.&amp;#160; It’s nice to have a warning before the PC goes to sleep.&amp;#160; If your reading something and you’re monitor flicks off, move the mouse and in less than a second your back to normal.&amp;#160; If however it goes to sleep it could be a a little wait because you’ll not only have to wait for the PC to come out of sleep, which is pretty speedy, but you have to wait for it to finish going to sleep too, which usually is slower than coming out.&lt;/p&gt;  &lt;h2&gt;Windows XP&lt;/h2&gt;  &lt;p&gt;Once again, sleep is readily available from your power options dialog.&lt;/p&gt;  &lt;h2&gt;Vista&lt;/h2&gt;  &lt;p&gt;Your sleep setting is in Edit Plan Settings with the “Turn off the Display” setting.&lt;/p&gt;  </description><link>http://tech.norabble.com/2009/01/low-power-pc-tips.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNEGyY_LEovikJ9a9O4jyCkGHWvSUoY-weN5xBKVKyAa0LeBqaeF0O2ZN0V-_dhL3W80ts84OYMyBn3CLZ0VIJjYzyGB14f9O_caFAvYR6m3TiPs-rMUxV-Lm8A3lZjFSZv0KT/s72-c?imgmax=800" width="72"/><thr:total>1</thr:total><author>ryan.technorabble@gmail.com (Ryan Baker)</author></item></channel></rss>