<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4817591370063741827</atom:id><lastBuildDate>Wed, 01 Feb 2012 16:48:09 +0000</lastBuildDate><category>GIS</category><category>Personal</category><category>Visual Studio</category><category>Microsoft</category><category>Egypt</category><category>IE9</category><category>Consumer Devices</category><category>VirtualBox</category><category>Economics</category><category>SQL Server</category><category>AJAX</category><category>Windows Live Writer</category><category>Windows Live</category><category>Windows</category><category>Apple</category><category>Web</category><category>ASP.NET</category><category>Ads</category><category>Sync</category><category>Politics</category><category>IT Industry</category><category>Code</category><category>Learning Resourses</category><category>Browsers</category><category>Flash</category><category>PowerShell</category><category>Backup</category><category>Chrome</category><category>Logitech</category><category>Mozilla</category><category>Dell</category><category>Debugging</category><category>App Store</category><category>AMD</category><category>Obama</category><category>Wish List</category><category>Virtualization</category><category>Android</category><category>Kingston</category><category>GeoWeb</category><category>Adobe</category><category>SyncToy</category><category>Book Review</category><category>Office</category><category>Microsoft Virtual PC</category><category>VHD</category><category>Software Development</category><category>MacOS</category><category>Logging</category><category>WP7</category><category>Google</category><category>Corsair</category><category>C#</category><category>My Blog</category><category>Bing</category><category>Firefox</category><category>iPhone</category><category>VMware</category><category>Tools</category><category>log4net</category><category>Hardware</category><category>Internet Explorer</category><category>Mozilla Nightly</category><category>Ubuntu</category><category>Intel</category><category>Silverlight</category><category>.NET</category><title>Amr Eldib</title><description>Developer at Heart..</description><link>http://www.amreldib.com/</link><managingEditor>noreply@blogger.com (Amr Eldib)</managingEditor><generator>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AmrEldib" /><feedburner:info uri="amreldib" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>AmrEldib</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FAmrEldib" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/AmrEldib" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FAmrEldib" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FAmrEldib" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FAmrEldib" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-7863807058913069494</guid><pubDate>Fri, 13 Jan 2012 19:51:00 +0000</pubDate><atom:updated>2012-01-13T14:51:32.035-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">App Store</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><category domain="http://www.blogger.com/atom/ns#">Apple</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>An App Store for the Rest of Us</title><description>&lt;p align="justify"&gt;I’ve blogged a year ago about App Stores, calling that &lt;a href="http://www.amreldib.com/2011/01/everybody-gets-app-store.html" target="_blank"&gt;everybody gets an App Store&lt;/a&gt; or as Scott Hanselman &lt;a href="https://twitter.com/#!/shanselman/status/144635686966919168" target="_blank"&gt;tweeted&lt;/a&gt; it “There's an App Store for that!”. I had hope for Microsoft to build a better app store that isn’t like Apple’s. So much for my hopes that were crushed when the details of Windows 8’s store was &lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-previews-windows-8-app-store-launching-with-the-beta-in-late-february/11340" target="_blank"&gt;revealed last month&lt;/a&gt;. Microsoft &lt;a href="http://www.winrumors.com/microsoft-promises-developers-a-bigger-bite-of-the-apple-with-its-windows-8-app-store/" target="_blank"&gt;promised developers a bigger bite&lt;/a&gt; of the apple, bigger than Apple’s. 80% rather than 70%. Your app qualify for the bigger cut if your sales exceed 25,000$. &lt;/p&gt; &lt;p align="justify"&gt;While that seems generous, I still didn’t like the phrase Microsoft used to describe taking a percentage of your revenue; “Revenue Sharing”.&lt;/p&gt; &lt;div align="justify"&gt; &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 623px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:a0997665-3d1e-40ef-ac3e-e5574cd887ef" class="wlWriterEditableSmartContent"&gt;&lt;div id="a7655fa1-691c-4e33-b6e9-540772e0f140" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=37E3jQIs2AA" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/-yvOzARttfrI/TxCLQ3_VhEI/AAAAAAAAALk/3zCAwJ3s1Ec/video78b17b10187d%25255B15%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('a7655fa1-691c-4e33-b6e9-540772e0f140'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;623\&amp;quot; height=\&amp;quot;349\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/37E3jQIs2AA?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/37E3jQIs2AA?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;623\&amp;quot; height=\&amp;quot;349\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:623px;clear:both;font-size:.8em"&gt;Microsoft previews the Windows Store&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;p align="justify"&gt;Imagine the government re-labeling taxes as “Revenue Sharing”.&lt;/p&gt; &lt;p align="justify"&gt;So, Microsoft creates a platform (if we can pass upgrading Windows as creating a new platform), announces that the only way you can get applications of that platform is through their app store and then takes away a percentage out of every single copy sold on that platform.&lt;/p&gt; &lt;p align="justify"&gt;Imagine you’re a tiny shop building applications for Windows. Now, you want to switch your app that costs 10$ to the new Metro-style UI of Windows 8. How are you going to handle pricing? Are you giving up 3$ to Microsoft and reducing your income by 30% or are you going to raise your price to make room for the new cost and piss off your customers who have seen price increase with no features to justify it which eventually will lead (at least some) customers to jump ship to other products.&lt;/p&gt; &lt;p align="justify"&gt;Why is a 30% (or even 20%) cut out of every copy sold on Windows Store justified? Is Microsoft not making enough money from every single copy of Windows running on 90% of computers on the planet? Do they really need to have 30% share of the entire software revenue on top of Windows revenue.&lt;/p&gt; &lt;p align="justify"&gt;What exactly justifies taking a 30% cut? Hosting the application, distributing updates, reviews capabilities, all these doesn’t justify taking a percentage of revenue. No, it’s the monopoly. “You wanna build an app for this platform, then we’ll share revenue”. It’s all part of the Apple-ification of Microsoft. Redmond has been lifting pages out of Apple’s playbook, but this time they’ve gone too far. &lt;/p&gt; &lt;p align="justify"&gt;Apple has always used monopoly over its platform as a revenue generator. “Use our hardware”, “Use our software”, developers build little tools to add functionality to MacOS only to find Apple copy their ideas in the next release of the operating system and claim credit for it. Microsoft has always been unlike that. They celebrate partnership with other hardware and software vendors. They open up the chance for developers to build tools to cover up for Windows shortcomings. “Live and let live”. Not any more, it seems.&lt;/p&gt; &lt;p align="justify"&gt;It’s also the “consumerization”. Putting the consumer first. Let business, power users and tech people take a back seat for a bit. The average Joe is the center of attention. He doesn’t want better software or more control, doesn’t care about customization, just make it easier and more shiny even with fewer functionality. Maybe it’s just me, but consumerization ruins general-purpose computation and PCs as we know it today. Consumerization turns PCs and Computers into appliances. One for each function. They deprive me from the ability to create and turn me into a consumer to whatever big companies give me.&lt;/p&gt; &lt;p align="justify"&gt;I understand that this a lot to blame on an app store but it’s not the new functionality that bothers me. It’s the mentality with which it’s offered. An app store for Windows is a great feature that helps developers offer and distribute their applications. It’s been long over due. But Microsoft is taking the wrong approach to deliver this feature. If I were to build an app store for Windows, I would do the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;Make it a new way to get applications, not the only way&lt;/strong&gt;: Users should choose to use an app store because it’s better not because it’s the only way. At least a billion PC user in the world, I’m not gonna claim what’s best for them.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;Developers can host their own apps&lt;/strong&gt;: If you’re a developer and want to host your own app, that’s fine. An app store is only an entry point to discover all the different app repositories offered by all developers.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;Recommendations not Control&lt;/strong&gt;: I believe that it’s important to guide average users to what’s best for them. “You shouldn’t use this applications because it’s buggy”. But not do that by anointing yourself King of the world. When a user purchase an app from a developer, it’s an agreement between the two and the platform vendor has nothing to do with it. I know that this app is buggy but I still would like to use it, it’s performing a function that I really need right now, I don’t want for the developer to comply with your review process. As a platform vendor who cares about how your platform is performing and used, you can use recommendations. “Microsoft doesn’t recommend this app because of performance issues” or “because of privacy issues”, “Please read for more details”. Developers would get an explanation for the recommendation and be able to fix the problem. Microsoft gets to place its recommendation high in the list next to the application description. This recommendation would really affect user’s decision and wouldn’t be restrictive to users who know what they’re doing.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;Standards, Standards, Standards&lt;/strong&gt;: For this app store to be really open, and for it offer place for innovation by other software vendors, it has to rely of standards. A standard to how to discover apps, how to install them, license them, and update them. Standards that describe how these different process interact with each other, how two processes implemented by two different vendors can still work together. Microsoft can start by offering this standard and other would join.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It’s a shame really that Microsoft is taking over the software market like this. In times where there are attempts by governments to control the Internet, in more &lt;a href="http://en.wikipedia.org/wiki/SOPA" target="_blank"&gt;ways&lt;/a&gt; than &lt;a href="http://www.usatoday.com/tech/news/internetprivacy/2011-02-15-kill-switch_N.htm" target="_blank"&gt;one&lt;/a&gt;. It doesn’t help that giant software companies are restricting computers as well.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-7863807058913069494?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=4Wx72XvU5kA:-lI1ns6aA6E:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=4Wx72XvU5kA:-lI1ns6aA6E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=4Wx72XvU5kA:-lI1ns6aA6E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=4Wx72XvU5kA:-lI1ns6aA6E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/4Wx72XvU5kA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/4Wx72XvU5kA/app-store-for-rest-of-us.html</link><author>noreply@blogger.com (Amr Eldib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-yvOzARttfrI/TxCLQ3_VhEI/AAAAAAAAALk/3zCAwJ3s1Ec/s72-c/video78b17b10187d%25255B15%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2012/01/app-store-for-rest-of-us.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-2956420419983293862</guid><pubDate>Thu, 12 Jan 2012 05:25:00 +0000</pubDate><atom:updated>2012-01-12T00:25:33.163-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Windows Live Writer</category><category domain="http://www.blogger.com/atom/ns#">Windows Live</category><category domain="http://www.blogger.com/atom/ns#">Sync</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Sync Windows Live Writer Posts Between Computers</title><description>&lt;p&gt;&lt;img style="display: inline; float: right" align="right" src="https://public.sn2.livefilestore.com/y1pXz9ghSH071kCGDO68fx3YcX_s4r_Sa1Mgtl4A3-gYaCHW4rsiWuBfvBf3ebP9KNoMh1ByZWWaiukqRLpMf2b0Q/Windows_Live_Writer_logo.png?psid=1" width="125" height="125"&gt;With all the different PCs between work and home, desktops and laptops, synchronization is becoming very important. I wanted to sync blog drafts between different computers which turned out to be very simple. Unfortunately, Windows Live doesn’t offer a solution out of the box, even though Windows Live Essentials comes with Live Mesh along with Live Writer. It’s a matter of putting two and two together which what I’ll do. &lt;/p&gt; &lt;p&gt;First, &lt;a href="http://www.lehsys.com/2011/04/how-to-change-the-drafts-and-recent-posts-folder-in-windows-live-writer-2011/" target="_blank"&gt;change the posts folder of WLW&lt;/a&gt; (Windows Live Writer):&lt;/p&gt; &lt;blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;1. Open up regedit (in Win7, just type “regedit” into the start menu) &lt;/em&gt; &lt;p&gt;&lt;em&gt;2.&lt;strong&gt; &lt;/strong&gt;Navigate to &lt;b&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows Live\Writer&lt;/b&gt;&lt;/em&gt;  &lt;p&gt;&lt;em&gt;3. Right click on the “Writer” folder in the left pane and choose New &amp;gt; String Value &lt;/em&gt; &lt;p&gt;&lt;em&gt;4. Name the value &lt;b&gt;PostsDirectory&lt;/b&gt; and then double-click on it to edit &lt;/em&gt; &lt;p&gt;&lt;em&gt;a. You can try pointing it to your documents folder, which is normally “C:\Users\&amp;lt;your-username&amp;gt;\Documents\” in Win7 &lt;/em&gt; &lt;p&gt;&lt;em&gt;b. Or point it somewhere else. Note that Writer will create two child folders wherever you point it: &lt;b&gt;Drafts&lt;/b&gt; and &lt;b&gt;Recent Posts&lt;/b&gt;.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;p&gt;The folder I switch to is a folder under the folder I keep synced with Live Mesh. On the other computer, do the same steps. Change the posts folder to the folder you keep synced with Live Mesh. You’ll need to copy your existing posts and drafts from their original location which normally is &lt;strong&gt;&lt;em&gt;C:\Users\[User Name]\Documents\My Weblog Posts&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;Now you can start a post on my computer and finish it on the other. More importantly, you now have a backup of all your drafts on your SkyDrive.  &lt;p&gt;You can, of course, use Dropbox or any other synchronization service to keep the posts in sync.     &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-2956420419983293862?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=a96FxJMblEQ:tpEmlGJhs8E:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=a96FxJMblEQ:tpEmlGJhs8E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=a96FxJMblEQ:tpEmlGJhs8E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=a96FxJMblEQ:tpEmlGJhs8E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/a96FxJMblEQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/a96FxJMblEQ/sync-windows-live-writer-posts-between.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2012/01/sync-windows-live-writer-posts-between.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-1896017445864272043</guid><pubDate>Sun, 08 Jan 2012 04:42:00 +0000</pubDate><atom:updated>2012-01-08T00:45:16.267-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">Mozilla</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><category domain="http://www.blogger.com/atom/ns#">Mozilla Nightly</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><title>Mozilla: Beyond Firefox</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://public.sn2.livefilestore.com/y1pGF5l4Bo9JwpsgxiwSamDSdDgtVKWikqOcXmBxiSBtqHiwS9MuT7yFG8q5PJySYYqLEcSFXovB5AXl20_1Zaz1Q/MozillaLogo.jpg?psid=1"&gt;Who doesn't already know &lt;a href="http://www.mozilla.org/en-US/firefox/fx/" target="_blank"&gt;Firefox&lt;/a&gt;? But what other projects is &lt;a href="http://www.mozilla.org/" target="_blank"&gt;Mozilla&lt;/a&gt; working on?  &lt;p align="justify"&gt;I've taken an interest lately in finding out more about Mozilla. I think it all started with reading some of the “&lt;a href="https://wiki.mozilla.org/index.php?title=Mozilla.org/Contribute/Stories&amp;amp;amp;diff=377200&amp;amp;amp;oldid=prev"&gt;How I got started with Mozilla&lt;/a&gt;” stories on the &lt;a href="http://planet.mozilla.org/"&gt;Planet Mozilla&lt;/a&gt; feed.  &lt;p align="justify"&gt;I've always been interested in Mozilla's work. It's not open source applications that they build. Most companies now build some tool and open the source code to everyone. This is a noble effort on their part but I don't think that what open source development is about. It's about “Open” before “Source”. Having a community-driven open development process is the key here. Involve the community in the process designing features, and building them. Invite developers to listen in on your meetings. It's a great learning tool for new developers who can learn about what it's like to work on a team. This is what I really admire about Mozilla, the open process. I'll list later in this post some links on where you can see for yourself what I'm talking about.  &lt;p align="justify"&gt;Before I talk about all those projects, I want to take a moment to mention the &lt;a href="http://www.mozilla.org/about/manifesto.en.html"&gt;Mozilla manifesto&lt;/a&gt; (that I translated to &lt;a href="http://www.mozilla.org/about/manifesto.ar.html"&gt;Arabic&lt;/a&gt; back in 2009). Take a minute to read it. It might seem a high level goal that is not related to daily operations but reading a &lt;a href="http://philikon.wordpress.com/2011/12/11/take-webos-mozilla/"&gt;post about webOS and Mozilla&lt;/a&gt; lately, I watched how it's on everyone's mind. I think it really helps the mozillians stay focused on keeping the Internet open when they measure their decisions against the manifesto.  &lt;h3&gt;Firefox, Aurora and Nightly&lt;/h3&gt; &lt;p align="justify"&gt;There was always a nightly build of Firefox that if you search for it you can find an FTP page for it but it wasn’t official. With the new approach of versioning and releasing Firefox, nightly builds of Firefox have an official name “Nightly”. Last year, Mozilla came up with the 3 different names and &lt;a href="http://downloadsquad.switched.com/2011/04/11/new-firefox-nightly-and-aurora-logos-unearthed-and-how-to-enabl/" target="_blank"&gt;inspiring logos&lt;/a&gt; to make it easier to adopt beta version. Firefox is the stable final release for the masses, Aurora is the beta release, it’s stable but could have few bugs. Nightly is cutting edge and updates every night. I use Nightly and love that there’s a 64 bit version of it. You can get it from &lt;a href="http://nightly.mozilla.org/" target="_blank"&gt;Nightly’s page&lt;/a&gt;. You can also follow Nightly news on &lt;a href="https://twitter.com/#!/firefoxnightly" target="_blank"&gt;@FirefoxNightly&lt;/a&gt; or &lt;a href="http://firefoxnightly.tumblr.com/" target="_blank"&gt;Tumblr&lt;/a&gt;. They post details of the upcoming features. For more details, here’s &lt;a href="https://wiki.mozilla.org/Features/Release_Tracking" target="_blank"&gt;a complete list of features of Firefox, Aurora and Nightly&lt;/a&gt;. Here’s an example of a feature that should land soon in Nightly, the &lt;a href="http://people.mozilla.com/~jboriss/specs/home_tab_first_iteration_spec1.png" target="_blank"&gt;new Home Tab&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Mozilla Labs&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://mozillalabs.com/"&gt;Mozilla labs&lt;/a&gt; is the home of many great ideas that usually are built as addons to Firefox. Some of these projects “graduate” and become part of Firefox like:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://mozillalabs.com/jetpack/"&gt;Jetpack&lt;/a&gt;: the restart-less addons platform.  &lt;li&gt;&lt;a href="http://mozillalabs.com/personas/"&gt;Personas&lt;/a&gt;: which provides an easy way to skin Firefox.  &lt;li&gt;&lt;a href="http://mozillalabs.com/sync/"&gt;Sync&lt;/a&gt;: the indispensable sync capability to keep your Firefox profile up to date on multiple computers. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Other projects are not so lucky and are not active anymore including:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://mozillalabs.com/ubiquity/"&gt;Ubiquity&lt;/a&gt;: one of my favorite projects. Task-centric natural-language-based command line that brings web tasks from any web site to your fingertips. It's extensible and builds on web standards (HTML, CSS, and JavaScript).  &lt;li&gt;&lt;a href="http://mozillalabs.com/prism/"&gt;Prism&lt;/a&gt;: remember how Microsoft annoyed the heck out of everyone with “Pin a website to taskbar” feature in IE9. Well, before that there was Prism. Run any web app as a desktop application with the help of Firefox. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Meanwhile, a number of projects is always active:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://mozillalabs.com/testpilot/"&gt;Test Pilot&lt;/a&gt;: collects usage data and user feedback while maintaining user's privacy.  &lt;li&gt;&lt;a href="http://mozillalabs.com/contacts/"&gt;Contacts&lt;/a&gt;: centralizes the user's contacts in the browser and gives access to online services when requested and allowed.  &lt;li&gt;&lt;a href="http://mozillalabs.com/skywriter/"&gt;Skywriter&lt;/a&gt;: a web-based code editor. &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;BrowserID&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://en.wikipedia.org/wiki/OpenID" target="_blank"&gt;OpenID&lt;/a&gt; was a noble effort to outsource and centralize authentication of all the websites that we deal with everyday in a way that removes the hassle. For so reason, mainly the long ugly un-memorable URL, OpenID didn’t take over the web in the way it was hoped to.  &lt;p align="justify"&gt;Mozilla is take a shot at this problem with &lt;a href="http://www.BrowserID.org" target="_blank"&gt;BrowserID&lt;/a&gt;. Instead of outsourcing authentication to a third party, BrowserID uses the browser to authenticate users using their email address. You add your address as your browser ID and verify it by clicking a link in an email you receive from the BrowserID service then every site wants to authenticate you can rely on BrowserID for that. Watch the video for a demo:  &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 640px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e5f58bec-2a5d-4503-acd3-b13c02cd60a9" class="wlWriterEditableSmartContent"&gt;&lt;div id="3c94f471-b6e4-4e40-a50c-33007c2b493c" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=l0t9yDLAmFo" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/-TAgL3lauViw/Twkes5tnlmI/AAAAAAAAALg/hmIgdZ0IqfI/videoe8ad1aca041a%25255B8%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('3c94f471-b6e4-4e40-a50c-33007c2b493c'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;640\&amp;quot; height=\&amp;quot;360\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/l0t9yDLAmFo?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/l0t9yDLAmFo?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;640\&amp;quot; height=\&amp;quot;360\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:640px;clear:both;font-size:.8em"&gt;Introducing BrowserID from Mozilla&lt;/div&gt;&lt;/div&gt; &lt;p&gt;More info on BrowserID is &lt;a href="http://identity.mozilla.com/post/7616727542/introducing-browserid-a-better-way-to-sign-in" target="_blank"&gt;the introduction post&lt;/a&gt; or on &lt;a href="http://identity.mozilla.com/" target="_blank"&gt;Identity at Mozilla&lt;/a&gt; page. Here’s a &lt;a href="https://browserid.org/developers" target="_blank"&gt;quick tutorial for developers&lt;/a&gt;, the &lt;a href="http://myfavoritebeer.org/" target="_blank"&gt;demo site&lt;/a&gt; from the video. You can follow the development or contribute on &lt;a href="https://github.com/mozilla/browserid" target="_blank"&gt;Github&lt;/a&gt;.  &lt;h3&gt;WebFWD&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="https://webfwd.org" target="_blank"&gt;WebFWD&lt;/a&gt; (Web Forward) is a new program from Mozilla to support open source projects with mentorship, access to Mozilla global network and infrastructure and resources. If you have an open source project that helps keep the web open, you can qualify for support from Mozilla. Read a brief introduction &lt;a href="https://webfwd.org/about/index.html" target="_blank"&gt;here&lt;/a&gt; or follow the program’s news on their &lt;a href="http://blog.webfwd.org/" target="_blank"&gt;blog&lt;/a&gt; or &lt;a href="https://twitter.com/#!/mozwebfwd" target="_blank"&gt;@MozWebFWD&lt;/a&gt; or watch some &lt;a href="http://vimeo.com/webfwd" target="_blank"&gt;videos&lt;/a&gt;.  &lt;p align="justify"&gt;&lt;a href="http://bigbluebutton.org/" target="_blank"&gt;BigBlueButton&lt;/a&gt; is one of the projects participating in Mozilla’s WebFWD. It’s an open source project that enables universities and colleges to deliver high quality learning experience to remote students. Here are &lt;a href="http://bigbluebutton.org/content/videos" target="_blank"&gt;some videos showing how BigBlueButton works&lt;/a&gt;. It’s open source, &lt;a href="http://code.google.com/p/bigbluebutton/" target="_blank"&gt;download it now&lt;/a&gt;.  &lt;h3 align="justify"&gt;Mozilla Popcorn&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://mozillapopcorn.org/" target="_blank"&gt;Mozilla Popcorn&lt;/a&gt; tries to break videos from a big blob into browse-able element, this is how I see it. Videos, even though they’re everywhere on the web now, are still one element. You press play and watch. You can’t search in a video, you can’t make the video interact with other elements or contents that are related to this video. Popcorn tries to bring the web into video.  &lt;p align="justify"&gt;Watch the &lt;a href="http://katehudsondesign.com/demos/popcornmacbeth/" target="_blank"&gt;Shakespeare demo&lt;/a&gt; to get an idea of what Popcorn can do, it’s awesome (you’ll need a modern browser with HTML5 capabilities). Follow the project’s news on their &lt;a href="http://mozillapopcorn.org/blog/" target="_blank"&gt;blog&lt;/a&gt; or &lt;a href="https://twitter.com/#!/popcornjs" target="_blank"&gt;@PopcornJS&lt;/a&gt;. &lt;a href="http://mozillapopcorn.org/popcornjs/" target="_blank"&gt;Download a copy&lt;/a&gt;, or &lt;a href="https://github.com/webmademovies/popcorn-js" target="_blank"&gt;follow the development on Github&lt;/a&gt;.  &lt;h3 align="justify"&gt;What Else?&lt;/h3&gt; &lt;p align="justify"&gt;There’s one more project I’d like to talk about, it’s the &lt;a href="https://wiki.mozilla.org/B2G" target="_blank"&gt;Boot to Gecko mobile OS&lt;/a&gt;. I think it’s a big enough topic that it merits its own post especially I don’t know much about it and would like to do more reading on it. If you have good resources on the topic, please mention them in the comments.  &lt;p align="justify"&gt;This was a quick tour of the Mozilla projects that really interested me over those past couple of weeks. I’m sure there are much more of them our there. If the list is missing your favorite project, mention it in the comments or blog about it, I’d love to read more about it.  &lt;p align="justify"&gt;Follow &lt;a href="https://twitter.com/#!/firefox" target="_blank"&gt;@Firefox&lt;/a&gt; or on &lt;a href="https://www.facebook.com/Firefox" target="_blank"&gt;Facebook&lt;/a&gt; or &lt;a href="https://www.mozilla.org/contribute/" target="_blank"&gt;Contribute&lt;/a&gt; effort to the organization. Get some &lt;a href="http://store.mozilla.org/" target="_blank"&gt;Mozilla and Firefox gear&lt;/a&gt; or &lt;a href="https://donate.mozilla.org/page/contribute/openwebfund?WT.ac=shirt_us" target="_blank"&gt;Donate and get a free shirt&lt;/a&gt;.     &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-1896017445864272043?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=hhWDHYPNzzU:Z-BQrs1WxlE:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=hhWDHYPNzzU:Z-BQrs1WxlE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=hhWDHYPNzzU:Z-BQrs1WxlE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=hhWDHYPNzzU:Z-BQrs1WxlE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/hhWDHYPNzzU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/hhWDHYPNzzU/mozilla-beyond-firefox.html</link><author>noreply@blogger.com (Amr Eldib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-TAgL3lauViw/Twkes5tnlmI/AAAAAAAAALg/hmIgdZ0IqfI/s72-c/videoe8ad1aca041a%25255B8%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2012/01/mozilla-beyond-firefox.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-2707055541073969751</guid><pubDate>Sun, 08 Jan 2012 04:36:00 +0000</pubDate><atom:updated>2012-01-07T23:36:25.821-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Obama</category><category domain="http://www.blogger.com/atom/ns#">Book Review</category><title>Book Review: The Bridge</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://public.sn2.livefilestore.com/y1p6UE-wQruXF735UIbJ9kaOo8zXAP-mJffyRqjghOT_vH4vh5DMHNy8XXXib3zy1PvPlsb1amZvCrT2Z6GoxZzrg/TheBridge.jpg?psid=1" width="159" height="231"&gt;I've read quite a number of books about Obama, from the ones that were available during the 2008 campaign like David Mendell's &lt;a href="http://www.goodreads.com/book/show/1333713.Obama" target="_blank"&gt;"Obama: from Promise to Power"&lt;/a&gt; to the ones covering his first year in office like Richard Wolffe's &lt;a href="http://www.goodreads.com/review/show/132126779" target="_blank"&gt;"Revival"&lt;/a&gt;, Bob Woodward's &lt;a href="http://www.goodreads.com/review/show/123524533" target="_blank"&gt;"Obama's Wars"&lt;/a&gt; and Jonathon Alter's &lt;a href="http://www.goodreads.com/review/show/114949358" target="_blank"&gt;"The Promise"&lt;/a&gt;, not to mention Obama's two books. I list these books to brag but rather to show how David Remnick's book &lt;a href="http://www.goodreads.com/review/show/240926045" target="_blank"&gt;"The Bridge"&lt;/a&gt; is different. &lt;/p&gt; &lt;p align="justify"&gt;Even though Remnick's book goes through all the events of Obama's life like any biography would, it offers an analytical look into those events. It reviews Obama's first book and tries to look into the author's intentions sometimes. It's a little skeptic on some aspects of the author memories of certain events. Maybe my focus on this analytical look is because I've read an Obama biography before, but I think it's also because it's the intention of Remnick who chooses to cover the 2008 campaign in its relation to Race rather than cover the day to day events or uncover new secrets like &lt;a href="http://www.goodreads.com/review/show/114947071" target="_blank"&gt;"Game Change"&lt;/a&gt; does for example. &lt;/p&gt; &lt;p align="justify"&gt;However, the book does shed some light on events that weren't covered in other biographies of Obama like this time in Hawaii, the story of his mother, the process of selecting him as president of the Harvard Law Review, and other. &lt;/p&gt; &lt;p align="justify"&gt;One thing I like about "The Bridge" is the dive into the history of other characters that affects Obama's life even in indirect ways. The election of Harold Washington as Mayor of Chicago is a good example. Also, I liked the review of Obama's performance as a Law Professor, it's a good indication of how thinks. &lt;/p&gt; &lt;p align="justify"&gt;I listened to the audio version of the book and the narrator does a good job at changing voices to reflect the different characters participating in any dialog. He's at good pace and made following a 20+ hours books easy. &lt;/p&gt; &lt;p align="justify"&gt;"The Bridge" is a good biography of Obama whether you already read another biography or not. Hope you enjoy it too.&lt;/p&gt; &lt;p align="justify"&gt;Watch &lt;a href="http://www.thedailyshow.com/watch/thu-april-8-2010/david-remnick" target="_blank"&gt;David Remnick on The Daily Show with Jon Stewart&lt;/a&gt; interviewed about the book.  &lt;p align="justify"&gt;Find all my book reviews and become my friend on &lt;a href="http://www.goodreads.com/AmrEldib"&gt;Goodreads&lt;/a&gt;.    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-2707055541073969751?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=nPsiHpv4ZJk:gY82bD9UIIg:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=nPsiHpv4ZJk:gY82bD9UIIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=nPsiHpv4ZJk:gY82bD9UIIg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=nPsiHpv4ZJk:gY82bD9UIIg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/nPsiHpv4ZJk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/nPsiHpv4ZJk/book-review-bridge.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2012/01/book-review-bridge.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-5414132384423839501</guid><pubDate>Sun, 20 Nov 2011 04:21:00 +0000</pubDate><atom:updated>2011-11-19T23:26:53.306-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">Mozilla</category><category domain="http://www.blogger.com/atom/ns#">Ads</category><category domain="http://www.blogger.com/atom/ns#">Browsers</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><title>On Ad Blocking</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1psAO-xkceSRTapjaHuBVdnuHqDWIWIgBZv77GMCa4_WRmzlRsWKEiNfi7VX2Js4-Ty8wzJbetSgA/AdBlockPlusLogo.jpg?psid=1" width="130" height="130"&gt;I was reading this &lt;a href="http://monogatari.doukut.su/2011/11/why-ad-blocking-is-not-moral-dilemma.html" target="_blank"&gt;blog post&lt;/a&gt; on &lt;a href="http://planet.mozilla.org/" target="_blank"&gt;Planet Mozilla&lt;/a&gt; feed on the moral dilemma on using Ad blockers and I left a comment that is the idea behind this post. I use an &lt;a href="http://adblockplus.org/en/" target="_blank"&gt;Ad blocker&lt;/a&gt; and I'm aware that I'm not doing good to the sites that I visit. I agree that Ads build brand recognition and by not looking at them, I might be taking away revenue from those sites.&lt;/p&gt; &lt;p align="justify"&gt;This is why I disable my Ad blocker for almost all the sites that:&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;I use regularly and want to support.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;Their ads are not an assault on my eyes or doesn't offend me.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;I think that the reason this ad blocking started is because the ad providers (and indirectly the site owners) took unfair advantage of their users and threw all the crap that they could find at them (remember the &lt;a href="http://en.wikipedia.org/wiki/Pop-up_ad" target="_blank"&gt;good old days of pop-ups&lt;/a&gt;).&lt;/p&gt; &lt;p align="justify"&gt;Ad providers are doing a terrible job in matching sites’ content with ads. You go to a website to read a serious article and find an ad that is completely different and unserious just because this user's profile at the ad provider indicates that they might be interested in this ad.&lt;/p&gt; &lt;p align="justify"&gt;Content is subtle, but visual distraction can't be ignored. Ads give no regard to the page's colors and insert a foreign object with completely different colors. Some ads don't even care about having the correct size. Example is below (Click for bigger picture).&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="https://sn2files.storage.live.com/y1poMoLyNkn-tYzIXrwyX_zlN5N-H70SSh6lGEQSLzTqoRnSGuz0umrcP-kgJ9Q5kuRfiIXTCOmgsk/BestAdPlacementEver.png?psid=1" target="_blank"&gt;&lt;img src="https://sn2files.storage.live.com/y1p45EfuhY4chPcYI6JkyfTQJNUMxU-JPbWOI2ea6dNa4eI8Y9GBjQ7EASelyXmaXZv9rObO373OV8/BestAdPlacementEver_Small.png?psid=1"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Some sites don’t even care and display ads that are stupid and offensive. &lt;a href="http://twitpic.com/5uhzn3" target="_blank"&gt;Here’s an example&lt;/a&gt; of a (supposed to be respected) newspaper web site displaying (what is practically if not really) ad for a porn site. Some web sites don’t care about their users as much as they care about ad revenue. I understand that it’s a tough business, but I know a bad business strategy when I see one. Having no minimum when it comes to what is an acceptable ad is a bad business strategy.&lt;/p&gt; &lt;p align="justify"&gt;Some content provider think that “Content + Ad = Money” without thinking through what content or what ads. Those content providers will never imagine that one good option sometimes is displaying no ad at all. Users will respond to those providers by using Ad blockers.&lt;/p&gt; &lt;p align="justify"&gt;Instead of considering whether or not ad blocking should be a moral dilemma (which I can actually agree on), we should ask ourselves 'Why are users blocking ads?'.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-5414132384423839501?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ezgA6iiPntM:zoisLQUCWjI:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ezgA6iiPntM:zoisLQUCWjI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ezgA6iiPntM:zoisLQUCWjI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=ezgA6iiPntM:zoisLQUCWjI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/ezgA6iiPntM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/ezgA6iiPntM/i-was-reading-this-blog-post-on-planet.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/11/i-was-reading-this-blog-post-on-planet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-6057615882903315803</guid><pubDate>Fri, 18 Nov 2011 17:24:00 +0000</pubDate><atom:updated>2011-11-18T12:27:29.703-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">VHD</category><category domain="http://www.blogger.com/atom/ns#">Virtualization</category><category domain="http://www.blogger.com/atom/ns#">SyncToy</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><category domain="http://www.blogger.com/atom/ns#">SQL Server</category><category domain="http://www.blogger.com/atom/ns#">Backup</category><title>Mirroring Hard drives Using PowerShell and SyncToy</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pEqScU3Qzm04LrZAfaxrVuyoZ5-bVd236pu-9bPHmIIU-XF6G4isOlmp7gE5PHZnQfi-4uKO9Y9s/PowerShellLogo.jpg?psid=1" width="112" height="112"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pcyUQd4CpJG44gFqyyO9-I9fFQC-Ru43151DTeqlrOZPHZ2GRZLbjiKbNPa2Jzb5HpXU0yTR9Q58/SyncToyLogo.jpg?psid=1" width="109" height="109"&gt;My main protection against hard drive failure for a long time has been &lt;a href="http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1" target="_blank"&gt;RAID 1&lt;/a&gt;. I would get two identical hard drives and RAID them so that everything I do on the first drive would be replicated on the second. One time, this actually saved me from a hard drive failure with almost zero down time. &lt;/p&gt; &lt;p align="justify"&gt;I can say that this has worked out very well for a long time until one day I made a stupid mistake and accidently chose the wrong drive when installing Windows. I wiped out the data drive and sure enough RAID has mirrored everything I did. It was 4 days of crying, recovering data with &lt;a href="http://diskdigger.org/" target="_blank"&gt;DiskDigger&lt;/a&gt;, banging my head on the desk, recovering data, more crying, and so on. Since then, I dropped the RAID 1 on all my hard drives and switched to using SyncToy to mirror identical disks once a day.&lt;/p&gt; &lt;p align="justify"&gt;SyncToy is very simple to use and you can &lt;a href="http://www.pchell.com/support/synctoy.shtml" target="_blank"&gt;use it with Windows Task Scheduler&lt;/a&gt; to sync the drives at night. However, I ran into two main problems: Copying SQL Server database files, and Copying mounted VHD files. These files won’t get copied if they’re in use. To solve this problem, I need to stop the SQL Server service, and un-mount the VHD file before mirroring the drives. To do that and after &lt;a href="http://www.amreldib.com/2011/11/powershell-study-notes.html" target="_blank"&gt;learning all about it&lt;/a&gt;, I’ll be using PowerShell.&lt;/p&gt; &lt;h3&gt;Running PowerShell Scripts&lt;/h3&gt; &lt;p align="justify"&gt;The first thing to try out is running PowerShell scripts in Windows. If you’re running Windows 7 like I’m, you could run into the issue of restricted execution policy. If you try to run a PowerShell script, any script, you’ll find this error message:&lt;/p&gt; &lt;blockquote&gt;&lt;pre&gt;&lt;em&gt;&lt;strong&gt;File C:\test.ps1 cannot be loaded because the execution of scripts is disabled on this system. &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;Please see "get-help about_signing" for more details.&lt;/strong&gt;&lt;/em&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;This is caused by Windows limiting the ability to run PowerShell scripts by default. You can get the status of the execution policy using the PowerShell cmdlet &lt;strong&gt;&lt;em&gt;Get-ExecutionPolicy&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font color="#0000ff" face="Courier New"&gt;Get-ExecutionPolicy&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;To change the status of the execution policy use the &lt;strong&gt;&lt;em&gt;Set-ExecutionPolicy&lt;/em&gt;&lt;/strong&gt; cmdlet. Here, I’m switching to “Unrestricted”:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;Set-ExecutionPolicy&lt;/font&gt; &lt;font color="#0000a0"&gt;–ExecutionPolicy&lt;/font&gt; &lt;font color="#9b00d3"&gt;Unrestricted&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;Changing the execution policy is a one-time thing, you won’t have to worry about it again. Now, your Windows 7 is ready to run PowerShell scripts. You can read all about execution policy and running PowerShell scripts on Windows in this &lt;a href="http://technet.microsoft.com/en-us/library/ee176949.aspx" target="_blank"&gt;TechNet article&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Running PowerShell Scripts using Task Scheduler&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;The Task Scheduler will be responsible for running the script. It can’t run it directly, we’ll have to run PowerShell.exe and pass the script as an argument. It’s like running a PowerShell script from the command line. To do that we enter the PowerShell.exe path followed by &lt;strong&gt;“&amp;amp;&lt;/strong&gt; then the path to the script surrounded by single or double quotes (&lt;a href="http://www.leeholmes.com/blog/2006/05/05/running-powershell-scripts-from-cmd-exe/" target="_blank"&gt;Source&lt;/a&gt;). This helps with running scripts that have space in their path. Here’s an example:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” “&amp;amp; 'D:\Folder Name\Our Script.ps1'&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Copying Database Files&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;Before we start writing the script, we’ll have to test copying the database file. I stopped the SQL service using the Services management console and tried to copy the file but it failed. Database files by default are not owned by your Windows user account. You have to take ownership of the files (the MDF file and the Log file) and grant your Windows account sufficient permission to be able to copy the files. You can use the Properties dialog to take ownership of the files. I do that and now I can copy the files.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;I can write all the commands in the PowerShell script directly, but I would rather break down the script into reusable functions. To prepare to copy the database files, I have 3 functions; check the status of the SQL service, stop the service and start it. I would like to maintain the status of my SQL service as it is after the mirroring is complete. I want to stop the service and start it again only if it was actually running.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Checking the service status, stopping it, and starting it is the same for all services and is not related to SQL Server. You can read all about it &lt;a href="http://www.computerperformance.co.uk/powershell/powershell_service_start.htm" target="_blank"&gt;here&lt;/a&gt;. We can simply use the commands &lt;strong&gt;&lt;em&gt;Get-Service&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;Stop-Service&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Start-Service&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;I’m writing the functions in a bit of a generic way so that I can use them later in other scripts without having to change their content (only their name have to change). For example, I’m passing the name of the service. Here’s the &lt;strong&gt;&lt;em&gt;Get-SqlServiceStatus&lt;/em&gt;&lt;/strong&gt; function as an example:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;a href="https://sn2files.storage.live.com/y1px6JqF-PvGPZErGVqqnJG7MYACI6XJcxAoyxwoi3mt8qEYJTI0Jj88fmKP-ZVjJ1bCJR38-VYq0A/SqlServicePropertiesWindow.jpg?psid=1" target="_blank"&gt;&lt;img style="display: inline; float: right" title="" alt="Properties Window of SQL Service" align="right" src="https://sn2files.storage.live.com/y1px6JqF-PvGPZErGVqqnJG7MYACI6XJcxAoyxwoi3mt8qEYJTI0Jj88fmKP-ZVjJ1bCJR38-VYq0A/SqlServicePropertiesWindow.jpg?psid=1" width="250" height="281"&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;function&lt;/font&gt; &lt;font color="#9b00d3"&gt;Get-SqlServiceStatus&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;# Get a reference to the service&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;$sqlService&lt;/font&gt; = &lt;font color="#0000ff"&gt;Get-Service&lt;/font&gt; &lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;# Return the service status&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#ff0000"&gt;$sqlService&lt;/font&gt;.status&lt;br&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;All I need now is the name of the SQL service on my computer. To get the name of the service, navigate to the service properties dialog and pick the name of the service (not the display name). Make sure to use PowerShell escape characters to enter the name correctly. For example: “&lt;strong&gt;MSSQL$SQLEXPRESS&lt;/strong&gt;” have a dollar sign ($), so I have to add a backtick before the dollar sign to make PowerShell parse the name correctly “&lt;strong&gt;MSSQL`$SQLEXPRESS&lt;/strong&gt;”.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Mounting VHDs&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;I think that the common way to mount a VHD in PowerShell is using &lt;a href="http://en.wikipedia.org/wiki/Windows_Management_Instrumentation" target="_blank"&gt;WMI&lt;/a&gt; (Windows Management Instrumentation). A quick search online will confirm this. However, WMI is not available for Windows 7, it’s for Windows Server. We can’t mount the VHD file using WMI because the namespace “Root\Virtualization” is &lt;a href="http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/a08ad18f-4b6a-46a0-bd1f-274fbbc5b737" target="_blank"&gt;not available on Windows 7&lt;/a&gt;. This namespace include the class that could be used to mount the VHD file. If you’re running Windows Server and can use WMI, here’s a &lt;a href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2008/02/01/mounting-a-virtual-hard-disk-with-hyper-v.aspx" target="_blank"&gt;description of how to mount virtual hard drives with HyperV and WMI&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Aside from using WMI, normally we’d mount a VHD using the &lt;a href="http://www.windows7news.com/2010/01/14/how-to-automatically-attach-vhd-images-in-windows-7/" target="_blank"&gt;DiskPart command&lt;/a&gt;. To do that, create a file and name it AttachMyVHD.s for example and add this to it:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;code&gt;&lt;em&gt;&lt;strong&gt;select vdisk file=c:\MyVHD.vhd&lt;br&gt;attach vdisk&lt;/strong&gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Then create a Windows command (.cmd) file that call the diskpart command and pass this file to it.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;code&gt;&lt;em&gt;&lt;strong&gt;DiskPart -s "c:\AttachMyVHD.s"&lt;/strong&gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;In the S file, we’re selecting the VHD by specifying its location, then attaching it. In the Windows command file, we’re passing the S file to the DiskPart command.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In PowerShell, we’ll just execute the Windows command file. This &lt;strong&gt;Mount-Codebox&lt;/strong&gt; function declares a variable with the location of the Windows command file. Codebox is the name of the VHD file I’m using.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;function&lt;/font&gt; &lt;font color="#9b00d3"&gt;Mount-Codebox&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;$scriptFile&lt;/font&gt; = &lt;/strong&gt;&lt;strong&gt;&lt;font color="#c0504d"&gt;“D:\VBox\HardDrives\AttachVHD.cmd”&lt;br&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#a5a5a5"&gt;&amp;amp; &lt;/font&gt;&lt;font color="#ff0000"&gt;$scriptFile&lt;/font&gt;&lt;br&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;To unmount a VHD, you can do the same thing, except in the S file, use &lt;strong&gt;&lt;em&gt;detach vdisk&lt;/em&gt;&lt;/strong&gt; instead of &lt;strong&gt;&lt;em&gt;attach vdisk&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Before we unmount the VHD and re-mount it after the mirroring, we need to check if it’s already mounted. We don’t want our script to change an existing status, we want it to maintain it. If the VHD is not already mounted, don’t try to unmount, then re-mount it at the end. Just skip this step altogether.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;To check if the VHD is already mounted, we’ll just check if the drive it creates exists or not. To check if a drive exists, we’ll use the &lt;strong&gt;&lt;em&gt;&lt;a href="http://powershell.com/cs/media/p/202.aspx" target="_blank"&gt;Exists-Drive function&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;function&lt;/font&gt; &lt;font color="#9b00d3"&gt;Exists-Drive&lt;/font&gt; (&lt;font color="#ff0000"&gt;$driveletter&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;$drive&lt;/font&gt; = &lt;font color="#444444"&gt;New-Object&lt;/font&gt; &lt;font color="#9b00d3"&gt;System.IO.DriveInfo&lt;/font&gt;(&lt;font color="#ff0000"&gt;$driveletter&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;$drive&lt;/font&gt;.DriveType &lt;font color="#a5a5a5"&gt;-ne&lt;/font&gt; &lt;font color="#c0504d"&gt;'NoRootDirectory'&lt;/font&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;}&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Run SyncToy&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;To run SyncToy from PowerShell, we’ll use the same way we called the Windows command file above; using the &lt;strong&gt;&lt;em&gt;&amp;amp;&lt;/em&gt;&lt;/strong&gt; symbol to execute the SyncToy EXE file. We’ll call the SyncToyCmd.exe file which is the command line equivalent of the application so we can pass the name of the backup plan as an argument. If you use the command line to call SyncToyCmd, it’ll look like this:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font face="Courier New"&gt;SyncToyCmd –R “MyBackupPlan”&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;We’ll create the &lt;strong&gt;&lt;em&gt;Run-SyncToy&lt;/em&gt;&lt;/strong&gt; function with the backup plan name as an input so we can call it multiple times for different plans.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000a0"&gt;function&lt;/font&gt; &lt;font color="#9b00d3"&gt;Run-SyncToy&lt;/font&gt; (&lt;font color="#ff0000"&gt;$backupPlan&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;$Exe&lt;/font&gt; = &lt;font color="#c0504d"&gt;"C:\Program Files\SyncToy 2.1\SyncToyCmd.exe"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; &lt;font color="#ff0000"&gt;$Exe&lt;/font&gt; &lt;font color="#0000a0"&gt;-R&lt;/font&gt; &lt;font color="#ff0000"&gt;$backupPlan&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Write PowerShell Output to File&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;Logically, I’m running this script overnight and I would like to understand what happened while I’m away, so we’ll write the output of the script to a log file named with the date of when the script ran.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;To write the output of any PowerShell command or function to file, use the &lt;strong&gt;&lt;em&gt;Out-File&lt;/em&gt;&lt;/strong&gt; cmdlet. This &lt;a href="http://technet.microsoft.com/en-us/library/ee176924.aspx" target="_blank"&gt;TechNet page&lt;/a&gt; explains how to use it. Example:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;Get-ChildItem&lt;/font&gt; | &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#c0504d"&gt;"D:\MyOutputFile.txt"&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt; &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;This line write the output of the &lt;strong&gt;&lt;em&gt;Get-ChildItem&lt;/em&gt;&lt;/strong&gt; cmdlet to the text file named &lt;strong&gt;&lt;em&gt;MyOutputFile.txt&lt;/em&gt;&lt;/strong&gt; under the D drive. Notice the use of the two arguments –&lt;strong&gt;&lt;em&gt;Append&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; (which appends to the file if it already exists) and –&lt;strong&gt;&lt;em&gt;Force&lt;/em&gt;&lt;/strong&gt; (which creates the file if it doesn’t exist). &lt;/p&gt;&lt;br /&gt;&lt;p&gt;We’ll need to stamp the file name with time of when the script ran, to do that we’ll use the &lt;strong&gt;&lt;em&gt;Get-Date&lt;/em&gt;&lt;/strong&gt; cmdlet and the argument –&lt;strong&gt;&lt;em&gt;Format&lt;/em&gt;&lt;/strong&gt;. Example:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;Get-Date&lt;/font&gt; &lt;font color="#0000a0"&gt;-format&lt;/font&gt; &lt;font color="#c0504d"&gt;"yyyy-MM-dd HH-mm-ss"&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Putting It All Together&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;You can notice that all the work above just creates functions to be used in the main body of the script. Here’s where we put it all together.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;Clear-Host&lt;/font&gt;&lt;br&gt;&lt;font color="#008000"&gt;# Decleare variable to hold the service name&lt;br&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt; = &lt;font color="#c0504d"&gt;"MSSQL`$SQLEXPRESS"&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Where the log file will be stored&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$logHome&lt;/font&gt; = &lt;font color="#c0504d"&gt;"D:\Amr\Backup\BackupLogs\"&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Get timestamp&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$timeStamp&lt;/font&gt; = &lt;font color="#0000ff"&gt;Get-Date&lt;/font&gt; &lt;font color="#0000a0"&gt;-Format&lt;/font&gt; &lt;font color="#c0504d"&gt;"yyyy-MM-dd HH-mm-ss"&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Generate name of log file&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; = &lt;font color="#ff0000"&gt;$logHome&lt;/font&gt; + &lt;font color="#c0504d"&gt;"Backup Log "&lt;/font&gt; + &lt;font color="#ff0000"&gt;$timeStamp&lt;/font&gt; + &lt;font color="#c0504d"&gt;".txt"&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Write a starting message&lt;/font&gt;&lt;br&gt;&lt;font color="#c0504d"&gt;"Starting backup at $timestamp"&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Stop the SQL service if it's running&lt;br&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;$serviceStatus&lt;/font&gt; = &lt;font color="#0000ff"&gt;Get-SqlServiceStatus&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;)&lt;br&gt;&lt;font color="#c0504d"&gt;"Service $serviceName is $serviceStatus."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#0000a0"&gt;if&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceStatus&lt;/font&gt; &lt;font color="#a5a5a5"&gt;-eq&lt;/font&gt; &lt;font color="#c0504d"&gt;"Running"&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c0504d"&gt;"SQL service is running, stopping it..."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;Stop-SqlService&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;) &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Unmount Codebox if it was already mounted&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$CodeboxMounted&lt;/font&gt; = &lt;font color="#0000ff"&gt;Exists-Drive&lt;/font&gt; &lt;font color="#c0504d"&gt;"M:"&lt;br&gt;&lt;/font&gt;&lt;font color="#0000a0"&gt;if&lt;/font&gt; (&lt;font color="#ff0000"&gt;$CodeboxMounted&lt;/font&gt; &lt;font color="#a5a5a5"&gt;-eq&lt;/font&gt; &lt;font color="#c0504d"&gt;"True"&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c0504d"&gt;"Codebox is mounted. Unmounting Codebox..."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Unmount Codebox&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unmount-Codebox&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#c0504d"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Codebox is not mounted now."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;}&lt;br&gt;&lt;font color="#0000a0"&gt;else&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c0504d"&gt;"Codebox is not mounted"&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Run sync toy&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;Run-SyncToy&lt;/font&gt; (&lt;font color="#c0504d"&gt;"TestBackup"&lt;/font&gt;) &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Mount Codebox if it was already mounted&lt;/font&gt;&lt;br&gt;&lt;font color="#0000a0"&gt;if&lt;/font&gt; (&lt;font color="#ff0000"&gt;$CodeboxMounted&lt;/font&gt; &lt;font color="#a5a5a5"&gt;-eq&lt;/font&gt; &lt;font color="#c0504d"&gt;"True"&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c0504d"&gt;"Mounting Codebox..."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Mount Codebox&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mount-Codebox&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#c0504d"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Codebox is mounted now."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Run the SQL service if it's stopped&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$serviceStatus&lt;/font&gt; = &lt;font color="#0000ff"&gt;Get-SqlServiceStatus&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;)&lt;br&gt;&lt;font color="#c0504d"&gt;"Service $serviceName is $serviceStatus."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#0000a0"&gt;if&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceStatus&lt;/font&gt; &lt;font color="#a5a5a5"&gt;-eq&lt;/font&gt; &lt;font color="#c0504d"&gt;"Stopped"&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c0504d"&gt;"Starting SQL service..."&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start-SqlService&lt;/font&gt; (&lt;font color="#ff0000"&gt;$serviceName&lt;/font&gt;) &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;# Write end message&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;$finishTime&lt;/font&gt; = &lt;font color="#0000ff"&gt;Get-Date&lt;/font&gt; &lt;font color="#0000a0"&gt;-Format&lt;/font&gt; &lt;font color="#c0504d"&gt;"yyyy-MM-dd HH-mm-ss"&lt;/font&gt;&lt;br&gt;&lt;font color="#c0504d"&gt;"Backup script finished at $finishTime"&lt;/font&gt; &lt;font color="#a5a5a5"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;out-file&lt;/font&gt; &lt;font color="#ff0000"&gt;$logFile&lt;/font&gt; &lt;font color="#0000a0"&gt;-Append -Force&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Try It Out Yourself&lt;/h3&gt;&lt;br /&gt;&lt;p align="justify"&gt;You probably have a different backup strategy, but you can still take advantage of PowerShell and SyncToy in a whole host of other scenarios. &lt;a href="https://skydrive.live.com/?cid=a0f4e46186f7cce4&amp;amp;sc=documents&amp;amp;id=A0F4E46186F7CCE4%211240#" target="_blank"&gt;Download the script here&lt;/a&gt;. Tweak it till it fit your requirements and please leave a comment below if you have a question or found a bug somewhere in the script. Even if not for mirroring hard drives, this still was a nice exercise for using PowerShell. &lt;/p&gt;&lt;br&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Public/Blog/Mirroring%20Hard%20Drives%20using%20PowerShell%20and%20SyncToy/MirrorDrives.ps1?cid=a0f4e46186f7cce4&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-6057615882903315803?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=bh9zvBDCUw8:3KQWGwMj-Cs:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=bh9zvBDCUw8:3KQWGwMj-Cs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=bh9zvBDCUw8:3KQWGwMj-Cs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=bh9zvBDCUw8:3KQWGwMj-Cs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/bh9zvBDCUw8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/bh9zvBDCUw8/my-main-protection-against-hard-drive.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/11/my-main-protection-against-hard-drive.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-1286002769115326801</guid><pubDate>Sat, 05 Nov 2011 21:57:00 +0000</pubDate><atom:updated>2011-11-05T17:57:30.233-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Adobe</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><category domain="http://www.blogger.com/atom/ns#">Flash</category><title>How To Ruin Your Public Beta</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pZ-NBiDbJC88ols4JVtS8k3LD51zouuvqZR5_ooblmPu5LMDUgycxYQKHomqGBB9fRQsNXDI3tpc/AdobeLogo.jpg?psid=1" width="101" height="131"&gt;Couple of days ago, I downloaded and installed the latest beta of Adobe Flash (11.2.202.18 Beta 1). I downloaded the IE version and the non-IE version, and the x64 version. I like to test out the latest betas of almost all the software that I’m using; &lt;a href="http://www.amreldib.com/2011/10/what-i-use-part-2.html" target="_blank"&gt;I use Mozilla Nightly and Chrome beta&lt;/a&gt; (just updated to version 17 today). It’s my way of staying updated and keeping up with what’s coming next. I understand that I have to take some hits for using beta software but in return I get to enjoy all the new ideas months before everyone else, and every once in a blue moon I get to affect some feature in some upcoming release by providing feedback.&lt;/p&gt; &lt;p align="justify"&gt;After I installed Flash, I started noticing this annoying beta disclaimer appearing on YouTube videos (a Flash element).&lt;/p&gt; &lt;p align="justify"&gt;&lt;img src="https://sn2files.storage.live.com/y1p37M10PdydJ0bX3HP13mbCHNMADudpjtA4fDhE_x1PFRDoyQFYCNYUIoYm7NDQX9aTTN5InZQF04/FlashBetaDisclaimer01.png?psid=1"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pMzlVRmDU_EZKbyuFcckue7itL-eyU9y-n5F5BVwRLxfE25WjE9J6VO3zFrH1ikr8zAnL_7qkVZ8/FlashBetaDisclaimer03.png?psid=1"&gt;I ignored it at first, but then it started being really annoying. It’s hiding the full screen button in the YouTube player as you can see above. Then it started to get really annoying when it showed up on really small Flash elements; elements that are so small that I couldn’t see anything other than the disclaimer (look at the small Audible “Sample” button on the right). Naturally, I turned to Bing to start finding a solution for this annoyance. I found this &lt;a href="http://forums.adobe.com/thread/797926?start=0&amp;amp;tstart=0" target="_blank"&gt;post on Adobe forums&lt;/a&gt;. Here’s the answer from an Adobe employee:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Incubator builds are not preview, alpha or beta quality. It's before that state - this is code under active development. The watermark is a visual indicator of that fact. Many companies follow this practice for pre-release software - &lt;strong&gt;for example, Microsoft Windows pre-release builds have a watermark with version in the bottom right corner of the screen&lt;/strong&gt; to indicate it an evaluation and not a final version.&lt;/em&gt; &lt;p&gt;&lt;em&gt;Also, Flash Player is one of the most widely distributed pieces of software and our audience is quite broad. End users are by far our biggest customer segment. &lt;strong&gt;We need to make sure people - developer or end user - that install Incubator builds know and understand what they're getting themselves into.&lt;/strong&gt; In the past, we have seen links to previews and betas delivered out of context of the content we have on Labs that explains that pre-releases have not yet gone through security review, may not be stable, etc. These builds don't give users auto-update notification and can make it difficult for a user to install a release player (because it is a later version, or you must run the uninstaller before you install a different version).&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;So, there’s no way to remove the disclaimer. Now, beta users who are willing to use such an early beta of a software like Flash (which is a component more than a software) are not stupid users. They understand that this is a beta, they accept the risks of using such a software, they just don’t want to be annoyed by a stupid disclaimer.&lt;/p&gt; &lt;p align="justify"&gt;Someone argued in the forum post with a beta user about how Adobe is right and the beta users are wrong in complaining about this. One thing said is:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;&lt;em&gt;With all due respect tom, your comments are the very reason why Adobe tends not to let things publically available this early. They are afraid that people like you will make comments/judgments like this. You need to understand a little bit about software development, this is called an alpha build.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Not only that Adobe has already made this beta public, so they should just accept how users react. It also this a little condescending to assume that the user doesn’t know anything about software development, especially something as simple as what an alpha build is.&lt;/p&gt; &lt;p align="justify"&gt;To go back to the example that Adobe used to defend their choice, the beta disclaimer in Windows is actually an option in Windows that &lt;a href="http://www.windowssquad.com/how-to-display-windows-7-build-version-number-on-desktop/23/" target="_blank"&gt;you can turn on even in a non-beta release&lt;/a&gt;. Microsoft just chooses to turn it on by default in a beta release and leaves to the users the option to turn it off if they want to.&lt;/p&gt; &lt;p align="justify"&gt;Beta users are volunteers who come to you as a software maker and give you a great opportunity to take advantage of their time to test out your software and find out bugs and usage scenarios about it that you wouldn’t imagine. Their reward shouldn’t be that you treat them like crap and tell them that they’re wrong and don’t understand how software works. Their reward should be to make their lives easier, to welcome their feedback and suggestions, to treat them like they’re part of the team.&lt;/p&gt; &lt;p align="justify"&gt;Mozilla gives beta users access to a &lt;a href="http://input.mozilla.com/en-US/" target="_blank"&gt;feedback dashboard&lt;/a&gt;. They give them a button that is very simple to use with happy face and sad face and you only need to write a single sentence to say what’s on your mind. You don’t have to register, you don’t have to answer a survey or pick from a list. No, it’s a minimum barrier of entry, because they want you feedback and they’ll figure out how to make most of it.&lt;/p&gt; &lt;p align="justify"&gt;A public beta is not just publishing an early release of your upcoming version. It’s a process of including a new member in your development team; the public. Like any other member that is joining your team, if you don’t have a job description for them, or have tools ready for them to use, it’s all a waste of time and money. And what do Adobe do to this team member who is providing feedback, they decline their most basic feedback to have an option to turn this thing off. It’s a shame for Adobe to miss up something as simple as this. But others might say “What else is new?”.&lt;/p&gt; &lt;p align="justify"&gt;I’m uninstalling this early beta of Flash and going back to the version before that.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-1286002769115326801?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=fx4N2DW90-Q:1tJdGel2DzA:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=fx4N2DW90-Q:1tJdGel2DzA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=fx4N2DW90-Q:1tJdGel2DzA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=fx4N2DW90-Q:1tJdGel2DzA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/fx4N2DW90-Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/fx4N2DW90-Q/how-to-ruin-your-public-beta.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/11/how-to-ruin-your-public-beta.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-8288817058035189295</guid><pubDate>Tue, 01 Nov 2011 21:05:00 +0000</pubDate><atom:updated>2011-11-01T17:05:40.457-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>PowerShell Study Notes</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p_8EGrsEj6o7ZVv8qdFcN1kbGyUqxfTxqLRip6gVuT_dAo7gVLI6j40Wl-YpBiRmtYQBcw1ONHso/PowerShellLogo.jpg?psid=1" width="155" height="155"&gt;Last week, I found a great PowerShell tutorial over at &lt;a href="http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=powershell-intro" target="_blank"&gt;Pluralsight&lt;/a&gt; (by &lt;a href="http://arcanecode.com" target="_blank"&gt;Robert Cain&lt;/a&gt;). PowerShell has been a topic that I wanted to learn about for quite a while. As any power user/geek type of person, the command line is my friend but the standard DOS command line has been the same for years. That’s why PowerShell seemed so compiling. But the fact that it’s based on/using .NET objects and that it’s now integrated in Visual Studio 2010 made it a priority to understand what it’s all about.&lt;/p&gt; &lt;p align="justify"&gt;I finished the tutorial in a day. It’s less than 3 hours long and it’s pretty straight forward. I went over the tutorial again for a deeper understanding and took down some notes that I’m attacking to this post (You can &lt;a href="https://skydrive.live.com/?cid=a0f4e46186f7cce4#!/view.aspx?cid=A0F4E46186F7CCE4&amp;amp;resid=A0F4E46186F7CCE4!1214" target="_blank"&gt;view the document online here&lt;/a&gt;). &lt;/p&gt; &lt;p align="justify"&gt;I also found &lt;a href="http://www.powershellpro.com/powershell-tutorial-introduction/" target="_blank"&gt;another tutorial here&lt;/a&gt;, that is a series of posts with more details on PowerShell. You’ll find the list of posts in the series on the right side under the title “PowerShell Tutorials”.&lt;/p&gt; &lt;p align="justify"&gt;Basically PowerShell is a command line that handles .NET objects so that when a command return a result that result is a .NET object that you can retrieve the values of its properties or execute its methods. Even if the result is a simple string or integer, it’s a string object or int object.&lt;/p&gt; &lt;p align="justify"&gt;PowerShell is built with three very nice concepts in mind. &lt;strong&gt;One&lt;/strong&gt;, it has a script language built-in that has the basic capabilities and concepts of any programming language. Most are like .NET languages but always check your assumptions as it might lead to some confusion. &lt;strong&gt;Two&lt;/strong&gt;, it uses aliases for commands, so you’ll find that most DOS and Linux commands are supported; not as native commands but rather as aliases to native commands. &lt;strong&gt;Three&lt;/strong&gt;, it uses providers to support additional commands. For example, you can load the SQL provider and access SQL objects.&lt;/p&gt; &lt;p align="justify"&gt;I don’t want to dive too much into the topic, but I thought I should sum it up to get you interested if you’re new to it.&lt;/p&gt; &lt;p align="justify"&gt;Meanwhile, I hope the study notes can help. You can &lt;a href="https://www.pluralsight-training.net/microsoft/Subscribe/Step1?isTrial=True" target="_blank"&gt;try out the Pluralsight courses here&lt;/a&gt;, they have very reasonable &lt;a href="http://www.pluralsight-training.net/microsoft/Products/Individual" target="_blank"&gt;subscription plans&lt;/a&gt;. You can follow them and thank them on &lt;a href="https://www.facebook.com/pluralsight" target="_blank"&gt;their Facebook page&lt;/a&gt; if you like their stuff.&lt;/p&gt; &lt;p align="justify"&gt;PowerShell Study Notes&lt;/p&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Public/Blog/PowerShell%20Study%20Notes/PowerShell%20Study%20Notes.docx?cid=a0f4e46186f7cce4&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-8288817058035189295?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=q2vdftkcQI4:G94XvbO-CVo:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=q2vdftkcQI4:G94XvbO-CVo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=q2vdftkcQI4:G94XvbO-CVo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=q2vdftkcQI4:G94XvbO-CVo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/q2vdftkcQI4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/q2vdftkcQI4/powershell-study-notes.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/11/powershell-study-notes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-3123201722803905739</guid><pubDate>Sat, 29 Oct 2011 16:39:00 +0000</pubDate><atom:updated>2011-10-29T12:39:45.436-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Economics</category><category domain="http://www.blogger.com/atom/ns#">Book Review</category><title>Book Review: The Big Short</title><description>&lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="http://photo.goodreads.com/books/1290480108l/6463967.jpg" width="185" height="260"&gt;Amazing Story, Beautifully Told &lt;br&gt;In the tsunami of the economic crisis of 2008, there’s a million story. I've read many books on the topic and they cover it very well. "All the Devils are Here" covers the history. "Too Big To Fail" covers the top guys on Wall Street and Government during the crisis. "The Big Short" tells the story of few people who, while not connected at all, saw it coming. Not only did they see it coming but also made ton of money off of it. &lt;br&gt;Michael Lewis have a talent for adding a human touch on a tough cold subject like economics and trading on Wall Street. He dives in the background of the characters deep enough to make us understand why they do what they do but not too deep to make us bored with characters that are not known to the general public. &lt;br&gt;I don't really have many comments on the book itself other than the story is well told. I have lots of comments on the content of the story but I don't want to spoil it. All I can say is, this is probably the closest an economic story comes to a horror story.&lt;/p&gt; &lt;p align="justify"&gt;Find all my book reviews and become my friend on &lt;a href="http://www.goodreads.com/AmrEldib"&gt;Goodreads&lt;/a&gt;.    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-3123201722803905739?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=uDpH3zo5OOM:rjs5PVE-iNI:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=uDpH3zo5OOM:rjs5PVE-iNI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=uDpH3zo5OOM:rjs5PVE-iNI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=uDpH3zo5OOM:rjs5PVE-iNI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/uDpH3zo5OOM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/uDpH3zo5OOM/book-review-big-short.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/10/book-review-big-short.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-8797086069080012345</guid><pubDate>Tue, 25 Oct 2011 02:53:00 +0000</pubDate><atom:updated>2011-10-24T22:53:11.467-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mozilla</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">Mozilla Nightly</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Windows Live</category><category domain="http://www.blogger.com/atom/ns#">Internet Explorer</category><category domain="http://www.blogger.com/atom/ns#">VirtualBox</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">IE9</category><category domain="http://www.blogger.com/atom/ns#">MacOS</category><category domain="http://www.blogger.com/atom/ns#">Office</category><title>What I Use, Part 2</title><description>&lt;p align="justify"&gt;A few weeks I started with the hardware, today I continue with the software and services.&lt;/p&gt; &lt;h3 align="justify"&gt;Operating System&lt;/h3&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p_jmIDRrWt4PmrSaOX5oVWssv9og0tA9NKFEM_y8JjJqUnq7ZsKOvLXj6TAOwaAP8W1itCRFGNMM/WhatIUse2-Windows7.jpg?psid=1"&gt;Windows, what else? For a .NET developer, it’s really difficult to use another OS on your primary machine. I’m not a big fan of MacOS. Apple’s strength is in hardware not software, Windows is the best OS to run on a Mac. However, I love the idea of Linux. Not just the free and open source part of it, but the customizability of it. MacOS does few things very well and doesn’t let you draw outside the lines. Windows does a lot of things in mediocre to good way but because of the huge user base it has been turned upside down and inside out so many times to let a great degree of customization. Linux does everything in a poor way if you’re a beginner and great way if you’re a pro. Linux allows for a big degree of customization that is too much to resist for a power user. I’d love to switch to Linux (probably, Ubuntu) on my primary machine. Meanwhile, this post is coming to you from Windows 7 x64.&lt;/p&gt; &lt;h3 align="justify"&gt;Browsers&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://nightly.mozilla.org/" target="_blank"&gt;&lt;strong&gt;Mozilla Nightly&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p_jmIDRrWt4PXfikpdGjmiBRL5-hcTAhsHG9syOZKapqvCqVr0NOxFqzRNVKZb45NmwF44UzgFm0/WhatIUse2-FirefoxAuroraNightlyLogo.jpg?psid=1"&gt;Mozilla really made it easy to follow up on the different editions of Firefox when they announced &lt;a href="http://www.mozilla.org/en-US/firefox/channel/" target="_blank"&gt;Aurora&lt;/a&gt; and &lt;a href="http://nightly.mozilla.org/" target="_blank"&gt;Nightly&lt;/a&gt;. Nightly updates everyday but gives a sneak peak into all the latest features. Nightly have another advantage over Firefox, its x64 edition. This requires using a x64 edition of Flash which is finally &lt;a href="http://get.adobe.com/flashplayer/otherversions/" target="_blank"&gt;available from Adobe&lt;/a&gt;. It’s also causes giving up on Silverlight (sadly doesn’t have a x64 edition).&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pn24uZbGX2UtGgLD3ETHGCob6ib2Lc7VaRKlKRjdEs-Y1q4v-ZtszZrR_HUZibau6Cgu895jA0jU/WhatIUse2-Chrome.jpg?psid=1" width="99" height="99"&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pqdwNv2Y5Mjg6M7AIYSXus_T4onjw-ZYXbSjAxpxSiDX4E_qWTOJ8Rw28CdrWuUkhBx0ABjOJ4gM/WhatIUse2-IE9.jpg?psid=1" width="112" height="107"&gt;&lt;a href="http://www.google.com/chrome" target="_blank"&gt;&lt;strong&gt;Chrome&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; and &lt;/strong&gt;&lt;a href="http://windows.microsoft.com/en-us/internet-explorer/products/ie/home" target="_blank"&gt;&lt;strong&gt;IE9&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Other than Firefox, I’d like to keep other browsers installed for testing web applications on multiple browsers. Chrome is a really good browser that I would probably use if it wasn’t for Firefox and the fact that it’s built by Google. The monster is big enough and doesn’t need more reach into our personal data.&lt;/p&gt; &lt;p align="justify"&gt;Internet Explorer is already installed with Windows, but with IE9 you don’t have to hate it so much. It’s fast but have very few features compared to Firefox and Chrome.&lt;/p&gt; &lt;h3 align="justify"&gt;Documents&lt;/h3&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pD1rxopIS6Hzotq2Jn8GhUHOyTqWYLwg_YAgQOM0R6aQxfZiyRuy9EX-GPn5Xo2CAFPkNBigMKFY/WhatIUse2-Office2010.jpg?psid=1" width="255" height="84"&gt;&lt;a href="http://office.microsoft.com/en-us/products/" target="_blank"&gt;&lt;strong&gt;Office 2010&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Office with Windows is a no-brainer. Unlike most people, I really like the ribbon. Over versions 2007 and 2010, I discovered a lot of features because of the ribbon. Word and Excel are the applications that I use the most, but I really like Visio which is a great tool for visualizing ideas.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.foxitsoftware.com/Secure_PDF_Reader/" target="_blank"&gt;Foxit Reader&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;Like most people, for a long time, I used Adobe Reader as the PDF reader. It was the only one out there, until Foxit Reader came along and put speed into PDF reading. Version 5 of Foxit kept the great features but switched its visual appearance which made it a bit difficult to use it.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html" target="_blank"&gt;&lt;strong&gt;Sumatra PDF&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Sumatra PDF is free, open source, fast and lightweight. Works really well, except it doesn’t have a tabbed interface which I got used to after using Foxit for a while.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.pdfforge.org/" target="_blank"&gt;&lt;strong&gt;PDFCreator&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Easily create PDFs using a printer. I’ve noticed an error when printing an Arabic document, but it works well for the occasional PDF printing.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://notepad-plus-plus.org/" target="_blank"&gt;&lt;strong&gt;Notepad++&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Are you still not using Notepad++, really? really?&lt;/p&gt; &lt;h3 align="justify"&gt;Dev Tools&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="https://www.virtualbox.org/" target="_blank"&gt;&lt;strong&gt;VirtualBox&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;VMware is great, but VirtualBox is just as good. I’ve wrote before about &lt;a href="http://www.amreldib.com/2010/08/vm-based-development-environment.html" target="_blank"&gt;how I use virtualization in development&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.getpaint.net/" target="_blank"&gt;&lt;strong&gt;Paint.NET&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;As far as I can remember, this was the first .NET open source application I use on regular basis and actually enjoy using. Paint.NET is really powerful and cover all the image editing scenarios that I need either as a developer or a power user.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://icofx.ro/" target="_blank"&gt;&lt;strong&gt;IcoFx&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;As a developer, I don’t really create any icons but sometimes, I need to modify an icon. IcoFx works really well. Version 2.0 is now only a shareware but version 1.6 is a freeware. You can &lt;a href="http://www.filehippo.com/download_icofx/6890/" target="_blank"&gt;download it here&lt;/a&gt;.&lt;/p&gt; &lt;h3 align="justify"&gt;Visual Studio 2010 Extensions&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p3ubrjeIlN2qzruXjLuCHWpaTQqpx7viGZVF2R-G07ruWtsWA9UdS5D36T_jjXNspRP1J0xfMyNQ/WhatIUse2-VisualStudio2010.png?psid=1"&gt;&lt;/h3&gt; &lt;p align="justify"&gt;I thought it would be fitting to list the VS 2010 extensions that I use. It’s really easy to figure out their use from the title.&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/4b92b6ad-f563-4705-8f7b-7f85ba3cc6bb/" target="_blank"&gt;Highlight all occurrences of selected word&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e792686d-542b-474a-8c55-630980e72c30" target="_blank"&gt;Indent Guides&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e5f41ad9-4edc-4912-bca3-91147db95b99/" target="_blank"&gt;PowerCommands for Visual Studio 2010&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/" target="_blank"&gt;Productivity Power Tools&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/fc504cc6-5808-4da8-ae86-8d3f9ed81606" target="_blank"&gt;Reference Assistant&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce" target="_blank"&gt;Spell Checker&lt;/a&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/1c54d1bd-d898-4705-903f-fa4a319b50f2?SRC=Home" target="_blank"&gt;VS10x Code Map&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h3 align="justify"&gt;Cloud File Storage&lt;/h3&gt; &lt;p align="justify"&gt;With all the different offerings of file storage in the cloud, if difficult to pick just one. Almost all of them are free (at least have a free starting package that is enough for the occasional use). Here’s how I use different tools for different purpose.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="https://www.dropbox.com/" target="_blank"&gt;&lt;strong&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1po4KL62pzWL3K6YYsRQ4hVW_k6Q0IMF4HcC5QpgMRi4lALqjhaRiLRG0-HhDQCbxX0tKdHg3vqsM/WhatIUse2-Dropbox.png?psid=1"&gt;Dropbox&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;If you’re using a file that needs to be synced across different devices, then Dropbox is your best choice. It’s easy, fast and you’re dealing with a local file so it’s easy to forget that you’re actually syncing a file. Dropbox is great for sharing files with friends, because most people have it. Refer a friend to Dropbox or take advantage or their offers to increase space, I’ve increased mine to 4.5 GB (They have up to 10GB of free space). &lt;/p&gt; &lt;p align="justify"&gt;The downside of Dropbox is privacy. Their use of duplication technology to store one copy of a file across all users means that they’re reading every file you upload.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://explore.live.com/windows-live-essentials?os=other" target="_blank"&gt;&lt;strong&gt;Live Mesh and SkyDrive&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pRF_pCNhk8ZsZ2NJyxhiKD3aeSvhLUj-xIvfQvORXWbdat1LzweuaNcKSulwKr4Lc6pDpusVE5CI/WhatIUse2-SkyDrive.png?psid=1"&gt;For a Windows Phone user, SkyDrive is an essential part of the service. Photos are uploaded automatically and Office documents as well. SkyDrive is great in terms of size. Can’t go wrong with 25GB of free space. Live Mesh on the other hand is more of remote access tool rather than a file sync tool. It’s only available on Windows, so it can’t sync with a lot of devices. However, SkyDrive and Live Mesh are making great advances, and I expect that I’ll be using more of them compared to Dropbox.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.tonido.com/" target="_blank"&gt;&lt;strong&gt;Tonido&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pD1rxopIS6HxvECfuwq2i5AB0HaikLpEQEHOZP3BFbqppbkM9WiuATQgRldbxuEtTVno5iezPGaU/WhatIUse2-Tonido.png?psid=1" width="104" height="94"&gt;If you worry about your privacy in anyway, you’ll love Tonido. It lets you set up your own server offering your files for access over the Internet. The way it works is you install a small piece of software on your home machine (for example), register a sub-domain with Tonido for free, then the folders on the home machine are now available for access from any of Tonido’s clients including Web and all major smart phones (iPhone, Android, and WP7). It’s free and super easy to use. The downside is that access to your files depend on your Internet upload speed which is usually much lower than your download speed. However, Tonido acts as fall-back solution to Dropbox and SkyDrive, whatever file is not available on either service can be accessed via Tonido. Also, it’s great for accessing files through the phone when within the house WiFi range. If it detects that you’re within the same LAN as the server, it won’t go through the Internet but rather through the LAN directly which is much faster. The upside of Tonido is you can access all of your files all the time for free from anywhere.&lt;/p&gt; &lt;h3 align="justify"&gt;Social Media and Communication&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://www.metrotwit.com/" target="_blank"&gt;&lt;strong&gt;MetroTwit&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;I was never a fan of TweetDeck, and MetroTwit came along to offer a strong replacement. I was an early adopter to support a .NET/WPF project that seemed to have potential. But later it turned into a strong contender for best Twitter client on Windows. It’s really beautiful, based on the new Metro UI that is the cornerstone of WP7. It has almost all of the features that make for a great Twitter experience. However, if you’re a heavy Twitter user like I’m, you’ll start to run into the sluggishness that MetroTwit starts to have when dealing with really big numbers of tweets. The Plugin Container that hosts the displayed media (when playing a YouTube video or viewing a photo in-place) crashes often. This doesn’t affect the application itself, but it’s one of the areas that need work for the application to come out of beta. After all, it’s still the best Twitter client I’ve used.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.trillian.im/" target="_blank"&gt;&lt;strong&gt;Trillian&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;For a very long time, I’ve used Google Talk (which has become very very boring after not receiving any updates for the last 4 years at least) and Windows Live Messenger (good example of the unnecessarily&amp;nbsp; bloated software from Microsoft) everyday. Now Trillian comes along to replace both with slick interface, attractive features, and great degree of control and customization that please a power user like me.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.skype.com/intl/en-us/home" target="_blank"&gt;&lt;strong&gt;Skype&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Skype is like Twitter, you hate the software but love the service and can’t really replace it.&lt;/p&gt; &lt;h3 align="justify"&gt;File Management&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://www.cubicreality.com/" target="_blank"&gt;&lt;strong&gt;CubicExplorer&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;There are number of alternatives for Windows Explorer out there. Most of them are built for the super geek power user, but CubicExplorer actually works for the regular power user who wants to have bookmarks, restore session, and multi tabs. It’s free and open source, have nice themes and other web-browser-like functionality. Downside is that it’s built by one person and sometimes it can go for months without updates (which could be fine, there isn’t a lot of updates needed in the file browser world).&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.codesector.com/teracopy.php" target="_blank"&gt;&lt;strong&gt;TeraCopy&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Throw away this awful Windows copier and replace it with TeraCopy. It supports pause and resume, listing handled files, and it completely replace Windows copier.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.daemon-tools.cc/eng/products/dtLite" target="_blank"&gt;&lt;strong&gt;Daemon Lite&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Until Windows 8 comes along with native support for mounting ISO files, Daemon Lite is my tool of choice. Using ISO files has become much more common than it use to be, and it has become a natural replacement for using CDs/DVDs. I haven’t used my DVD in a long time, and I have gone for few months without it when I ran out of ports. ISOs are much more convenient, and the proliferation of 8 and 16GBs USB sticks has made it more convenient. Even when installing Windows, I can use a USB stick with a &lt;a href="http://download.cnet.com/Windows-7-USB-DVD-Download-Tool/3000-18513_4-10972600.html" target="_blank"&gt;simple utility&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://infrarecorder.org/" target="_blank"&gt;&lt;strong&gt;InfraRecorder&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;This utility is built originally to burn CDs/DVDs but I use it exclusively to create ISOs. Free and works great.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://calibre-ebook.com/" target="_blank"&gt;Calibre&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;Calibre is not really for managing files but digital books are a form of books. For a Kindle user like me who uses Kindle for more than reading books (reading articles, and blog posts), Calibre really helps keep my library in order. It can download and edit books metadata, can manage books on the Kindle, and can grab RSS items and turn them into e-books and place them automatically on your Kindle (or any other e-book reader). Try it.&lt;/p&gt; &lt;h3 align="justify"&gt;Media&lt;/h3&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.videolan.org/vlc/" target="_blank"&gt;VLC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pDxTQn3H6UfJ-q0Jab69ZyP-NJEiGri2U1b4oKn4xiGeH5JEe0Ny2q_7Pr3RUs7bNYEgcRX9K8mk/WhatIUse2-VLC.jpg?psid=1" width="111" height="111"&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pMKcdQnXM1QN2f5sRm71_8kGvSVoKQXsoMKm7Nw-BTRgUEkZG6Ftbc8u1bEiylTI_cfgpIK_g5Yc/WhatIUse2-Zune.jpg?psid=1" width="153" height="126"&gt;To play any video, use VLC. It’s that simple. Video are not like music where other features of the application would matter. For videos there’s only one feature that matter, Can I play it? with VLC the answer is always “Yes”.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.zune.net/en-US/products/software/download/default.htm" target="_blank"&gt;Zune&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;I’ve tried so many music player software but the Zune desktop player have great library features (for podcasts as well, not just music) and it has excellent UI design that makes it a lot of fun.&lt;/p&gt; &lt;p align="justify"&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.freemake.com/" target="_blank"&gt;Freemake (Audio Converter, Video Downloader, and Video Converter)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;While Widows Live Movie Maker and iMovie can edit movies, they can’t help with the step before that; getting some material to use in your video. You can download a YouTube video with Freemake, extract the audio track off of it, convert it to any format and then use it in your video. All free, all works really well.&lt;/p&gt; &lt;h3 align="justify"&gt;Utilities&lt;/h3&gt; &lt;p align="justify"&gt;&lt;a href="http://download.cnet.com/Windows-7-USB-DVD-Download-Tool/3000-18513_4-10972600.html" target="_blank"&gt;&lt;strong&gt;Windows 7 USB/DVD Download Tool&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Copy a Windows DVD/ISO to a USB thumb drive and install Windows from it using this utility.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.filehippo.com/" target="_blank"&gt;&lt;strong&gt;FileHippo&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Not only a great source for applications but also its “Update Checker” can keep most of your applications up to date. Try using Scheduled Task to check for updates once a week instead of check on system startup.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.piriform.com/" target="_blank"&gt;&lt;strong&gt;CCleaner, Speecy and Defraggler&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;All great utilities from Piriform. You can clean up caches and temp files using CCleaner. Watch out before you clean up something you might consider important like Browser History. &lt;/p&gt; &lt;p align="justify"&gt;Speecy gives you a detailed report on your machine and hardware. &lt;/p&gt; &lt;p align="justify"&gt;Defraggler is a really good replacement for Win Defrag.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=15155" target="_blank"&gt;&lt;strong&gt;SyncToy&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Very simple tool from Microsoft to keep two folders (or drives) in sync. You can &lt;a href="http://www.howtogeek.com/howto/25046/schedule-synctoy-to-run-automatically-with-task-scheduler-in-windows-7/" target="_blank"&gt;use Task Scheduler to run it at specific times&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://www.danielnetsoftware.com/en-US/" target="_blank"&gt;&lt;strong&gt;Logon Screen&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;I use my computer for very long hours and this simple (and nicely built) utility introduces a little change that makes it a little less boring. Here’s a &lt;a href="http://blog.seanmartell.com/2011/04/21/nightly-and-aurora-space-quest-goodies/" target="_blank"&gt;nice background&lt;/a&gt; to use on your lock screen for all Firefox fans.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.softperfect.com/products/networx/" target="_blank"&gt;NetWorx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;Small utility to keep an eye on how much bandwidth you’re using.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-8797086069080012345?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=DFcK8LmuQ1Q:4AcZbpoteKk:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=DFcK8LmuQ1Q:4AcZbpoteKk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=DFcK8LmuQ1Q:4AcZbpoteKk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=DFcK8LmuQ1Q:4AcZbpoteKk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/DFcK8LmuQ1Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/DFcK8LmuQ1Q/what-i-use-part-2.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.amreldib.com/2011/10/what-i-use-part-2.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-6744490346439588159</guid><pubDate>Sun, 18 Sep 2011 03:14:00 +0000</pubDate><atom:updated>2011-09-17T23:14:23.852-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iPhone</category><category domain="http://www.blogger.com/atom/ns#">Dell</category><category domain="http://www.blogger.com/atom/ns#">Consumer Devices</category><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Personal</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">Corsair</category><category domain="http://www.blogger.com/atom/ns#">Kingston</category><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Logitech</category><category domain="http://www.blogger.com/atom/ns#">AMD</category><category domain="http://www.blogger.com/atom/ns#">WP7</category><category domain="http://www.blogger.com/atom/ns#">Intel</category><title>What I Use, Part 1</title><description>&lt;p&gt;One way you can tell a geek is by looking at their setup. Setup is not just computer, OS and applications, but all surrounding elements that they use on daily basis. And it’s not the elements of that setup that makes it unique but rather how they come together and the story behind each element.&lt;/p&gt; &lt;p&gt;Here’s my humble attempt to describe mine.&lt;/p&gt; &lt;h3&gt;Hardware&lt;/h3&gt; &lt;p&gt;I prefer desktops to laptops. For me, if you’re not using the portability of a laptop, then you’re just wasting money on an expensive piece of hardware that you can’t upgrade and risk void its warranty just by trying to open it up. While desktops are huge compared to laptops and need their own desk, they’re cheaper, easily upgradable, and can’t be left on the bus. Also, desktops are very durable. I’m in my fourth year with this machine and it’s still working very well. Yes, it has received multiple upgrades but from the outside it all looks the same.&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p53edpAsTQfO6A5sqPD3jQe88GVowM0xGewe9P9q75Uai2NlH7GAeCAysilWrv5dsA089ip9WnQI/MasterCooler03.jpg?psid=1" width="254" height="198"&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Case&lt;/strong&gt;: I use a &lt;a href="http://www.coolermaster-usa.com/product.php?category_id=18&amp;amp;product_id=2700"&gt;Cooler Master 1000&lt;/a&gt; box for my own machine. Standing in the store picking this box is a bit difficult because you don’t really realize the benefit of getting such a big box with an expensive price tag, but let me tell you, it’s worth every penny. It’s not just how quite and cool it is, and not just that it had fit all my upgrades, but it’s the little things too. I can easily tear it down, clean it up and put it back together in 2 hours, something that I like to do once every 6 months.&lt;/p&gt; &lt;p&gt;The Cooler Master comes with screwless doors and hard drive bays, removable air filters, and two long metal handles for carrying it around, not that you have to, it’s a 38 lbs box, so you might want to avoid carrying it.&lt;/p&gt; &lt;p&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1p53edpAsTQfPyaCCZw7UeisApWSHtQSaq1WDWqjAVS3mmeww6qp7JnXynyPMCrcbkpvx7YXc_8Fs/MasterCooler01.jpg?psid=1" width="294" height="226"&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Processor&lt;/strong&gt;: While I love AMD, and think that it’s very competitive with Intel. I got a very good deal on my &lt;a href="http://ark.intel.com/products/33922/Intel-Core2-Quad-Processor-Q9300-%286M-Cache-2_50-GHz-1333-MHz-FSB%29"&gt;Intel Core 2 Quad Q9300&lt;/a&gt; (overclocked to 3.0 GHz) which was almost the latest when I got it. My strategy when getting hardware is to get the latest item when it comes to components that are long term like processors. You’re not gonna change your processor every year or two, it’s something that should live for 4 to 5 years on a day to day machine and then be moved to a secondary machine for the next 5 years. So, you get the latest product within your price range and 3 years later it’s still as powerful as the new line of products.&lt;/p&gt; &lt;p&gt;The Core 2 Quad is setting on top an ASUS Maximus RoG (Republic of Gaming) motherboard. It has excellent overclocking capabilities and great bios software, with great audio card, and plenty of all forms of ports (USB, and external SATA).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt;: I’ve started with 2 x 2GB of Corsair DDR3 RAM overclocked to 1600 MHz, I’ve followed with another 2 x 2GB to take full advantage of all slots and offer enough RAM for hosted VMs.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Graphics Card&lt;/strong&gt;: I can’t really brag too much about the Graphics card, an ATI Radeon HD 3800, because by the time you pick a graphics card and the time you reach the store to buy it, there’s already a graphics card that has been released that makes yours seems old. What I can do is say that this ATI Radeon card has worked and is still working great for me.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pk78s3z0Ys9V4G1CeiP_f6JD5kl8qu_E5jKMph27ZyY3E1ugwRO1qEqvh_2lfuTgtDezqMWlsmYY/KingstonSSD02.jpg?psid=1"&gt;Hard Drive&lt;/strong&gt;: The only thing I don’t have from the original computer that I assembled more than 3 years ago is the hard drives. All gone and replaced with new ones. Data grows at an unreasonable rate and the falling prices of hard drives tempt you into following the rule of “Don’t Delete Anything”.&lt;/p&gt; &lt;p&gt;My main backup strategy was to use RAID. If I’m gonna need a hard drive to store a copy of my data as a backup, then I would just get two of the same hard drive, make them a mirror of each other and in the process get a faster reading speed. This plan worked great to protect against hard drive failure which actually happened when one drive failed and was replaced with all data not affected. One flaw with this plan though, when I accidently chose the wrong drive when installing a new Windows, I wiped out not only the hard drive but also its mirror. In the span of the 7 seconds it took me to realize the stupid mistake that I’ve made, I had lost the partition table on both drives, and basically the map to all my data. I was able to recover my data sector by sector in a very long and painful process but the marks are still on the wall from where I banged my head as a punishment. Now, I’ve removed the RAID and just use &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=15155"&gt;SyncToy&lt;/a&gt; to sync between the two mirrors once a day to protect from hard drive failure and accidental stupidity.&lt;/p&gt; &lt;p&gt;I use a 120GB Kingston SSDNow V+100 Sold State Drive for my OS drive. The idea is always to totally separate Windows from your data. I don’t ever use “My Documents” or the desktop to store any important data (or really any data at all). The idea is that the OS can go at anytime. You can update Windows after installing this beta software and boom it’s BSOD and you can’t even go into the safe mode to figure out what the problem is. Backup will help you but restoring a 60GB of Windows is much easer than restoring 1TB of Windows and data just to get Windows working again.&lt;/p&gt; &lt;p&gt;I use a solid state drive only for the OS since they’re very expensive. However, the effect they have on boot time and startup time of applications is obvious to the naked eye. I’m still not comfortable moving to SSDs for storing data. The idea of hard drives failing without any warning signs is worrying. I’m too accustomed to physical hard drives to move to SSDs. Of course all these worries will disappear when SSDs are affordable because the difference in performance is just that obvious.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;img src="https://sn2files.storage.live.com/y1psu56S5n2wmGNhiwYSF_BN4hVNduT2AqS_Nh5z92NL0B7UH2qZ1fmC5NOi-pQKtS9vZEKoKxGn5I/DellMonitor02.jpg?psid=1"&gt;&lt;img src="https://sn2files.storage.live.com/y1p3jPFOiI42fq8o1PxtX_nf1mi9TTjfoNQ0JPIpM1cLQ-p1iM_pnkrWaSiODBxhfYJOIt47JoDuTk/DellMonitor01.jpg?psid=1" width="301" height="232"&gt;&lt;img src="https://sn2files.storage.live.com/y1p3Bcpd2c7As5YQ6-1U7SmTXtYMXgThbLErrx5c3wc446xYNmVflDkghRBg0h0677JMp57-Pb8fsU/DellMonitor03.jpg?psid=1" width="243" height="243"&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Monitors&lt;/strong&gt;: one thing that laptops can’t beat for sure is multiple monitors and monitor size. I use two Dell WFP wide screen series monitors. One is 24” and the other 22”. I was surprised to know that Dell makes the best monitors but it’s true. However, I have to say that the 24” is much better than the 22”. I don’t mean in terms of size but rather color. For some reason, the white (the most obvious example) is not quite the same on the two screens. Maybe it’s the settings but I think it’s a slight difference in the model. Advice: if you want to get two or more monitors, try to get the same monitor, even if it’s not the best quality, but the consistency between the different monitors is worth it.&lt;/p&gt; &lt;p&gt;One thing I really like about these Dell monitors is the adjustable handles. You can change height, rotation, tilt without moving the base. One thing I hate about these monitors is that they make me hate my work monitor. Getting used to using two monitors with certain setup and quality makes other monitors seem awful.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pAOXykw7UY1B91pWOXhYEDc5KpewOhk69FFW04kgX4tKu25i5efItBdVzlRpHhBSPCHfP4zQ9scU/LogitechPerformanceMouseMX01.jpg?psid=1" width="222" height="202"&gt;Mouse and Keyboard&lt;/strong&gt;: Logitech is your best friend here. Microsoft makes a noble effort and always comes out with new good products, but I’m super picky about the mouse and keyboard. I need to not looking at them at all and I need to do shortcut as much stuff as possible.&lt;/p&gt; &lt;p&gt;I use a &lt;a href="http://www.logitech.com/en-us/mice-pointers/mice/devices/5845"&gt;Logitech Performance Mouse MX&lt;/a&gt; with (an impressive) 10 buttons. Only 9 of them are programmable with 1 button physical button for fast scrolling. However, it works great for browsing, you don’t need a keyboard for going back and forward. It also works great as a remote control for media player with volume control (up, down and mute) and Play/Pause control. You’ll have to use Logitech software to program these buttons because this is not the default setting. I’ve tried so many settings until I settled on this one and you can come up with your own of course.&lt;/p&gt; &lt;p&gt;&lt;img style="display: inline; float: left" align="left" src="https://sn2files.storage.live.com/y1pnYJWJqxY51L6e7ltBEz66471dJke61FtJTpTATp_UshREgs-UQ7B2n61ziDkQP6rHCnKZQc_PEk/LogitechWave01.jpg?psid=1" width="280" height="197"&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Logitech completes the comfort to my fingers with &lt;a href="http://www.logitech.com/en-us/keyboards/keyboard/devices/5994"&gt;Logitech Wave&lt;/a&gt;. While it’s not cordless, I love the rubber pad below the keyboard where I could rest my hands. I takes a while to get used to the Home/End/Delete buttons of this keyboard and sometimes confuses you when you switch to another keyboard with two rows of 6 buttons but you’ll get used to it.&lt;/p&gt; &lt;p&gt;I don’t really use the programmed keys because I never got used to using them not on this keyboard or any other really.&lt;/p&gt; &lt;p&gt;Recently, I’ve switched to &lt;a href="http://www.microsoft.com/hardware/en-us/p/wireless-comfort-desktop-5000/CSD-00001"&gt;Microsoft Comfort Desktop 5000&lt;/a&gt; which have a very nice wireless keyboard that is much quitter than the Logitech, but I’m not too crazy about the mouse. Still, nothing beats a 10-buttons mouse.&lt;/p&gt; &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="https://sn2files.storage.live.com/y1pwRqOX1iz8OueyNZpSEv3XGUnoSVzNRH0oOUk5bTqld4Ur6o7RUq9GH7S50rjhrcukQiyhgMRjFE/MicrosoftComfortDesktop01.jpg?psid=1" width="406" height="278"&gt;&lt;/p&gt; &lt;p&gt;I have another PC that I use as a file server and to store my backups. AMD is the perfect balance between getting stuff done and doing it on the cheap.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Phone:&lt;/strong&gt; some people think it’s tough being a Windows Phone guy. You’re surrounded by a lot of iPhone, Android and Blackberry fan &lt;img style="display: inline; float: right" align="right" src="https://sn2files.storage.live.com/y1pZ7txuGFlgFG4CnKs68kGJfZqvkGSULjYlvXwr-yND3eQvkTJklC1Mc0Bbr3B7xg2X_lax2NIgoo/SamsungFocus01.jpg?psid=1" width="340" height="278"&gt;boys who can’t stop telling you how great their phones are. For me, even though I’m surrounded by those people (the only people I know who have a Windows Phone are on Twitter). However, it’s really easy having a Windows Phone. It plays really well with all the Microsoft services that I use. But more importantly, I think that Microsoft struck a nice balance between iPhone and Android. WP7 (Windows Phone 7) is easy to use and fast like an iPhone and is open and easy to develop to like Android. Before you hate me for comparing WP7 to your favorite mobile platform, I’m just saying that it’s taking the best of both worlds and not copying anyone. Actually, one thing I really like about WP7 is that it didn’t copy iPhone UI which was super cool when it first came out but now is very old compared to the Metro UI of WP7.&lt;/p&gt; &lt;p&gt;I have a &lt;a href="http://www.samsung.com/us/mobile/cell-phones/SGH-I917ZKAATT"&gt;Samsung Focus&lt;/a&gt; phone which is super light and has a great screen.&lt;/p&gt; &lt;p&gt;This post was supposed to describe all my setup, but it ran very long so I’ll break into multiple posts. This was most of my hardware, next up will be the software. Hopefully soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-6744490346439588159?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=38k2Grr0GYo:RIKyR244qv4:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=38k2Grr0GYo:RIKyR244qv4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=38k2Grr0GYo:RIKyR244qv4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=38k2Grr0GYo:RIKyR244qv4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/38k2Grr0GYo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/38k2Grr0GYo/what-i-use-part-1.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/09/what-i-use-part-1.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-772399246442161776</guid><pubDate>Wed, 07 Sep 2011 14:25:00 +0000</pubDate><atom:updated>2011-09-07T10:25:10.316-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Windows Live Writer</category><category domain="http://www.blogger.com/atom/ns#">Windows Live</category><category domain="http://www.blogger.com/atom/ns#">Debugging</category><category domain="http://www.blogger.com/atom/ns#">Backup</category><title>How to fix WLW Backup problem with Windows x64</title><description>&lt;p&gt;&lt;img style="display: inline; float: right" align="right" src="http://pocketpccentral.net/blog/wp-content/uploads/2009/08/Windows_Live_Writer_logo.png" width="158" height="158"&gt;I, like most bloggers out there, love Windows Live Writer. One problem I have with it is that I have to set it up whenever I re-install Windows. Long ago I found that I can backup all my posts (recently posted and drafts) just copying the two folders “Drafts” and “Recent Posts” from the folder &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;C:\Users\&amp;lt;UserName&amp;gt;\Documents\My Weblog Posts&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;However, I wanted to backup more than that. I wanted to backup my blog configurations and other settings. So, I searched a little bit (using &lt;a href="http://www.kngine.com/"&gt;Kngine&lt;/a&gt; which is great, give it a try) and I found &lt;a href="http://wlwbackup.codeplex.com/"&gt;WLW Backup tool&lt;/a&gt; that can backup blog settings, drafts, recent posts, and plugins. The link I’ve listed here is for the project on CodePlex where the project went open source by its developer &lt;a href="http://scottisafool.wordpress.com/"&gt;Scott Lovegrover&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Before I found this latest version I downloaded version 2.0 and tried to backup my WLW settings and an error occurred.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;System.BadImageFormatException: Could not load file or assembly 'CabLib, Version=6.9.26.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.&lt;br&gt;File name: 'CabLib, Version=6.9.26.0, Culture=neutral, PublicKeyToken=null'&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The application comes in two simple assemblies LiveWriterBackup.exe and CabLib.dll (and two icons). &lt;a href="http://www.codeproject.com/KB/files/CABCompressExtract.aspx"&gt;CabLib.dll&lt;/a&gt; is compression and extraction library that LiveWriterBackup.exe is using to compress all the backed up files into one file. This was a .NET exception, so I got interested and started to try to fix the problem. Reading the error, it seems like LiveWriterBackup.exe can’t find CabLib.dll. A bit of searching, and I found that &lt;a href="http://sharepoint400.blogspot.com/2011/02/could-not-load-file-or-assembly-cablib.html"&gt;some SharePoint developers&lt;/a&gt; were having the same problem with the CabLib.dll file. They fixed it by replacing the CabLib.dll with the x64 version. I tried that but now I got a new error:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;System.IO.FileLoadException: Could not load file or assembly 'CabLib, Version=6.9.26.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Seems like the two assemblies didn’t really match. Instead of getting around it, I needed to fix the actual problem. Why can’t LiveWriterBackup.exe find CabLib.dll? Maybe there’s a bug with the application itself. I decided to look inside. I fired up &lt;a href="http://www.telerik.com/products/decompiler.aspx"&gt;JustDecompile&lt;/a&gt; and loaded the LiveWriterBackup.exe. The executable have a direct reference to CabLib.dll and don’t have any assumptions other than how .NET assemblies &lt;a href="http://msdn.microsoft.com/en-us/library/15hyw9x3%28v=VS.100%29.aspx"&gt;find other assemblies&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Back to search. Remove some search words and try different combinations. Then I found the solution on a &lt;a href="http://www.cnblogs.com/atfield/archive/2009/04/03/1429286.html"&gt;Chinese blog&lt;/a&gt;. &lt;img style="display: inline; float: right" align="right" src="http://images.cnblogs.com/cnblogs_com/atfield/WindowsLiveWriter/CorFlagsWindowsLiveWriterBackupUtilityBu_120B4/clip_image006%5B4%5D.jpg"&gt;God bless Google translation which &lt;a href="http://translate.google.com/translate?sl=zh-CN&amp;amp;tl=en&amp;amp;js=n&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;layout=2&amp;amp;eotf=1&amp;amp;u=http%3A%2F%2Fwww.cnblogs.com%2Fatfield%2Farchive%2F2009%2F04%2F03%2F1429286.html"&gt;came to the rescue&lt;/a&gt;. The problem wasn’t in the CabLib.dll but rather in LiveWriterBackup.exe which was built with the setting “Any CPU” on a 32bit machine so all it’s testing went okey. But when tried on a 64bit machine like mine, it actually ran as a 64bit application trying to call a 32bit CabLib.dll. You can see that in the screenshot of Task Manager. You can see 32bit applications have a *32 next to them while the LiveWriterBackup.exe process doesn’t.&lt;/p&gt; &lt;p&gt;So the solution is get an executable that is built for 32 bit configurations. Or we just use &lt;a href="http://msdn.microsoft.com/en-us/library/ms164699%28VS.80%29.aspx"&gt;Corflags&lt;/a&gt;. It’s a tool that allows you to configure the CorFlags section of the header of an executable. It’s what Rafeel Rivera was referring to in his &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcastEpisodeRollup273Through280GlimpseJavaScriptKinectScriptPolyGlotAzureWindowsAndGraphDatabases.aspx"&gt;recording&lt;/a&gt; (listen &lt;a href="http://www.hanselminutes.com/default.aspx?showID=299"&gt;here&lt;/a&gt;) with Scott Hanselman as “flipping bits” which seems to be a known term. Here’s “&lt;font style="font-weight: normal"&gt;&lt;a href="http://blogs.msdn.com/b/joshwil/archive/2005/05/06/415191.aspx"&gt;Flipping bits on managed images to make them load with the right bitness&lt;/a&gt;&lt;/font&gt;”&lt;/p&gt; &lt;p&gt;I just browsed using the command line to the location of the Corflags executable (C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin) and I ran the command &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Corflags “C:\Program Files (x86)\Windows Live Writer Backup\LiveWriterBackup.exe” /32BIT+&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Tried again to backup settings and it worked. Testing on x64 machines is necessary as x64 machines are becoming more and more popular. Also, try not to build to “Any CPU” unless you test on all CPUs. More importantly, when debugging try to know the bitness of all the participating assemblies that are causing trouble.&lt;/p&gt; &lt;p&gt;Happy debugging.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-772399246442161776?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=1msKnnaj5uU:Ei9bYFfaDr0:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=1msKnnaj5uU:Ei9bYFfaDr0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=1msKnnaj5uU:Ei9bYFfaDr0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=1msKnnaj5uU:Ei9bYFfaDr0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/1msKnnaj5uU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/1msKnnaj5uU/how-to-fix-wlw-backup-problem-with.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/09/how-to-fix-wlw-backup-problem-with.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-638182202925693087</guid><pubDate>Sun, 04 Sep 2011 19:01:00 +0000</pubDate><atom:updated>2011-09-04T15:01:59.773-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Book Review</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><title>Book Review: In The Plex</title><description>&lt;p align="justify"&gt;I thought this would be a fan-boy book.&lt;img style="display: inline; float: right" align="right" src="http://ecx.images-amazon.com/images/I/419mago3QtL.jpg" width="207" height="297"&gt;&lt;br&gt;There's a big part of this book that is just about telling the story of Google. How it started, how it has grown to be the Internet giant that it is now. &lt;br&gt;But it's the Google story told by a journalist with a long relationship with Google. This doesn't affect his integrity but I think it makes him sees the world as Google sees it. Judge Google by their intentions rather than their actions. He's like one of those "embed" journalists that travel with the U.S. forces in Iraq. After a while, he starts to be one of them. This issue confirms my guess that this is a fan-boy book.&lt;br&gt;But as I read on, the author raises questions about Google losing its soul (my words not his), and how it was transformed from an Internet startup to a giant corporation, and how all this affect Google. He's not a fan-boy, he's a fan of Google for sure but the way it was not necessarily the way it is or would be.&lt;br&gt;The story is told in terms of topics and products. Starting with important products to less important topics and failed products. This causes some jumps in the time line forward and backward which could be frustrating. At least I felt that sometimes it lacks connecting all those stories together.&lt;br&gt;There's a focus in the book on technical details. They're explained in plain English in a way simple enough for a reader to understand but are also very intriguing for a developer or a person with technical background.&lt;br&gt;There are two stories in the book that I was impressed by: Google's approach to Data Center and Google position towards China.&lt;br&gt;This book is a good read and I recommend it if you want to find more information on Google or want to see the world as they do.&lt;br&gt;Thanks to &lt;a href="https://twitter.com/#%21/Neo_4583"&gt;Ahmed Essam&lt;/a&gt; (&lt;a href="http://www.goodreads.com/user/show/5419440"&gt;Goodreads profile&lt;/a&gt; for recommending this book. &lt;/p&gt; &lt;p&gt;Find all my book reviews and become my friend on &lt;a href="http://www.goodreads.com/AmrEldib"&gt;Goodreads&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-638182202925693087?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5JfiJVzt73Y:CvE2A6N9hRc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5JfiJVzt73Y:CvE2A6N9hRc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5JfiJVzt73Y:CvE2A6N9hRc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=5JfiJVzt73Y:CvE2A6N9hRc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/5JfiJVzt73Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/5JfiJVzt73Y/book-review-in-plex.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/09/book-review-in-plex.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-7632041615799164200</guid><pubDate>Sat, 03 Sep 2011 03:52:00 +0000</pubDate><atom:updated>2011-09-04T14:58:23.653-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Book Review</category><title>Book Review: C# in Depth</title><description>&lt;p&gt;I like that this book have a friendly tone.&lt;img style="display: inline; float: right" align="right" src="http://csharpindepth.com/Cover.jpg"&gt;&lt;br&gt;It's not a reference book, but C# in Depth is true to its title. You would like this book if you are a C# developer for 2 years or so and now you're tired of solving all problems with the simple tools of for loops and if statements. Maybe it's time for something more.&lt;br&gt;The book assumes that you at least know C# 1.0 (VS 2003 and .NET 1.1) and it moves through C# 2, 3 and 4 to build on the features of each version.&lt;br&gt;Sometimes you'll find this way a little irritating because for example you heard about this LINQ thing and you just want to jump to it, or because of the author's references "we'll discuss this 2 chapters down the road". But I think that the way of moving through each version is helpful because sometimes you'll work on an application that is required to be developed for .NET 2.0 and nothing more. Then, you'll understand that you can't use LINQ, extension methods, etc.&lt;br&gt;The book have a friendly tone with the occasional humor which takes away some of the dullness that comes with reading such a book which is closer to studying than to reading.&lt;br&gt;The author is very knowledgeable of the subject. If you don't know Jon Skeet then probably you haven't been on &lt;a href="http://www.StackOverflow.com"&gt;StackOverflow.com&lt;/a&gt; where he is a &lt;a href="http://stackoverflow.com/users/22656/jon-skeet"&gt;celebrity&lt;/a&gt;.&lt;br&gt;Sometimes the author would delve too deep into a detail and you'll find yourself totally lost, just continue and you'll get out fine on the other end. You'll find yourself coming back later to that section and going through it once again to better understand. Even if you don't, you'll know enough to remember it when you need it.&lt;br&gt;One tip, try out the code samples. I found myself building on those samples and trying out different situations. It was helpful.&lt;br&gt;In short this is a great book if you want to step up your C# skills.&lt;br&gt;I want to thank &lt;a href="https://twitter.com/#%21/EmadMokhtar"&gt;@EmadMokhtar&lt;/a&gt; (&lt;a href="http://www.goodreads.com/user/show/3775730"&gt;Goodreads profile&lt;/a&gt;) for the recommendation.  &lt;p&gt;Find all my book reviews and become my friend on &lt;a href="http://www.goodreads.com/AmrEldib"&gt;Goodreads&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-7632041615799164200?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=_XLmSWYpBgs:T0diKtCJzyc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=_XLmSWYpBgs:T0diKtCJzyc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=_XLmSWYpBgs:T0diKtCJzyc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=_XLmSWYpBgs:T0diKtCJzyc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/_XLmSWYpBgs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/_XLmSWYpBgs/book-review-c-in-depth.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2011/09/book-review-c-in-depth.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-7090610847228327870</guid><pubDate>Tue, 11 Jan 2011 04:34:00 +0000</pubDate><atom:updated>2011-01-10T23:34:17.127-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iPhone</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">App Store</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><category domain="http://www.blogger.com/atom/ns#">Apple</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">WP7</category><title>Everybody Gets an App Store</title><description>&lt;p align="justify"&gt;When I hear all the news about all the new app stores for the big three (Apple, Google and Microsoft), all I can think of is Opera giving away cars to her audience. “You get a Car, You get a Car, You get a Car. Every …body … gets … a … Car”. Here’s a video with a Remix.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:dee28f70-e16b-47fa-9ca1-7f573c81bea1" class="wlWriterEditableSmartContent"&gt;&lt;div id="30163a6f-a6f8-4f4b-a1ac-977ac04a02d1" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=XcI-rHO0yko&amp;amp;feature=related" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_QnwET5uCdXI/TSvdxlSxXmI/AAAAAAAAAH8/S_ALHVmWTFM/videofd2740d28cc6%5B172%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('30163a6f-a6f8-4f4b-a1ac-977ac04a02d1'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;507\&amp;quot; height=\&amp;quot;285\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/XcI-rHO0yko?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/XcI-rHO0yko?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;507\&amp;quot; height=\&amp;quot;285\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:507px;clear:both;font-size:.8em"&gt;Everybody gets a Car from Opera&lt;/div&gt;&lt;/div&gt; &lt;p align="justify"&gt;Of course, giant platform-developing software companies don’t really need cars, it seems like they’re making up for it with App Stores.&lt;/p&gt; &lt;p align="justify"&gt;iPhone has an &lt;a href="http://www.apple.com/iphone/apps-for-iphone/" target="_blank"&gt;App Store&lt;/a&gt;, so Windows Mobile got a Marketplace. Google Chrome got a &lt;a href="https://chrome.google.com/webstore" target="_blank"&gt;Chrome Web Store&lt;/a&gt; (this one – in particular – I’ll get to in a minute). On Thursday Jan. 6, Apple launched the &lt;a href="http://www.apple.com/mac/app-store/" target="_blank"&gt;Mac App Store&lt;/a&gt;. Microsoft built a &lt;a href="http://www.microsoft.com/windowsphone/en-us/apps/default.aspx" target="_blank"&gt;Marketplace for Windows Phone 7&lt;/a&gt; and is &lt;a href="http://www.winsupersite.com/article/paul-thurrotts-wininfo/New-Tile-Based-Shell-App-Model-and-App-Store-Coming-in-Windows-8-.aspx" target="_blank"&gt;rumored to create an App Store for Windows 8&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;I can easily see the benefits of having an App Store. For beginner users, it makes it very easy to find, install and maintain applications. Also, I can easily see app stores be a big success. An obvious example is the iPhone App Store, &lt;a href="http://en.wikipedia.org/wiki/App_Store#Number_of_launched_applications" target="_blank"&gt;300,000+ apps with 7,000,000,000+ downloads&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;This, of course, comes with a cost. Mostly paid by the app developers, not by the store owner. For example, Apple takes away 30% off the payment for all downloads through the app store. It’s the software equivalent of taxes. Beyond hosting your app, its updates, and including it in the search results, I’m not sure what the cost is for.&lt;/p&gt; &lt;p align="justify"&gt;Then comes the Guidelines. For you to include any app to Apple’s app store (iPhone or Mac), your app have go through an approval process where you submit it to Apple where it would be reviewed and either accepted or rejected. Apple provides feedback on the reason why your app was rejected. Developers had different experience with the review process over time. In Sept. 2010, Apple released official guidelines for the review process which seems like a no brainer for such a process but somehow was delayed all this time.&lt;/p&gt; &lt;p align="justify"&gt;Just like GUI (with Macintosh), and cell phones (with the iPhone), with the app review process, Apple has revolutionized Censorship. Somehow, Apple managed to make censorship cool. Look at it, unshaved, with a black turtleneck, it’s so cool and we all have to abide by it.&lt;/p&gt; &lt;p align="justify"&gt;But nothing fascinates me more than &lt;a href="https://chrome.google.com/webstore" target="_blank"&gt;Chrome Web Store&lt;/a&gt;. Wait, don’t click the link, you have to install Chrome browser first to be able to “install” any of the “apps” (wink wink). I have to say, it’s an admirable effort by Google to put together – by far – the most fancy bookmark collection I have ever seen.&lt;/p&gt; &lt;p align="justify"&gt;How bad is the Chrome Web Store. The &lt;a href="https://chrome.google.com/webstore/detail/blpcfgokakmgnkcojhhkbfbldkacnbeo" target="_blank"&gt;YouTube app&lt;/a&gt; of the &lt;a href="http://www.youtube.com/" target="_blank"&gt;YouTube website&lt;/a&gt;, which is the largest video-sharing website, a &lt;a href="http://en.wikinews.org/wiki/Google_purchases_YouTube_for_$1.65_billion" target="_blank"&gt;$1.65 billion&lt;/a&gt; valued website that got its own &lt;a href="http://en.wikipedia.org/wiki/CNN-YouTube_presidential_debates" target="_blank"&gt;presidential debates&lt;/a&gt;. Yes, that YouTube got only 3 out of 5 stars on Chrome web store and one of the comments says it all “Nice link”.&lt;/p&gt; &lt;p align="justify"&gt;Microsoft, as usual, late but eventually better decided to have its own App Store. Not only for the newly released Windows Phone 7, but also for Windows. Of course, they call it “Marketplace” because if they call it App Store, we might think it’s the exact same thing as Apple’s.&lt;/p&gt; &lt;p align="justify"&gt;In the case of smart phones, since their beginning they had app stores and people got used to the idea of installing all their apps through the app store. Users have nothing to compare it to. Developers never tried to go outside the guidelines because what’s the point of developing an app that you know will be rejected by the only distribution channel available. It’s a loss that developers’ innovation be restricted like this under the banner of consistent user experience and application stability.&lt;/p&gt; &lt;p align="justify"&gt;In the case of desktops, users do have something to compare app stores to. Developers have always worked with no guidelines to restrict what they can do with applications. Yes, this has caused applications like viruses, Trojans, and key loggers to be developed. But, these are a tiny fraction of all the applications that were developed and we can’t live without today.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://downloadsquad.switched.com/2011/01/08/vlc-for-iphone-and-ipad-get-pulled-from-the-app-store/" target="_blank"&gt;Apple has pulled VLC from its App Store&lt;/a&gt;. VLC is an application that is essential to any computer that plays video. So when it gets pulled or rejected, it will get it’s own post on all tech blogs. But what about Joe Developer who develops the next killer app. His application won’t get a blog post when it gets rejected because Joe didn’t exactly follow the guidelines of the app store, and Joe doesn’t have a way of distributing this application other than the app store. Even if he does manage to find another distribution channel, it won’t get him the visibility of being on the vendor’s app store.&lt;/p&gt; &lt;p align="justify"&gt;App Store Can’t be Walled Gardens. They don’t need just to have &lt;a href="http://wmpoweruser.com/windows-phone-7-marketplace-search-updated/" target="_blank"&gt;better search&lt;/a&gt;, or &lt;a href="http://gizmodo.com/5403986/itunes-enters-the-web-browser-with-itunes-preview" target="_blank"&gt;access through a browser&lt;/a&gt;. They need to be Open. Open to developers with no ridiculous sign up fees, or commission on every download. Open with no guidelines that &lt;a href="http://developer.apple.com/appstore/guidelines.html" target="_blank"&gt;require me to sign up just to read it&lt;/a&gt;. App stores can implement a system of recommendation where you can “Strongly Oppose” the apps you don’t like but don’t make a choice for me as a user. &lt;/p&gt; &lt;p align="justify"&gt;If the purpose of App Stores is to offer a central point for distributing software to users, then let’s make that. But if the purpose is to make a new revenue generator, and turn platforms and its applications into a software that runs extensions and addons, then we all, developers and users, are screwed.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-7090610847228327870?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=3SR0QXipyd4:EhjI0D_umVg:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=3SR0QXipyd4:EhjI0D_umVg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=3SR0QXipyd4:EhjI0D_umVg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=3SR0QXipyd4:EhjI0D_umVg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/3SR0QXipyd4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/3SR0QXipyd4/everybody-gets-app-store.html</link><author>noreply@blogger.com (Amr Eldib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_QnwET5uCdXI/TSvdxlSxXmI/AAAAAAAAAH8/S_ALHVmWTFM/s72-c/videofd2740d28cc6%5B172%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://www.amreldib.com/2011/01/everybody-gets-app-store.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-7807224555099258004</guid><pubDate>Wed, 29 Sep 2010 09:35:00 +0000</pubDate><atom:updated>2010-09-29T05:35:45.139-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Don’t Hate My Code</title><description>&lt;p align="justify"&gt;One very common problem that occurs when a new team takes over an existing project is their desire to "just move some stuff around". That's a code word for "I can't believe that you’re calling this crap a software application" :D. This, of course, varies from one project to the other. Sometimes it's justified and is for good reasons and other times it's not. The reason is not the desire of the new team to make a quick impact (although sometimes that's the case "You know, we had to fix a lot of stuff behind the scene"). But most of the time the reason is derived from the simple fact that reading code is much harder than writing it.  &lt;p align="justify"&gt;A programming language, like any other language, just because you know all the letters and all the words doesn't mean you can parse the intended meaning. A code block, in its own way, is written to convey a certain intent to computers as their primary audience but also to other developers as a secondary audience. Some programming languages don't care about developers and just target computers, like &lt;a href="http://en.wikipedia.org/wiki/Assembly_language" target="_blank"&gt;Assembly Language&lt;/a&gt;.  &lt;p align="justify"&gt;The problem with new teams is that they never think that one day they, too, would be the “old team”. The way to really solve this problem (having to rewrite/re-organize/restructure the codebase) is to write code in a clear enough way that anyone can understand it. Then, one day this will be common enough that you'll understand what you are getting as anyone would understand what you are giving (Day dreaming?) (actually, on second thought, I'll remove the question mark).  &lt;p align="justify"&gt;The point is: &lt;em&gt;Don't just write “good code”, write “readable good code”.&lt;/em&gt; &lt;p align="justify"&gt;However, modifying your code to be more readable is burdening your code with a responsibility that it shouldn't have. When you read the part above about conveying intent, you’ll notice that the whole point of making the code readable is to give the reader an insight into my thought process. How did I arrive to the decision of structuring the code like that?  &lt;p align="justify"&gt;Code is not easy to read because it’s not in sequence, you don’t know where to start and where to end and you can’t read one part of it and figure out the rest.  &lt;p align="justify"&gt;My code has to come with that insight into my thought process. Here's what I would do (and what I do do) to make this happen:  &lt;h5 align="justify"&gt;Write in Bullet Points &lt;/h5&gt; &lt;p align="justify"&gt;Programmers don't want to read a long story. They want simple concise quick-to-read scannable sorted items that are not affected by how bad my morning coffee was.&lt;/p&gt; &lt;p align="justify"&gt;I’m not specifying what type of document. This goes for all documents.&lt;/p&gt; &lt;h5 align="justify"&gt;Use XML Documentation &lt;/h5&gt; &lt;p align="justify"&gt;You know, the &lt;a href="http://msdn.microsoft.com/en-us/library/b2s063f7%28v=VS.100%29.aspx" target="_blank"&gt;little green XML tags&lt;/a&gt; before each member. .NET developers would know those. My summary for the "DoSomething" method used to be "Does something". I stopped doing that when I read this description on somebody else’s code. Now, I take a moment and describe what is the "Something", what do I mean by "Do", what kind of output does the method deliver and what impact it has on the system, what assumptions it requires. Take a moment to think. Always take a moment.&lt;/p&gt; &lt;h5 align="justify"&gt;Write Comments First&lt;/h5&gt; &lt;p align="justify"&gt;Comments for code that has been already written tend to describe what the code does. “Loop through list until find target value” instead of “Find target value in list”. Changes to how the objective is achieved would impact the description even though the objective didn’t change. If I removed the loop and used a method to find the target value, I wouldn’t have to change “Find target value in list”.&lt;/p&gt; &lt;p align="justify"&gt;Writing comments before code aims at outlining what is the objective of this method (or a code block within the method) and what are the logical steps and the possible scenarios that the method handles. Think of it this way, you’re a senior developer who doesn’t write code anymore but helps junior developers write the code. Use the comments to outline how the juniors will reach their goal, think in big picture (big as in the objective of the method and class). Don’t care about how you’re reading the text file, think about what do you want to do with the content of the file after it’s read. Later, you’ll go to the junior developer role and think about the optimum way to read a text file. This is done in iterations, feedback from the junior could affect the outline set by the senior who made assumptions about how this would work. Some changes have to be made to the outline to accommodate that.&lt;/p&gt; &lt;p align="justify"&gt;Eventually, the comments would describe the steps that the method goes through to reach its goal. Reading code would add more details about the specific technical implementation while reading the comments would only give you a summary.&lt;/p&gt; &lt;h5 align="justify"&gt;It’s Not Personal, It’s Technical&lt;/h5&gt; &lt;p align="justify"&gt;Don’t include details about people, events, dates, timeline, or progress in the project documents. Keep those items separate in their own documents. These “Team Documents” are for temporary consumption mainly by management, sometimes they’re useful for historical record but they don’t matter for new teams who just wants to read the code.&lt;/p&gt; &lt;h5 align="justify"&gt;Use Meaningful Names with Standard Naming Convention&lt;/h5&gt; &lt;p align="justify"&gt;Use “i” for counter and “x” for quick math operations. Beyond that, use meaningful names that helps the reader keep track of the code flow.&lt;/p&gt; &lt;p align="justify"&gt;Use standard naming convention to name and write the names of different members. I use the naming conventions of the &lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613" target="_blank"&gt;Framework Design Guidelines&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;As a standard rule, pet names doesn’t count as meaningful names, unless you pet is named “UserAccountID”.&lt;/p&gt; &lt;h5 align="justify"&gt;Make It Part of the Process. Use Documents to Make Decisions&lt;/h5&gt; &lt;p align="justify"&gt;Some developers look at documentation as “I’ll get to it if/when I have time”. Not only that they never have time, but also they’re missing the point of why they should use documents in the first place. I use documents to collaborate with team members on making decisions about the different possible solutions of a specific problem. I use documents to define, scope, list possible solutions and their upsides and downsides and eventually choose the solution.&lt;/p&gt; &lt;p align="justify"&gt;Communicating technical details through documents is much easier than through discussions which tends to easily stray away from the main topic, include a lot of not-fully-thought ideas, and require real time interaction (meetings which are difficult for remote teams and time consuming for… what’s the word for non-remote teams).&lt;/p&gt; &lt;h5 align="justify"&gt;Keep Documents Updated&lt;/h5&gt; &lt;p align="justify"&gt;If you’re like me, and you use documents as an intro to writing code. It’s important to keep documents updated with the changes you made later to the code you wrote earlier.&lt;/p&gt; &lt;h5 align="justify"&gt;Use a Tool&lt;/h5&gt; &lt;p align="justify"&gt;Using a tool like a &lt;a href="http://sharepoint.microsoft.com/en-us/Pages/default.aspx" target="_blank"&gt;SharePoint&lt;/a&gt; document library or a &lt;a href="http://en.wikipedia.org/wiki/Wiki" target="_blank"&gt;Wiki&lt;/a&gt; (I like &lt;a href="http://www.screwturn.eu/" target="_blank"&gt;Screwturn&lt;/a&gt;) would encourage developers to participate in this addition to their daily tasks. It wouldn’t be just a collection of documents stored in some folder. It would be an essential part of the daily work.&lt;/p&gt; &lt;h5 align="justify"&gt;Keep Versions. Don’t Throw Anything Away&lt;/h5&gt; &lt;p align="justify"&gt;Using a tool helps you keep versions of the documents. This lets you review the progress of each document and makes you able to go back to earlier solutions that you dismissed earlier but could be viable now.&lt;/p&gt; &lt;h5 align="justify"&gt;Know When to Stop&lt;/h5&gt; &lt;p align="justify"&gt;Keep documents updated, make it part of the process, keep versions, write comments, bla bla bla. Remember that you’re getting paid to write code and create software. Using documents to build software can be really helpful but it’s not building software. Put a ceiling on how many documents and how much details you’re producing and make it supplemental to writing code. If it’s not going to lead to better code, don’t do it. Eventually you’ll find the balance the fits your process.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-7807224555099258004?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=7Rw5JDMDrMs:AuIMevZ6UT8:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=7Rw5JDMDrMs:AuIMevZ6UT8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=7Rw5JDMDrMs:AuIMevZ6UT8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=7Rw5JDMDrMs:AuIMevZ6UT8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/7Rw5JDMDrMs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/7Rw5JDMDrMs/dont-hate-my-code.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.amreldib.com/2010/09/dont-hate-my-code.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-6801446282994571441</guid><pubDate>Sun, 15 Aug 2010 19:30:00 +0000</pubDate><atom:updated>2010-08-15T15:30:03.775-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VMware</category><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">Virtualization</category><category domain="http://www.blogger.com/atom/ns#">VirtualBox</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Virtual PC</category><title>VM-based Development Environment</title><description>&lt;p align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://tcglkg.blu.livefilestore.com/y1pDV1HHKQTRsCo0eVj0C8rG5GZKJL3q5JGSgvXgp8pHDUyKM6fn_-qqvNV3488okfBVyUYftUbAgdbhP-fCh84lDSnrleQeXxF/VirtualBox.png?psid=1" width="64" height="64" /&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://public.blu.livefilestore.com/y1pV7Xk3S8Ndl7Ey04VzVu6iXSOerQaFQ0dTeC7bo8Mc4gcaIyjPbBLFzO8NrB-L4wa7mICKgBm7eIg9CxXnyt3kw/VMware.png?psid=1" /&gt;I love VMs. To have a sandbox inside which there’s an operating system of your choice where you can try anything and not fear its effect on your host machine, that is empowering.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;I started using VMs a long time ago, but recently I moved to what I call a “VM-based Development Environment”. As a GIS developer, I have a problem which is that &lt;a href="http://www.esri.com/products/index.html#desktop_gis_panel" target="_blank"&gt;ArcGIS&lt;/a&gt; (the main GIS application/platform I’m using) doesn’t allow for side-by-side installation. So, if you want to install version 9.3.1, you have to uninstall version 9.3. And those are two different versions against which you have to develop and test your code.&lt;/p&gt;  &lt;p align="justify"&gt;Over the years, I had a simple solution. Pick a version that I mostly work with and install on my development machine. If I’m moving to a new project that needs a different version, I would uninstall the version I’m using and install the new one. This is, aside from being painful and inefficient, an outdated solution and it created another problem that I found out about at the end of one project I was working on. &lt;/p&gt;  &lt;p align="justify"&gt;Because my personal machine was updated and I install all these kinds of applications with their requirements, there was a software requirement I didn’t add to the installation package and that caused a problem on one client’s machine.&lt;/p&gt;  &lt;p align="justify"&gt;When I started using VMs, I moved the secondary versions of ArcGIS (the ones other than the version I’m mainly using) to VMs. Also, VMs helped with testing, especially when testing installation packages using snapshots (I’ll talk about that later). However, when I faced the missing requirement problem, I decided to take VMs a step further.&lt;/p&gt;  &lt;p align="justify"&gt;I’m using my machine for my personal software (Browser, Outlook, Office, Video, Music, Social Media, etc), and removed all development-related software (including ArcGIS) to a Virtual Machine. So when I work on code, I turn on a VM and start coding on a machine that has the least number of software installed.&lt;/p&gt;  &lt;h3 align="justify"&gt;Ups&lt;/h3&gt;  &lt;p align="justify"&gt;Moving all development work to a VM offer number of advantages:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;To quote a development concept “Separation of Concerns”. you can have a different VM for each project if you want, if the development software is different for each project, the operating system your team is using is different, or even you just want a different mode for each project.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Clean-slate machine can help you easily identify the requirements of your code and detect the software it might conflict with.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Working on Client-Server project where you want to deploy to a server and develop or test in a environment similar to the production environment.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Create a VM and pass to other team members and you’ve got yourself a unified development environment for all team members.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;You can expand on the concept and create other VMs that can help with tasks related to development like a source code server, continuous integration server, etc.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;If you want to upgrade or re-install Windows on your host machine or even moved across the country to a whole new machine, copy few files and you still have your development environment intact.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Distracted by all the e-mails, IMs, and tweets, just click “Full Screen” and you can easily shut all the annoyance on your host machine.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3 align="justify"&gt;Tips&lt;/h3&gt;  &lt;p align="justify"&gt;Building a VM is not that difficult but if you’re going to create number of VMs, few if not tens, maybe I can help with some tips:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Categorize Your Machines&lt;/strong&gt;: I have 4 classes of VMs:&lt;/div&gt;   &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;div align="justify"&gt;&lt;strong&gt;Base&lt;/strong&gt;: a building block I use to install all other VMs. It’s an installed and updated OS with the very basic applications (Browser, Anti-virus, etc) that makes it very easy to install a new VM within minutes. You can also have a base for specific environments like Visual Studio 2008 or 2010.&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;strong&gt;Dev&lt;/strong&gt;: a machine for development. I Turn it on and start banging on the keyboard like a monkey :)&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;strong&gt;Lab&lt;/strong&gt;: I use those for testing. It’s important to have different operating system with all variations (x86 and x64 for example).&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;strong&gt;Sandbox&lt;/strong&gt;: want to try something that you’re not sure is completely safe? want to try a trial product that you could remove later but could leave all these bits of crap behind? Use a sandbox.&lt;/div&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Come Up with a Naming Convention&lt;/strong&gt;: I usually name a VM with a meaningful name that easily explain its configurations, like this&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="center"&gt;VMClass-OS-InstructionSet-VisualStudioVersion&lt;/p&gt;  &lt;p align="left"&gt;for example:&lt;/p&gt;  &lt;p align="center"&gt;Dev-7-x64-10&lt;/p&gt;  &lt;p align="left"&gt;is a development machine with Windows 7 x64 and Visual Studio 2010&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Use Memorable Names&lt;/strong&gt;: in addition to the naming convention, I give memorable names to the machines I use most frequently. It also helps if those names represent the different classes. For example, I give cities names to Dev machines (Cairo, Phoenix, Jakarta, etc), and I give names of the &lt;a href="http://en.wikipedia.org/wiki/Periodic_table" target="_blank"&gt;periodic table&lt;/a&gt; elements to Lab machines (Neon, Cobalt, Titanium, etc).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Understand Your Virtualization Software&lt;/strong&gt;: whether you’re using &lt;a href="http://www.vmware.com/" target="_blank"&gt;VMware Desktop&lt;/a&gt;, &lt;a href="http://www.microsoft.com/windows/virtual-pc/" target="_blank"&gt;Microsoft Virtual PC&lt;/a&gt;, or &lt;a href="http://www.virtualbox.org/" target="_blank"&gt;VirtualBox&lt;/a&gt;. Make sure to fully understand the capabilities of the software, otherwise you could be missing out on some features that could help you.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Use Snapshots&lt;/strong&gt;: one feature that VMs offer that host machines doesn’t very well is ‘Snapshots’. Snapshots helps you save the state of a machine and easily return to it with a click of a button. It’s like Windows’ Restore Point or Mac’s Time Machine but much much faster. You can also have a tree of snapshots.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Create a CodeBox&lt;/strong&gt;: To share code between different machines, either create a separate virtual hard drive and store all your data on it or create a shared folder on your host machine and map it as a network drive. I use the first choice because it’s easier to backup (just copy a few files), and avoid a potential security problem of having a shared folder. Be aware of the fine differences of creating a virtual hard drive between different virtualization software and make sure that virtual hard drive persistence doesn’t depend on VM persistence &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3 align="justify"&gt;Downs&lt;/h3&gt;  &lt;p align="justify"&gt;Using VMs as your main development environment isn’t hassle-free and it does have its own disadvantages:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Memory Monster&lt;/strong&gt;: VMs require that you allocate full memory capacity to them once they’re on. So, you better throw away that 3-years old 2GB laptop. If you want to use VMs, you must have at least 4GB RAM. You’re gonna be using a VM for development which means longer hours where you can’t tolerate using a 1GB RAM machine. Do you? :). With 4GB you can have 2GB for your host and 2GB for the VM but you’ll miss out on the benefits of running another VM. Upgrade to 8GB to get full power.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Code Not at Your Fingertips&lt;/strong&gt;: If no Visual Studio installed on your host machine, you have to turn on (or de-hibernate) a VM to get to your code. That takes about just a minute but it’s still something.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Maintenance, Maintenance, Maintenance&lt;/strong&gt;: all these VMs require taking care of. Updating Windows, anti-virus, and applications is a headache because it’s not fully automated. Mainly I focus on the few machines I’m using, but once a month, I start all Base machines to keep them updated.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;a href="http://public.blu.livefilestore.com/y1pvAXtVd0Lmuip0zcei1bHrDJFK9Nc0Oo3eFQlTa3wPilb9rNHQB9oeVDxoXKmsh-Y6rEQYZhZdEaSyvgXX8lYqQ/TwoUpdateWindows.png?psid=1" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://tcglkg.blu.livefilestore.com/y1pTnMClwm_NKSn93D_A9y1lafQWu2Dexbi3LOtKalQrlHA_8n3ZMlelYui4w26zX7vyzKMAGZRPciLrdQbVZcqZAcx63IYiiit/TwoUpdateWindowsSmall.png?psid=1" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;Two Update Windows, one for a VM and the other for my host machine.&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Gigabytes to Spare&lt;/strong&gt;: you should have a lot of those because a plain simple Windows 7 machine with no software uses about 12GB of hard drive space.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;I’ve used VMs for development for quite a while now, and I feel that it improved how I work. Give it a try a let me know if it helped.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-6801446282994571441?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5YlEAAGzYhI:mXtcHEY99G0:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5YlEAAGzYhI:mXtcHEY99G0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5YlEAAGzYhI:mXtcHEY99G0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=5YlEAAGzYhI:mXtcHEY99G0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/5YlEAAGzYhI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/5YlEAAGzYhI/vm-based-development-environment.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2010/08/vm-based-development-environment.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-5022283978355152739</guid><pubDate>Sun, 25 Jul 2010 02:34:00 +0000</pubDate><atom:updated>2010-07-24T22:45:19.073-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Logging</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Code</category><category domain="http://www.blogger.com/atom/ns#">log4net</category><title>Configuring log4net and using the AppLogger class - Part 2</title><description>&lt;p&gt;&lt;em&gt;Read the &lt;a href="http://www.amreldib.com/2010/07/configuring-log4net-and-using-applogger.html" target="_blank"&gt;Part 1&lt;/a&gt; for an intro to this post.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The AppLogger class is a class I use to encapsulate log4net and make easy to use. By “ease of use” I mean less lines for me to write to start logging. But, this ease of use comes on the expense of customizability. The AppLogger class is not built to fit your (or all) needs necessarily but with little work it can.&lt;/p&gt;  &lt;p align="justify"&gt;AppLogger contains my preferred configurations for both debug and release builds, and it embeds the XML configurations into the output assembly, while reducing the number of lines I need to write to initiate logging.&lt;/p&gt;  &lt;p align="justify"&gt;I’ve uploaded a copy of the project (VS2008 project) containing the class to my SkyDrive. You can find it &lt;a href="http://cid-a0f4e46186f7cce4.office.live.com/self.aspx/Public/Blog/AppLogger/AppLoggerClass.7z" target="_blank"&gt;here&lt;/a&gt; (To decompress the project files, use &lt;a href="http://www.7-zip.org/" target="_blank"&gt;7zip&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Normally, you would add AppLogger and the XML configuration files to your project and include it under the namespace you’re using. This way you would avoid adding another assembly to your project. For the purpose of distributing the code, I created a separate project and a separate namespace. Also, the project is using .NET framework 2.0, but it should work fine on any later version.&lt;/p&gt;  &lt;p align="justify"&gt;Let’s check out the project files&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img src="http://tcglkg.blu.livefilestore.com/y1pgc-cSCu4HjMdpiqlk9aZXdeM2tsTs6LRD9sS0DtGhJxKu-KOfAzfv5AQJsgr7GhiTLrzrfqk2BNVOTGPLqLTpWQOgzCnF7oL/AppLogger-ProjectFiles.png?psid=1" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The &lt;strong&gt;LoggerInitializationException&lt;/strong&gt; is a fancy way of throwing an exception, it doesn’t really hold any more information than a regular exception but you can modify it to do just that.&lt;/p&gt;  &lt;p align="justify"&gt;The files &lt;strong&gt;Log4netDebugConfigurations&lt;/strong&gt; &amp;amp; &lt;strong&gt;Log4netReleaseConfigurations&lt;/strong&gt; in the &lt;strong&gt;Resources&lt;/strong&gt; folder are used to configure log4net in the Debug and Release build configurations. In this example, they have the same configurations.&lt;/p&gt;  &lt;p align="justify"&gt;The configurations use a &lt;a href="http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html" target="_blank"&gt;Rolling File Appender&lt;/a&gt; which writes to file until the file reaches a certain size (1MB in this case), then it renames the file by adding a number and write to a new file with the name you chose.&lt;/p&gt;  &lt;p align="justify"&gt;The pattern used in the configurations for each line in the log is &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(163, 21, 21);"&gt;conversionPattern &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:red;" &gt;value&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;=&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;'&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;* %date -- [%thread] -- %-5level&lt;br /&gt;-- %logger -- %message%newline&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;' &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;It adds the &lt;strong&gt;date/time stamp&lt;/strong&gt;, &lt;strong&gt;thread&lt;/strong&gt;, &lt;strong&gt;level&lt;/strong&gt; (Debug, Info, Warn, Error, Fatal), name of the &lt;strong&gt;logger&lt;/strong&gt;, and &lt;strong&gt;message&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;You can notice in the configuration file that the file name is not specified.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(163, 21, 21);"&gt;file &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:red;" &gt;value&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;=&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;"&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;==LOG_FILE_PATH==&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;" &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;This is intentioned as we’ll replace it at runtime.&lt;br /&gt;AppLogger is written so that you can log using just one line of code without any preparations, like this:&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Logger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Debug&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 255, 230);"&gt;"This is a message."&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;/span&gt;&lt;/pre&gt;The &lt;strong&gt;Logger&lt;/strong&gt; property is a static property that holds an &lt;strong&gt;AppLogger&lt;/strong&gt; object and it doesn’t need to be set. If you are calling the property for the first time, it will create a new &lt;strong&gt;AppLogger&lt;/strong&gt; object and return it to the calling method.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;public static &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Logger&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;get&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// if logger is null, create an instance.&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;if &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_Logger &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;== &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;null&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;try&lt;br /&gt;        &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;{&lt;br /&gt;            &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_Logger &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;new &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 255, 230);"&gt;"AppLogger"&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;catch &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;LoggerInitializationException&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_Logger &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;new &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// return logger&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;return &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_Logger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;private set &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;{ &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_Logger &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;value&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;The &lt;strong&gt;AppLogger&lt;/strong&gt; constructor takes care of configuring log4net using the embedded XML files based on the build configurations.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;public &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;string &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;loggerName&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Initiate logger object&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;this&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Log &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;LogManager&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;GetLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;loggerName&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#if &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;DEBUG&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Create a log file in the Temp folder&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;string &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;logFilePath &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;Path&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;GetTempFileName&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Add log file path to the configurations stream&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;string &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;loggerConfigurations &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;&lt;br /&gt;Resources&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Log4netReleaseConfigurations&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;loggerConfigurations &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;&lt;br /&gt;loggerConfigurations&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Replace&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;_LoggerLocationSymbol&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;, &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;logFilePath&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Convert embedded configurations file to a stream&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;byte&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;[] &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;byteArray &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;&lt;br /&gt;Encoding&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;ASCII&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;GetBytes&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;loggerConfigurations&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;MemoryStream &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;stream &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;new &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;MemoryStream&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;byteArray&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Configure logger from stream&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;XmlConfigurator&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Configure&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;stream&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Store log file path&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;LogFilePath &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;logFilePath&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#endif&lt;br /&gt;&lt;br /&gt;#if &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;!DEBUG&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:gray;" &gt;// Create a log file in the Temp folder&lt;br /&gt;    string logFilePath = Path.GetTempFileName();&lt;br /&gt;&lt;br /&gt;    // Add log file path to the configurations stream&lt;br /&gt;    string loggerConfigurations =&lt;br /&gt;Resources.Log4netReleaseConfigurations;&lt;br /&gt;    loggerConfigurations =&lt;br /&gt;loggerConfigurations.Replace(AppLogger._LoggerLocationSymbol, logFilePath);&lt;br /&gt;&lt;br /&gt;    // Convert embedded configurations file to a stream&lt;br /&gt;    byte[] byteArray =&lt;br /&gt;Encoding.ASCII.GetBytes(loggerConfigurations);&lt;br /&gt;    MemoryStream stream = new MemoryStream(byteArray);&lt;br /&gt;&lt;br /&gt;    // Configure logger from stream&lt;br /&gt;    XmlConfigurator.Configure(stream);&lt;br /&gt;&lt;br /&gt;    // Store log file path&lt;br /&gt;    AppLogger.LogFilePath = logFilePath;&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#endif&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Supress logger errors/exceptions by default&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;this&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;SuppressErrors &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;true&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;catch &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;Exception &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;e&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Empty logger object&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;this&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Log &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;null&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:green;" &gt;// Throw exception&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;LoggerInitializationException &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;ex &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;&lt;br /&gt;new &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;LoggerInitializationException&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 255, 230);"&gt;"Logger initialization failed"&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;, &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;e&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;throw &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;e&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;br /&gt;}&lt;br /&gt;} &lt;/span&gt;&lt;/pre&gt;You can see that the constructor creates a file in the Temp folder (for ups and downs of this choice, read &lt;a href="http://www.amreldib.com/2010/07/configuring-log4net-and-using-applogger.html" target="_blank"&gt;Part 1&lt;/a&gt;), and modifies the XML file before configuring log4net with a stream of the file. Then it sets the &lt;strong&gt;LogFilePath&lt;/strong&gt; property with a path to the log file.&lt;br /&gt;&lt;p align="justify"&gt;It also uses preprocessor directives (&lt;strong&gt;#if DEBUG&lt;/strong&gt;) to configure log4net differently in the debug and release configurations. You can make the code less in size by using the same configurations. This constructor happens to use the same configuration but I wanted to show that you can use different configurations.&lt;/p&gt;By default, AppLogger will suppress its errors. So even if initialization failed or any other error occurs, logging will stop but you don’t have to modify your code to catch any exceptions.&lt;br /&gt;&lt;p align="justify"&gt;If you want to catch logging exceptions, you can change the &lt;strong&gt;SuppressError&lt;/strong&gt; property by writing:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;AppLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Logger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;SuppressErrors &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;false&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;&lt;/span&gt;&lt;/pre&gt;AppLogger makes it easy and fast to start logging but it has its downsides as well. Calling the &lt;strong&gt;AppLogger.Logger&lt;/strong&gt; static property has a performance overhead more than other properties since it checks if the logger hasn’t been created yet. If your application has one entry point (Console application, Windows application, etc.) you can move the initialization code to the entry point and get rid of the overhead.&lt;br /&gt;&lt;p align="justify"&gt;Also, the configuration I’m using creates a log file with a name that is not predefined which makes it difficult to find sometimes unless you use the &lt;strong&gt;LogFilePath&lt;/strong&gt; property. You can change the configurations to fit your workflow, as this fits mine.&lt;/p&gt;I’ve used the AppLogger class for number of projects and it’s working fine, I hope it helps you as well.&lt;br /&gt;&lt;p align="justify"&gt;Feel free to offer any suggestions or questions in the comments.&lt;/p&gt;The code is offered under the Creative Commons Attribution 2.5 Canada License. You can use and modify this code, you can use it in commercial and non-commercial work. Kindly attribute this code to its original author.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-5022283978355152739?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ad1YIvYLF6Y:4JHLL42bn7Q:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ad1YIvYLF6Y:4JHLL42bn7Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=ad1YIvYLF6Y:4JHLL42bn7Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=ad1YIvYLF6Y:4JHLL42bn7Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/ad1YIvYLF6Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/ad1YIvYLF6Y/configuring-log4net-and-using-applogger_24.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2010/07/configuring-log4net-and-using-applogger_24.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-6225436993378203294</guid><pubDate>Sun, 18 Jul 2010 17:54:00 +0000</pubDate><atom:updated>2010-07-18T14:35:12.657-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Logging</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Code</category><category domain="http://www.blogger.com/atom/ns#">log4net</category><title>Configuring log4net and using the AppLogger class - Part 1</title><description>&lt;p align="justify"&gt;It’s been quite a while since I started using log4net for logging, and it changed how I debug applications. I found it much easier to find the source of an error by reading the log after the application crashes rather than using the step-by-step debugging in Visual Studio.&lt;/p&gt;  &lt;p align="justify"&gt;I started using log4net after reading an excellent tutorial by Jim Christopher on his blog &lt;a href="http://www.beefycode.com/" target="_blank"&gt;BeefyCode&lt;/a&gt;. You can find a list of all the posts in the tutorial &lt;a href="http://www.beefycode.com/post/Log4Net-Tutorials-and-Resources.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Some people prefer to log the application activities for debugging purposes only which works well in desktop applications that doesn’t have a mechanism for sending the log back to the developer in case of unexpected behavior. This has its obvious upside, which is improving the application performance by avoiding logging. To limit logging to debugging purposes only, simply surround all logging code with the conditional preprocessor directive #if. &lt;/p&gt;  &lt;p align="justify"&gt;For the using statements:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#if &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;DEBUG
&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;using &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;log4net&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;
&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;using &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;log4net&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Config&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;;
&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#endif&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; &lt;/style&gt;And for the logging code:
&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#if &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;DEBUG  
&lt;br /&gt;   &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(43, 145, 175);"&gt;ILog &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;log &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;LogManager&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;GetLogger&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 255, 230);"&gt;"Logger"&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);
&lt;br /&gt;   &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;log&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Debug&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 255, 230);"&gt;"Message"&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);
&lt;br /&gt;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:blue;" &gt;#endif&lt;/span&gt;&lt;/pre&gt;There are different choices for a destination of your application’s log, Database, Console, File, System event log, Memory, E-mail, Telnet, and even &lt;a href="http://caseywatson.com/2009/07/07/log4net-twitter-awesome/" target="_blank"&gt;Twitter&lt;/a&gt; which I don’t think is very practical (no one would follow a feed that delivers only bad news).
&lt;br /&gt;
&lt;br /&gt;Those different destinations offer different advantages and are fit for different scenarios. You can use the preprocessor directive to apply different configurations for debugging and release.
&lt;br /&gt;
&lt;br /&gt;One obvious scenario is to use a database for debugging and a file for release. In a large development environment where different individuals work on development and testing, logging to a database offers some advantages like keeping a record of how the application behaves and easily sharing that record among different team members. With simple tools and shared procedure, this log can be linked to the issue tracking system within the organization.
&lt;br /&gt;
&lt;br /&gt;I use a text file as a destination. It’s easy to set up and use and not so difficult to read. I also use a XML file for configurations rather than programmatically (which only few prefer). I found that the best of both worlds is to embed the configurations file in the application resources and then stream it at runtime to configure the logger using the stream.
&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;
&lt;br /&gt;XmlConfigurator&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;Configure&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;stream&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;);&lt;/span&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;This helps solving one of the problems I ran into, which is configuring log4net for the release version. In the debug mode, you can easily hard code the path to the destination file and you have administrator privileges to write to any folder you like. In the release mode, you can’t really control – or predict – the environment where the logger will work. You have to plan for something safe that you know will work in any environment.
&lt;br /&gt;
&lt;br /&gt;Writing log to the application installation folder does not work under Windows 7 (or Vista). Unless the application is running as an administrator, logging will fail. Try to use the Application Data folder or the Temp folder.
&lt;br /&gt;
&lt;br /&gt;In the Application Data folder, you have to manage the growing number of files as the application continues to log to them but you have the advantage of being able to keep the log files (unless the user goes to the folder and delete the files, nothing will happen to them).
&lt;br /&gt;
&lt;br /&gt;In the Temp folder, you have to avoid creating a file with a name that already exist, and your log file will probably be deleted by the next time you run the application.
&lt;br /&gt;
&lt;br /&gt;I create a log file in the Temp folder because I don’t really need the log file beyond the current session, and to avoid creating a file with a duplicate name simply use:&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:navy;" &gt;
&lt;br /&gt;
&lt;br /&gt;string &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;logFilePath &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;= &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248); color: rgb(166, 83, 0);"&gt;Path&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;.&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);color:maroon;" &gt;GetTempFileName&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(248, 248, 248);"&gt;();&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Now, I want to:
&lt;br /&gt; &lt;ul&gt;&lt;li&gt;Configure log4net using XML file.
&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Determine the path to the log file at runtime.
&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Avoid shipping a configuration file with the assembly (include the configuration file inside the assembly).
&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Reduce the number of lines I have to write to initiate logging.
&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;To do all that, and reuse the solution across all the projects I work on, I use the AppLogger class. How use it and how it works is a topic of another post.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-6225436993378203294?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=j0ESXzblVVA:BNArgllS0F0:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=j0ESXzblVVA:BNArgllS0F0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=j0ESXzblVVA:BNArgllS0F0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=j0ESXzblVVA:BNArgllS0F0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/j0ESXzblVVA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/j0ESXzblVVA/configuring-log4net-and-using-applogger.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2010/07/configuring-log4net-and-using-applogger.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-3893750059658707073</guid><pubDate>Thu, 01 Jul 2010 19:46:00 +0000</pubDate><atom:updated>2010-07-01T15:47:57.494-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Bing</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">Wish List</category><title>Filtering Search Results by Site</title><description>&lt;p&gt;I like &lt;a href="http://www.bing.com/"&gt;Bing&lt;/a&gt; and I’ve been using it since its launch last year. One of the ways that can improve my experience with Bing is to make it easier to filter search results by a certain URL. I do this filtering a lot so I’m used to using the keyword “site:” in the search box, what is difficult about it is entering the URL. So, I’m suggesting a new addition to the UI that can be optional where users will opt-in to use it.&lt;/p&gt;  &lt;p&gt;Simply add a small dropdown list next to the search box from which the user can select the URL he wants to filter results by. The items in the list are customizable and appear as a short alias that can be easily remembered by the user.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://public.blu.livefilestore.com/y1pJm8xbUyGttjTddViJEGP-b3jNFm9BZvOgmJTFGQFhVHIyFo7Gh2eFd9eShc6bgCzb1fXZwj_VwQ20SB5jw57lA/SearchSitesUI01.png?psid=1" width="485" height="207" /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;When the user selects an item from the list, the item’s alias is displayed next to the dropdown button with an italic font.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://public.blu.livefilestore.com/y1pvXqqQuqc54ROVgiRodd5aoLk9cenIYdctXH7v-xo9d_XAHNo48CEt91RdmVk2gNnSyNfM41-MwyZZ8xsMG_kVw/SearchSitesUI02.png?psid=1" /&gt;&lt;/p&gt;  &lt;p&gt;When the user hovers over the alias in italic, a tooltip is displayed to show the full URL of the site with which the results are filtered.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://public.blu.livefilestore.com/y1pQ-Ka3itWSuh_xwfUEN5YDzRzd6uXaZOwBIREnbSiOotb2PeyLPx3RS1PyNRZKmJQ0GR9L23RzIvKpaaUhORlew/SearchSitesUI03.png?psid=1" width="480" height="84" /&gt;&lt;/p&gt;  &lt;p&gt;At the bottom of the list, the item “Customize this list…” that can help with adding, editing and removing items in the list.&lt;/p&gt; I think this is a feature that can be (relatively) easily implemented and I’m sure that it will help a lot of users out there. I hope it can find its way to implementation soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-3893750059658707073?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5xyvRx-ed3c:bxOQnFcbUZU:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5xyvRx-ed3c:bxOQnFcbUZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=5xyvRx-ed3c:bxOQnFcbUZU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=5xyvRx-ed3c:bxOQnFcbUZU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/5xyvRx-ed3c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/5xyvRx-ed3c/filtering-search-results-by-site.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2010/07/filtering-search-results-by-site.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-3941515684079835657</guid><pubDate>Mon, 18 Jan 2010 00:15:00 +0000</pubDate><atom:updated>2010-01-17T19:15:25.550-05:00</atom:updated><title>Updated release of Arabic translation for Cubic Explorer</title><description>&lt;p&gt;A year ago, &lt;a href="http://www.amreldib.com/2009/01/cubicexplorer-arabic-translation-is.html" target="_blank"&gt;I released&lt;/a&gt; an Arabic translation for my favorite alternative of Windows Explorer, Cubic Explorer. After a year of updates of the software, I thought the translation might need some updating and I also noticed some mistakes that needed to be fixed.&lt;/p&gt;  &lt;p&gt;Now you can get an updated release of the translation (release 1.1). You can find it at my public SkyDrive &lt;a href="http://bit.ly/6sTDe1" target="_blank"&gt;here&lt;/a&gt;. This translation works with Cubic Explorer release 0.91.0.1223 (SVN Snapshot) which you can get &lt;a href="http://www.cubicreality.com/2010/01/15/notes-week-2-polished-info-bar-and-ces-future/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Hopefully the updated translation will be included in the installer very soon.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-3941515684079835657?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=-dmi-RRvbQs:FkUZJD0UrIg:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=-dmi-RRvbQs:FkUZJD0UrIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=-dmi-RRvbQs:FkUZJD0UrIg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=-dmi-RRvbQs:FkUZJD0UrIg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/-dmi-RRvbQs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/-dmi-RRvbQs/updated-release-of-arabic-translation.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2010/01/updated-release-of-arabic-translation.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-4595490835673449095</guid><pubDate>Wed, 30 Dec 2009 05:12:00 +0000</pubDate><atom:updated>2009-12-30T00:22:35.022-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Mozilla</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><title>New Firefox Addons Collection for the New Year</title><description>&lt;p&gt;It’s been a good year for Firefox and Mozilla. They&lt;a href="http://www.mozilla.com/en-US/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Mozilla Firefox" border="0" alt="Mozilla Firefox" align="right" src="http://lh6.ggpht.com/_QnwET5uCdXI/SzrhTF1_P9I/AAAAAAAAAE0/Gg1pPi7wjo0/Firefox_3.5_logo%5B1%5D%5B15%5D.png?imgmax=800" width="118" height="118" /&gt;&lt;/a&gt; released the &lt;a href="http://www.mozilla.com/en-US/" target="_blank"&gt;3.5 version&lt;/a&gt; with lots of improvements. We celebrated &lt;a href="http://www.spreadfirefox.com/5years/en-US/" target="_blank"&gt;five years&lt;/a&gt; of Firefox. &lt;a href="http://ubiquity.mozilla.com/" target="_blank"&gt;Ubiquity&lt;/a&gt; has become more stable, got lots more of &lt;a href="https://wiki.mozilla.org/Labs/Ubiquity/Commands_In_The_Wild" target="_blank"&gt;commands&lt;/a&gt;, &lt;a href="http://www.getpersonas.com/en-US/" target="_blank"&gt;Personas&lt;/a&gt; reached the 2.0 milestone and the &lt;a href="http://www.mozillamessaging.com/en-US/thunderbird/"&gt;Thunderbird 3.0&lt;/a&gt; looks really great. Firefox 3.5 has become the &lt;a href="http://www.downloadsquad.com/2009/12/21/firefox-3-5-passes-ie7-as-most-poluar-web-browser/" target="_blank"&gt;most popular browser&lt;/a&gt; on the web.&lt;/p&gt;  &lt;p&gt;To celebrate this year and the one to come, I created a collection of the addons I use on daily basis. Maybe some of them can help you like it help me.&lt;/p&gt;  &lt;p&gt;To view the contents of the collection please visit &lt;a href="https://addons.mozilla.org/en-US/firefox/collection/amreldib2010collection"&gt;this page&lt;/a&gt;. Here’s a list of the addons in the collection:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Appearance&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/14284?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Strata40&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; and &lt;/strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/14762?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;StrataBuddy&lt;/strong&gt;&lt;/a&gt; (Windows Only) gives you the look and feel of the mockups of Firefox 4.0 which makes your browser looks great in Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3895?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Personal Menu&lt;/strong&gt;&lt;/a&gt; puts all Firefox menus in one place and hides the menu bar.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1951?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Fission&lt;/strong&gt;&lt;/a&gt; displays the progress bar in the address bar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Tabs&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/14644?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Tab Progress Bar&lt;/a&gt;&lt;/strong&gt; shows a little progress bar in tab header.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1122?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;TabMixPlus&lt;/a&gt;&lt;/strong&gt; what can I say. Nothing is like having complete and total control over your browser tabs. Take 20 minutes of your time to go through all the configurations and then export it to a file a keep it in a safe place.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4882?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;TabScope&lt;/a&gt;&lt;/strong&gt; lets you peek at the other tabs that aren’t in focus like Windows live thumbnail for applications in the taskbar. Scroll page in the preview and even click links. You can control the size of the preview.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5244?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Ctrl-Tab&lt;/a&gt;&lt;/strong&gt; displays a preview of all tabs while switching between them just like Windows 7 Alt + Tab.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Work-ish&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8381?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Evernote Web Clipper&lt;/a&gt;&lt;/strong&gt; if you’re not using Evernote, it’s probably because you’re using OneNote.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12003?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Clip to OneNote&lt;/strong&gt;&lt;/a&gt; if you’re not using OneNote, it’s because you’re using Evernote.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7661?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Read it Later&lt;/a&gt;&lt;/strong&gt; this is definitely for work. You mark web pages you’re interested in and then read later at work :)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5579?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Cooliris&lt;/a&gt;&lt;/strong&gt; (Windows Only) great tool for slideshowing any picture collection. Look at a wall of pictures and zoom in to any one for details. Love it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Development&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2489?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;CacheViewer&lt;/a&gt;&lt;/strong&gt; easily browse and search your browser cache. Open a file or save it to disk.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;FireBug&lt;/a&gt;&lt;/strong&gt; debugging CSS never been easier.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Firefox Utilities&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1865?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Adblock Plus&lt;/a&gt;&lt;/strong&gt; blocks ads like they don’t exist.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1759?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Organize Status Bar&lt;/a&gt;&lt;/strong&gt; controls how all those other addons are arranged in the status bar.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3497?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;United States English Dictionary&lt;/strong&gt;&lt;/a&gt; you need this if you stink at spelling like I do.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Download&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3006?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Video DownloadHelper&lt;/strong&gt;&lt;/a&gt; helps you download video. It’s that simple really.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/26?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;Download Statusbar&lt;/a&gt;&lt;/strong&gt; puts downloading status in the status bar with simple pause, resume, cancel, rename, open and even delete.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Little Things that Matter&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3201?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;PastoGo&lt;/a&gt;&lt;/strong&gt; Don’t paste a link in the address bar then click the ‘Go’ button. Have the link the clipboard and just click the ‘PastoGo’ button. Place it next to the address bar and make sure it opens links in a new tab.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1330?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;CuteMenus - Crystal SVG&lt;/strong&gt;&lt;/a&gt; makes all menus cuter.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1812?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;CoLT&lt;/a&gt;&lt;/strong&gt; I installed this a long time ago, and one day I uninstalled it because I wasn’t sure what it does, my life was difficult for a couple of days. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;For Mozilla Groupies :)&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9527?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Ubiquity&lt;/strong&gt;&lt;/a&gt; is a one-stop command line to do everything web-related. Search, check the whether, send quick e-mail, tweet, you name it. Make sure to download the latest beta from &lt;a href="http://ubiquity.mozilla.com/"&gt;the Ubiquity website&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12025?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;JetPack&lt;/strong&gt;&lt;/a&gt; is the future of Firefox addons. No restart for installation or updates with the same functionality and awesomeness. Try visiting the jetpacks gallery to find a little awesomeness now.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/13661?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;TestPilot&lt;/a&gt;&lt;/strong&gt; if you want to help Firefox development just by using Firefox. Use this addon to collect anonymous statistics about your usage. TestPilot asks you to participates in tests and shows the data it collected before submitting it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Arabic and International&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1117?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;FoxClocks&lt;/strong&gt;&lt;/a&gt; it’s really not nice to call your overseas friends at a late hour. This helps avoiding that.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3677?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;&lt;strong&gt;Arabic Spell-Check Dictionary&lt;/strong&gt;&lt;/a&gt; to spell-check Arabic writing.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4270?collection_uuid=88e5ddd4-504b-afac-7ab6-6331c8a6b40a"&gt;PrayTimes&lt;/a&gt;&lt;/strong&gt; stop browsing for a little time to pray.&lt;/p&gt;  &lt;p&gt;Hope you enjoy this and found it useful. Happy New Year.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-4595490835673449095?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=gabPIW4dVGM:_YVPBdS4cfM:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=gabPIW4dVGM:_YVPBdS4cfM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=gabPIW4dVGM:_YVPBdS4cfM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=gabPIW4dVGM:_YVPBdS4cfM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/gabPIW4dVGM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/gabPIW4dVGM/new-firefox-addons-collection-for-new.html</link><author>noreply@blogger.com (Amr Eldib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_QnwET5uCdXI/SzrhTF1_P9I/AAAAAAAAAE0/Gg1pPi7wjo0/s72-c/Firefox_3.5_logo%5B1%5D%5B15%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.amreldib.com/2009/12/new-firefox-addons-collection-for-new.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-7850547857555408204</guid><pubDate>Fri, 13 Nov 2009 18:56:00 +0000</pubDate><atom:updated>2009-11-13T13:58:18.366-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IT Industry</category><category domain="http://www.blogger.com/atom/ns#">Wish List</category><title>Time to Start Versioning Web Applications</title><description>&lt;p&gt;It's clear to me with every newly released version of a web application that we need a mechanism for users to choose which web app release to use.&lt;/p&gt;  &lt;p&gt;With the rollout of new features in Facebook and this week the new ReTweeting feature in Twitter, users acted negatively to these new features. For some of features, the company would eventually have to roll back the new feature(s). &lt;/p&gt;  &lt;p&gt;However, some users actually like the new features and want to keep them. It’s a lose-lose for the company rolling out the new feature. Not only because some users are upset but also they also already lost all the effort going into developing and deploying those features.&lt;/p&gt;  &lt;p&gt;From the start, the concept of versioning was missing from the web, mainly because we were using web sites. Now that we’re using web applications, I don’t see why we can’t keep track of application versions.&lt;/p&gt;  &lt;p&gt;Let’s differentiate between two kinds of updates, Minor and Major. There are some updates that are important to be deployed to everyone like fixes, security updates, and performance improvements. These updates are ‘Minor’ updates that have to be applied to everyone. Other updates that include rolling out new features are ‘Major’ updates that users login one day and say to themselves “What the hell happened here?”.&lt;/p&gt;  &lt;p&gt;There are two ways that companies are using to update their web applications right now. The first is to incrementally roll out one feature at a time like Twitter introducing the new ‘ReTweeting’ feature. The other is introducing totally new interface with new features like the new Hotmail and Facebook lite.&lt;/p&gt;  &lt;p&gt;Any web applications (or at least the ones affecting big number of users) should have an option for users to either opt-out of new features (in case of incrementally rolled-out features) or to simply choose which version to use.&lt;/p&gt;  &lt;p&gt;This requires companies to keep clear and announced track of application version. It also requires them to keep different version of their application deployed which will eventually lead to applying &lt;a href="http://en.wikipedia.org/wiki/End-of-life_%28product%29" target="_blank"&gt;End-of-Life&lt;/a&gt; concept to web applications as it’s applied to desktop applications.&lt;/p&gt;  &lt;p&gt;As time goes on, more and more of our activities are going into web applications instead of desktop applications. And while users appreciate the removal of application management overhead, they don’t appreciate software companies defining how and when they should use those applications. To put it in a cheap populist chant “Power to the People”.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-7850547857555408204?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2bwuNMQKiCg:--ea3x_-Hvc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2bwuNMQKiCg:--ea3x_-Hvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2bwuNMQKiCg:--ea3x_-Hvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=2bwuNMQKiCg:--ea3x_-Hvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/2bwuNMQKiCg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/2bwuNMQKiCg/time-to-start-versioning-web.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2009/11/time-to-start-versioning-web.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-4388972652297310084</guid><pubDate>Wed, 03 Jun 2009 18:17:00 +0000</pubDate><atom:updated>2009-06-03T17:22:05.147-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Obama</category><category domain="http://www.blogger.com/atom/ns#">Politics</category><category domain="http://www.blogger.com/atom/ns#">Egypt</category><title>A Distant Cousin</title><description>&lt;p&gt;This is pretty much a technical blog. Okey, it’s a technical blog about software and developers, even the tag line is about a developer in some kind of heart surgery or something. So, I thought hard before taking a D-tour of those topics to address a political event like Obama’s address in Cairo tomorrow.&lt;/p&gt;  &lt;p&gt;The reason is that I think I have a vantage point on the topic, being an Egyptian living in the west and subjected to the sheer volume of press coverage of the Obama campaign, transition, administration, and every little thing. &lt;/p&gt;  &lt;p&gt;First of all, I want to address some of the arguments about the visit and the speech. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.foreignpolicy.com/story/cms.php?story_id=4963" target="_blank"&gt;No Muslim World&lt;/a&gt;&lt;/strong&gt;: trying to put a geographical boundary around the Muslim world is like giving membership cards for intellectuals. There are no specific qualifications yet a lot of people are qualified.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Visit is endorsement to the Mubarak regime&lt;/u&gt;&lt;/strong&gt;: Not really, the reason the Obama administration chose Cairo rather than any other Islamic country is on basis of elimination. Helene Cooper &lt;a href="http://www.nytimes.com/2008/12/04/us/politics/04web-cooper.html?_r=3&amp;amp;adxnnl=1&amp;amp;adxnnlx=1228410035-arPoPrJ86UAwtYZsM9YLsg" target="_blank"&gt;predicted&lt;/a&gt; it best. You know, Syria and Iran off limit, Indonesia would be playing favor with his childhood town, Saudi Arabia too holy, Turkey not Arabic enough, Iraq too many American forces, Palestine and Pakistan no no from secret service, Libya too crazy, Gulf Area too rich and too small for a big speech. So Cairo is the place, not with all the advantages but rather the place with no ‘Obvious’ disadvantages except for the no-democracy thing. Well, America lived with that for so long why stop now?. I can assure you that all Obama wanted was a podium with Al-Azhar or any other mosque in the background, a Muslim-y looking crowd and his teleprompter of course. If Mubarak had visited Washington as planned, maybe Obama wouldn’t have met with him in Cairo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Cairo turning into a police/security barrack&lt;/u&gt;&lt;/strong&gt;: Well, what else is new? Every time Mubarak goes out to buy new socks, Cairo turns upside down and a buffer zone of police top officers is created along the way from the presidential palace to the socks shop downtown.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://kasperb4.blogspot.com/2009/06/blog-post.html" target="_blank"&gt;Invitation to the ‘real’ Egypt&lt;/a&gt;&lt;/strong&gt;: As much as I love for that to happen, we all know that not gonna. Simply because such a trip for Mubarak himself isn’t gonna happen. The guy have a financial meltdown, a GM bankruptcy, fading middle class, rising unemployment numbers, diving home prices across America, two wars, failing health care system, failing students, near failing social security system, changing climate, and a VP who doesn’t stop talking and you want him to pay attention to your problems of being unemployed, under paid if employed, having no health care, or decent education, having no freedom, or rights, being tortured, beaten, robbed, and used by all means possible. Please be serious. It’s not that Obama doesn’t care, or doesn’t know, or doesn’t have the means, no it’s just he’s not your president and probably have shit to do.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.harakamasria.org/node/10617" target="_blank"&gt;Protesting the visit&lt;/a&gt;&lt;/strong&gt;: Look, I’m totally for the protests and all that. But don’t protest a speech from a pretty reasonable guy who is globally beloved and hugely popular in Europe, home of all Anti-American protests during the last 8 years. A guy who literally gave his first TV interview in office to an Arabic TV network.&amp;#160; I’m not saying don’t protest, I’m saying protest something that is actually worth protesting. For example, Obama broke one of his promises few weeks ago when he didn’t release the torture photos of Guantanamo camp and said that his administration will not seek the prosecution of those who carried out the torture or those who authorized it under the banner of protecting the American troops overseas. But it’s actually for political reasons including avoiding the embarrassment of addressing the Muslim world while photos of torturing Muslims is circulating the media and the Internet, and also avoiding a fight with the Republicans (who are basically responsible for all what happened in Gitmo) in a time where national unity and bipartisanship in Washington is the talk of the town. So, if you wanna protest, protest all you want but do it for something that will get you some air time in the west to where you wanna deliver a message and not just get couple of nights in a Cairo police station.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Obama speech in Cairo for the Muslim world is part of his effort to fix the image of the United States around the world, especially in the Muslim world where good relations would go a long way in proving Obama right when he talks about dialog and direct diplomacy being the best way to secure America. So, this is more about Obama playing his best card in the effort to secure his own country, just like Bush did. And while Bush best card was his ‘Dickishness’ powered by Tomahawk cruise missiles, Stealth fighter jets, and empty threats of plug ’n’ play democracy, Obama’s best card is ‘Inclusion’ powered by inspiring rhetoric, compelling life story, and head-on style of addressing problems. Just look at what he’s &lt;a href="http://www.politico.com/news/stories/0509/22611.html" target="_blank"&gt;done in Notre Dame&lt;/a&gt; and you’ll get a sense of how he tackle problems. Of course the middle east is no anti-abortion protest but you get the picture.&lt;/p&gt;  &lt;p&gt;So, stop treating the man as if he’s the distant cousin who was elevated to leading the company producing all of our products and suddenly we’re expecting him to return all the favors that we never gave him, forgetting that the company is declining and stuck in legal disputes while its PR machine has been put on hold for the last 8 years. Stop casting your unrealistic hopes, disappointed dreams, everlasting problems, and growing anger on him. Start taking matters in your own hands and realize that no one, but you, can solve your own problems.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-4388972652297310084?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2OGe8HYq05E:zmhEbXI4IbM:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2OGe8HYq05E:zmhEbXI4IbM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=2OGe8HYq05E:zmhEbXI4IbM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=2OGe8HYq05E:zmhEbXI4IbM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/2OGe8HYq05E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/2OGe8HYq05E/distant-cousin.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.amreldib.com/2009/06/distant-cousin.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4817591370063741827.post-9076968617946345674</guid><pubDate>Fri, 02 Jan 2009 19:16:00 +0000</pubDate><atom:updated>2009-01-02T14:16:09.701-05:00</atom:updated><title>CubicExplorer Arabic Translation is Available</title><description>&lt;p&gt;There are many Windows Explorer alternatives available on the web. The one that I’m using is &lt;a title="Download CubicExplorer 0.8 (Freeware)" href="http://www.cubicreality.com/cubicexplorer/download/" target="_blank"&gt;CubicExplorer&lt;/a&gt; which is pretty cool. It supports tabs, saving sessions, multiple sessions, bookmarks, bookmarks grouping, themes, and localization (here are some &lt;a title="Screenshots of CubicExplorer" href="http://www.cubicreality.com/cubicexplorer/screenshots/" target="_blank"&gt;screenshots&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;I’m contributing to CubicExplorer with the Arabic translation in an effort to make it more available to the Arabic user. The translation file is not integrated in the application build yet. You can get the link to the translation file from the &lt;a title="CubicExplorer Arabic Translation Page" href="http://www.cubicreality.com/forum/index.php?topic=874.0" target="_blank"&gt;CubicExplorer&lt;/a&gt; forum, or you can download the file directly from my &lt;a title="CubicExplorer Arabic Translation File" href="http://cid-a0f4e46186f7cce4.skydrive.live.com/self.aspx/Public/CubicExplorerArabicTranslation/default.po" target="_blank"&gt;SkyDrive page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The translation works with the RC3 release of the 0.9 version of the application which is pretty stable. I recommend that you download the RC3 release rather than the 0.8 version. You can find the RC3 release at &lt;a title="Download CubicExplorer 0.9 RC3 (Freeware)" href="http://www.cubicreality.com/forum/index.php?topic=791.0" target="_blank"&gt;this page&lt;/a&gt; (or directly to the &lt;a title="Download CubicExplorer 0.9 RC3 (Freeware - Executable)" href="http://cubicreality.pp.fi/files/ce/CubicExplorer_0.90rc3_Setup.exe" target="_blank"&gt;executable&lt;/a&gt; file or the &lt;a title="Download CubicExplorer 0.9 RC3 (Freeware - zip package)" href="http://cubicreality.pp.fi/files/ce/CubicExplorer_0.90rc3.zip" target="_blank"&gt;zip package&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Enjoy it.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://www.amreldib.com/2009/01/cubicexplorer-arabic-translation-is.html";digg_title = "CubicExplorer Arabic Translation is Available";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4817591370063741827-9076968617946345674?l=www.amreldib.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=StIOWTfOxpw:vx9WMnaMvJo:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=StIOWTfOxpw:vx9WMnaMvJo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AmrEldib?a=StIOWTfOxpw:vx9WMnaMvJo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AmrEldib?i=StIOWTfOxpw:vx9WMnaMvJo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AmrEldib/~4/StIOWTfOxpw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AmrEldib/~3/StIOWTfOxpw/cubicexplorer-arabic-translation-is.html</link><author>noreply@blogger.com (Amr Eldib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.amreldib.com/2009/01/cubicexplorer-arabic-translation-is.html</feedburner:origLink></item></channel></rss>

