<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1368115163566068223</id><updated>2012-01-30T19:42:13.929-06:00</updated><title type='text'>code monkey</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7996905557319380673</id><published>2011-10-24T13:02:00.000-06:00</published><updated>2011-10-24T13:02:15.271-06:00</updated><title type='text'>Playing With Roslyn</title><content type='html'>As a tools guy, I've been fascinated with &lt;a href="http://msdn.microsoft.com/en-us/roslyn"&gt;Roslyn&lt;/a&gt; ever since Microsoft previewed it.  It looks like it provides lots of power for tools to consume.  Now that the first CTP is out, I spent some time over the weekend playing with it.&lt;br /&gt;&lt;br /&gt;The first thing it gives you access to is parsing source code, giving you an object model you can play with, and then letting you spit the modified source code back out.  Reading source code in is easy:&lt;br /&gt;&lt;pre&gt;var source_text = File.ReadAllText ("input.txt");&lt;br /&gt;&lt;br /&gt;var tree = SyntaxTree.ParseCompilationUnit(source_text);&lt;br /&gt;var root = (CompilationUnitSyntax)tree.Root;&lt;/pre&gt;Now we have an object model we can play with.  We can search through the model for specific tokens and replace them with new ones, like this:&lt;br /&gt;&lt;pre&gt;// Replace "Hello World!" with "Goodbye World!"&lt;br /&gt;var output = root.GetFirstToken (p =&amp;gt; p.Kind == SyntaxKind.StringLiteralToken);&lt;br /&gt;&lt;br /&gt;var new_output = Syntax.StringLiteralToken ("\"Goodbye World!\"", "Goodbye World!", output.LeadingTrivia, output.TrailingTrivia);&lt;br /&gt;&lt;br /&gt;root = root.ReplaceToken (output, new_output);&lt;/pre&gt;We can do source code formatting:&lt;br /&gt;&lt;pre&gt;// Add a space in front of all open parentheses&lt;br /&gt;var parens = root.DescendentTokens ().Where (p =&amp;gt; p.Kind == SyntaxKind.OpenParenToken &amp;amp;&amp;amp; p.LeadingWidth == 0);&lt;br /&gt;&lt;br /&gt;var new_parans = parens.Select (p =&amp;gt; p.WithLeadingTrivia (Syntax.WhitespaceTrivia (" ")));&lt;br /&gt;   &lt;br /&gt;root = root.ReplaceTokens (parens, (p, q) =&amp;gt; p.WithLeadingTrivia (Syntax.WhitespaceTrivia (" ")));&lt;/pre&gt;Finally, we can do syntax highlighting:&lt;br /&gt;&lt;pre&gt;private static void OutputNode (CompilationUnitSyntax token)&lt;br /&gt;{&lt;br /&gt;  var default_color = Console.ForegroundColor;&lt;br /&gt;&lt;br /&gt;  foreach (var t in token.DescendentTokens ()) {&lt;br /&gt;    // Make keywords blue&lt;br /&gt;    if (SyntaxFacts.IsKeyword (t))&lt;br /&gt;      Console.ForegroundColor = ConsoleColor.DarkCyan;&lt;br /&gt;&lt;br /&gt;    Console.Write (t.ToString ());&lt;br /&gt;    Console.ForegroundColor = default_color;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;Putting this all together and running it results in:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-N87VjLEuLh0/TqTspN9FBmI/AAAAAAAAA54/bBS8LkhCeLo/s1600/mokii.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5666914424003561058" src="http://4.bp.blogspot.com/-N87VjLEuLh0/TqTspN9FBmI/AAAAAAAAA54/bBS8LkhCeLo/s400/mokii.png" style="cursor: hand; cursor: pointer; display: block; height: 280px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note the "Hello World" has changed to "Goodbye World", open parentheses now have spaces in front of them, and we colored the keywords blue with very few lines of code.&lt;br /&gt;&lt;br /&gt;The tools guy inside of me loves playing with the API, but the Mono guy inside me has to go further and actually play with implementing the API, so the screenshot is actually running on a toy implementation of Roslyn's VB syntax tokenizer that I whipped up.  I want to stress that it's just a quick hack that pretty much only parses my sample program and I know nothing about writing parsers, but it was a fun exercise.&lt;br /&gt;&lt;br /&gt;The other nice feature of the Roslyn APIs is that it makes each compiler step independently testable, so I know I produce the same 59 syntax tokens as the MS implementation with the same leading and trailing trivia.&lt;br /&gt;&lt;br /&gt;If you want to play with the code, it's available on GitHub:&lt;br /&gt;&lt;a href="https://github.com/jpobst/Mokii"&gt;https://github.com/jpobst/Mokii&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7996905557319380673?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7996905557319380673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7996905557319380673' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7996905557319380673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7996905557319380673'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2011/10/playing-with-roslyn.html' title='Playing With Roslyn'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-N87VjLEuLh0/TqTspN9FBmI/AAAAAAAAA54/bBS8LkhCeLo/s72-c/mokii.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4967141175295445914</id><published>2011-08-23T13:36:00.002-06:00</published><updated>2011-08-23T13:42:31.591-06:00</updated><title type='text'>My Naive Plan to Put America Back to Work</title><content type='html'>Disclaimer: I am a computer programmer, not an economist, politician, or even a fancy space chicken lawyer.  Read at your own risk.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Where We Are&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Department of Labor recently released their unemployment figures for July.  Currently we stand at 9.1% unemployment, which is roughly 13.9 million people unemployed.  This is pretty much where unemployment has stagnated for about a year.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What We've Tried&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We've basically tried 2 things, increasing government spending and decreasing taxes.  Both were part of the "stimulus" bill passed.  Of the $787 billion stimulus, $507 billion was dedicated to spending (though not all of it ended up getting spent).  The other $282 billion was dedicated to tax cuts.&lt;br /&gt;&lt;br /&gt;The stimulus bill was likely pivotal in halting the 2 year trend of unemployment going up, but didn't do much to put people back to work.  One problem with increased spending and tax cuts is that they are indirect methods of creating jobs.  The government buys more goods and services, hoping businesses will need to hire more workers to fulfill new demand.  Cutting taxes is pretty much the same, hoping that more money in consumers' and businesses' pockets will cause them to buy more, creating new demand.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;My Proposal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My proposal would be to &lt;span style="font-weight:bold;"&gt;*directly*&lt;/span&gt; influence private sector hiring.  Instead of giving more money to consumers and businesses hoping it will influence hiring, let's flat out give businesses money for hiring employees.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;I suggest that the federal government pay 50% of the cost of any additional employees a business hires for 2012, and 25% of that employee's cost for 2013.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At first glance, that sounds like that would cost our government a fortune, but it actually would be relatively cheap and effective.  Let's assume the average cost of a new employee is a generous $60,000 (salary + benefits).  For 2012, the government is going to pick up half that amount: $30,000.  We currently spend roughly $200 billion per year in Iraq and Afghanistan, so for 1 year, let's spend that much on putting America back to work.&lt;br /&gt;&lt;br /&gt;For $200 billion at $30,000 per employee, we could pay for creating 6.67 million new jobs, which would reduce unemployment to the normal rate of 4.8%.  Naturally, this plan will cost us a $100 billion in 2013, for a total of $300 billion, which is less than 2 years of wars and less than half the cost of the stimulus.&lt;br /&gt;&lt;br /&gt;One can also assume that the actual cost easily be much lower, as each new employee is now contributing income tax, social security tax, and medicare tax to the government, and is no longer being paid unemployment from the government.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Benefits&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are several benefits to this proposal.&lt;br /&gt;&lt;br /&gt;- First off, it is increasing private sector hiring, not public sector.  The plan doesn't expand the headcount of the federal government, so we aren't creating jobs that are going to continue adding to the federal budget year after year.&lt;br /&gt;&lt;br /&gt;- Secondly, it's not a giveaway for businesses.  By requiring a 50% investment from the private sector, we are giving businesses a vested interest in creating useful, productive employees.  They aren't just gorging on free labor for a limited time.&lt;br /&gt;&lt;br /&gt;- Third, it's a temporary, limited cost to the government.  50% for year 1, 25% for year 2, 0% for year 3.  Will there be businesses that lay off their new employees after the 1st or 2nd year is up?  Sure, but probably not as many as you might initially think.  It's not like these employees were free and now they cost 100%.  Because businesses were already themselves investing in these workers, if they're worth keeping, the 25% is going to be worth it.  And even if the employees get laid off, they at least spent a year or two participating in the private sector, paying taxes and growing the economy, rather than sitting around on unemployment.&lt;br /&gt;&lt;br /&gt;- Finally, it only costs money if it's effective.  If businesses don't think it's worth it to hire new employees at half cost, then the plan doesn't work, but it didn't cost us anything.  However, I think there's plenty of employers who are on the fence about hiring who would jump at getting new employees at a discount.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Errata&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, you have to carefully craft the bill to enforce actual new jobs, not playing with numbers like firing 10 people and then rehiring them back as "new" employees.  If your headcount was 50 at the end of 2011, then only headcount over 50 would be creating new jobs.&lt;br /&gt;&lt;br /&gt;The bill would probably have to be introduced and passed rather quickly.  Once the bill is introduced, people are going to freeze their hiring until the bill goes into effect.  Maybe the initial headcount date is set at a date before the bill is introduced, and the 50% will be retroactive to that date.&lt;br /&gt;&lt;br /&gt;Obviously you would need loop-hole-ologists to carefully craft a bill with the desired results, but that's one job we probably have an abundance of in DC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4967141175295445914?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4967141175295445914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4967141175295445914' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4967141175295445914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4967141175295445914'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2011/08/my-naive-plan-to-put-america-back-to.html' title='My Naive Plan to Put America Back to Work'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-348530913783244801</id><published>2011-04-27T16:13:00.005-06:00</published><updated>2011-04-27T16:22:39.009-06:00</updated><title type='text'>Pinta 1.0 Released</title><content type='html'>After roughly 16 months of development, Pinta is proud to join the ~1% of open source projects that make it to version 1.0!&lt;br /&gt;&lt;br /&gt;I am extremely pleased of how Pinta has turned out, and extremely grateful for everyone who sent encouragement, bug reports, patches, and translations.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-X3QefH-Ho88/TbiW__kZZRI/AAAAAAAAA40/lG9mF5432Zs/s1600/pinta-1-0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 269px;" src="http://3.bp.blogspot.com/-X3QefH-Ho88/TbiW__kZZRI/AAAAAAAAA40/lG9mF5432Zs/s400/pinta-1-0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5600392162775229714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some 1.0 Links:&lt;br /&gt;- &lt;a href="http://pinta-project.com/Release-Notes-1-0.ashx"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://pinta-project.com/download.ashx"&gt;Downloads&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://bugs.launchpad.net/pinta/+bugs"&gt;Bug Tracker&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://pinta.uservoice.com/"&gt;Feature Requests&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the next month or so I'll get up a roadmap of where future Pinta development will be going.  Hint: Plugins.&lt;br /&gt;&lt;br /&gt;Thanks again to everyone who helped make this happen, and here's hoping for another great 16 months of development!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-348530913783244801?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/348530913783244801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=348530913783244801' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/348530913783244801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/348530913783244801'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2011/04/pinta-10-released.html' title='Pinta 1.0 Released'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-X3QefH-Ho88/TbiW__kZZRI/AAAAAAAAA40/lG9mF5432Zs/s72-c/pinta-1-0.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7430303046027001822</id><published>2011-02-18T11:19:00.003-06:00</published><updated>2011-02-18T11:21:18.733-06:00</updated><title type='text'>Lesson of the Week</title><content type='html'>Apparently if you want third parties (Apple App Store, Google Marketplace, MS App Store) to distribute your software for you, you shouldn't choose a license that forces requirements on distributors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7430303046027001822?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7430303046027001822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7430303046027001822' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7430303046027001822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7430303046027001822'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2011/02/lesson-of-week.html' title='Lesson of the Week'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-801751114053939103</id><published>2010-12-08T11:26:00.003-06:00</published><updated>2010-12-08T11:51:45.693-06:00</updated><title type='text'>MonoDroid Progress</title><content type='html'>About 4 months ago, I worked on porting some of the &lt;a href="http://developer.android.com/resources/samples/index.html"&gt;Android SDK samples&lt;/a&gt; to run on MonoDroid.  It was a soul-crushing failure.  Every line of code I wrote exposed a new bug in MonoDroid which I had to wait until it got fixed to continue. Eventually I gave up on doing anything more than the absolutely trivial Hello World.&lt;br /&gt;&lt;br /&gt;What a different story things are today!&lt;br /&gt;&lt;br /&gt;I dusted off my unfinished &lt;a href="http://developer.android.com/resources/samples/Snake/index.html"&gt;Snake&lt;/a&gt; port, and it now works without modification.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/TP_CfBa6SOI/AAAAAAAAA3o/bqK6qT6cbN4/s1600/snake.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 269px; height: 400px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/TP_CfBa6SOI/AAAAAAAAA3o/bqK6qT6cbN4/s400/snake.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5548367104156780770" /&gt;&lt;/a&gt;&lt;br /&gt;Since I did it so long ago, there was no telling what magic I had in there to make it work on MonoDroid, so I ported another one from scratch.  I grabbed the hardest sample I think they have: &lt;a href="http://developer.android.com/resources/samples/JetBoy/index.html"&gt;JetBoy&lt;/a&gt;.  It's basically a fast-paced, Guitar Hero-esque game where you have to fire your laser to the music as each asteroid passes across the beat line.&lt;br /&gt;&lt;br /&gt;After an afternoon of literal translation to C# (over 1k LOC), I fixed up the few Java porting issues like anonymous classes and nested classes accessing the parent class's private variables, and it *&lt;span style="font-weight:bold;"&gt;just worked&lt;/span&gt;*.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/TP_Ce595lFI/AAAAAAAAA3g/K3s0BLsYA54/s1600/jetboy.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/TP_Ce595lFI/AAAAAAAAA3g/K3s0BLsYA54/s400/jetboy.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5548367102156051538" /&gt;&lt;/a&gt;&lt;br /&gt;I think we're getting pretty close on finishing up our first release MonoDroid, and I can't wait to see what apps people write with it.&lt;br /&gt;&lt;br /&gt;Both samples are available in our &lt;a href="https://github.com/mono/monodroid-samples"&gt;MonoDroid samples GitHub repository&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-801751114053939103?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/801751114053939103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=801751114053939103' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/801751114053939103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/801751114053939103'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/12/monodroid-progress.html' title='MonoDroid Progress'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/TP_CfBa6SOI/AAAAAAAAA3o/bqK6qT6cbN4/s72-c/snake.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6081617542180666592</id><published>2010-11-07T22:10:00.003-06:00</published><updated>2010-11-07T22:32:00.552-06:00</updated><title type='text'>Full of Hot Air</title><content type='html'>&lt;div style="font-weight:bold;align:center;"&gt;Today there were several hot air balloons out when I came home.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/TNd4ochlwLI/AAAAAAAAA2Y/Saq8Z6QCDK0/s1600/DSC01802.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/TNd4ochlwLI/AAAAAAAAA2Y/Saq8Z6QCDK0/s400/DSC01802.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5537026903122493618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight:bold;align:center;"&gt;One came closer and closer to my house.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/TNd4ohbivtI/AAAAAAAAA2g/PAl2_M_nP-Q/s1600/DSC01814.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/TNd4ohbivtI/AAAAAAAAA2g/PAl2_M_nP-Q/s400/DSC01814.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5537026904439307986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight:bold;align:center;"&gt;And landed in the street in front of my house.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/TNd4omABg6I/AAAAAAAAA2o/mCBltuqfzFw/s1600/DSC01818.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/TNd4omABg6I/AAAAAAAAA2o/mCBltuqfzFw/s400/DSC01818.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5537026905666061218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight:bold;align:center;"&gt;It was then deflated and sent on its way.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/TNd4o2TcUyI/AAAAAAAAA2w/IpnWiwmpto8/s1600/DSC01827.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/TNd4o2TcUyI/AAAAAAAAA2w/IpnWiwmpto8/s400/DSC01827.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5537026910042477346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight:bold;align:center;"&gt;Shot from the inside.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/TNd4o0rd8pI/AAAAAAAAA24/mOY_51IuOO4/s1600/DSC01836.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/TNd4o0rd8pI/AAAAAAAAA24/mOY_51IuOO4/s400/DSC01836.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5537026909606376082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bit.ly/9aHZER"&gt;Full Photo Set On Flickr&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6081617542180666592?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6081617542180666592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6081617542180666592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6081617542180666592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6081617542180666592'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/11/full-of-hot-air.html' title='Full of Hot Air'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/TNd4ochlwLI/AAAAAAAAA2Y/Saq8Z6QCDK0/s72-c/DSC01802.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5434806945276378230</id><published>2010-11-02T13:57:00.002-06:00</published><updated>2010-11-02T14:00:16.181-06:00</updated><title type='text'>Pinta 0.5 Release</title><content type='html'>Just a quick note that Pinta 0.5 has been released today, with a few big features like multiple images support, fun new brushes, and clone stamp.&lt;br /&gt;&lt;br /&gt;Full release notes are available here:&lt;br /&gt;&lt;a href="http://pinta-project.com/release/0.5"&gt;http://pinta-project.com/release/0.5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pinta-project.com/Images/ss4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 571px; height: 403px;" src="http://pinta-project.com/Images/ss4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5434806945276378230?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5434806945276378230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5434806945276378230' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5434806945276378230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5434806945276378230'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/11/pinta-05-release.html' title='Pinta 0.5 Release'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4758488141107299617</id><published>2010-06-02T17:38:00.003-06:00</published><updated>2010-06-02T17:50:25.052-06:00</updated><title type='text'>You Can't Please Everyone</title><content type='html'>If there's one thing I've learned in designing GUI's and websites is you can't please everyone.  One person's favorite part is another's "worst idea ever".&lt;br /&gt;&lt;br /&gt;Same goes for &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt;.  Some people want to be able to move the various widget pads away from their canvas.  Others want them to always be visible and easy to reach.&lt;br /&gt;&lt;br /&gt;For Pinta 0.4, we're going to try to please as many people as possible.  To do that, we've brought in &lt;a href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt;'s incredibly awesome docking library.  This allows you to resize, move, close, float, and autohide pads.&lt;br /&gt;&lt;br /&gt;Here's the default:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/TAbrucVJmEI/AAAAAAAAAzw/Hodiu_E7-fw/s1600/dock.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 298px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/TAbrucVJmEI/AAAAAAAAAzw/Hodiu_E7-fw/s400/dock.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478325179854198850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's an example of a customized layout:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/TAbruhAsJRI/AAAAAAAAAz4/yvrepzJ-J4U/s1600/float.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/TAbruhAsJRI/AAAAAAAAAz4/yvrepzJ-J4U/s400/float.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478325181110560018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hopefully this will please 90% of our users!  Many thanks to the MonoDevelop team for such as awesome (and small!) library!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4758488141107299617?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4758488141107299617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4758488141107299617' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4758488141107299617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4758488141107299617'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/06/you-cant-please-everyone.html' title='You Can&apos;t Please Everyone'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/TAbrucVJmEI/AAAAAAAAAzw/Hodiu_E7-fw/s72-c/dock.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6770835208337840216</id><published>2010-05-03T14:10:00.003-06:00</published><updated>2010-05-03T14:20:36.920-06:00</updated><title type='text'>Pinta 0.3 Released!</title><content type='html'>&lt;a href="http://jpobst.blogspot.com/2010/05/wet-weekend.html"&gt;Twenty inches of rain&lt;/a&gt; couldn't stop the release of &lt;a href="http://pinta-project.com/"&gt;Pinta 0.3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a great release, as it brings us pretty close to feature parity with Paint.NET.&lt;br /&gt;&lt;br /&gt;I think the most important new feature is live preview, especially as this release adds 25 new effects to play with.  It also adds 3 new tools (gradient, text, magic wand select) and has several visual improvements to make image editing / painting better.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/S98uz02rtVI/AAAAAAAAAyw/T4T--JNIqBU/s1600/live.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/S98uz02rtVI/AAAAAAAAAyw/T4T--JNIqBU/s1600/live.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5467139940547278162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've posted packages/installers for SUSE/Mac/Windows/Zip, and the excellent Debian guys should have the Ubuntu PPA updated shortly.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://pinta-project.com/release/0.3"&gt;full release notes for Pinta 0.3&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Thanks to everyone who made this release possible!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6770835208337840216?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6770835208337840216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6770835208337840216' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6770835208337840216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6770835208337840216'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/05/pinta-03-released.html' title='Pinta 0.3 Released!'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/S98uz02rtVI/AAAAAAAAAyw/T4T--JNIqBU/s72-c/live.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-1124861863588003821</id><published>2010-05-02T21:36:00.006-06:00</published><updated>2010-05-02T22:15:05.588-06:00</updated><title type='text'>A Wet Weekend</title><content type='html'>It's been a wet weekend here in Tennessee.  On Saturday, my town got an estimated 12-15" of rain in about 12 hours.  Obviously, no place is designed to handle that much rain that quickly.  Then it repeated again today, causing widespread flooding throughout the entire Middle Tennessee area.  Any kind of previous record for rainfall or rivers heights have been demolished.&lt;br /&gt;&lt;br /&gt;I think about the only thing they've shown on national news is this video of a portable classroom cruising down the interstate.  (Note this is I-24, a 4-lane national highway.)&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zHuMn1AVRDg&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zHuMn1AVRDg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;That was yesterday, things got a lot worse today, as the water made it to the streams and rivers, which then overflowed their boundaries.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95GN08c28I/AAAAAAAAAyA/ROpwwsQprsE/s1600/image1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 382px; height: 214px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95GN08c28I/AAAAAAAAAyA/ROpwwsQprsE/s400/image1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5466884201038797762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/S95Gh1we3jI/AAAAAAAAAyY/hI8f-cHgSQo/s1600/DSC01728.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/S95Gh1we3jI/AAAAAAAAAyY/hI8f-cHgSQo/s400/DSC01728.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466884544854416946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95GhjhVWrI/AAAAAAAAAyQ/HK_QTZPuDZk/s1600/DSC01736.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95GhjhVWrI/AAAAAAAAAyQ/HK_QTZPuDZk/s400/DSC01736.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466884539959040690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/S95GhAJErGI/AAAAAAAAAyI/6-Yl2rAmYJ8/s1600/30963_1279029423257_1455660203_30634234_1042425_n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/S95GhAJErGI/AAAAAAAAAyI/6-Yl2rAmYJ8/s400/30963_1279029423257_1455660203_30634234_1042425_n.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5466884530462043234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/S95GqxkLOEI/AAAAAAAAAyg/COZTKBncYqQ/s1600/DSC01739.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/S95GqxkLOEI/AAAAAAAAAyg/COZTKBncYqQ/s400/DSC01739.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466884698347878466" /&gt;&lt;/a&gt;&lt;br /&gt;It's impossible to capture in a few pictures how widespread this is.  Everything in about a 50 mile radius is flooded and shut down.  They actually imposed a curfew where I live, so I'm not allowed to leave my house, not that I could probably get anywhere with most major roads closed.  My city is one of the hardest hit, with the most rain, and a major waterway runs through the middle of the city.&lt;br /&gt;&lt;br /&gt;Personally, I've been pretty lucky, as I live on relatively high ground on the outskirts of the city.  Middle Tennessee is rather hilly, so it all depends exactly on where you live.  Tons of water has passed through my yard, but it fortunately keeps flowing and not backing up.  This ditch beside my house is normally empty.  This is about as high as it ever got, and it has stayed rapidly flowing for about 36 hours.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95IMtDFyCI/AAAAAAAAAyo/6Zk0dWWkDo0/s1600/DSC01703.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/S95IMtDFyCI/AAAAAAAAAyo/6Zk0dWWkDo0/s400/DSC01703.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466886380762548258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's nice that I work from home so I don't have to try to go to work tomorrow.  Of course, if I worked local, I'm sure I'd get the day (or week) off.  :)&lt;br /&gt;&lt;br /&gt;It's finally stopped raining.  The rivers will continue to rise for a few more hours as the water continues to drain.  Then they should slowly recede and people can begin to see what's left.  Thousands of homes have probably been destroyed.  Probably tens of thousands of cars.  Some interstates and roads may be closed for weeks until they are deemed safe or will have to be rebuilt.   Likely, the final bill for this will be close to a billion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-1124861863588003821?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/1124861863588003821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=1124861863588003821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1124861863588003821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1124861863588003821'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/05/wet-weekend.html' title='A Wet Weekend'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/S95GN08c28I/AAAAAAAAAyA/ROpwwsQprsE/s72-c/image1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7938986530410757125</id><published>2010-04-01T02:00:00.001-06:00</published><updated>2010-04-01T02:00:04.999-06:00</updated><title type='text'>Kicking Pinta in to High Gear</title><content type='html'>As people may or may not be aware, even though I work for Novell, &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; is not sponsored by Novell.  It is a project I do purely in my free time.  Since it's getting kinda popular, I thought it'd be nice to earn some money with it so I can dedicate more time to it.&lt;br /&gt;&lt;br /&gt;Unfortunately, society has decided that creative works (software, music, movies, tv) aren't worth paying money for.  So far, I think the only successful business model for open source software is to have a browser and sell your homepage to Google or Yahoo.  I thought about adding a browser to Pinta, but it was hard to justify as enhancing the user experience.&lt;br /&gt;&lt;br /&gt;Advertising is the only other legitimate option, but I was reluctant to degrade the GUI by placing ads in it.  However I've come up with a brilliant and creative idea that adds advertising in a fun way that I think users will enjoy.&lt;br /&gt;&lt;br /&gt;I am still working out the deals with advertisers, but the plan is to add sponsored effects.  Basically, we've come up with some effects that are helpful to users and tie in great with some great products.&lt;br /&gt;&lt;br /&gt;As I said, these aren't final yet, but I wanted to give a preview of a couple I've been working on.  From now on, Gaussian Blur will be known as the Bud Light Golden Wheat with Lime (tm) Drunken Blur:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/S7QqT1ALk3I/AAAAAAAAAxw/7F4itLdJ_xg/s1600/blur.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/S7QqT1ALk3I/AAAAAAAAAxw/7F4itLdJ_xg/s400/blur.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5455031568786232178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've replaced the boring old "Radius" option with a slider of how many beers you've had to determine how much blur is applied!&lt;br /&gt;&lt;br /&gt;Another new effect is the VISINE "Get the Red Out!" (tm) Red Eye Reduction filter:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/S7QqURwL_eI/AAAAAAAAAx4/Z8icgBBTbp0/s1600/redeye.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/S7QqURwL_eI/AAAAAAAAAx4/Z8icgBBTbp0/s400/redeye.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5455031576503778786" /&gt;&lt;/a&gt;(Image courtesy of &lt;a href="http://commons.wikimedia.org/wiki/File:Red-eye_effect.jpg"&gt;wikipedia&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Red eye reduction is a very important effect for users, and the synergy with VISINE is a natural fit!&lt;br /&gt;&lt;br /&gt;If everything goes according to plan, we'll ship Pinta 0.3 with several sponsored effects.  The income from these opportunities will allow us to fund additional hacking on Pinta.&lt;br /&gt;&lt;br /&gt;I think today, the first of April, is going to be the start of a wonderful new phase of development for Pinta!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7938986530410757125?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7938986530410757125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7938986530410757125' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7938986530410757125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7938986530410757125'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/04/kicking-pinta-in-to-high-gear.html' title='Kicking Pinta in to High Gear'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/S7QqT1ALk3I/AAAAAAAAAxw/7F4itLdJ_xg/s72-c/blur.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5314532668584189208</id><published>2010-03-15T00:05:00.000-06:00</published><updated>2010-03-14T23:34:16.449-06:00</updated><title type='text'>Pinta: Nil Dot Duo</title><content type='html'>I am extremely excited to announce the release of &lt;a href="http://pinta-project.com/"&gt;Pinta 0.2&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pinta-project.com/"&gt;Pinta 0.2&lt;/a&gt; is a big step towards general feature parity with PDN, by adding great new features like:&lt;br /&gt;&lt;br /&gt;- 5 new tools (Paint Bucket, Recolor, Line, Zoom, Pan)&lt;br /&gt;- 5 new adjustments (Levels, Curves, Brightness/Contrast, Hue/Saturation, Posterize)&lt;br /&gt;- 5 new effects (Ink Sketch, Oil Painting, Pencil Sketch, Gaussian Blur, Glow)&lt;br /&gt;- Enhanced layer and history pads&lt;br /&gt;- Multithreaded adjustments/effects rendering&lt;br /&gt;- Basic OS X integration&lt;br /&gt;- and more!&lt;br /&gt;&lt;br /&gt;Full release notes (with pictures!) are available &lt;a href="http://pinta-project.com/release/0.2"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Packages are available &lt;a href="http://pinta-project.com/download"&gt;here&lt;/a&gt;, and likely more will be contributed.&lt;br /&gt;&lt;br /&gt;The most exciting part about this release is that it isn't all my work.  &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; has attracted several great contributors who are helping it quickly move towards maturity.  Without their awesome work, &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; would be releasing today with only about half of these new features!&lt;br /&gt;&lt;br /&gt;With 0.2 out the door, now I can turn to the merge requests already waiting to make 0.3 an even better release!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/S53EiUkOD5I/AAAAAAAAAxk/H00XhSvHmag/s1600-h/watching.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/S53EiUkOD5I/AAAAAAAAAxk/H00XhSvHmag/s400/watching.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5448727218103390098" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5314532668584189208?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5314532668584189208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5314532668584189208' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5314532668584189208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5314532668584189208'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/03/pinta-nil-dot-duo.html' title='Pinta: Nil Dot Duo'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/S53EiUkOD5I/AAAAAAAAAxk/H00XhSvHmag/s72-c/watching.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6962206377114044735</id><published>2010-03-03T18:21:00.003-06:00</published><updated>2010-03-03T18:34:05.176-06:00</updated><title type='text'>Delayed Transition</title><content type='html'>After Comcast's year-long advertising blitz on how their customers were safe from the analog-&gt;digital TV transition, I got a nice letter in the mail today informing me that Comcast is going, *gasp*, all digital.  All I need to be ready for the transition is a digital converter box for every television, which they will gladly rent me!&lt;br /&gt;&lt;br /&gt;Maybe the government will offer vouchers for them.  ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6962206377114044735?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6962206377114044735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6962206377114044735' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6962206377114044735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6962206377114044735'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/03/delayed-transition.html' title='Delayed Transition'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-2121695520830652774</id><published>2010-02-20T15:08:00.003-06:00</published><updated>2010-02-20T15:40:20.840-06:00</updated><title type='text'>Internet TV</title><content type='html'>Dear Internet Media companies,&lt;br /&gt;&lt;br /&gt;Have I got a deal for you!&lt;br /&gt;&lt;br /&gt;Looking at my cable bill, I currently pay $88.59 a month for basic cable (no premium channels) and one HD DVR.  If everything I watch is in-season, I watch about 50 hours of television a month plus local football (CBS).  Obviously, this is ridiculous and needs to stop very soon.&lt;br /&gt;&lt;br /&gt;So here's a chance for me to pay you cash money, Apple/Microsoft/Google/Hulu/whoever.  I would gladly pay, lets say, $30-$40 a month for up to ~60 hours of television.  It can be DRM'd, it can be "rented", I don't care, as long as I can play it in HD on my TV.  I would also greatly prefer to be able to pre-download it so I can have high quality without network hiccups.&lt;br /&gt;&lt;br /&gt;Unfortunately, the current internet TV model is ~$3 per HD episode, which makes it remarkably more expensive than cable, even for my limited usage.&lt;br /&gt;&lt;br /&gt;As it stands, it looks like I'm going to have to cobble together my own solution of Windows Media Center DVR for OTA stuff, Hulu for some stuff, and iTunes for what I can't get elsewhere.  And yet you wonder why people turn to BitTorrent...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-2121695520830652774?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/2121695520830652774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=2121695520830652774' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2121695520830652774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2121695520830652774'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/02/internet-tv.html' title='Internet TV'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4081071619872390550</id><published>2010-02-16T14:13:00.003-06:00</published><updated>2010-02-16T14:40:46.089-06:00</updated><title type='text'>Calling All Testers!</title><content type='html'>We recently released a beta version of our upcoming &lt;a href="http://go-mono.com/monotools/"&gt;Mono Tools for Visual Studio&lt;/a&gt; version 1.1, containing a couple of nifty new features.&lt;br /&gt;&lt;br /&gt;- File copying is smarter, and no longer copies files that haven't changed.&lt;br /&gt;&lt;br /&gt;- It is now easier to package a pre-compiled copy of a web site:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mono-project.com/files/f/ff/Monotools1-1-c.png" /&gt;&lt;br /&gt;&lt;br /&gt;- And, most importantly, a preview of VS2010 support that works with VS2010 RC!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mono-project.com/files/a/a8/Monotools1-1-a.png" /&gt;&lt;br /&gt;&lt;br /&gt;Give it a shot and let me know if something is broken so I can fix it before we release!  &lt;br /&gt;&lt;br /&gt;Full release notes and download links can be found &lt;a href="http://mono-project.com/Release_Notes_MonoTools_1.1"&gt;here&lt;/a&gt;.  Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4081071619872390550?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4081071619872390550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4081071619872390550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4081071619872390550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4081071619872390550'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/02/calling-all-testers.html' title='Calling All Testers!'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-1586041623034267061</id><published>2010-02-15T09:38:00.003-06:00</published><updated>2010-02-15T10:03:42.706-06:00</updated><title type='text'>A Great First Week</title><content type='html'>I wanted to thank everyone for the tremendous show of support for &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; in it's first week!&lt;br /&gt;&lt;br /&gt;A few stats:&lt;br /&gt;&lt;br /&gt;- The announcement of &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; was picked up by several large tech news sites.&lt;br /&gt;&lt;br /&gt;- The &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; web site received over 29,000 hits.&lt;br /&gt;&lt;br /&gt;- 23 people sent me emails of encouragement.  (And 1 of discouragement.)&lt;br /&gt;&lt;br /&gt;- People contributed packages for Ubuntu, OS X, and Pardus Linux.  I was also contacted by people making packages for Fedora and Windows.&lt;br /&gt;&lt;br /&gt;- Roughly 10 people sent me email offering to translate &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; into a variety of languages.  (We're not ready for translations yet, but I have a bunch of emails to send when we are!)&lt;br /&gt;&lt;br /&gt;- 7 people have contributed code which has already been merged into &lt;a href="http://pinta-project.com/"&gt;Pinta's&lt;/a&gt; master &lt;a href="http://github.com/jpobst/Pinta"&gt;repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Overall, it was a great week!  I also wanted to thank everyone that I didn't personally reply to.  I was flooded with emails all week and couldn't respond to them all!&lt;br /&gt;&lt;br /&gt;Anyways, work has begun on &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; 0.2.  Thanks to many great contributions, my &lt;a href="http://groups.google.com/group/pinta/web/roadmap?hl=en"&gt;roadmap&lt;/a&gt; for 0.2 is already over halfway complete, so I guess I'll have to expand the feature list for 0.2!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-1586041623034267061?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/1586041623034267061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=1586041623034267061' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1586041623034267061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1586041623034267061'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/02/great-first-week.html' title='A Great First Week'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6287459795361824452</id><published>2010-02-07T11:07:00.005-06:00</published><updated>2010-02-07T12:03:14.248-06:00</updated><title type='text'>Introducing Pinta</title><content type='html'>Over the holiday break, I stumbled upon &lt;a href="http://www.osnews.com/story/22541/Ubuntu_Dumps_the_GIMP_Really_Needs_a_Paint_NET"&gt;this article&lt;/a&gt; from &lt;a href="http://www.osnews.com/"&gt;OSNews&lt;/a&gt; stating that there was a need for something like &lt;a href="http://getpaint.net/"&gt;Paint.NET&lt;/a&gt; for Gtk.  Having some &lt;a href="http://code.google.com/p/paint-mono/"&gt;experience&lt;/a&gt; with porting Paint.NET to Mono Winforms before, I knew that that was a massive task.  But it still got me curious about Cairo and creating a layered canvas, since I had never played with Cairo or Gtk.&lt;br /&gt;&lt;br /&gt;After playing around for a few hours, I actually had a working paintbrush and canvas. Intrigued by my success, I played around with it for a few more days.  By the end of the week I had a nifty little paint program with a few features.  Now, a month later, it's time to open my little project up to the world: &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/S271Dz-FWDI/AAAAAAAAAws/ggbXYZfr6Ns/s1600-h/ss1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/S271Dz-FWDI/AAAAAAAAAws/ggbXYZfr6Ns/s400/ss1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5435551246121785394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; is a clone of Paint.NET.  It already has a small, but hopefully useful, set of features like multiple layers and infinite levels of Undo/Redo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/S271EDaNbbI/AAAAAAAAAw0/uujW2M23ztA/s1600-h/ss2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/S271EDaNbbI/AAAAAAAAAw0/uujW2M23ztA/s400/ss2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5435551250266287538" /&gt;&lt;/a&gt;&lt;br /&gt;I hope to implement the same feature set as Paint.NET.  Currently there are several tools missing, as well as adjustments like brightness/contrast and levels and Paint.NET's effects.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/S271EVYGlBI/AAAAAAAAAw8/BpnFg4yyf5s/s1600-h/ss3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/S271EVYGlBI/AAAAAAAAAw8/BpnFg4yyf5s/s400/ss3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5435551255089288210" /&gt;&lt;/a&gt;&lt;br /&gt;Being written in Mono/Gtk, &lt;a href="http://pinta-project.com/"&gt;Pinta&lt;/a&gt; is naturally cross-platform.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/S271EkUszSI/AAAAAAAAAxE/a_IUcmMgAbg/s1600-h/ss4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 260px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/S271EkUszSI/AAAAAAAAAxE/a_IUcmMgAbg/s400/ss4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5435551259101547810" /&gt;&lt;/a&gt;&lt;br /&gt;To download Pinta or the source code, check out the &lt;a href="http://pinta-project.com/"&gt;website&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Note: I didn't misspell "Hello" in my screenshot, my dog's name is Helo.  ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6287459795361824452?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6287459795361824452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6287459795361824452' title='44 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6287459795361824452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6287459795361824452'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/02/over-holiday-break-i-stumbled-upon-this.html' title='Introducing Pinta'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/S271Dz-FWDI/AAAAAAAAAws/ggbXYZfr6Ns/s72-c/ss1.jpg' height='72' width='72'/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7269986731385410504</id><published>2010-01-27T13:36:00.002-06:00</published><updated>2010-01-27T13:43:09.773-06:00</updated><title type='text'>Taking All Bets</title><content type='html'>With the massive success of the iTunes App Store (over 3 billion apps downloaded), I think it's safe to assume the next version of OS X will include an App Store for Mac software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The question is:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How many iterations of OS X will it take before Mac software can only be distributed (without "jailbreaking") through the App Store, thus ensuring Apple gets their cut of all Mac software sales?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7269986731385410504?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7269986731385410504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7269986731385410504' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7269986731385410504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7269986731385410504'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/01/taking-all-bets.html' title='Taking All Bets'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-1510234633336175518</id><published>2010-01-05T11:35:00.003-06:00</published><updated>2010-01-05T11:41:25.062-06:00</updated><title type='text'>Merry Christmas Back</title><content type='html'>My Christmas gift to myself (mainly my back) this year was a spiffy Aeron chair, since I spend probably 10+ hours sitting at my desk each day.  It is a considerable upgrade from what I've used for the last 2 years:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/S0N5ICXo7-I/AAAAAAAAAwM/W4BeYP4z5Jw/s1600-h/DSC01595-1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 520px; height: 390px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/S0N5ICXo7-I/AAAAAAAAAwM/W4BeYP4z5Jw/s400/DSC01595-1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5423311555266146274" /&gt;&lt;/a&gt;&lt;br /&gt;We're cool now, right vertebrae?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-1510234633336175518?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/1510234633336175518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=1510234633336175518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1510234633336175518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1510234633336175518'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2010/01/merry-christmas-back.html' title='Merry Christmas Back'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/S0N5ICXo7-I/AAAAAAAAAwM/W4BeYP4z5Jw/s72-c/DSC01595-1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-8635315786740478977</id><published>2009-10-16T16:04:00.005-06:00</published><updated>2009-10-16T16:19:01.317-06:00</updated><title type='text'>If you build it, they will come</title><content type='html'>Ever since I got a dog, and realized said dog would fetch himself to death given the opportunity, I have threatened to build him an automatic ball thrower.  Unfortunately, I have the mechanical skills of a chinchilla.  Fortunately, someone else has done all the hard work for me:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hammacher.com/Product/77912?source=CJ&amp;cm_mmc=CJ-_-1408768-_-1830967-_-Hammacher+Product+Catalog"&gt;The Automatic Canine Fetch Machine&lt;/a&gt; (catchy name!)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/StjvJ7A0JxI/AAAAAAAAAuE/U32kDtPw3co/s1600-h/77912.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/StjvJ7A0JxI/AAAAAAAAAuE/U32kDtPw3co/s400/77912.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5393323507515139858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is great for those people who want a dog, but don't want to have to actually interact with the dog.  It's like getting a television for your toddler.&lt;br /&gt;&lt;br /&gt;Even a cold, soulless ball throwing mechanotron bucket can't say no to these eyes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/StjwL57heRI/AAAAAAAAAuM/pjDmD0SUlm0/s1600-h/DSC01546-1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 301px; height: 400px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/StjwL57heRI/AAAAAAAAAuM/pjDmD0SUlm0/s400/DSC01546-1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5393324641095874834" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-8635315786740478977?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/8635315786740478977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=8635315786740478977' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8635315786740478977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8635315786740478977'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/10/if-you-build-it-they-will-come.html' title='If you build it, they will come'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/StjvJ7A0JxI/AAAAAAAAAuE/U32kDtPw3co/s72-c/77912.jpeg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4349060869804196990</id><published>2009-10-06T22:33:00.003-06:00</published><updated>2009-10-06T22:55:58.844-06:00</updated><title type='text'>I don't get KDE</title><content type='html'>Last night while browsing the internets, I saw some screenshots of KDE 4.3 running on openSUSE 11.2.  I've never tried KDE, so I installed the openSUSE 11.2 M8 build to briefly play with it.&lt;br /&gt;&lt;br /&gt;What got me interested was this element of the KDE desktop:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/SswayeFslhI/AAAAAAAAAto/GTyf1-X4Zcw/s1600-h/kde1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 111px; height: 400px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/SswayeFslhI/AAAAAAAAAto/GTyf1-X4Zcw/s400/kde1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5389712308428379666" /&gt;&lt;/a&gt;&lt;br /&gt;I look at that and see hope.  It is elegant and refined.  It is glassy and tasteful.  It says: "I can easily compete with Windows 7 and OSX."  Simply put, it is beautiful.&lt;br /&gt;&lt;br /&gt;Yes, there are some problems with it.  The buttons do not highlight in any way on hover.  There are no tooltips, so I don't even know what the top two buttons do.  From what I can tell, they do absolutely nothing.  But it really lives up to KDE's reputation of eye candy.&lt;br /&gt;&lt;br /&gt;And then you open a window:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/Ssway_E-AlI/AAAAAAAAAtw/Lg-Enb1W0yY/s1600-h/kde2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/Ssway_E-AlI/AAAAAAAAAtw/Lg-Enb1W0yY/s400/kde2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5389712317283697234" /&gt;&lt;/a&gt;&lt;br /&gt;It is.. gray.  There is no glass.  There are no gradients.  There is no depth.  There is no elegance.  There is just gray.  It says: "I am kicking Windows 95's ass!  Barely!"&lt;br /&gt;&lt;br /&gt;I just don't get it.  How can half of your desktop (let's call it "Plasma") be so beautiful, while the other half (let's call it "the stuff that is always going to be covering up Plasma") be so ugly and uninspired?&lt;br /&gt;&lt;br /&gt;Errata:&lt;br /&gt;- I do not know if I am complaining about KDE, or openSUSE's implementation of KDE, or both.&lt;br /&gt;- I lamented on the aesthetics of GNOME &lt;a href="http://jpobst.blogspot.com/2009/07/my-gtk-pet-peeve.html"&gt;previously&lt;/a&gt;, so it's not "let's start a desktop war".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4349060869804196990?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4349060869804196990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4349060869804196990' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4349060869804196990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4349060869804196990'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/10/i-dont-get-kde.html' title='I don&apos;t get KDE'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/SswayeFslhI/AAAAAAAAAto/GTyf1-X4Zcw/s72-c/kde1.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-1160706974573866792</id><published>2009-10-04T19:39:00.002-06:00</published><updated>2009-10-04T19:43:21.455-06:00</updated><title type='text'>iInnovation</title><content type='html'>Has anyone created a farting app using MonoTouch yet, or is my golden ticket to riches still available?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-1160706974573866792?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/1160706974573866792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=1160706974573866792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1160706974573866792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1160706974573866792'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/10/iinnovation.html' title='iInnovation'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6260046644325426496</id><published>2009-09-30T12:25:00.004-06:00</published><updated>2009-09-30T12:54:08.262-06:00</updated><title type='text'>RMS mistakes and malattribution</title><content type='html'>Given the recent environment of &lt;a href="http://www.fsf.org/blogs/rms/mac-osx-mistakes-and-malfeatures"&gt;reflection on past statements made&lt;/a&gt;, I have looked at my past to see if there are things I have said that might not be verifiably true.&lt;br /&gt;&lt;br /&gt;I have said multiple times in the past that &lt;a href="http://en.wikipedia.org/wiki/Richard_stallman"&gt;Richard Stallman&lt;/a&gt; was actually &lt;a href="http://en.wikipedia.org/wiki/Weird_al"&gt;Weird Al Yankovic&lt;/a&gt; with a costume beard.  I had heard this through various sources, but there is no published source that confirms this, and I now believe I may have accidentally completely made that up and passed it off as fact.&lt;br /&gt;&lt;br /&gt;I have no way to verify that Stallman is not Yankovic, but there is no basis to claim he is.  I apologize to Mr. Stallman, and, should he be a separate person, Mr. Yankovic.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/SsOmTjctSyI/AAAAAAAAAtg/MY3myQT5fGE/s1600-h/proof.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/SsOmTjctSyI/AAAAAAAAAtg/MY3myQT5fGE/s400/proof.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5387332434128620322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While Mr. Yankovic may not actually be RMS, he does a have a history of Stallman-esque leanings, as exhibited by the original titles of his hit songs before the record labels changed them:&lt;br /&gt;&lt;br /&gt;- It's All About the GNU/Pentiums&lt;br /&gt;- Living in an Amish Paradise (To Escape the Evil, Proprietary Monopoly that is Microsoft)&lt;br /&gt;&lt;br /&gt;So I don't withdraw my claim that RMS and Weird Al might be the same person.  But I do withdraw my claim that RMS and Weird Al are the same person.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6260046644325426496?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6260046644325426496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6260046644325426496' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6260046644325426496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6260046644325426496'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/09/rms-mistakes-and-malattribution.html' title='RMS mistakes and malattribution'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/SsOmTjctSyI/AAAAAAAAAtg/MY3myQT5fGE/s72-c/proof.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6349062084951975854</id><published>2009-09-16T22:09:00.006-06:00</published><updated>2009-09-16T22:49:26.070-06:00</updated><title type='text'>Planning for Spontaneity</title><content type='html'>I have recently felt like my popularity is waning a bit, people just aren't talking about me enough.  Fortunately, current events have given me an idea.  At this year's PDC, if I go, I will yell something horribly distasteful during the keynote, and then immediately apologize like I never meant for it to happen.&lt;br /&gt;&lt;br /&gt;What this means to you dear reader is that we only have roughly two months to come up with what I should spontaneously yell with no forethought whatsoever.  I'll start the ball rolling with a few:&lt;br /&gt;&lt;br /&gt;- "Clippy is racist."&lt;br /&gt;- "Windows ME was the best version of Windows ever."&lt;br /&gt;- "You lie", in response to the cloud being the future.&lt;br /&gt;- "Steve Jobs is a handsome man."&lt;br /&gt;- "That guy was lucky Ballmer only threw a chair at him."&lt;br /&gt;- "Anders Hejlsberg is a no-talent hack."&lt;br /&gt;- "I'm really happy for you Windows 7, I'm gonna let you finish, but Vista SP1 had &lt;a href="http://www.youtube.com/watch?v=sPv8PPl7ANU"&gt;one of the best videos of all time&lt;/a&gt;."&lt;br /&gt;- "Hitler used Windows."&lt;br /&gt;- "Google apps are an adequate replacement for desktop apps."&lt;br /&gt;- "I swear to God I'm [expletive] going to take this [expletive] Zune HD and shove it down your [expletive] throat, you hear that? I swear to God."&lt;br /&gt;&lt;br /&gt;Feel free to leave your suggestions in the comments, and let's make this a PDC to remember!  (for being about me!)&lt;br /&gt;&lt;br /&gt;[Reporters and podcasters, feel free to begin booking me now for my heartfelt apology!]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6349062084951975854?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6349062084951975854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6349062084951975854' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6349062084951975854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6349062084951975854'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/09/planning-for-spontaneity.html' title='Planning for Spontaneity'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5487223842599271530</id><published>2009-09-04T11:54:00.003-06:00</published><updated>2009-09-04T11:59:38.971-06:00</updated><title type='text'>My Name is Jonathan And I'm a Geekaholic</title><content type='html'>Today when I visited &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;, I was excited to see I had unknowingly earned a gold badge:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/SqFUhtl-tDI/AAAAAAAAAtA/BCKPFUpOP_o/s1600-h/badges1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 251px; height: 140px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/SqFUhtl-tDI/AAAAAAAAAtA/BCKPFUpOP_o/s400/badges1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377672368208393266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, that excitement quickly turned to despair when I saw what it was for:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SqFUhcMlH4I/AAAAAAAAAs4/o2GMYBM1mkw/s1600-h/badges2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 284px; height: 33px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SqFUhcMlH4I/AAAAAAAAAs4/o2GMYBM1mkw/s400/badges2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377672363538456450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At this point, there are two things that go through one's head:&lt;br /&gt;&lt;br /&gt;1) I should show this to my girlfriend.&lt;br /&gt;2) Perhaps if I did not have said badge, I might have said girlfriend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5487223842599271530?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5487223842599271530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5487223842599271530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5487223842599271530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5487223842599271530'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/09/my-name-is-jonathan-and-im-geekaholic.html' title='My Name is Jonathan And I&apos;m a Geekaholic'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/SqFUhtl-tDI/AAAAAAAAAtA/BCKPFUpOP_o/s72-c/badges1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-2561900514512157356</id><published>2009-08-25T10:07:00.004-06:00</published><updated>2009-08-25T14:31:25.363-06:00</updated><title type='text'>Holy $#!T!  I AM GETTING THIS!</title><content type='html'>IT'S COMING!!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/SpRJeVAkTbI/AAAAAAAAAsw/AReAXIe6vgE/s1600-h/snow.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 226px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/SpRJeVAkTbI/AAAAAAAAAsw/AReAXIe6vgE/s400/snow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5374001040744271282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just reading the &lt;a href="http://www.apple.com/macosx/refinements/"&gt;features page&lt;/a&gt; gets me excited!  Check out these innovative new features in Snow Leopard:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Faster, more reliable installation&lt;/li&gt;&lt;li&gt;Automatic updates for printer drivers&lt;/li&gt;&lt;li&gt;Easy PDF text selection&lt;/li&gt;&lt;/ul&gt;And my absolute favorite:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;More reliable disk eject&lt;/li&gt;&lt;/ul&gt;I think this one is especially key!  Who's gonna want to use an ancient operating system like Windows 7 or Linux with their inferior (and unreliable!) disk eject technology?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kidding aside, I will  probably get this since it is correctly priced at $29.  It's just interesting to see the hype machine running on all gears.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt;&lt;br /&gt;At the request of a friend, I have re-added the blood to the snow leopard that Apple &lt;a href="http://gizmodo.com/5344970/original-snow-leopard-was-too-blood-thirsty-for-mac-os-x-box"&gt;apparently removed&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-2561900514512157356?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/2561900514512157356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=2561900514512157356' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2561900514512157356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2561900514512157356'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/08/holy-t-i-am-getting-this.html' title='Holy $#!T!  I AM GETTING THIS!'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/SpRJeVAkTbI/AAAAAAAAAsw/AReAXIe6vgE/s72-c/snow.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5706138221008096465</id><published>2009-08-01T13:50:00.002-06:00</published><updated>2009-08-01T13:52:02.167-06:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SnScqeSiqWI/AAAAAAAAArs/GC5hP1ZEKbY/s1600-h/orly.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 296px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SnScqeSiqWI/AAAAAAAAArs/GC5hP1ZEKbY/s400/orly.jpg" alt="" id="BLOGGER_PHOTO_ID_5365085309604374882" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5706138221008096465?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5706138221008096465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5706138221008096465' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5706138221008096465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5706138221008096465'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/08/blog-post.html' title=''/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/SnScqeSiqWI/AAAAAAAAArs/GC5hP1ZEKbY/s72-c/orly.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-3129655048490617435</id><published>2009-07-28T13:17:00.003-06:00</published><updated>2009-07-28T13:33:23.576-06:00</updated><title type='text'>Congrats!</title><content type='html'>Congrats to the SUSE Studio team on releasing their &lt;a href="http://susestudio.com/"&gt;awesome service&lt;/a&gt;.  Their hard work and dedication to usability has made it so easy to create your own Linux distro that even I can do it.&lt;br /&gt;&lt;br /&gt;Great job guys!&lt;br /&gt;&lt;br /&gt;Now lets clone the Studio team and put them to work on some of our less usable things.  (I'm looking at you, &lt;a href="https://build.opensuse.org/"&gt;OBS&lt;/a&gt;!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-3129655048490617435?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/3129655048490617435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=3129655048490617435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3129655048490617435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3129655048490617435'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/07/congrats.html' title='Congrats!'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-310527645417504240</id><published>2009-07-23T19:34:00.002-06:00</published><updated>2009-07-23T20:23:35.234-06:00</updated><title type='text'>The Power of Moore's Law</title><content type='html'>One of my personal projects has been writing a buildbot that builds Mono on Windows.  Although we have an official one on &lt;a href="http://mono.ximian.com/monobuild/python/monobuild.py/packagestatus?platform=sles-10-x86_64&amp;amp;package=mono&amp;amp;HEAD_or_RELEASE=HEAD"&gt;monobuild&lt;/a&gt;, it takes about 4.5 hours per build, so it can't build many revisions.  Mine doesn't do everything that the official one does yet, like running tests, but it looks promising as far as cutting down on the build time (primarily by not using cygwin).&lt;br /&gt;&lt;br /&gt;I run it on an old desktop that was lying around that I converted to a dedicated builder server.  Its stats are roughly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows Server 2008 (32bit)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pentium IV 2.4ghz&lt;/li&gt;&lt;li&gt;768 MB ram&lt;/li&gt;&lt;li&gt;5400 rpm IDE HD&lt;/li&gt;&lt;/ul&gt;It builds Mono on Windows with the following times:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Svn update mono, mcs&lt;/td&gt;&lt;td&gt;2:25 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Copy mono and mcs to a fresh directory&lt;/td&gt;&lt;td&gt;6:38 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build Mono runtime&lt;/td&gt;&lt;td&gt;4:38 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build 2.0, 3.5 assemblies (101 assemblies)&lt;/td&gt;&lt;td&gt;8:01 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Remove mono/mcs directory&lt;/td&gt;&lt;td&gt;1:00 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Total&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;22:42 min&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Not horrible, but it's hard to be satisfied with that knowing I have a spiffy quad core machine and could build most of the managed assemblies in parallel.  I had to try it out on my main desktop machine, which is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows 7 RC (64bit)&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Intel Core2 Quad Q6600 (2.4ghz)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;4 GB ram&lt;/li&gt;&lt;li&gt;7200 rpm SATA HD&lt;/li&gt;&lt;/ul&gt;Unfortunately, my build system isn't set up for parallel builds, so I had to write that first.  My first step was to simply get it running serially on my desktop.  This yielded:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Svn update mono, mcs&lt;/td&gt;&lt;td&gt;1:03 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Copy mono and mcs to a fresh directory&lt;/td&gt;&lt;td&gt;4:29 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build Mono runtime&lt;/td&gt;&lt;td&gt;1:57 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build 2.0, 3.5 assemblies (101 assemblies)&lt;/td&gt;&lt;td&gt;3:23 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Remove mono/mcs directory&lt;/td&gt;&lt;td&gt;0:25 min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Total&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;11:17 min&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;I of course expected my desktop to be faster, but it was already completing the build in less than half the time of my server.  On top of that, it builds the managed assemblies in 3:23 minutes. &lt;br /&gt;&lt;br /&gt;Even with excellent parallelization, there isn't a lot of time to chop off of three and a half minutes.  And we know we won't get perfect parallelization due to the bootstrap and the common assemblies that have to be built first that everything depends on (corlib, System, System.Xml, etc.).  I think I could maybe cut two minutes off of that with a parallel build.&lt;br /&gt;&lt;br /&gt;For now, I have aborted my plan to parallelize my build system.  It turns out that Joel is right that sometimes its better to &lt;a href="http://www.joelonsoftware.com/items/2009/03/27.html"&gt;throw money at a problem&lt;/a&gt; instead of spending time to optimize it.&lt;br /&gt;&lt;br /&gt;Of course, that's also a dangerous idea, because now I look at my copying numbers and want an SSD disk drive.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-310527645417504240?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/310527645417504240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=310527645417504240' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/310527645417504240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/310527645417504240'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/07/power-of-moores-law.html' title='The Power of Moore&apos;s Law'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5643880253588153483</id><published>2009-07-22T12:24:00.003-06:00</published><updated>2009-07-22T13:04:51.919-06:00</updated><title type='text'>My GTK Pet Peeve</title><content type='html'>One thing I've never really liked about GNOME is GTK.  I like GNOME for its focus on simplicity, however I've never thought it was particularly attractive (no matter the theme).&lt;br /&gt;&lt;br /&gt;I especially don't like the large amounts of padding around every object.  I get the feeling that having 100px buttons is like giving me safety scissors.  Granted, it probably helps people who are just learning how to use a mouse, but at some point we outgrow that and should be given real scissors.&lt;br /&gt;&lt;br /&gt;It makes me feel like I'm playing with a toy instead of a real operating system.  Of course, this is all very subjective and I'm sure there are just as many people who feel the opposite.&lt;br /&gt;&lt;br /&gt;At some point, I was playing around with what *I* would like an application in GNOME to look like and chose Nautilus.  Monday I saw David Siegel's &lt;a href="http://davidsiegel.org/nautilus-simplified/"&gt;blog post&lt;/a&gt; about his redesign of Nautilus, and I was inspired to finish mine.&lt;br /&gt;&lt;br /&gt;I am definitely not an artist, and I may be the only person who finds this appealing, but I would like Nautilus (and GNOME) to look something more like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(just a mockup)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SmddzmB32RI/AAAAAAAAArc/MtAcmOflmuA/s1600-h/nautmock.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 286px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SmddzmB32RI/AAAAAAAAArc/MtAcmOflmuA/s400/nautmock.png" alt="" id="BLOGGER_PHOTO_ID_5361357022370978066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;for comparison:&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/Smdd0JdCaXI/AAAAAAAAArk/HjIjjNwziAI/s1600-h/compare.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 141px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/Smdd0JdCaXI/AAAAAAAAArk/HjIjjNwziAI/s400/compare.png" alt="" id="BLOGGER_PHOTO_ID_5361357031880157554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It removes a lot of (IMO) wasted space, while being more visually pleasing.  It feels like it's of a higher quality than the current look.&lt;br /&gt;&lt;br /&gt;Of course, giving actual artists the ability to easily theme GTK is probably the better route.  I can't wait to see what &lt;a href="http://jimmac.musichall.cz/log/?p=613"&gt;jimmac can do with a fully functioning css based theming system&lt;/a&gt;.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5643880253588153483?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5643880253588153483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5643880253588153483' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5643880253588153483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5643880253588153483'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/07/my-gtk-pet-peeve.html' title='My GTK Pet Peeve'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/SmddzmB32RI/AAAAAAAAArc/MtAcmOflmuA/s72-c/nautmock.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-8257517292052298124</id><published>2009-07-17T10:58:00.003-06:00</published><updated>2009-07-17T11:03:56.465-06:00</updated><title type='text'>Audio Killer Feature</title><content type='html'>Last night I listened to the latest &lt;a href="http://blog.stackoverflow.com/category/podcasts/"&gt;Stack Overflow podcast&lt;/a&gt;, since it was about Mono.  Personally, I am not a big fan of podcasts or videos, as I find them to be a very inefficient way of learning.  It is much quicker to read an article (and reread the sections you want) than to listen to an hour of rambling.&lt;br /&gt;&lt;br /&gt;Anyways, the one thing that makes it more tolerable is a feature of Windows Media Player called Fast Playback (they also have Slow Playback).  It plays the stream at 1.4x (I think) speed, so less time is wasted.&lt;br /&gt;&lt;br /&gt;I have never seen this feature in another media player.  Are there any other media players that support this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-8257517292052298124?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/8257517292052298124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=8257517292052298124' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8257517292052298124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8257517292052298124'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/07/audio-killer-feature.html' title='Audio Killer Feature'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-3494221638631213676</id><published>2009-07-13T16:26:00.002-06:00</published><updated>2009-07-13T16:52:18.429-06:00</updated><title type='text'>Banshee as a Platform</title><content type='html'>Every time I use YaST's Software Manager, I wonder if it would be better implemented using Banshee.  Banshee's interface has been tuned for usability, both on its own, and what it borrows from iTunes.  Software management is a naturally scary operation, and using an interface that the user is already familiar with could help reduce user fear.&lt;br /&gt;&lt;br /&gt;Of course, it would just be the interface pieces of Banshee in a new app, you wouldn't actually start Banshee for software installation.&lt;br /&gt;&lt;br /&gt;Another feature I would like to see taken from iTunes/Banshee is downloading/installing in the background.  Once I hit Install, go ahead and download the application in the background, and install it in the background.  I can click on the "Downloading/Installing.." menu item if I want to see what's going on.  Most of the time, I'd rather be looking at other things to download.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/Slu05q-ZTfI/AAAAAAAAAq0/RNF2e3BYQx4/s1600-h/yastshee1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 289px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/Slu05q-ZTfI/AAAAAAAAAq0/RNF2e3BYQx4/s400/yastshee1.png" alt="" id="BLOGGER_PHOTO_ID_5358075084568874482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Speaking of looking at other things to download, why not help me find apps I want to install?  We have the openSUSE build service chock full of applications for users, but they're all hidden behind a terrible search-only interface.  We need to give the user a way to browse applications and find cool things to do on their Linux machines.&lt;br /&gt;&lt;br /&gt;App stores are all the rage, as they give users a way to browse and find new apps, guided by category browsing, "front-page" recommendations by editors, and ratings by other users.  "Store" may not be the right word for us, as everything is FOSS, but the idea is the same.  One key would be to only show things that are user applications.  The user isn't interested in finding things like perl or x11 or gstreamer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/Slu05z2JguI/AAAAAAAAAq8/eeSWJtL5Bgc/s1600-h/yastshee2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 289px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/Slu05z2JguI/AAAAAAAAAq8/eeSWJtL5Bgc/s400/yastshee2.jpg" alt="" id="BLOGGER_PHOTO_ID_5358075086950204130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On the same topic, I think F-Spot could benefit from a Banshee interface as well.  It's already pretty similar, so code sharing would be nice.  Are there other apps that could benefit from using an interface that the user is already familiar with?  Monsoon?  Nautilus?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-3494221638631213676?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/3494221638631213676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=3494221638631213676' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3494221638631213676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3494221638631213676'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/07/banshee-as-platform.html' title='Banshee as a Platform'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/Slu05q-ZTfI/AAAAAAAAAq0/RNF2e3BYQx4/s72-c/yastshee1.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7144342252077091786</id><published>2009-06-16T14:01:00.009-06:00</published><updated>2009-06-16T14:35:50.885-06:00</updated><title type='text'>Mono in Visual Studio 2010</title><content type='html'>One cool new feature in Visual Studio 2010 is enhanced &lt;a href="http://blogs.msdn.com/terryclancy/archive/2009/05/19/visual-studio-2010-new-features-extensibility-points-and-partner-opportunities.aspx"&gt;Multi Targeting&lt;/a&gt;.  Presumably, its all about allowing developers to target both the 2.0 and 4.0 runtimes from VS2010, but what it really means is you can easily target Mono from within Visual Studio 2010.&lt;br /&gt;&lt;br /&gt;Like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/Sjf9moUKcwI/AAAAAAAAApU/iU-bQmUiadY/s1600-h/step2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/Sjf9moUKcwI/AAAAAAAAApU/iU-bQmUiadY/s400/step2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348021922624598786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To enable this, you need to unzip &lt;a href="http://jpobst.com/MonoProfile2_4.zip"&gt;this file&lt;/a&gt; to:&lt;br /&gt;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SjgBGQIfOiI/AAAAAAAAAp8/NefgfBwrfZ4/s1600-h/assemblies.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 279px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SjgBGQIfOiI/AAAAAAAAAp8/NefgfBwrfZ4/s400/assemblies.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348025764423875106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once you do that, you can take your .NET project:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/Sjf-hFd5BVI/AAAAAAAAApc/SVT94VKnS7U/s1600-h/step1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/Sjf-hFd5BVI/AAAAAAAAApc/SVT94VKnS7U/s400/step1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348022926882440530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Go to project properties and switch it to the Mono 2.4 Profile:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/Sjf9moUKcwI/AAAAAAAAApU/iU-bQmUiadY/s1600-h/step2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/Sjf9moUKcwI/AAAAAAAAApU/iU-bQmUiadY/s400/step2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348021922624598786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now it will compile using Mono's assemblies, and will flag methods that Mono does not contain, like thus:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/Sjf_g9-AHPI/AAAAAAAAApk/n1y8Vwa19V8/s1600-h/step3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/Sjf_g9-AHPI/AAAAAAAAApk/n1y8Vwa19V8/s400/step3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348024024381267186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This also works for Intellisense:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/Sjf_-00r66I/AAAAAAAAAp0/uMsaDbIlAZQ/s1600-h/intel.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/Sjf_-00r66I/AAAAAAAAAp0/uMsaDbIlAZQ/s400/intel.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348024537322351522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And Object Browser:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/Sjf_ydPm_QI/AAAAAAAAAps/xDiQWUU1714/s1600-h/browser.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/Sjf_ydPm_QI/AAAAAAAAAps/xDiQWUU1714/s400/browser.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5348024324834393346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We are very excited about this feature, which should make it easy for people to ensure they are staying compatible with the Mono subset of the .NET framework without leaving Visual Studio.  Once VS2010 is released, we will hopefully release the profile packs as we release each Mono version!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7144342252077091786?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7144342252077091786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7144342252077091786' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7144342252077091786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7144342252077091786'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/06/mono-in-visual-studio-2010.html' title='Mono in Visual Studio 2010'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/Sjf9moUKcwI/AAAAAAAAApU/iU-bQmUiadY/s72-c/step2.png' height='72' width='72'/><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7841855327651409256</id><published>2009-06-10T18:43:00.001-06:00</published><updated>2009-06-10T18:45:40.816-06:00</updated><title type='text'>Words to Live By</title><content type='html'>When someone says "your project/code sucks", the correct response is neither "you suck" nor "yours sucks more".  The only correct response is "how can I make it better?".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7841855327651409256?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7841855327651409256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7841855327651409256' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7841855327651409256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7841855327651409256'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/06/words-to-live-by.html' title='Words to Live By'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6062886358459790270</id><published>2009-03-26T10:44:00.000-06:00</published><updated>2009-03-26T10:45:04.731-06:00</updated><title type='text'>On Newspapers</title><content type='html'>newspaper = someone throwing litter on my driveway that *I* have to clean up&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6062886358459790270?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6062886358459790270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6062886358459790270' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6062886358459790270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6062886358459790270'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/03/on-newspapers.html' title='On Newspapers'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4623182350948246175</id><published>2009-02-04T20:16:00.002-06:00</published><updated>2009-02-04T20:24:51.928-06:00</updated><title type='text'>Congressman Day</title><content type='html'>Today, at approximately 4:12PM, 264 congressmen poked their heads out of their holes and saw the shadow of every American who can recite thousands of commercials, but haven't managed to see/watch/remember/act on the unending ones about DTV.  They got scared, and promptly scurried back to their holes, meaning we have 4 more months of analog TV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4623182350948246175?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4623182350948246175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4623182350948246175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4623182350948246175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4623182350948246175'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/02/congressman-day.html' title='Congressman Day'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4545721395605066061</id><published>2009-01-29T17:52:00.004-06:00</published><updated>2009-01-29T18:07:58.813-06:00</updated><title type='text'>gmcs in Visual Studio</title><content type='html'>I was trying to learn a bit about MSBuild today and how things get built in Visual Studio, and I came across a cute little hack.  I may be the last person in the world to discover it, but I still thought it was neat.&lt;br /&gt;&lt;br /&gt;If you go to:&lt;br /&gt;C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets&lt;br /&gt;&lt;br /&gt;around line 145, and delete these two lines:&lt;br /&gt;ErrorReport="$(ErrorReport)"&lt;br /&gt;FileAlignment="$(FileAlignment)"&lt;br /&gt;&lt;br /&gt;and around line 166, change these two lines:&lt;br /&gt;ToolExe="$(CscToolExe)"&lt;br /&gt;ToolPath="$(CscToolPath)"&lt;br /&gt;&lt;br /&gt;to this:&lt;br /&gt;ToolExe="gmcs.bat"&lt;br /&gt;ToolPath="C:\Program Files (x86)\Mono-2.2\bin"&lt;br /&gt;&lt;br /&gt;(your ToolPath may vary)&lt;br /&gt;&lt;br /&gt;when you build your C# projects in VS2k8, it will build them with Mono's C# compiler "gmcs" instead of Microsoft's "csc" compiler.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SYJDWht0jCI/AAAAAAAAAc0/WX3V6U-jHMQ/s1600-h/vsbuild.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 150px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SYJDWht0jCI/AAAAAAAAAc0/WX3V6U-jHMQ/s400/vsbuild.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5296870166027865122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(If you try this, you should of course backup your Microsoft.CSharp.targets file.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4545721395605066061?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4545721395605066061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4545721395605066061' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4545721395605066061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4545721395605066061'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/01/gmcs-in-visual-studio.html' title='gmcs in Visual Studio'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/SYJDWht0jCI/AAAAAAAAAc0/WX3V6U-jHMQ/s72-c/vsbuild.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-4746736216278635974</id><published>2009-01-20T13:26:00.004-06:00</published><updated>2009-01-20T13:44:54.436-06:00</updated><title type='text'>Lemons and Lemonade</title><content type='html'>What started as criticism that Linuxers couldn't watch the official Inauguration stream due to the use of Silverlight:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.osnews.com/story/20803/Inauguration_on_Silverlight_Some_Linux_Fans_Upset"&gt;  OSNews - Inauguration on Silverlight: Some Linux Fans Upset&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://blogs.zdnet.com/open-source/?p=3302"&gt;ZDNet - Some Linux backers upset about selection of Silverlight to stream Obama inauguration events&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ended not only with Linux users being able to watch the stream, but with Linux being advertised to the tens of millions (?) of people watching the &lt;b&gt;&lt;i&gt;official&lt;/i&gt;&lt;/b&gt; stream on the &lt;b&gt;&lt;i&gt;official&lt;/i&gt;&lt;/b&gt; website on their Windows and Mac PCs:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SXYnNmUo-sI/AAAAAAAAAcU/ljdygMTI36o/s1600-h/linuxobama.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 399px;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SXYnNmUo-sI/AAAAAAAAAcU/ljdygMTI36o/s400/linuxobama.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5293461526599498434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That is advertising money can't buy, even if we included Linux with every &lt;a href="http://www.obamapaperplate.com/"&gt;commemorative plate sold!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One small step for Silverlight, one giant leap for Linux!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-4746736216278635974?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/4746736216278635974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=4746736216278635974' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4746736216278635974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/4746736216278635974'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/01/lemons-and-lemonade.html' title='Lemons and Lemonade'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/SXYnNmUo-sI/AAAAAAAAAcU/ljdygMTI36o/s72-c/linuxobama.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7943685259937757230</id><published>2009-01-13T09:45:00.003-06:00</published><updated>2009-01-13T09:53:40.678-06:00</updated><title type='text'>Motivation</title><content type='html'>How could anyone &lt;span style="font-style:italic;font-weight:bold;"&gt;not&lt;/span&gt;&lt;/span&gt; be motivated after seeing such a dynamic and exciting book cover like this!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SWy3iMpPMeI/AAAAAAAAAbM/Pk6Hb4isjSE/s1600-h/wrox.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 318px; height: 400px;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SWy3iMpPMeI/AAAAAAAAAbM/Pk6Hb4isjSE/s400/wrox.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5290805460391113186" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7943685259937757230?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7943685259937757230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7943685259937757230' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7943685259937757230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7943685259937757230'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2009/01/motivation.html' title='Motivation'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/SWy3iMpPMeI/AAAAAAAAAbM/Pk6Hb4isjSE/s72-c/wrox.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5219034025645704086</id><published>2008-10-15T10:04:00.004-06:00</published><updated>2008-10-15T17:42:14.040-06:00</updated><title type='text'>A Little Bit of Style</title><content type='html'>&lt;a href="http://jpobst.blogspot.com/2008/09/hack-week-3.html"&gt;Previously&lt;/a&gt;, I had mentioned that there were two SoC projects for Mono this year that I was particularly interested in.  The second project was the one I mentored: George Giolfan's work to bring native rendering to Winforms.&lt;br /&gt;&lt;br /&gt;Currently, our Winforms implementation mimics the "Win32 Classic" look, also known as looking like "ass".  It has been important to support this default .Net look, and has provided us with a consistent target, but now George has provided us with something better.&lt;br /&gt;&lt;br /&gt;Winforms has the System.Windows.Forms.VisualStyles namespace, that provides access to native rendering on Windows.  George has implemented a theme that uses this namespace, to achieve much better looking applications.  His work initially focused on writing this for Windows, as the VisualStyles namespace is already implemented for Windows.  Although this currently doesn't work on Linux/OSX, the massive amounts of refactoring that George had to do will make it much, much easier to implement this on those platforms as well.&lt;br /&gt;&lt;br /&gt;George's code shipped with &lt;a href="http://www.go-mono.com/mono-downloads/download.html"&gt;Mono 2.0&lt;/a&gt;, however it is turned off by default.  To turn it on, run:&lt;br /&gt;SET MONO_THEME=visualstyles&lt;br /&gt;mono MyApplication.exe&lt;br /&gt;&lt;br /&gt;As with .Net, your application will need to call Application.EnableVisualStyles, or it will not use the native look.  Please test this feature, as I intend to enable it by default for Mono 2.2.  Since the 2.0 release, I have fixed bugs with DataGridView headers always painted as focused, and tooltips not drawing their background.  If you find any other issues, please file them in our &lt;a href="http://mono-project.com/Bugs"&gt;bugzilla&lt;/a&gt; so I can fix them before 2.2.&lt;br /&gt;&lt;br /&gt;For a taste of what this looks like, here is MoMA with classic rendering:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SPYYCpw7VQI/AAAAAAAAAW4/pTdip2RrLu0/s1600-h/styles1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SPYYCpw7VQI/AAAAAAAAAW4/pTdip2RrLu0/s400/styles1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5257416048851506434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And here is MoMA with native rendering:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SPYYC8lbcWI/AAAAAAAAAXA/GHBto-hP_ek/s1600-h/styles2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SPYYC8lbcWI/AAAAAAAAAXA/GHBto-hP_ek/s400/styles2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5257416053903552866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, a big thanks to George for his awesome work this summer to make this possible!&lt;br /&gt;&lt;br /&gt;Edit: Blah, I can't even spell George's name.  Terribly sorry!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5219034025645704086?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5219034025645704086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5219034025645704086' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5219034025645704086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5219034025645704086'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/10/little-bit-of-style.html' title='A Little Bit of Style'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/SPYYCpw7VQI/AAAAAAAAAW4/pTdip2RrLu0/s72-c/styles1.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-3010118902620790128</id><published>2008-10-01T09:02:00.005-06:00</published><updated>2008-10-01T09:24:52.553-06:00</updated><title type='text'>Smart Client Software Factory on Mono</title><content type='html'>Recently, Miguel &lt;a href="http://tirania.org/blog/archive/2008/Sep-09.html"&gt;posted&lt;/a&gt; that &lt;a href="http://msdn.microsoft.com/en-us/library/cc512464.aspx"&gt;Microsoft's Enterprise Library 4.0&lt;/a&gt; is now available under the Ms-PL, a Mono compatible open source license.  This week, I downloaded the &lt;a href="http://www.codeplex.com/smartclient"&gt;Smart Client Software Factory&lt;/a&gt; (SCSF) to see if it would run under Mono.  It comes with a QuickStart tutorial called BankShell that I used to test with.&lt;br /&gt;&lt;br /&gt;I hit two bugs in Mono:&lt;br /&gt;&lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=430932"&gt;430932 - IsolatedStorageFile.GetStore throws exception&lt;/a&gt;&lt;br /&gt;&lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=431001"&gt;431001 - Exception using XmlTextReader after stream is disposed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also hit one bug in the SCSF:&lt;br /&gt;&lt;a href="http://www.codeplex.com/smartclient/WorkItem/View.aspx?WorkItemId=18740"&gt;18740 - ModuleInfo constructor not cross-platform safe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After commenting out or working around the offending lines, the BankShell application popped up and seemed to work nicely.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SOOT7PzdjrI/AAAAAAAAAWQ/Ht3Uxvnxwek/s1600-h/bankshell1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SOOT7PzdjrI/AAAAAAAAAWQ/Ht3Uxvnxwek/s400/bankshell1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252204236508073650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/SOOT7lKVflI/AAAAAAAAAWY/I9kQnnqQaDc/s1600-h/bankshell2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/SOOT7lKVflI/AAAAAAAAAWY/I9kQnnqQaDc/s400/bankshell2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252204242241158738" /&gt;&lt;/a&gt;&lt;br /&gt;The sample application looks simple, but it's actually pretty complex.  Each UI element is in a different assembly.  The "composite application" dynamically loads each one and places them.  The theory is that the application can be broken down into smaller pieces that can be distributed to different teams to build and maintain, and the results are put together to form the whole application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-3010118902620790128?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/3010118902620790128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=3010118902620790128' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3010118902620790128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3010118902620790128'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/10/smart-client-software-factory-on-mono.html' title='Smart Client Software Factory on Mono'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/SOOT7PzdjrI/AAAAAAAAAWQ/Ht3Uxvnxwek/s72-c/bankshell1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-2661377326498571490</id><published>2008-09-02T15:34:00.003-06:00</published><updated>2008-09-02T16:00:48.018-06:00</updated><title type='text'>Hack Week 3</title><content type='html'>As part of this year's Google Summer of Code, there were two projects that got chosen that were on my personal 'to-do' list.  I was happy these projects got chosen because frankly, my to-do list is not getting shorter nor are the days getting longer.&lt;br /&gt;&lt;br /&gt;One of these is &lt;a href="http://edropple.com/"&gt;Ed Ropple's&lt;/a&gt; "Cloverleaf", which is an add-in to Visual Studio designed to facilitate writing and testing applications in Mono.  We decided on the following features:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Test in Mono:&lt;/span&gt; Clicking this would run the current solution/project on the Mono runtime on Windows.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Scan with MoMA/Gendarme:&lt;/span&gt; Clicking this would run MoMA or Gendarme (which can run MoMA) on the solution/project.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Test on Linux:&lt;/span&gt; Clicking this would take the solution/project output and copy it to a Linux machine or virtual machine, and automatically start it.&lt;br /&gt;&lt;br /&gt;Ed did some great work over the summer, so for my Hack Week project I started polishing and packaging his code so we could get it into people's hands.  Unfortunately, I only got "Test in Mono" done.  I already use this a lot, but I think "Test on Linux" will be the one most helpful to me.&lt;br /&gt;&lt;br /&gt;Currently, these tools are implemented as external tools, which will allow them to run in all versions of Visual Studio 2005 and 2008.  In the future, we will also be making an add-in to provide additional functionality for people with the Professional editions of Visual Studio (the Express versions cannot run add-ins).&lt;br /&gt;&lt;br /&gt;Running the project normally with the .Net runtime:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SL205FKbAwI/AAAAAAAAAUw/kZWorIBpAjs/s1600-h/hack1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SL205FKbAwI/AAAAAAAAAUw/kZWorIBpAjs/s400/hack1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241544434060559106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;External tool options in the Tools menu:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SL205VRh3PI/AAAAAAAAAU4/RnRQWhosMOg/s1600-h/hack2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SL205VRh3PI/AAAAAAAAAU4/RnRQWhosMOg/s400/hack2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241544438385335538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Application launched running on Mono:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/SL205rGNCNI/AAAAAAAAAVA/lDCmUEA7_MA/s1600-h/test3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/SL205rGNCNI/AAAAAAAAAVA/lDCmUEA7_MA/s400/test3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241544444243413202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I created a .msi installer that will install the code and add the tools to the Visual Studio menu.  Note that it does not remove them from the menu on uninstall yet, you will have to do that manually from the Tools-&gt;External Tools dialog.  Feel free to test it out and let me know if it doesn't work for you, since it only got tested on my machine.  Hopefully this will be the start of top-notch support for Mono in Visual Studio!  :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jpobst.com/monovs/setup.msi"&gt;Download Install File&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Prerequisites:&lt;br /&gt;- Visual Studio 2005 or 2008.&lt;br /&gt;- &lt;a href="http://www.go-mono.com/mono-downloads/download.html"&gt;Mono for Windows&lt;/a&gt; installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-2661377326498571490?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/2661377326498571490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=2661377326498571490' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2661377326498571490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2661377326498571490'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/09/hack-week-3.html' title='Hack Week 3'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IfYnHLEdnY/SL205FKbAwI/AAAAAAAAAUw/kZWorIBpAjs/s72-c/hack1.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5592785968618285903</id><published>2008-06-18T12:30:00.004-06:00</published><updated>2008-06-18T12:41:52.854-06:00</updated><title type='text'>On Bug Triaging</title><content type='html'>I thought &lt;a href="http://lostgarden.com/2008/05/improving-bug-triage-with-user-pain.html"&gt;this&lt;/a&gt; was a very interesting article on triaging bugs.  It uses 3 metrics:&lt;br /&gt;&lt;blockquote&gt;    * &lt;span style="font-weight:bold;"&gt;Type&lt;/span&gt;: What type of bug is this? For example is it a crashing issue, a problem with localization or a matter of visual polish?&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Likelihood&lt;/span&gt;: How likely are users to experience the bug? For example, does everyone run into the issue or do only a few users run into it?&lt;br /&gt;    * &lt;span style="font-weight:bold;"&gt;Priority&lt;/span&gt;: Of the people who experience the bug, how badly does it affect their experience with the product?&lt;/blockquote&gt;&lt;br /&gt;Each metric is assigned a number, which when multiplied together produces a number representing "user pain", that is, how much pain it causes users.  Bugs can then be sorted by this number, and you fix bugs from the top.&lt;br /&gt;&lt;br /&gt;It's a shame bugzilla doesn't really offer much flexibility for stuff like this.  I'm not saying this is the best way to prioritize bugs, but it would be nice to have some ability to try out different methodologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5592785968618285903?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5592785968618285903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5592785968618285903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5592785968618285903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5592785968618285903'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/06/on-bug-triaging.html' title='On Bug Triaging'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-3726401282398757620</id><published>2008-06-01T17:51:00.005-06:00</published><updated>2008-06-01T18:01:47.408-06:00</updated><title type='text'>Apparently I Own a Kangaroo</title><content type='html'>Many people have commented that my puppy Helo looks like a kangaroo.  Fortunately I have taken pictures of both to compare:&lt;br /&gt;&lt;br /&gt;Exhibit A: A Kangaroo.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/SEM2VK37qNI/AAAAAAAAADk/Qr8D_odO6Vk/s1600-h/DigCam+-+Penguin+006.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/SEM2VK37qNI/AAAAAAAAADk/Qr8D_odO6Vk/s400/DigCam+-+Penguin+006.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207065331494529234" /&gt;&lt;/a&gt;&lt;br /&gt;Exhibit B: Helo.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SEM2Va37qOI/AAAAAAAAADs/SetIyZT3TDw/s1600-h/DSC01265.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SEM2Va37qOI/AAAAAAAAADs/SetIyZT3TDw/s400/DSC01265.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207065335789496546" /&gt;&lt;/a&gt;&lt;br /&gt;I can certainly see the resemblance.  At the very least, I think Helo looks more like a kangaroo than this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SEM30a37qPI/AAAAAAAAAD0/TdLhibQdTnA/s1600-h/kangaroo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SEM30a37qPI/AAAAAAAAAD0/TdLhibQdTnA/s400/kangaroo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5207066967877069042" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-3726401282398757620?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/3726401282398757620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=3726401282398757620' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3726401282398757620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/3726401282398757620'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/06/apparently-i-own-kangaroo.html' title='Apparently I Own a Kangaroo'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/SEM2VK37qNI/AAAAAAAAADk/Qr8D_odO6Vk/s72-c/DigCam+-+Penguin+006.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-8684724676849092598</id><published>2008-05-27T10:24:00.005-06:00</published><updated>2008-05-27T10:40:11.539-06:00</updated><title type='text'>Google Summer of Code</title><content type='html'>Since the beginning of Winforms, we have ensured that our controls match the very ubiquitous and very ugly Windows Classic controls.  These are the controls that you get if you do not call Application.EnableVisualStyles () before you start your application.  For reference, they look like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/SDw2astItWI/AAAAAAAAADU/dYsS45H3rJY/s1600-h/vsdemo1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/SDw2astItWI/AAAAAAAAADU/dYsS45H3rJY/s400/vsdemo1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5205095101638423906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we have things in generally working order, we can take some time to add spit and polish.  For that, I am extremely pleased to mentor George Giolfan, who is working on our theming stuffs to give us better looking controls.  He is doing this by creating a theme that renders controls using the VisualStyles namespace and refactoring our controls to support this.  Since he is awesome, he has already been working on this since his Summer of Code application was accepted.&lt;br /&gt;&lt;br /&gt;Right now, it looks like this on Windows (Vista):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/SDw3RstItXI/AAAAAAAAADc/jckrT1tuHEE/s1600-h/vsdemo2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/SDw3RstItXI/AAAAAAAAADc/jckrT1tuHEE/s400/vsdemo2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5205096046531229042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While this makes me feel all warm and fuzzy inside, it doesn't really help our target users (Linux) yet.  This will soon change, as the next step will be to implement the VisualStyles namespace for GTK and then Aqua.  Then we will have a more native look for each platform than the very retro "Windows 95 on Linux" look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-8684724676849092598?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/8684724676849092598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=8684724676849092598' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8684724676849092598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8684724676849092598'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/05/google-summer-of-code.html' title='Google Summer of Code'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/SDw2astItWI/AAAAAAAAADU/dYsS45H3rJY/s72-c/vsdemo1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5791198617520651613</id><published>2008-05-13T09:14:00.003-06:00</published><updated>2008-05-13T09:48:37.012-06:00</updated><title type='text'>The Big Finale</title><content type='html'>Last night, we hit a very important milestone in our support for Winforms.  We are API complete, which means that our public API is exactly the same as .Net's (all 12,776 methods).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/SCmxB_3jTWI/AAAAAAAAADM/NgVHFd_JLG8/s1600-h/class.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/SCmxB_3jTWI/AAAAAAAAADM/NgVHFd_JLG8/s400/class.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5199881892658367842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I wasn't around at the time, but the first check-in of Winforms occurred on July 8th, 2004, meaning it has taken almost 4 years to implement.  Since then, there has been 6,434 commits to Winforms.&lt;br /&gt;&lt;br /&gt;Thank you to everyone who helped us get here!  Thank you people who contributed code!  Thank you people who contributed tests!  Thank you people who contributed Bugzilla reports!&lt;br /&gt;&lt;br /&gt;What's next?  Well, as with your typical 115k line cross-platform windowing/widget kit, there are bound to be bugs.  So we'll be working to fix those.  If you come across any, please report them so we can fix them too!  Go &lt;a href="http://www.mono-project.com/Bugs"&gt;here&lt;/a&gt; to report them.&lt;br /&gt;&lt;br /&gt;All of this will ship with our upcoming Mono 2.0 release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5791198617520651613?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5791198617520651613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5791198617520651613' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5791198617520651613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5791198617520651613'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/05/big-finale.html' title='The Big Finale'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/SCmxB_3jTWI/AAAAAAAAADM/NgVHFd_JLG8/s72-c/class.png' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-194018412147616026</id><published>2008-04-14T19:22:00.003-06:00</published><updated>2008-04-14T19:32:00.205-06:00</updated><title type='text'>I heart Comcast!</title><content type='html'>- Game 3 of the Predators' spectacular playoff run.&lt;br /&gt;- First game at home here in Nashville.&lt;br /&gt;- Broadcast in glorious high-definition.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/SAQD26Eu9JI/AAAAAAAAADE/p5YVWHetcAE/s1600-h/DSC01178.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/SAQD26Eu9JI/AAAAAAAAADE/p5YVWHetcAE/s400/DSC01178.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5189276912474584210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;..or not..&lt;br /&gt;&lt;br /&gt;Seriously now, how can I spend all my time hating Microsoft when there are much more evil monopolies out there like Comcast?  I am only one man with only so much hate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-194018412147616026?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/194018412147616026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=194018412147616026' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/194018412147616026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/194018412147616026'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/04/i-heart-comcast.html' title='I heart Comcast!'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/SAQD26Eu9JI/AAAAAAAAADE/p5YVWHetcAE/s72-c/DSC01178.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5817717472632460627</id><published>2008-04-11T15:50:00.003-06:00</published><updated>2008-04-11T15:59:42.500-06:00</updated><title type='text'>Yet More Hockey</title><content type='html'>Although I am Southern and therefore cannot name more than 3 hockey teams, I must formally protest &lt;a href="http://jacksonito.blogspot.com/2008/04/jacksons-official-stanley-cup-playoff.html"&gt;Jackson's&lt;/a&gt; and &lt;a href="http://mkestner.blogspot.com/2008/04/hockey-talk.html"&gt;Mike's&lt;/a&gt; hockey playoff predictions.&lt;br /&gt;&lt;br /&gt;Evidently, they are not taking &lt;a href="http://www.theonion.com/content/news/goalie_clearly_living_in_net"&gt;this&lt;/a&gt; into account when calculating Nashville's chances.  I can only assume they are both bitter over their respective teams not making the playoffs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5817717472632460627?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5817717472632460627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5817717472632460627' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5817717472632460627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5817717472632460627'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/04/yet-more-hockey.html' title='Yet More Hockey'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7806430474597170201</id><published>2008-02-20T14:53:00.004-06:00</published><updated>2008-02-20T15:09:22.751-06:00</updated><title type='text'>Hack Week 2</title><content type='html'>For Hack Week this time, I decided I wanted something that I knew could be completed during the week, as I did exactly zero work on my last project after Hack Week.&lt;br /&gt;&lt;br /&gt;So I revisited an old application of mine.  As &lt;a href="http://jpobst.blogspot.com/2007/02/better-than-mattress-sale.html"&gt;chronicled previously&lt;/a&gt;, I had written a Jabber/Xmpp client in VB.Net back in the day.  So I spent this Hack Week finishing the conversion to C# and ensuring that it ran on Mono on Linux.  I have a couple of bugs I need to file that I found, but it seems to run quite nicely on openSUSE:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/R7yVhWey8JI/AAAAAAAAAC0/DlWV6M4ang4/s1600-h/xmpp1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/R7yVhWey8JI/AAAAAAAAAC0/DlWV6M4ang4/s400/xmpp1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5169170872517456018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hopefully we can add it to the Mono VMWare image after said bugs are fixed.  For now, it is located at: &lt;a href="http://code.google.com/p/xmppapplication/"&gt;http://code.google.com/p/xmppapplication/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And just to do something a little wilder and failure prone, I also spent some time getting MonoDevelop running on Windows.  It will load, but some work definitely needs to be done before it is shippable:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/R7yWXGey8KI/AAAAAAAAAC8/1FynBBIs7oo/s1600-h/winmd.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/R7yWXGey8KI/AAAAAAAAAC8/1FynBBIs7oo/s400/winmd.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5169171795935424674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once again, thank you Novell for Hack Week!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7806430474597170201?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7806430474597170201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7806430474597170201' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7806430474597170201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7806430474597170201'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/02/hack-week-2.html' title='Hack Week 2'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/R7yVhWey8JI/AAAAAAAAAC0/DlWV6M4ang4/s72-c/xmpp1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-6484476138672902087</id><published>2008-01-16T21:22:00.000-06:00</published><updated>2008-01-16T21:37:33.647-06:00</updated><title type='text'>Snowmanicide</title><content type='html'>So it's been a long time since we've gotten any real snow here in Nashville.  And even though one inch is barely a "real" snow, I rushed out to make the most of it.&lt;br /&gt;&lt;br /&gt;My inspiration:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/R47Kfwa8swI/AAAAAAAAACU/oerZJhk4gv4/s1600-h/Hitbycar.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/R47Kfwa8swI/AAAAAAAAACU/oerZJhk4gv4/s400/Hitbycar.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5156281270308483842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My masterpiece:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/R47KqAa8sxI/AAAAAAAAACc/VjkfUGNmxqk/s1600-h/DSC01070.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/R47KqAa8sxI/AAAAAAAAACc/VjkfUGNmxqk/s400/DSC01070.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5156281446402142994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/R47KxAa8syI/AAAAAAAAACk/2H1SkFlrAuA/s1600-h/DSC01068.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/R47KxAa8syI/AAAAAAAAACk/2H1SkFlrAuA/s400/DSC01068.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5156281566661227298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/R47K7wa8szI/AAAAAAAAACs/F4rqsSwEhM0/s1600-h/DSC01072.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/R47K7wa8szI/AAAAAAAAACs/F4rqsSwEhM0/s400/DSC01072.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5156281751344821042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, I just bought a house, moved in, and have not met my neighbors yet.  This may not be the best way to start off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-6484476138672902087?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/6484476138672902087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=6484476138672902087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6484476138672902087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/6484476138672902087'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2008/01/southern-snow.html' title='Snowmanicide'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/R47Kfwa8swI/AAAAAAAAACU/oerZJhk4gv4/s72-c/Hitbycar.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-8964431862164293560</id><published>2007-12-17T11:01:00.000-06:00</published><updated>2007-12-17T11:11:50.974-06:00</updated><title type='text'>More Winforms Progress</title><content type='html'>Recently, I was afraid I may get coerced into giving a Winforms presentation at the Mono Summit.  So I took some stats on how Winforms has progressed since the last Mono Summit.  I evaded a presentation (on Winforms at least), but I still have some stats that really needed to be made into a pretty graph showing our progress over the last year.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/R2aspwa8svI/AAAAAAAAACM/bcVUVeTGi8A/s1600-h/chart.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/R2aspwa8svI/AAAAAAAAACM/bcVUVeTGi8A/s400/chart.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5144989457689916146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pretty much all that we are missing is WebBrowser DOM stuff and 2.0 DataBinding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-8964431862164293560?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/8964431862164293560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=8964431862164293560' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8964431862164293560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8964431862164293560'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/12/more-winforms-progress.html' title='More Winforms Progress'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/R2aspwa8svI/AAAAAAAAACM/bcVUVeTGi8A/s72-c/chart.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-1467771508210950275</id><published>2007-12-13T14:12:00.000-06:00</published><updated>2007-12-14T09:01:32.133-06:00</updated><title type='text'>MoMA: Changes in 1.2.6 Version</title><content type='html'>I generally don't make any announcement when I release a new MoMA for the new Mono release.  This is because you just click the "Check for newer version" link, which magically downloads the new definition files and life is chock full of rainbows and ponies.  However, for the 1.2.6 release, we made 2 important changes to the definition files that warrant a mention.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Removal of Design Namespaces -&lt;/span&gt;&lt;br /&gt;One of our awesome &lt;a href="http://www.beyondfocus.com/Default.aspx?pageid=-1"&gt;mono-vangelists&lt;/a&gt; pointed out that people scan their app (and third party controls) and see all kinds of warnings about things missing in the Design classes.  However, these classes are not used to run apps, just for designers such as Visual Studio.  So we are potentially scaring off users for no reason.  Therefore, beginning with 1.2.6, we no longer include the Design namespaces in MoMA reports.  (If you really want the Design stuffs, you can download the definition file that includes them on the &lt;a href="http://www.mono-project.com/MoMA"&gt;MoMA home page&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Addition of .Net 3.0/3.5 Classes -&lt;/span&gt;&lt;br /&gt;Beginning with 1.2.6, we include the definitions needed to scan your .Net 3.0 and 3.5 apps.  At this point, we report everything as missing.  Even though we have implemented some of these classes in our &lt;a href="http://www.mono-project.com/Olive"&gt;Olive project&lt;/a&gt;, we do not currently ship this with the released Mono, and MoMA tracks the Mono releases.&lt;br /&gt;&lt;br /&gt;So what good is adding the 3.0/3.5 stuffs if we are going to report it all as missing?  We will soon be getting to the point where we need to figure out what new stuff to implement next.  By scanning your app with MoMA and submitting the missing report, we can see which parts are the most important to our users so we can prioritize.  (And yes, we _really_ use this data.  &lt;a href="http://primates.ximian.com/~miguel/momareports/"&gt;MoMA reports&lt;/a&gt; have pretty much dictated our prioritization since it was released a year ago.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- How Do I Get These New Features? -&lt;/span&gt;&lt;br /&gt;So how do you get the new stuff?  Just click on the "Check for newer version" link in MoMA, sit back, relax, and enjoy the rainbows and ponies.  Or if you don't already have MoMA, you can grab it &lt;a href="http://www.mono-project.com/MoMA"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;UPDATE: I forgot that the new definitions contained a method signature that MoMA was unable to handle, so you actually DO have to download a new copy from the MoMA home page.  Sorry.  :/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-1467771508210950275?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/1467771508210950275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=1467771508210950275' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1467771508210950275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/1467771508210950275'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/12/moma-changes-in-126-version.html' title='MoMA: Changes in 1.2.6 Version'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-265690017596421213</id><published>2007-06-29T15:24:00.000-06:00</published><updated>2007-06-29T16:36:36.786-06:00</updated><title type='text'>My Hack Week</title><content type='html'>By now, all blog aggregators have been inundated by Hack Week posts.  I'll finish up the week by adding mine.  :)&lt;br /&gt;&lt;br /&gt;I decided that part of my Hack Week would be to venture from my "happy place" of Winforms in Visual Studio and write something in GTK# using MonoDevelop.  I chose to write a plugin for Banshee that allows it to sync with and display files generated by taking your iPod for a run with the Nike+ accessory.  Oh, and using Moonlight, just because it seemed fashionable.&lt;br /&gt;&lt;br /&gt;I didn't get as far as I would have liked because I struggled alot with compiling and installing all the Moonlight prerequisites to the right places.  I no doubt have several copies of mono, moon, olive, and cairo floating around on my SuSE box now.  :)  It should be a lot easier when Moonlight is a little more 'finished' and comes in a neat little package.  But it was a great learning experience for things I didn't understand: prefixes, LD_LIBRARY_PATH, and PKG_CONFIG.&lt;br /&gt;&lt;br /&gt;Anyways, here's what I got finished.  This is displaying all the run files I have:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/RoV6ouwTcoI/AAAAAAAAAB8/XAtiIIa8IVg/s1600-h/marathon1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/RoV6ouwTcoI/AAAAAAAAAB8/XAtiIIa8IVg/s400/marathon1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5081602594721460866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is displaying the pace over time of the latest run:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/RoV6_-wTcpI/AAAAAAAAACE/H1QYKwv2j50/s1600-h/marathon2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/RoV6_-wTcpI/AAAAAAAAACE/H1QYKwv2j50/s400/marathon2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5081602994153419410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I like to think that my out-of-shapedness is a testament to being a computer geek, so no need to point out that the graphs show my inability to run.  Thanks.&lt;br /&gt;&lt;br /&gt;I left a little list of what works and what doesn't work on the Hack Week &lt;a href="http://idea.opensuse.org/content/ideas/nike-support-for-banshee"&gt;page&lt;/a&gt;.  Hopefully I will get around to finishing it up some day.  I figure there isn't much hurry, as Moonlight needs to be stable and packaged first.&lt;br /&gt;&lt;br /&gt;Anyways, next week it's back to Winforms!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-265690017596421213?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/265690017596421213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=265690017596421213' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/265690017596421213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/265690017596421213'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/06/my-hack-week.html' title='My Hack Week'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/RoV6ouwTcoI/AAAAAAAAAB8/XAtiIIa8IVg/s72-c/marathon1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-8512035552439308888</id><published>2007-06-26T14:44:00.000-06:00</published><updated>2007-06-26T15:14:50.506-06:00</updated><title type='text'>My First Year of Mono</title><content type='html'>A year ago today I made my first contribution to Mono.  I was in a very interesting work situation.  I was being paid to work on a project that didn't really exist, so basically I sat in my home office and did absolutely nothing except be ready should I get a phone call or email.  This of course led to extreme boredom, not having anything to do but yet unable to leave the house.  So I decided I better find something to keep my sanity.&lt;br /&gt;&lt;br /&gt;I had watched the Mono project for years with interest, and decided that there were some easy things in Winforms 2.0 that I could implement to help out and as a way for me to learn C#.  So a year ago today I submitted a zip file of 57 new 2.0 enumerations.  From there I moved to new EventHandlers and EventArgs.  Next came the VisualStyles namespace, then FlowLayoutPanel, SplitContainer, TableLayoutPanel, and finally the network of *Strip controls.  I also deviated a bit to make a little app called MoMA.&lt;br /&gt;&lt;br /&gt;I hadn't taken any vacation last year and had never been to Boston, so on a whim I went to the Mono Summit to hang out with a bunch of people I had never met.  There I got to put some faces with names and make some contacts that would land me a full time Mono job with Novell when my company decided it could offshore my sitting around.&lt;br /&gt;&lt;br /&gt;Since then it's been finishing up *Strip stuff, implementing all kinds of random Winforms goodness, and fixing bugs.  I think it's been a great year, and I can't wait to see what year two brings!&lt;br /&gt;&lt;br /&gt;Also, I want to thank those who took a chance on some random guy who showed up in #mono-winforms and didn't really know much about Mono, but wanted to help.  Thanks pdb, jchambers, toshok, jackson, spouliot, mkestner, and miguel for your patience and your guidance!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-8512035552439308888?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8512035552439308888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/8512035552439308888'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/06/my-first-year-of-mono.html' title='My First Year of Mono'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-272575261334441813</id><published>2007-05-24T13:00:00.000-06:00</published><updated>2007-05-24T13:09:15.160-06:00</updated><title type='text'>Porting Guide</title><content type='html'>This past week, I wrote up a pretty detailed guide on porting Winforms applications to run on Mono.  I originally planned it for my blog, but decided it needed a more permanent home like the Mono &lt;a href="http://www.mono-project.com/Main_Page"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So here it is: &lt;a href="http://www.mono-project.com/Guide:_Porting_Winforms_Applications"&gt;Winforms Porting Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you use it and come across things that don't work or could be made clearer, please let me know.  And of course if you have suggestions or questions on other things that could use some documentation, I'd love to hear them as well.  The comment section on this post is probably the best place for feedback, but you can also send stuff to [monkey *at* jpobst *dot* com].&lt;br /&gt;&lt;br /&gt;Happy Hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-272575261334441813?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/272575261334441813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=272575261334441813' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/272575261334441813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/272575261334441813'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/05/porting-guide.html' title='Porting Guide'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5902772227666382167</id><published>2007-04-06T09:41:00.000-06:00</published><updated>2007-04-06T10:21:36.174-06:00</updated><title type='text'>Winforms 2.0 Update</title><content type='html'>It's been quite a while since we released Mono 1.2.3, and the winforms team and contributors have been busy.  I often reference the &lt;a href="http://primates.ximian.com/%7Emiguel/momareports/"&gt;MoMA reports&lt;/a&gt; for what areas I need to be working on.  Since the MoMA reports haven't been updated to reflect things that have now been implemented since 1.2.3, I did some quick and dirty comparisons so I could filter out what's been done.&lt;br /&gt;&lt;br /&gt;According to my numbers, as of 1.2.3 there are 995 winforms methods that people have reported as in-use in their real world applications that we are missing.  Since 1.2.3, we have implemented 335 of them, leaving us with 660 to go.  I think that's pretty good progress for about 2 months.  As the number gets smaller, it will probably take longer to implement things, as they are generally the harder ones left.&lt;br /&gt;&lt;br /&gt;Two of the biggest places we are missing stuff are WebBrowser and MaskedTextBox, which are the only 2 controls we are completely missing.  WebBrowser accounts for 154 of the missing methods, and MaskedTextBox accounts for 66 of them.  MaskedTextBox doesn't look especially hard to implement, just tedious to match all the behavior from .Net.&lt;br /&gt;&lt;br /&gt;WebBrowser on the other hand, is going to be very tricky to do in a compatible, cross-platform way.  We have to consider several things, like which rendering engine to use: Gecko, KHTML, WebKit, etc.  We have to either bundle it, or have some mechanism of making sure that the system has it installed.  Also, it has to expose enough API that we can map all the WebBrowser functionality into it.  We've thrown ideas around many times, but have yet to come up with a plan.  Given what we have left, it's probably something we are going to have to face pretty soon.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5902772227666382167?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5902772227666382167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5902772227666382167' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5902772227666382167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5902772227666382167'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/04/winforms-20-update.html' title='Winforms 2.0 Update'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-65461327313361171</id><published>2007-04-03T12:57:00.000-06:00</published><updated>2007-04-03T14:28:26.966-06:00</updated><title type='text'>SetBoundsCore</title><content type='html'>This was originally going to be an email to the mono winforms list, but it got too long, and people won't read long emails, so I'm putting it here instead.  The following really applies to people working inside the mono winforms assembly, not consumers of it, but someone may find it interesting.&lt;br /&gt;&lt;br /&gt;Recently I made a pretty fundamental change to the way SetBoundsCore (and bounds setting in general).  Because it seemed to go very smoothly and only broke a few easily fixable cases, I didn't really alert people the way I should have.  &lt;a href="http://everaldo.simios.org/"&gt;Everaldo&lt;/a&gt; found a case I missed, and there's probably more, so it's important that everyone knows what the change was and how it may affect them.&lt;br /&gt;&lt;br /&gt;SetBoundsCore looks like this:&lt;br /&gt;&lt;br /&gt;void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)&lt;br /&gt;&lt;br /&gt;where BoundsSpecified contains things like X, Y, Location, Width, Height, Size, All, None.&lt;br /&gt;&lt;br /&gt;The old understanding of how this worked, and the way mono implemented it, was that the BoundsSpecified indicated what fields you actually wanted to change, and the rest of the fields would be kept the same for you.  Meaning you could call it like:&lt;br /&gt;&lt;br /&gt;SetBoundsCore (0, 0, 0, 25, BoundsSpecified.Height)&lt;br /&gt;&lt;br /&gt;and it would only change the height for you.  It turns out to be quite different than this, as seen &lt;a href="http://blogs.msdn.com/jfoscoding/archive/2005/01/04/346130.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The BoundsSpecified parameter is actually indicating which of the parameters has been explicitly set by developer code.  You may note that if you have a button on a form, which you then dock, when you undock it, it snaps back to its pre-dock location and size.  This magic is accomplished through the BoundsSpecified.&lt;br /&gt;&lt;br /&gt;One place where this was a problem was DefaultLayout, which was setting things using the control's Location and Size property setters.  This needed to change to a SetBoundsCore call with BoundsSpecified.None, which basically made the needed bounds changes, but the bounds code knows it was not explicitly set by a user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I doubt I explained that very well, but here's the summary.&lt;/span&gt;  Whenever you are moving or sizing controls inside winforms, there is very little chance that you want to do so using the Bounds, Location, Left, Top, Size, Height, or Width properties.  If you do, the bounds code thinks it was explicitly set by a developer/user.  What you really want to do is call SetBounds with BoundsSpecified.None.  For example, to change the height of something, do this:&lt;br /&gt;&lt;br /&gt;SetBounds(Bounds.X, Bounds.Y, Bounds.Width, 25, BoundsSpecified.Height);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-65461327313361171?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/65461327313361171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=65461327313361171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/65461327313361171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/65461327313361171'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/04/setboundscore.html' title='SetBoundsCore'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-154128250311819345</id><published>2007-03-19T13:40:00.000-06:00</published><updated>2007-03-19T13:48:09.214-06:00</updated><title type='text'>Behold the Power of Vista</title><content type='html'>One of Vista's unadvertised, and probably underappreciated, features is the ability to stop time:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/Rf7njO2rMXI/AAAAAAAAABw/XGfwnTK625I/s1600-h/stoptime.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/Rf7njO2rMXI/AAAAAAAAABw/XGfwnTK625I/s400/stoptime.jpg" alt="" id="BLOGGER_PHOTO_ID_5043723225170391410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;  It's actually quite disconcerting, because I glance at the time alot, but it doesn't really consciously register with me what time it is.  After about 30 minutes, I start thinking that it seems like time is dragging on.  Then I'll notice the discrepancy with the IRC timestamp, and the world becomes clear again (and hopefully I'm not late for anything).&lt;br /&gt;&lt;br /&gt;I'm sure stopping time will come in handy next time I have a deadline to meet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-154128250311819345?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/154128250311819345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=154128250311819345' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/154128250311819345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/154128250311819345'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/03/behold-power-of-vista.html' title='Behold the Power of Vista'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/Rf7njO2rMXI/AAAAAAAAABw/XGfwnTK625I/s72-c/stoptime.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5197793137933284583</id><published>2007-03-09T16:00:00.000-06:00</published><updated>2007-03-09T16:27:59.459-06:00</updated><title type='text'>TabStrip</title><content type='html'>I have a new favorite blog: &lt;a href="http://blogs.msdn.com/jfoscoding/default.aspx"&gt;http://blogs.msdn.com/jfoscoding/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Even though the author is gone and no longer posts to it, there are years of nitty gritty details about WinForms available, especially the ins and outs of things like ToolStrip.  I have no idea how I did not find this previously.  I searched high and low for a custom ToolStripRenderer to bootstrap me when I first started ToolStrip, to no avail.  (In fact, I didn't even find this by searching for ToolStrip, I was actually searching for an example of what I should do in ProcessMnemonic.)&lt;br /&gt;&lt;br /&gt;One thing that caught my eye was a &lt;a href="http://blogs.msdn.com/jfoscoding/attachment/1335869.ashx"&gt;demonstration&lt;/a&gt; (MS Word) of how to make a ToolStrip render like the tabs used for documents in Visual Studio 2005.  For example:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IfYnHLEdnY/RfHaWxrBYjI/AAAAAAAAABg/KeMHX_f17tE/s1600-h/nettab.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IfYnHLEdnY/RfHaWxrBYjI/AAAAAAAAABg/KeMHX_f17tE/s400/nettab.png" alt="" id="BLOGGER_PHOTO_ID_5040049542830055986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It turns out this is a great testcase for me.  Implementing a public API so that it performs what a user expects is one thing.  Behaving correctly when someone has selectively overridden completely random protected functions of your implementation is another thing.  So I ripped out the VS designer stuff and put the rest on top of Mono's ToolStrip.&lt;br /&gt;&lt;br /&gt;I am relatively proud of how well my implementation stood up.  I had to implement a missing method (SetItemLocation), tweak the SetDisplayedItems, and apparently borders are drawn last on a ToolStrip instead of first.  In the end, I got a more accurate implementation and this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/RfHaXBrBYkI/AAAAAAAAABo/zYwbvbSa3sA/s1600-h/monotab.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/RfHaXBrBYkI/AAAAAAAAABo/zYwbvbSa3sA/s400/monotab.png" alt="" id="BLOGGER_PHOTO_ID_5040049547125023298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now I just need to get this guy to post his promised &lt;a href="http://josheinstein.com/journal/archive/2006/10/18/1735.aspx"&gt;VistaToolStripRenderer&lt;/a&gt;.  :)&lt;br /&gt;&lt;br /&gt;Note: I still have to clean up my ToolStrip changes, so they are not in SVN yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5197793137933284583?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5197793137933284583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5197793137933284583' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5197793137933284583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5197793137933284583'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/03/tabstrip.html' title='TabStrip'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IfYnHLEdnY/RfHaWxrBYjI/AAAAAAAAABg/KeMHX_f17tE/s72-c/nettab.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-2618275715932059319</id><published>2007-03-06T13:47:00.000-06:00</published><updated>2007-03-06T14:07:46.333-06:00</updated><title type='text'>A Little Strip of Progress</title><content type='html'>One of my personal goals for the next release of Mono is to fix many of the issues in MenuStrip, ToolStrip, and StatusStrip that manifest themselves in our port of Paint.Net 2.72.  Paint.Net has been a godsend for the Winforms team, as it's over 100,000 lines of open-source C# Winforms code.  It has helped us find countless bugs in our implementation, as well as some affirmation that we must have plenty of things right if we can run it decently well.&lt;br /&gt;&lt;br /&gt;The main menu and tool bar were already in pretty good condition, as they exercise common use cases that I had worked on before.  The only noticeable issue was that we were not querying Windows for the a couple of system colors, resulting in an ugly gray color scheme instead of the nicer, uh, beige?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/Re3HVuknL-I/AAAAAAAAABI/hJCvP7wjvqk/s1600-h/toolbar.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/Re3HVuknL-I/AAAAAAAAABI/hJCvP7wjvqk/s400/toolbar.png" alt="" id="BLOGGER_PHOTO_ID_5038902734190227426" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;(Click on images to enlarge.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The tool box took a little bit more work.  For ToolStrips, there are five different layouts you can choose.  The only one I had implemented was HorizontalStackWithOverflow.  The tool box needed Flow, so I had to modify the FlowLayout engine to layout ToolStrips as well.  The result is pretty good.  I think the two missing buttons are due to something missing in the port.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/Re3HV-knL_I/AAAAAAAAABQ/SKCreOqW8I4/s1600-h/toolbox.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/Re3HV-knL_I/AAAAAAAAABQ/SKCreOqW8I4/s400/toolbox.png" alt="" id="BLOGGER_PHOTO_ID_5038902738485194738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, the StatusStrip has it's own layout type: SpringTableLayout.  That had to be implemented as well as making sure that ToolStripControlHosts properly hid their hosted controls when they weren't visible.  (The rectangle in Mono 1.2.3 is a hidden ProgressBar.)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IfYnHLEdnY/Re3HWOknMAI/AAAAAAAAABY/0fDDuXfI89A/s1600-h/statusbar.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IfYnHLEdnY/Re3HWOknMAI/AAAAAAAAABY/0fDDuXfI89A/s400/statusbar.png" alt="" id="BLOGGER_PHOTO_ID_5038902742780162050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Obviously, there are still several remaining issues that need to be cleaned up, but I'm quite proud of the progress so far.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-2618275715932059319?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/2618275715932059319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=2618275715932059319' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2618275715932059319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/2618275715932059319'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/03/little-strip-of-progress.html' title='A Little Strip of Progress'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/Re3HVuknL-I/AAAAAAAAABI/hJCvP7wjvqk/s72-c/toolbar.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5607334484488202907</id><published>2007-02-27T14:16:00.000-06:00</published><updated>2007-02-27T14:41:41.909-06:00</updated><title type='text'>MONOFOSDEM (tm)</title><content type='html'>I just got through watching Miguel's presentation as FOSDEM.  If you've never seen Miguel give a presentation, you really should watch one.  He has all the excitement and showmanship of Steve Jobs, only it's completely natural and spontaneous instead of super-polished.  (As evidenced by the fact that things don't always go right.)  I had suggested he appear on The Daily Show as "equal time" after Bill Gates pimped Vista on it.&lt;br /&gt;&lt;br /&gt;I don't really know what the target audience is at FOSDEM, but this is a great talk for Windows developers interested in porting their apps to Mono.  There's some history and background for the first ten minutes, but then he moves into how to use MoMA on your applications, the types of things it detects, and what they mean.&lt;br /&gt;&lt;br /&gt;After that, it gets even more interesting (to me) as Miguel breaks down the data we have received from MoMA.   He provides statistics about what types of apps people are running in the wild, how many we support, and approximately what it will take to get a larger chunk of them running on Mono.&lt;br /&gt;&lt;br /&gt;The rest of the video shows some of the applications that are running today on Mono, like Miguel's port of Paint.Net, Mono usage in Second Life, and an attempt to display a game running on Unity's game engine.&lt;br /&gt;&lt;br /&gt;As he came to the MoMA part, I was really proud and figured I would cut out that part and post it so people could check it out.  As I continued watching, I realized it's a large part of the talk, so I'd just point people to the whole video instead.  :)&lt;br /&gt;&lt;br /&gt;The video is available &lt;a href="http://ftp.belnet.be/mirrors/FOSDEM/2007/"&gt;here&lt;/a&gt;.  It is called "FOSDEM2007-TurboCachingLinuxWithMono.ogg".&lt;br /&gt;&lt;br /&gt;The video is encoded in Ogg, which I didn't have.  To play it in Windows Media Player, you will need to download and install the &lt;a href="http://www.illiminable.com/ogg/oggcodecs_0.71.0946.exe"&gt;Ogg codec&lt;/a&gt;, which was painless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5607334484488202907?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5607334484488202907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5607334484488202907' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5607334484488202907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5607334484488202907'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/02/monofosdem-tm.html' title='MONOFOSDEM (tm)'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5228283825569020000</id><published>2007-02-26T18:25:00.000-06:00</published><updated>2007-02-26T18:57:30.334-06:00</updated><title type='text'>Running with Mono: Walkthrough</title><content type='html'>A few posts ago, I showed some &lt;a href="http://jpobst.blogspot.com/2007/02/123-where-were-at.html"&gt;images&lt;/a&gt; of what a Reversi project looked like running on .Net, Mono on Windows, and Mono on Linux.  If you want to follow along at home, here's a walkthrough to running the game.&lt;br /&gt;&lt;br /&gt;First, you need to go to CodeProject and download the &lt;a href="http://www.codeproject.com/csharp/reversi.asp"&gt;game&lt;/a&gt;.  I just downloaded the executable.  Extract it to somewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Mono on Windows&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the latest Mono setup package from the Mono project &lt;a href="http://www.mono-project.com/Downloads"&gt;downloads page&lt;/a&gt;.  Currently, the latest version is 1.2.3.1.&lt;/li&gt;&lt;li&gt;Run the setup program.  GTK# and XSP are optional.  GTK# is for application using the GTK toolset.  XSP is for running webforms.  Since I'm only interested in Winforms, I generally do not install these.&lt;/li&gt;&lt;li&gt;This should create a Mono 1.2.3.1 for Windows group in your start menu.  In it, choose the "Mono-1.2.3.1 Command Prompt" program.&lt;/li&gt;&lt;li&gt;Navigate to where you placed the executable.&lt;/li&gt;&lt;li&gt;Run it using: "mono Reversi.exe"&lt;/li&gt;&lt;/ol&gt;Now you're not only losing Reversi to the computer, you are losing to the computer running Mono!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Mono on Linux (using VMWare player)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the VMWare player &lt;a href="http://www.vmware.com/products/player/"&gt;here&lt;/a&gt;.  This will allow you to run a virtual machine without installing a new operating system.&lt;/li&gt;&lt;li&gt;Download the Mono 1.2.3 on openSUSE 10.2 VMware Virtual Image from the Mono &lt;a href="http://www.mono-project.com/Downloads"&gt;download page&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Run the VMWare player, and start up the openSUSE image.&lt;/li&gt;&lt;li&gt;Once inside openSUSE, there are plenty of samples to play with.&lt;/li&gt;&lt;li&gt;To get the Reversi game onto the image, either share a drive in Windows, and copy it to the openSUSE desktop, or open Firefox and download the executable again.&lt;/li&gt;&lt;li&gt;The openSUSE image is set up so that double-clicking the "Reversi.exe" will automatically launch the game using Mono.&lt;/li&gt;&lt;/ol&gt;Now you're not only losing Reversi to the computer, you are losing to the computer running Mono on Linux!&lt;br /&gt;&lt;br /&gt;NOTE: If you are not losing, I do not want to hear about it.  I prefer to believe the computer is unbeatable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5228283825569020000?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5228283825569020000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5228283825569020000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5228283825569020000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5228283825569020000'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/02/running-with-mono-walkthrough.html' title='Running with Mono: Walkthrough'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-599496321593371944</id><published>2007-02-19T16:12:00.000-06:00</published><updated>2007-02-19T16:32:17.285-06:00</updated><title type='text'>Better Than a Mattress Sale</title><content type='html'>&lt;a href="http://jacksonito.blogspot.com/index.html"&gt;jackson&lt;/a&gt; had a good idea for today, and I thought I'd copy it.  Since it's a holiday, I hacked on something other than Mono today.  Before I worked on Mono, my open source community of choice was &lt;a href="http://www.jabber.org/"&gt;Jabber&lt;/a&gt; (fun fact: I did that webpage as well).  Back then, I released a Jabber server written in VB.Net.   One thing that I have laying around that I've never released is an XMPP client.  Since it's written in VB.Net and uses the ToolStrip and MenuStrip controls, I figured I'd try to port it to Mono as another test case for the *Strip stuff.&lt;br /&gt;&lt;br /&gt;I initially thought our VB runtime was missing too much and started rewriting it in C#.  As I realized how much code there was, I decided that wasn't going to work.  All of my logic and custom control libraries worked in VB, so I ended up leaving them as is.  The main form was where most of the VB compiler magic ("My" classes) was creating problems, so I rewrote it in C# and used the other libraries as is.&lt;br /&gt;&lt;br /&gt;After a day of hacking, I got something that I can at least make a screenshot out of:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/RdojfZ1EiKI/AAAAAAAAAA8/7VAbEmmW_6I/s1600-h/xmpp.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/RdojfZ1EiKI/AAAAAAAAAA8/7VAbEmmW_6I/s400/xmpp.jpg" alt="" id="BLOGGER_PHOTO_ID_5033374555956349090" border="0" /&gt;&lt;/a&gt;I don't really know if I'll put any more time into it.  Although I still find the project interesting, there's plenty to be done on Winforms 2.0 first.&lt;br /&gt;&lt;br /&gt;Also, as the screenshot shows, I am currently running Vista.  The plan was to dual-boot to see if I was ready to move.  Vista had other intentions.  It ate my XP partition.  I didn't lose any data, but I don't have an XP partition I can successfully boot into anymore.  I guess I'll use Vista this week, and determine which OS to reinstall cleanly this weekend.  On the plus side, I didn't find any issues running Mono.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-599496321593371944?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/599496321593371944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=599496321593371944' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/599496321593371944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/599496321593371944'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/02/better-than-mattress-sale.html' title='Better Than a Mattress Sale'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IfYnHLEdnY/RdojfZ1EiKI/AAAAAAAAAA8/7VAbEmmW_6I/s72-c/xmpp.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-5543990185214234552</id><published>2007-02-16T08:54:00.000-06:00</published><updated>2007-02-16T10:07:16.884-06:00</updated><title type='text'>1.2.3: Where We're At</title><content type='html'>Recently we released &lt;a href="http://www.mono-project.com/news/archive/2007/Feb-07.html"&gt;Mono 1.2.3&lt;/a&gt; (and Mono 1.2.3.1 yesterday).  I am very proud of this release, for several reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's the first release since I've become a full time Mono developer.&lt;/li&gt;&lt;li&gt;It's the first release to incorporate MoMA feedback.&lt;/li&gt;&lt;li&gt;It's a tremendous improvement over 1.2.2, with over 100 MWF bugs fixed, and over 800 missing methods reported through MoMA implemented.&lt;/li&gt;&lt;/ul&gt;The biggest question of course, is "Is it ready to run your app?".  The one thing I learned in school is that the answer to every computer question is "It depends".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;.Net 1.1&lt;/span&gt;&lt;br /&gt;If your app is running on the .Net framework version 1.1 and is fully managed, the answer is yes.  We consider our support for 1.1 to be feature complete, and encourage everyone to try out their .Net 1.1 apps on Mono.  If something isn't working, or looks wrong, it's most likely a bug, and we want to know about it.  The bugzilla database for Mono in general is &lt;a href="http://bugzilla.ximian.com/"&gt;here&lt;/a&gt;, and the bugzilla database for MWF is &lt;a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%3A+Class+Libraries&amp;component=Windows.Forms&amp;amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;target_milestone=---&amp;amp;target_milestone=1_2&amp;target_milestone=SG&amp;amp;target_milestone=V1&amp;email1=&amp;amp;emailtype1=substring&amp;emailassigned_to1=1&amp;amp;email2=&amp;emailtype2=substring&amp;amp;amp;amp;amp;amp;amp;emailreporter2=1&amp;changedin=&amp;amp;chfieldfrom=&amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;short_desc=&amp;amp;short_desc_type=substring&amp;long_desc=&amp;amp;long_desc_type=substring&amp;bug_file_loc=&amp;amp;bug_file_loc_type=substring&amp;keywords=&amp;amp;keywords_type=anywords&amp;op_sys_details=&amp;amp;op_sys_details_type=substring&amp;version_details=&amp;amp;version_details_type=substring&amp;cmdtype=doit&amp;amp;newqueryname=&amp;order=Reuse+same+sort+as+last+time&amp;amp;form_name=query"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If your app makes unmanaged calls to the Windows API, well, you didn't really expect that to be cross platform, did you?  You'll need to work around those calls to do the same thing in managed code, or avoid that code path when running on Mono.  A quick scan with &lt;a href="http://www.mono-project.com/MoMA"&gt;MoMA&lt;/a&gt; will report any time you are making an unmanaged call (they are labeled P/Invokes).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;.Net 2.0&lt;/span&gt;&lt;br /&gt;If your app is running on the .Net framework version 2.0, things are a bit trickier.  Although there has been much progress done on MWF 2.0, there is still plenty that is unimplemented.  &lt;a href="http://www.mono-project.com/MoMA"&gt;MoMA&lt;/a&gt; is definitely your friend here.  It will scan your app for any functionality you use that has not been implemented yet in Mono.  Running it is pretty self explanatory, so I won't cover it here.&lt;br /&gt;&lt;br /&gt;A lot of the stuff that is reported isn't necessary and you can work around it if you want your app running on Mono today.  Of course, you may run into functionality that you can't live without.  Either way, please submit the report at the end so we know what real-world functionality people need.  (And if you are real adventurous, you can download the source code to Mono and try to implement what you need.  We'd love to incorporate your contribution.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;An Example&lt;/span&gt;&lt;br /&gt;Maybe you don't have an app or Mono isn't ready for your app yet, but you'd still like to see what Mono is capable of.  I think one of the best places for examples is &lt;a href="http://www.codeproject.com/index.asp"&gt;CodeProject&lt;/a&gt;.  Looking for a non-trivial 1.1 app, I found this game of &lt;a href="http://www.codeproject.com/csharp/reversi.asp"&gt;Reversi&lt;/a&gt;.  I think I just like it because it animates the pieces, which alleviates the frustration stemming from the fact that I totally suck at Reversi.&lt;br /&gt;&lt;br /&gt;Next time I'll do a guide of how to download Mono and run the game, but for a preview of what it looks like running on the various platforms:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/RdXS8Z1EiHI/AAAAAAAAAAU/lQ33bvqrnqw/s1600-h/reversi-ms.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/RdXS8Z1EiHI/AAAAAAAAAAU/lQ33bvqrnqw/s400/reversi-ms.jpg" alt="" id="BLOGGER_PHOTO_ID_5032160093823862898" border="0" /&gt;&lt;/a&gt;MS .Net Framework / Windows XP&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IfYnHLEdnY/RdXTRZ1EiII/AAAAAAAAAAc/l9CtPClnme8/s1600-h/reversi-winmono.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IfYnHLEdnY/RdXTRZ1EiII/AAAAAAAAAAc/l9CtPClnme8/s400/reversi-winmono.jpg" alt="" id="BLOGGER_PHOTO_ID_5032160454601115778" border="0" /&gt;&lt;/a&gt;Mono 1.2.3 / Windows XP&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IfYnHLEdnY/RdXTRp1EiJI/AAAAAAAAAAk/Mat3e1cYAzA/s1600-h/reversi-linux.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IfYnHLEdnY/RdXTRp1EiJI/AAAAAAAAAAk/Mat3e1cYAzA/s400/reversi-linux.jpg" alt="" id="BLOGGER_PHOTO_ID_5032160458896083090" border="0" /&gt;&lt;/a&gt;Mono 1.2.3 / OpenSUSE 10.2&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;There's obviously a graphical glitch down the left side, but everything else works perfectly on both Windows and Linux, without any modification to the source code.  Hopefully you will have a similar experience with your application!&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-5543990185214234552?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/5543990185214234552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=5543990185214234552' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5543990185214234552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/5543990185214234552'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/02/123-where-were-at.html' title='1.2.3: Where We&apos;re At'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IfYnHLEdnY/RdXS8Z1EiHI/AAAAAAAAAAU/lQ33bvqrnqw/s72-c/reversi-ms.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1368115163566068223.post-7683681400974913138</id><published>2007-02-12T21:19:00.000-06:00</published><updated>2007-02-12T21:19:27.474-06:00</updated><title type='text'>Prerequisite: Introduction</title><content type='html'>Hi!  I'm Jonathan Pobst.  You may remember me from such Mono contributions as "ToolStrip: the one that looks like Microsoft Office" or "&lt;a href="http://www.mono-project.com/MoMA"&gt;MoMA&lt;/a&gt;: that program just asking for a lawsuit from the Museum of Modern Art".  Or you probably don't, but that's ok. &lt;br /&gt;&lt;br /&gt;Since those contributions, I've been fortunate enough to be hired as a full time open source developer.  I work mainly on Managed.Windows.Form (MWF): Mono's implementation of the .Net framework's System.Windows.Forms.  Things that are specifically my areas are ToolStrip, MenuStrip, StatusStrip, FlowLayoutPanel, and TableLayoutPanel.  I also maintain MoMA, and spend some time implementing some of the most needed SWF 2.0 functionality as reported by the MoMA reports submitted.&lt;br /&gt;&lt;br /&gt;I decided I needed a blog because MWF is a really cool technology.  But more importantly, it lends itself well to screenshots.  I mean, I'm sure JIT optimizations and compilers are fascinating, but it's hard to convey that information with pretty screenshots, which is key.  It's roughly akin to me trying to explain to my mom what I do for a living.&lt;br /&gt;&lt;br /&gt;Another goal of mine is to reach out to Windows developers looking to get started with Mono.  I've been developing on Windows since the early days of Visual Basic.  I currently develop with Visual Studio 2005 on Windows XP.  Hopefully, I can improve Mono's functionality and features for people developing on Windows, as well as help to lessen the learning curve for people with a Windows background.  MoMA was my first effort at this, and I've been very happy with how well it has been received (over 17k page views and almost 1k submitted reports).&lt;br /&gt;&lt;br /&gt;Or I'll post three times and then abandon my blog, like 95% of people who create a blog...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1368115163566068223-7683681400974913138?l=jpobst.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jpobst.blogspot.com/feeds/7683681400974913138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1368115163566068223&amp;postID=7683681400974913138' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7683681400974913138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1368115163566068223/posts/default/7683681400974913138'/><link rel='alternate' type='text/html' href='http://jpobst.blogspot.com/2007/02/prerequisite-introduction.html' title='Prerequisite: Introduction'/><author><name>jpobst</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry></feed>
