<?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-35602893</id><updated>2012-01-22T12:12:43.842Z</updated><title type='text'>just a dev</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35602893.post-603260835960703076</id><published>2009-03-05T10:02:00.005Z</published><updated>2009-03-05T10:10:54.237Z</updated><title type='text'>Copy DataTable to clipboard with an extension method</title><content type='html'>Finally I had an opportunity to create an extension method that I think could be useful to some devs out there, here under you can see (and copy) the code that inserted in your project allows you to then use something like:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;&lt;br /&gt;  dataTable.CopyDataToClipboard();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I looked for something easier and maybe .NET had already built-in; I couldn't find it (could be I was just lazy-searching) and so ... here it is. &lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;&lt;br /&gt;    public static class DataTableExtensions&lt;br /&gt;    {&lt;br /&gt;        public static void CopyDataToClipboard(this DataTable dataTable)&lt;br /&gt;        {&lt;br /&gt;            var sb = new StringBuilder();&lt;br /&gt;&lt;br /&gt;            for (var i = 0; i &lt; dataTable.Columns.Count; i++)&lt;br /&gt;                sb.Append(dataTable.Columns[i].ColumnName).Append("\t");&lt;br /&gt;            sb.AppendLine();&lt;br /&gt;&lt;br /&gt;            foreach (DataRow row in dataTable.Rows)&lt;br /&gt;            {&lt;br /&gt;                for (var i = 0; i &lt; dataTable.Columns.Count; i++)&lt;br /&gt;                    sb.Append(row[i] ?? string.Empty).Append("\t");&lt;br /&gt;                sb.AppendLine();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Clipboard.Clear();&lt;br /&gt;            Clipboard.SetText(sb.ToString());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-603260835960703076?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/603260835960703076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=603260835960703076' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/603260835960703076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/603260835960703076'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2009/03/copy-datatable-to-clipboard-with.html' title='Copy DataTable to clipboard with an extension method'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-7392936284558576030</id><published>2008-11-14T14:27:00.006Z</published><updated>2008-11-14T14:29:36.454Z</updated><title type='text'>Am I working too hard?</title><content type='html'>Take a look at the picture ....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2KCOhJRuklo/SR2LPUPwlpI/AAAAAAAAG-k/I91NVDbnqQ4/s1600-h/am+i+working+too+hard.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 75px;" src="http://1.bp.blogspot.com/_2KCOhJRuklo/SR2LPUPwlpI/AAAAAAAAG-k/I91NVDbnqQ4/s400/am+i+working+too+hard.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5268520234342454930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Am I working too hard?!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-7392936284558576030?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/7392936284558576030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=7392936284558576030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/7392936284558576030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/7392936284558576030'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2008/11/am-i-working-too-hard.html' title='Am I working too hard?'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2KCOhJRuklo/SR2LPUPwlpI/AAAAAAAAG-k/I91NVDbnqQ4/s72-c/am+i+working+too+hard.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-4403842918956607349</id><published>2008-06-23T17:00:00.012+01:00</published><updated>2008-06-23T18:48:34.931+01:00</updated><title type='text'>Preferred programming books so far ...</title><content type='html'>&lt;p&gt;When you start freelancing you need to build your customer's base and you find yourself having more time to study and read. I just finished reading "Code Complete", by Steve McConnell, and having found it a really EXCELLENT book (that I recommend to every developer) I though to put here the list of the books I enjoyed the most.&lt;br/&gt;&lt;br /&gt;Each one of these books gave me a new or different view of the various aspects involved in our profession, I hope this list will help the growth path of somebody else like they did with mine.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp1.blogger.com/_2KCOhJRuklo/SF_Lcvpur5I/AAAAAAAAFS8/5dvOHlYus7s/s200/Mythical.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5215110588206591890" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p style="display:inline"&gt;&lt;b&gt;The Mythical Man Month and Other Essays on Software Engineering&lt;/b&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img1" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Mythical-Month-Essays-Software-Engineering/dp/0201835959"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img2" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZbYxtiI/AAAAAAAAFTg/6Ua5f4qUhuQ/s200/Pragmatic.jpg"  border="0" alt=""id="Img3" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;The Pragmatic Programmer&lt;/b&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img4" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img5" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp2.blogger.com/_2KCOhJRuklo/SF_LctonLiI/AAAAAAAAFSs/0oe76sOif1c/s200/Complete.JPG" border="0" alt=""id="Img6" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;Code Complete: A Practical Handbook of Software Construction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img7" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Code-Complete-Practical-Handbook-Construction/dp/0735619670"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img8" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp3.blogger.com/_2KCOhJRuklo/SF_Lc27zUmI/AAAAAAAAFTM/eOj61snng7M/s200/Peopleware.jpg" border="0" alt=""id="Img9" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;Peopleware: Productive Projects and Teams&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-Second/dp/0932633439"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img10" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img11" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp0.blogger.com/_2KCOhJRuklo/SF_Lcwr8hoI/AAAAAAAAFTE/qDFUIZi8oec/s200/Patterns.JPG" border="0" alt=""id="Img12" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;Design patterns : elements of reusable object-oriented software&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img13" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Design-patterns-elements-reusable-object-oriented/dp/0201633612"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img14" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZVBl2_I/AAAAAAAAFTY/UvAGCdQwON8/s200/Refactoring.jpg" border="0" alt=""id="Img15" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;Refactoring: Improving the Design of Existing Code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Technology/dp/0201485672"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img16" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img17" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp1.blogger.com/_2KCOhJRuklo/SF_LckuerYI/AAAAAAAAFS0/ORTDpynp4zM/s200/Estimation.jpg" border="0" alt=""id="Img18" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;Software Estimation: Demystifying the Black Art: The Black Art Demystified&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/Software-Estimation-Demystifying-Demystified-Practices/dp/0735605351"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img19" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/Software-Estimation-Demystifying-Demystified-Practices/dp/0735605351"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img20" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="block"&gt;&lt;br /&gt;&lt;div style="display:block; float:left; margin:10px; width:auto"&gt;&lt;img src="http://bp0.blogger.com/_2KCOhJRuklo/SF_MZmGRdcI/AAAAAAAAFTw/zOYqGx7rLdA/s200/Uml.jpg" border="0" alt=""id="Img21" /&gt;&lt;/div&gt;&lt;div style="display:inline; margin:10px; vertical-align:middle "&gt;&lt;p&gt;&lt;b&gt;UML Distilled: A Brief Guide to the Standard Object Modeling Language&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon links: &lt;a href="http://www.amazon.com/UML-Distilled-Standard-Addison-Wesley-Technology/dp/0321193687"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp2.blogger.com/_2KCOhJRuklo/SF_MZhIDCxI/AAAAAAAAFT4/zQZ7A-Su6FI/s200/usa.jpg" border="0" alt=""id="Img22" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.co.uk/UML-Distilled-Standard-Modeling-Technology/dp/0321193687"&gt;&lt;img style="margin:1px 5px 1px 5px" src="http://bp3.blogger.com/_2KCOhJRuklo/SF_MZpHk-RI/AAAAAAAAFTo/rJydWWrNNG8/s200/uk.jpg" border="0" alt=""id="Img23" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br style="clear:both"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-4403842918956607349?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/4403842918956607349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=4403842918956607349' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/4403842918956607349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/4403842918956607349'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2008/06/preferred-programming-books-so-far.html' title='Preferred programming books so far ...'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_2KCOhJRuklo/SF_Lcvpur5I/AAAAAAAAFS8/5dvOHlYus7s/s72-c/Mythical.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-8027009531633437691</id><published>2008-06-12T11:30:00.009+01:00</published><updated>2008-07-08T11:23:13.443+01:00</updated><title type='text'>Jetbrain Partnership (ID: 43762) - Resharper</title><content type='html'>I'm pleased to say that I've just entered the JetBrains Partner Program, it's a pleasure to be involved in the promotion of this terrific tool for developers.&lt;br /&gt;&lt;br /&gt;I therefore I'm available for suggestions, tips and other informations.&lt;br /&gt;&lt;br /&gt;I can also help you have some benefits with your licence. For example if you&lt;br /&gt;drop me an email I can let you have a key for an evaluation period of 60 days,&lt;br /&gt;but there are also other promotions I can help you with...&lt;br /&gt;&lt;br /&gt;If you are interested just drop me an email &lt;br /&gt;(first part: patrickriva domain: gmail.com).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENJOY!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I can help you with the following Jetbrains products:&lt;br /&gt;&lt;br /&gt;ReSharper 4.0 Full Edition Commercial License&lt;br /&gt;ReSharper 4.0 Full Edition Personal License&lt;br /&gt;ReSharper 4.0 C# Edition Commercial License&lt;br /&gt;ReSharper 4.0 C# Edition Personal License&lt;br /&gt;ReSharper 4.0 VB.NET Edition Commercial License&lt;br /&gt;ReSharper 4.0 VB.NET Edition Personal License&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-8027009531633437691?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/8027009531633437691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=8027009531633437691' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8027009531633437691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8027009531633437691'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2008/06/do-you-want-discount-on-resharper.html' title='Jetbrain Partnership (ID: 43762) - Resharper'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-1087911454386721096</id><published>2008-06-09T14:00:00.006+01:00</published><updated>2008-06-10T13:16:40.450+01:00</updated><title type='text'>Error/event IDs and failure codes are not enough!!</title><content type='html'>I'm using Windows Vista since March, and despite the many criticisms I heard about it I can say that I am (was?) quite enjoying it, very good stability, and the UAC is not so annoying for me as other people say. &lt;br /&gt;&lt;br /&gt;The "was?" in the previous sentence is because I had a problem with the OS last week: suddenly, without any minimal change in the OS, the internet dial-up connection didn't work, and so I had to get in touch with  Microsoft technical support to fix it, since every damn uninstall/install or configuration hack I tried didn't work. Moreover looking for the error codes on Google gave me just a handful of results (&lt;a href="http://www.google.com/search?q=event+id+20227+rasclient+%22the+error+code+returned+on+failure+is+31%22&amp;btnG=Search"&gt;Google search&lt;/a&gt;) that didn't provide any fix or hint about possible actions.&lt;br /&gt;&lt;br /&gt;I never needed to call the official support for a Microsoft OS, but this time I had few choices: either try with a format/install (where install is the install of the OS, office apps, VS, Resharper, etc etc etc!!!) or call the support, give them the bunch of IDs I had in my hands and ask what dll/reg key to modify in order to resolve the problem.&lt;br /&gt;&lt;br /&gt;I did my bit, I was able to see that every time I tried to connect an error event was generated by the RasClient, with ID: 20227. Moreover in the details there was always the same description ending with "the error code returned on failure is 31".&lt;br /&gt;Having a so precise description of the problem I was thinking &lt;span style="font-style:italic;"&gt;'It's going to be 10 or 20 minutes, they'll lookup for the codes, send me a couple of dll to replace or a tell me the registry keys I need to correct and it's done'&lt;/span&gt; ...&lt;br /&gt;&lt;br /&gt;Well, it wasn't exactly so, in order to solve it I went through the following fix-trials suggested by the support:&lt;br /&gt;- alter a couple of keys in the registry + reboot&lt;span style="font-weight:bold;"&gt;s&lt;/span&gt;&lt;br /&gt;- remove antivirus + uninstall modem sw + install modem sw + reboot&lt;span style="font-weight:bold;"&gt;s&lt;/span&gt;&lt;br /&gt;- remove SP1 + uninstall modem sw + install modem sw + reboot&lt;span style="font-weight:bold;"&gt;s&lt;/span&gt;&lt;br /&gt;I let you guess how much time that took.&lt;br /&gt;&lt;br /&gt;I was finally given a procedure to try that did work ... &lt;span style="font-weight:bold;"&gt;perform an in-place upgrade of Vista!&lt;/span&gt;.&lt;br /&gt;Yes, I had to reinstall the system on itself! Many hours of work gone, but at least I was able to have my modem working again and the in-place upgrade took care of keeping all the registry setting of the installed applications and avoided me days of extra installations.&lt;br /&gt;&lt;br /&gt;But why do you need to go through all that when you have a module name an event id and a description of the failure? Shouldn't it be possible to replace only the more specific dlls the module is relying on? Should the support people have access to the event id documentation and/or source code to give a better explanation of a problem? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p.s. a very long time from the last post innit?! The reason is going to have it's second birthday next month! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-1087911454386721096?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/1087911454386721096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=1087911454386721096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/1087911454386721096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/1087911454386721096'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2008/06/errorevent-ids-and-failure-codes-are.html' title='Error/event IDs and failure codes are not enough!!'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-8648525709458679224</id><published>2007-01-18T18:33:00.000Z</published><updated>2007-01-18T19:07:07.016Z</updated><title type='text'>Power tools: ReSharper, definitely the most intelligent add-in to VS</title><content type='html'>O'Reilly has invited developers (&lt;a href="http://www.oreillynet.com/windows/blog/2007/01/announcing_windows_developer_t.html?CMP=OTC-U49S05779020&amp;amp;ATT=Announcing+Windows+Developer+Tools+Day+Join+the+Celebration+by+Blogging+About+Your+Favorite+Tool"&gt;here&lt;/a&gt;) to blog about their favourite tools, the "ones you couldn't do without" and so I felt I own this to the JetBrains' guys and I'm giving all .NET developers (especially C# ones) a sincere advice:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;try &lt;a href="http://www.jetbrains.com/resharper/index.html"&gt;ReSharper&lt;/a&gt; and I'm sure you'll too find it wonderful. &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#000099;"&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;ReSharper has not only very good refactoring features (this days refactoring has become a quite common feature and in VS 2005 it's delivered "in the box") but it has also a couple of things that really makes your life easier: real-time error checking, extended code completion and unit testing integration.&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="color:#333399;"&gt;Real-time error checking&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;When you use Word you like to have your typos underlined in red as soon as you write them? if the answer is yes well you'll simply love ReSharper when it will highlight the code that will throw some compiler error as soon as you complete it (and some times it'll suggest too a resolution and apply automatically for you if you want!).&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="color:#330099;"&gt;Extended code completion&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;ReSharper offers you a customisable and really efficient code completion, you can have brackets added automatically or not, you can complete class names that belong to assemblies not yet referenced by a &lt;em&gt;using &lt;/em&gt;statement (and if you decide to use one class in that assembly ReSharper will add that statement for you), or you can use an intelligent completion that will try to guess which variable name or parameter you are going to write evaluating the type expected in that point).&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="color:#330099;"&gt;Unit testing integration&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;ReSharper finally offers a very cool integration with Nunit and csUnit (I'm using the first one) so that your tests are just a couple of click away when you have the test code opened in the editor.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;Just try it, and you'll love it.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;span style="font-size:78%;color:#993300;"&gt;&lt;strong&gt;Disclaimer: I've not received any money, gift, free licence or discount to write this blog entry. I'm currently using a licence of ReSharper regularly bought by my employer at the standard price.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-8648525709458679224?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/8648525709458679224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=8648525709458679224' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8648525709458679224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8648525709458679224'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2007/01/power-tools-resharper-definitely-most.html' title='Power tools: ReSharper, definitely the most intelligent add-in to VS'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-8364090787298631751</id><published>2007-01-08T22:34:00.000Z</published><updated>2007-01-09T18:21:28.878Z</updated><title type='text'>Strange internal links in Windows XP!</title><content type='html'>&lt;p&gt;Yesterday I run into a really, really .... really strange problem  with a PerformanceCounter object  on a .NET application developed more than one year ago, and that since then has been in production without any problem.&lt;br /&gt;&lt;br /&gt;I opened the application solution with VS and then as a first thing I tried to run it, but I received an error on a Performance counter that was there to monitor the processor usage.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt;"&gt;  PerformanceCounter pc;&lt;br /&gt;  pc = new PerformanceCounter("Processor", &lt;br /&gt;                              "% Processor Time", &lt;br /&gt;                              "_Total");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The error was something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:75%;" &gt;System.InvalidOperationException: Category does not exist.&lt;br /&gt;at System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)&lt;br /&gt;at System.Diagnostics.PerformanceCounter.Initialize()&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and I spent quite a while trying to find the reason of it. Only after one hour of so of searching I came across a document talking about a &lt;a href="http://www.mcse.ms/message2298547.html"&gt;Missing Processor Performance Counter&lt;/a&gt; which at some point talks about the &lt;span style="font-style: italic;"&gt;page file&lt;/span&gt;, and there the light was back on! A few weeks ago I disabled the page file to speed up my laptop and probably that's the reason now I received that error. In fact re enabling the swap file makes the error disappear, disabling it makes the error come back ...&lt;br /&gt;&lt;br /&gt;Ok now the point is, where is the link between a processor performance counter and the page file? (My only explanation is that the function measuring the performance of the processor is so tied up with the function measuring the performance of the page file that is hard to run the first if the second has to be disabled, but ... come on can that be true?)&lt;br /&gt;&lt;br /&gt;Anyway reading more carefully the messages in the previous link I found a Microsoft support page with the title &lt;a href="http://support.microsoft.com/kb/884558"&gt;Some performance objects and counters are not available in the System Monitor tool on your Windows XP-based computer [Article ID: 884558]&lt;/a&gt;. It confirms the problem is linked to the disabled page file and gives a link where is possible to get in touch with Microsoft support to require a patch.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-8364090787298631751?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/8364090787298631751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=8364090787298631751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8364090787298631751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/8364090787298631751'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2007/01/strange-internal-links-in-windows-xp.html' title='Strange internal links in Windows XP!'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-4357491930552446584</id><published>2007-01-08T20:37:00.000Z</published><updated>2008-01-31T08:57:47.929Z</updated><title type='text'>Lost a window out of screen? Just call a dev friend!</title><content type='html'>&lt;a href="http://patrickriva.googlepages.com/findandmoveto"&gt;You can now download an executable for .NET 2.0 here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A couple of months ago a friend of mine got in touch via gtalk to ask me how to solve a simple problem: he lost a windows! Well he had some clue to know the window existed but it was nowhere on the screen... As you probably are saying that's pretty simple ALT+spacebar, cursor keys and bring the little window back home; but that didn't work.&lt;br /&gt;&lt;br /&gt;I looked then for a freeware utility that could do the job, but after a few google searches on handle, windows, position etc. the results were pretty poor, so I said to myself "just dev it" and so the search on google was now api, enum, move, window, handle...&lt;br /&gt;&lt;br /&gt;In a couple of minutes I found:&lt;br /&gt;- &lt;a href="http://pinvoke.net/default.aspx/user32/EnumWindows.html"&gt;EnumWindows&lt;/a&gt;: to enumarate top-level windows on the screen&lt;br /&gt;- &lt;a href="http://pinvoke.net/default.aspx/user32/GetWindowText.html"&gt;GetWindowText&lt;/a&gt;: to get the title of the window&lt;br /&gt;- &lt;a href="http://pinvoke.net/default.aspx/user32/MoveWindow.html"&gt;MoveWindow&lt;/a&gt;: to move a window on the screen&lt;br /&gt;- &lt;a href="http://pinvoke.net/default.aspx/user32/GetWindowRect.html"&gt;GetWindowRect&lt;/a&gt;: to get the rect occupied by a window&lt;br /&gt;&lt;br /&gt;The following task was to interpreter the arguments passed to the console application (by the way you have probably already realized that this is written using C# on a .NET framework) and call the EnumWindows api passing the callback function through a delegate.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;  [STAThread]&lt;br /&gt;  static void Main(string[] args)&lt;br /&gt;  {&lt;br /&gt;    Process thisProcess    = Process.GetCurrentProcess();&lt;br /&gt;    _MyProcessName      = thisProcess.ProcessName.ToLower();&lt;br /&gt;      &lt;br /&gt;    if (args.Length &gt; 0)&lt;br /&gt;      _Filter = args[0].ToLower();&lt;br /&gt;&lt;br /&gt;    if (args.Length &gt; 1)&lt;br /&gt;      try { _Left = int.Parse(args[1]); } catch { }&lt;br /&gt;&lt;br /&gt;    if (args.Length &gt; 2)&lt;br /&gt;      try { _Top = int.Parse(args[2]); } catch { }&lt;br /&gt;      &lt;br /&gt;    CallBackPtr callBackPtr = new CallBackPtr(MoveIfWithText);&lt;br /&gt;    EnumWindows(callBackPtr, 0);        &lt;br /&gt;  }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Finally I had to write the function that for each top-level windows decided if it has to be moved, taking care of not moving the current one.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;  public static bool MoveIfWithText(int hwnd, int lParam) &lt;br /&gt;  { &lt;br /&gt;    StringBuilder sb = new StringBuilder(_MaxCaptionLength);&lt;br /&gt;    GetWindowText(hwnd, sb, sb.Capacity);&lt;br /&gt;    string OriginalTitle  = sb.ToString();&lt;br /&gt;    string titleToLower   = OriginalTitle.ToLower();&lt;br /&gt;    &lt;br /&gt;    if (_Filter.Length &gt; 0 &amp;&amp; titleToLower.IndexOf(_Filter) &gt;= 0 &lt;br /&gt;        &amp;&amp; titleToLower.IndexOf(_MyProcessName) &lt; 0)&lt;br /&gt;    {&lt;br /&gt;      Console.WriteLine("Moving window: " + OriginalTitle);&lt;br /&gt;      Rect rc = new Rect();&lt;br /&gt;      GetWindowRect(hwnd, ref rc);&lt;br /&gt;      MoveWindow(hwnd, _Left, _Top, rc.Width, rc.Height, 1);&lt;br /&gt;    }&lt;br /&gt;    return true;&lt;br /&gt;  }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Put it all togheter with the api declaration and a few comments and here you have the window recovery application. It took probably 10/20 minutes to develop the first version of the tool and send it back to my friend, so for a quick and dirty solution to a trivial problem maybe it's better to use google to look for api rather than freeware! ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Final complete code here:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 8pt"&gt;using System;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;public delegate bool CallBackPtr(int hwnd, int lParam);&lt;br /&gt;&lt;br /&gt;class FindWindowAndMoveTo&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  [DllImport("user32.dll")]&lt;br /&gt;  static extern int EnumWindows(&lt;br /&gt;    CallBackPtr callPtr, int lPar); &lt;br /&gt;&lt;br /&gt;  [DllImport("user32.dll")] &lt;br /&gt;  static extern int GetWindowText(&lt;br /&gt;    int hWnd, StringBuilder text, int count); &lt;br /&gt;&lt;br /&gt;  [DllImport("user32.dll")] &lt;br /&gt;  static extern int MoveWindow(&lt;br /&gt;    int hwnd, int x, int y, int nWidth, int nHeight, int bRepaint);&lt;br /&gt;&lt;br /&gt;  [DllImport("user32.dll")]&lt;br /&gt;  private static extern bool GetWindowRect(&lt;br /&gt;    int hwnd, ref Rect rectangle);&lt;br /&gt;    &lt;br /&gt;  [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;  public struct Rect &lt;br /&gt;  {&lt;br /&gt;    public int left;&lt;br /&gt;    public int top;&lt;br /&gt;    public int right;&lt;br /&gt;    public int bottom;&lt;br /&gt;&lt;br /&gt;    public int Width  { get{return right - left;} }&lt;br /&gt;    public int Height  { get{return bottom - top;} }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  const int  _MaxCaptionLength  = 1024; // buffer space&lt;br /&gt;  static int _Left  = 0; // new left coordinate (default 0)&lt;br /&gt;  static int _Top   = 0; // new top coordinate (default 0)&lt;br /&gt;&lt;br /&gt;  // text to filter the window(s) to move&lt;br /&gt;  static string _Filter        = string.Empty;  &lt;br /&gt;  &lt;br /&gt;  // window text of this process&lt;br /&gt;  static string _MyProcessName = string.Empty;  &lt;br /&gt;&lt;br /&gt;  [STAThread]&lt;br /&gt;  static void Main(string[] args)&lt;br /&gt;  {&lt;br /&gt;    // memorize the current window caption (necessary to avoid &lt;br /&gt;    // moving the console window in which the application is run. &lt;br /&gt;    // When you run an application from command line the name of &lt;br /&gt;    // the executable and of the PARAMETERS becames part of the &lt;br /&gt;    // window caption and thus contains the text we use to filter &lt;br /&gt;    // the window to move)&lt;br /&gt;    Process thisProcess    = Process.GetCurrentProcess();&lt;br /&gt;    _MyProcessName      = thisProcess.ProcessName.ToLower();&lt;br /&gt;      &lt;br /&gt;    // first argument: the text used as a filter, all the windows &lt;br /&gt;    // with this text in the caption will be moved to the new &lt;br /&gt;    // left/top coordinates&lt;br /&gt;    if (args.Length &gt; 0)&lt;br /&gt;      _Filter = args[0].ToLower();&lt;br /&gt;&lt;br /&gt;    // second argument: the new left coordinate&lt;br /&gt;    if (args.Length &gt; 1)&lt;br /&gt;      try { _Left = int.Parse(args[1]); } catch { }&lt;br /&gt;&lt;br /&gt;    // third argument: the new top coordinate&lt;br /&gt;    if (args.Length &gt; 2)&lt;br /&gt;      try { _Top = int.Parse(args[2]); } catch { }&lt;br /&gt;      &lt;br /&gt;    CallBackPtr callBackPtr = new CallBackPtr(MoveIfWithText);&lt;br /&gt;    EnumWindows(callBackPtr, 0);        &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static bool MoveIfWithText(int hwnd, int lParam) &lt;br /&gt;  { &lt;br /&gt;    // get the window’s caption text&lt;br /&gt;    StringBuilder sb = new StringBuilder(_MaxCaptionLength);&lt;br /&gt;    GetWindowText(hwnd, sb, sb.Capacity);&lt;br /&gt;    string OriginalTitle  = sb.ToString();&lt;br /&gt;    string titleToLower   = OriginalTitle.ToLower();&lt;br /&gt;    &lt;br /&gt;    // check to move the window only if the caption&lt;br /&gt;    // contains the text specified as a filter&lt;br /&gt;    if (_Filter.Length &gt; 0 &lt;br /&gt;        &amp;&amp; titleToLower.IndexOf(_Filter) &gt;= 0 &lt;br /&gt;        &amp;&amp; titleToLower.IndexOf(_MyProcessName) &lt; 0)&lt;br /&gt;    {&lt;br /&gt;      Console.WriteLine("Moving window: " + OriginalTitle);&lt;br /&gt;      // get current position and size of the window&lt;br /&gt;      // and move it to the new left/top coordinates&lt;br /&gt;      Rect rc = new Rect();&lt;br /&gt;      GetWindowRect(hwnd, ref rc);&lt;br /&gt;      MoveWindow(hwnd, _Left, _Top, rc.Width, rc.Height, 1);&lt;br /&gt;    }&lt;br /&gt;    return true;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-4357491930552446584?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/4357491930552446584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=4357491930552446584' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/4357491930552446584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/4357491930552446584'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2007/01/lost-window-out-of-screen-just-call-dev.html' title='Lost a window out of screen? Just call a dev friend!'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-3744901196473256773</id><published>2006-11-27T21:18:00.000Z</published><updated>2006-11-27T22:13:32.959Z</updated><title type='text'>Is it a bug or a pattern when a SQL Update statement creates records?</title><content type='html'>I've been working with databases for quite a few years so far, and one of the first ones I used was Microsoft Access working with VB3 (we're talking Windows 3.x of course!), but I never saw what I saw today... and after a few hours I'm still thinking that what I'm going to describe is a bug, or at least it's wrong from a strictly conceptual point of view.&lt;br /&gt;&lt;br /&gt;When you came across databases from a formal point of view you learn that you have four basic operations to perform the &lt;a href="http://en.wikipedia.org/wiki/CRUD_(acronym)"&gt;CRUD&lt;/a&gt; operations, and these are respectively INSERT for creating, SELECT for reading, UPDATE for updating, and DELETE for deleting records.&lt;br /&gt;&lt;br /&gt;What I saw today, is an UPDATE statement that is able to create records (and, as I said, In my &lt;em&gt;ideal&lt;/em&gt; world and UPDATE should only update records that already exists). If you want to see the &lt;em&gt;magic&lt;/em&gt; try the steps that follow.&lt;br /&gt;&lt;br /&gt;Note we've to use an UPDATE statement working on two tables linked with an OUTER JOIN, and if you argue that it's not a good thing to use an UPDATE on joined tables, above all if the join is an outer one, well ... I agree with you but since the engine allows me to do that I'm curios to see what happens when someone does it!&lt;br /&gt;&lt;br /&gt;The steps:&lt;br /&gt;&lt;br /&gt;[1] Create a blank Access database with three tables with the following instructions:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;create table TableA (&lt;br /&gt;ID INTEGER,&lt;br /&gt;Letter VARCHAR(50),&lt;br /&gt;constraint TableA_PK primary key (ID) );&lt;br /&gt;&lt;br /&gt;create table TableB (&lt;br /&gt;ID INTEGER,&lt;br /&gt;Description VARCHAR(50),&lt;br /&gt;constraint TableB_PK primary key (ID) );&lt;br /&gt;&lt;br /&gt;create table TableC (&lt;br /&gt;ID INTEGER,&lt;br /&gt;Description VARCHAR(50),&lt;br /&gt;RequiredInt INTEGER NOT NULL,&lt;br /&gt;OptionalInt INTEGER,&lt;br /&gt;constraint TableC_PK primary key (ID) ); &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[2] Popuate TableA insert a few records, here an example:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;INSERT INTO TableA VALUES (1, 'A');&lt;br /&gt;INSERT INTO TableA VALUES (2, 'B');&lt;br /&gt;INSERT INTO TableA VALUES (3, 'C');&lt;br /&gt;INSERT INTO TableA VALUES (4, 'D');&lt;br /&gt;INSERT INTO TableA VALUES (5, 'E');&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[3] Populate now TableB using an UPDATE statement (!)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;UPDATE TableA LEFT JOIN TableB&lt;br /&gt;ON TableA.ID = TableB.ID&lt;br /&gt;SET TableB.ID = [TableA].[ID],&lt;br /&gt;TableB.Description = "a description";&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you open TableB now you'll find the same number of records that are present in TableA, with the same IDs and with "a description" as a description, you just crated records with an UPDATE!&lt;br /&gt;&lt;br /&gt;TableC is there just to make an extra test, and verify that the UPDATE must set all the required fields in the new records, in fact you can try the two following queries and check that the first one fails and the second one succeeds since in the first one we don't set the RequiredInt field which is a not nullable one.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;UPDATE TableA LEFT JOIN TableC&lt;br /&gt;ON [TableA].[ID]=[TableC].[ID]&lt;br /&gt;SET TableC.ID = [TableA].[ID],&lt;br /&gt;TableC.Description = "a description";&lt;br /&gt;&lt;br /&gt;UPDATE TableA LEFT JOIN TableC&lt;br /&gt;ON [TableA].[ID]=[TableC].[ID]&lt;br /&gt;SET TableC.ID = [TableA].[ID],&lt;br /&gt;TableC.Description = "a description",&lt;br /&gt;TableC.RequiredInt = 1;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To be fair I've to say that what for me is conceptually wrong is a &lt;em&gt;&lt;a href="http://www.grahamwideman.com/gw/tech/accessjet/sqlposting.htm"&gt;useful SQL pattern&lt;/a&gt;&lt;/em&gt; feature for someone else, I don't want to argue of course, but personally I prefer the classical CRUD interpretation.&lt;br /&gt;&lt;br /&gt;Final note: I quickly tried to do the same in SQL Server, it seems that (thanks God) you're not allowed to use LEFT JOIN in an UPDATE statement, and if you create a view and the run the update against it then anyway NO new records are created (but if you have existing records that are used for the join those are, correctly, updated).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-3744901196473256773?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/3744901196473256773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=3744901196473256773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/3744901196473256773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/3744901196473256773'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2006/11/is-it-bug-or-what-when-sql-update.html' title='Is it a bug or a pattern when a SQL Update statement creates records?'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-116316912862225787</id><published>2006-11-10T14:31:00.000Z</published><updated>2006-11-10T14:53:56.722Z</updated><title type='text'>TechEd 06 Barcelona - Day 4</title><content type='html'>&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Users and roles, don't spend your time building something is in the box&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I wish I had seen this presentation a few months ago, it'd have saved me some days of work in the last project I was working on. The topic is users and roles management, it's quite a common one a developer will find himself working on at some point during his career, so I think it's useful to know that nowadays ASP.NET 2.0 includes in the bock a quite nice library that allows to manage users and roles in your web applications with really a bunch of lines of code. Moreover it also offer you a nice way to store user linked information in a cross session mode.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa478958.aspx"&gt;Microsoft ASP.NET 2.0 Member/Role Management with IIS, Part 1: Security and Configuration Overview&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa478947.aspx"&gt;Microsoft ASP.NET 2.0 Member/Role Management with IIS, Part 2: Implementation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Can a conference session without code and demos be interesting? Yes, it does&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I closed my participation to TechEd 2006 attending an Architectural session, &lt;a href="http://blogs.msdn.com/beatsch/"&gt;Beat Schwegler &lt;/a&gt;was talking a walk through one of the hottest topic concepts in this times: Service Orientation.&lt;br /&gt;I think he did that without putting a single time the SOA acronym on a slide, and that it's by itself quite a good point.&lt;br /&gt;Since a very similar presentation is available on the internet I won't try to synthesize the concepts exposed, if you are interested just have a look at it, &lt;a href="http://download.microsoft.com/download/5/f/2/5f224fcf-2ed2-4d29-814c-d3baac20d430/ARC201.ppt"&gt;Architecting Applications for a Service Oriented World&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/europe/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technorati.com/tag/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-116316912862225787?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/116316912862225787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=116316912862225787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116316912862225787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116316912862225787'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2006/11/teched-06-barcelona-day-4.html' title='TechEd 06 Barcelona - Day 4'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-116307673410344079</id><published>2006-11-09T12:23:00.000Z</published><updated>2006-11-10T14:53:56.632Z</updated><title type='text'>TechEd 06 Barcelona - Day 3</title><content type='html'>&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;LINQ to SQL, more than a query generator&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Yes, LINQ again, but this time in a database flavor, i.e. we're talking about LINQ to SQL (formerly named DLINQ and still showing that name in some links on the &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx"&gt;LINQ Project&lt;/a&gt; home page).&lt;br /&gt;I have to admit that I didn't deep the DLINQ project too much before, I just assumed it was simply a tool able to generate queries out of expression trees built with the new LINQ syntax given a database mapping. Well, surprise to me, LINQ does that but not only, it is really a complete tool to map objects to database tables and has an integrated proxy manager to avoid duplicated object instances for the same record and a persistence engine (using optimistic locking and, told but not present in the demo, some support to conflict handling).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;A walk on the wild side: IronPython&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In 2001 I changed job and in an hot July I found myself studying a new language called &lt;a href="http://en.wikipedia.org/wiki/Magik_programming_language"&gt;Magik&lt;/a&gt; (a language developed by &lt;a href="http://en.wikipedia.org/wiki/Smallworld"&gt;Smallworld&lt;/a&gt; for his own GIS platform that I was going to use over the next 3+ years). Coming from a VB, Oracle, SQL Server world I remember it was quite an impact, and It took a while to get familiar with it, but once did that I was able to really appreciate the freedom of a dynamic language and I also got to appreciate and exploit the 3 state booleans of the language (i.e. 3 possible values: &lt;em&gt;_true&lt;/em&gt;, &lt;em&gt;_false&lt;/em&gt;, &lt;em&gt;_maybe&lt;/em&gt; and the classical logical operators capable to deal with them).&lt;br /&gt;In 2005 I went fully back to Microsoft world and I found that things were moving in a nice direction, but I have to admit sometimes I found myself missing some bits and pieces of the previous experience. Thus I try to find some time to keep an eye on other languages like Ruby, Python, etc. and so having a session about &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; was a temptation too high to resist.&lt;br /&gt;I was able to find a lot of similarities with Magik and it look pretty interesting to have access to the .NET framework objects from inside a dynamic language, I must try to find the time to have a play with it, and who knows, maybe there is a &lt;em&gt;_maybe&lt;/em&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;To thread or not to thread&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I wasn't sure if I should write something about the threading topic, but I went to a session about it and the examples given were given in VB.NET, that made think that threading is becoming every day more important, and if also in VB you can play with it well it's worth a to take a pretty deep look at it (I hope VB guys won't be offended by this, I approached Windows development with VB 3.0 so I was a one of then back in 1994, and I still think the language may be the ideal one if you want to begin Windows programming).&lt;br /&gt;Today I use threading quite easily but I can remember having some pain in the past when I started playing with it, so I'll insert here a few links that could be useful to who is approaching that stuff today:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/hyz69czz.aspx"&gt;Managed threading basics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-gb/library/1c9txz50.aspx"&gt;Managed threading best practices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/8xs8549b.aspx"&gt;BackgroundWorker component&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Another quite important thing to know when playing with threads is "never touch UI stuff from outside the UI thread", in the following links:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms951089.aspx"&gt;Safe, Simple Multithreading in Windows Forms, Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms08162002.asp"&gt;Safe, Simple Multithreading in Windows Forms, Part 2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/europe/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technorati.com/tag/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-116307673410344079?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/116307673410344079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=116307673410344079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116307673410344079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116307673410344079'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2006/11/teched-06-barcelona-day-3.html' title='TechEd 06 Barcelona - Day 3'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-116299923181714808</id><published>2006-11-08T15:10:00.000Z</published><updated>2006-11-10T14:53:56.544Z</updated><title type='text'>TechEd 06 Barcelona - Day 2</title><content type='html'>&lt;strong&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;LINQ again&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I want to talk again about LINQ, that stuff really is something that appears interesting and useful in the years to come. In today's session &lt;a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg"&gt;Anders Hejlsberg&lt;/a&gt; went deeper in the implementation of the new tool and gave a quick description and demo of the features that are being added to c# to make LINQ possible.&lt;br /&gt;Between these I recommend you to give a look at:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implicitly Typed Local Variables (often described as &lt;em&gt;Type inference&lt;/em&gt;)&lt;/li&gt;&lt;li&gt;Extension Methods&lt;/li&gt;&lt;li&gt;Lambda Expressions&lt;/li&gt;&lt;li&gt;Object and Collection Initializers&lt;/li&gt;&lt;li&gt;Anonymous Types&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Although these features participate in making the final result possible (LINQ queries), they are there, in the language, ready to be used for whatever you want and need.&lt;br /&gt;If you want to get deep into the details two useful links are:&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/data/ref/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp"&gt;LINQ Project overview&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/cs3spec.asp"&gt;C# Version 3.0 Specification&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;The partial methods ghost&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It's not an error, I don't want to talk about partial classes, that's something that we already know, there is this new thing called &lt;em&gt;partial methods&lt;/em&gt; that briefly appeared in the morning session about c# 3.0, and that appeared again, for a bit longer, in his afternoon session.&lt;br /&gt;Partial classes have helped hugely code generation tools (among those Visual Studio itself takes advantage of this feature) but there are still some problems when the user needs to modify just a method that is in the generated code. He knows that the next time the code will be generated following a change to the model he will loose that change.&lt;br /&gt;Partial methods offer a, we must say, &lt;em&gt;partial&lt;/em&gt; solution to this allowing the code generators to insert calls to methods in points where more likely the users would like to insert code, and provide along them dummy definitions of the methods itself marked as partial.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;partial void OnRecordSave();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;br /&gt;The compiler will then deal with the method in two possible ways:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;if the partial method is defined with a proper implementation somewhere in the class then all is compiled as usual (and I guess the partial method declaration just ignored);&lt;/li&gt;&lt;li&gt;if the partial method has no implementation all the calls to it are simply ignored and no code is generated for them.&lt;/li&gt;&lt;/ul&gt;Andrews pointed out that probably events could be used to do something similar but they could present some overhead when, as an example, we are dealing with thousands of objects at the same time.&lt;br /&gt;&lt;br /&gt;Partial methods passed on the screen quite quickly, let's hope it's just because they are just not yet implemented in the current development version.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;A second look at ASP.NET AJAX&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Looking at &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX&lt;/a&gt; a bit deeper it's true, it takes away a lot of the JavaScript stuff you have to write to use AJAX technology, indeed in the examples seen it was just needed to perform calls to webservices.&lt;br /&gt;The core libraries (JavaScripts) needed by ASP.NET AJAX are of an acceptable size apparently, we should be looking at something in the order of 10 or 20 Kb, that seems to me pretty good.&lt;br /&gt;Moreover you can download a set of controls, the &lt;a href="http://ajax.asp.net/default.aspx?tabid=47&amp;amp;subtabid=477"&gt;ASP.NET AJAX Control toolkit&lt;/a&gt;, to have something immediately ready to use in your solutions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/europe/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technorati.com/tag/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-116299923181714808?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/116299923181714808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=116299923181714808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116299923181714808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116299923181714808'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2006/11/teched-06-barcelona-day-2.html' title='TechEd 06 Barcelona - Day 2'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35602893.post-116297282752717790</id><published>2006-11-08T07:38:00.000Z</published><updated>2006-11-10T14:53:56.445Z</updated><title type='text'>TechEd 06 Barcelona - Day 1</title><content type='html'>Well you open a blog and you are supposed to write something there, so since the blog is &lt;strong&gt;&lt;em&gt;&lt;span style="color:#000066;"&gt;just a dev&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;eloper's blog what better time to write something than the TechEd 2006 you're participating in Barcelona!&lt;br /&gt;I'll try to post every day some short notes and some link, if you ever attended this kind of conferences you'll know that the time you're left with is minimal since you want to get the most out of it and you end up at the end of the day just destroyed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;10 years old, Microsoft certified!&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What did impress me at the opening keynote on Tuesday the 7th? Well for sure the number of participants, about 4k, the LINQ quick look given by &lt;a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg"&gt;Anders Hejlsberg&lt;/a&gt; but above all the quick and sweet presentation of a c# application developed by &lt;a href="http://en.wikipedia.org/wiki/Arfa_Karim_Randhawa"&gt;Arfa&lt;/a&gt;, an 11 years old girl from Pakistan that more than one year ago was already Microsoft certified!&lt;br /&gt;At first I looked with tenderness at the code written by Arfa, something quite basic, something everyone would (should?) write after a couple of days passed on c#, but then I thought at where I started from, and I had a different perspective. I went back 20 years to my first computer, a &lt;a href="http://en.wikipedia.org/wiki/Commodore_Plus/4"&gt;Commodore Plus 4&lt;/a&gt;, that I received when I was 13 (thus older than Arfa) and I used the dear old &lt;a href="http://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt; to write my first program... so what code will this girl be writing in 20 years time?&lt;br /&gt;&lt;br /&gt;Well done Arfa, a huge applause well deserved!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;LINQ, something really cool for c#&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The other really cool thing of day 1 was the session about &lt;a href="http://msdn.microsoft.com/data/ref/linq/"&gt;LINQ&lt;/a&gt;, the Language INtegrated Query, that glues together a whole set of innovations concepts delivered in c# 3.0.&lt;br /&gt;The final result is that you can use SQL similar code to manage your memory data as well as your database or xml data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;The agile singing speaker&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The 11 year old girl speaking to 4k people was not the only peculiar thing on day 1, I also had my first experience of a singing speaker. At the end of his presentation, in fact, &lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy Osherove &lt;/a&gt;offered a funny song on the rhythm of &lt;em&gt;que sera sera&lt;/em&gt; about a development project.&lt;br /&gt;But the presentation was about serious and interesting stuff, not languages, not tips or tricks but a pragmatic introduction to agile development, quite interesting as a dev methodology (&lt;a href="http://teamagile.com/index.html"&gt;Team Agile&lt;/a&gt; could be a good starting point).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Finally AJAX&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Finally the last interesting bit the work done by Bill's guys on AJAX. From what seen at the presentation it seems that &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX&lt;/a&gt; (formerly known as ATLAS) takes away from the developer the pain (someone would say fun!) of JavaScript, callback, async stuff, etc.&lt;br /&gt;IT's definitely worth a try!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/europe/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technorati.com/tag/TechEd-Developers" rel="tag"&gt;TechEd-Developers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35602893-116297282752717790?l=justadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justadev.blogspot.com/feeds/116297282752717790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35602893&amp;postID=116297282752717790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116297282752717790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35602893/posts/default/116297282752717790'/><link rel='alternate' type='text/html' href='http://justadev.blogspot.com/2006/11/teched-06-barcelona-day-1.html' title='TechEd 06 Barcelona - Day 1'/><author><name>[pr]</name><uri>http://www.blogger.com/profile/00039724317135171128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
