<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tips on Ash Tewari</title><link>https://www.tewari.info/category/tips/</link><description>Recent content in Tips on Ash Tewari</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Mon, 18 Sep 2017 21:52:02 +0000</lastBuildDate><atom:link href="https://www.tewari.info/category/tips/feed.xml" rel="self" type="application/rss+xml"/><item><title>Paste Table from Microsoft Excel to Confluence Wiki</title><link>https://www.tewari.info/2017/09/18/paste-table-from-microsoft-excel-to-confluence-wiki/</link><pubDate>Mon, 18 Sep 2017 21:52:02 +0000</pubDate><guid>https://www.tewari.info/2017/09/18/paste-table-from-microsoft-excel-to-confluence-wiki/</guid><description>&lt;p&gt;1. Create the table in Microsoft Excel.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-excel.png" &gt;&lt;img alt="paste-table-confluence-excel" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-excel.png"&gt;&lt;/a&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-toolbar.png" &gt;&lt;img alt="paste-table-confluence-toolbar" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-toolbar.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;2. Open this page in browser: &lt;a class="link" href="http://excel2jira.bluurgh.com/" target="_blank" rel="noopener"&#10; &gt;http://excel2jira.bluurgh.com/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;3. Paste the table from Microsoft Excel into the input box on the page.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-convert-markup.png" &gt;&lt;img alt="paste-table-confluence-convert-markup" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-convert-markup.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;4. Click on “Convert Me Now” button&lt;/p&gt;&#10;&lt;p&gt;5. Place the cursor at the intended insertion point in the wiki document.&lt;/p&gt;&#10;&lt;p&gt;6. Click on “Insert more content” (+) button on Wiki toolbar&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-toolbar.png" &gt;&lt;img alt="paste-table-confluence-toolbar" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-toolbar.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;7. Click on “Markup”&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-markup-cmd.png" &gt;&lt;img alt="paste-table-confluence-markup-cmd" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-markup-cmd.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;8. Paste converted markup from step 2  in the left pane and verify the preview.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/paste-table-confluence-insert.png" &gt;&lt;img alt="paste-table-confluence-insert" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/paste-table-confluence-insert.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;9. Click on “Insert”&lt;/p&gt;&#10;&lt;p&gt;10. Review and verify the inserted content and make any correction if needed.&lt;/p&gt;&#10;</description></item><item><title>Get Your Windows 8 Start Menu Back With Pokki</title><link>https://www.tewari.info/2013/05/23/get-your-windows-8-start-menu-back-with-pokki/</link><pubDate>Fri, 24 May 2013 05:34:39 +0000</pubDate><guid>https://www.tewari.info/2013/05/23/get-your-windows-8-start-menu-back-with-pokki/</guid><description>&lt;p&gt;I like the new Windows 8 experience. Start screen with live tiles is awesome. But I have been missing the Start Menu when I am on the desktop. There are &lt;a class="link" href="http://www.redorbit.com/news/technology/1112841701/microsoft-bringing-back-the-start-button-for-windows-8-050913/" target="_blank" rel="noopener"&#10; &gt;plenty&lt;/a&gt; of &lt;a class="link" href="http://bits.blogs.nytimes.com/2013/05/07/after-bumpy-start-microsoft-rethinks-windows-8/" target="_blank" rel="noopener"&#10; &gt;rumours&lt;/a&gt; that Microsoft will bring back the Start Menu in the next version of Windows - &lt;a class="link" href="http://www.zdnet.com/microsofts-windows-8-plan-blue-bring-back-the-start-button-boot-to-desktop-7000014075/" target="_blank" rel="noopener"&#10; &gt;Windows Blue&lt;/a&gt;. Until then, you can use one of many third party utilities for that functionality - &lt;a class="link" href="http://www.classicshell.com/" target="_blank" rel="noopener"&#10; &gt;ClassicShell&lt;/a&gt;, &lt;a class="link" href="http://www.stardock.com/products/start8/" target="_blank" rel="noopener"&#10; &gt;Start8&lt;/a&gt; and &lt;a class="link" href="https://www.pokki.com/windows-8-start-menu" target="_blank" rel="noopener"&#10; &gt;Pokki&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;I started using &lt;a class="link" href="https://www.pokki.com/windows-8-start-menu" target="_blank" rel="noopener"&#10; &gt;Pokki&lt;/a&gt;. And I love it. It feels like my world is whole again. Pokki is &lt;a class="link" href="https://www.pokki.com/windows-8-start-menu" target="_blank" rel="noopener"&#10; &gt;free&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/Pokki-Screenshot.png" &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/Pokki-Screenshot.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;If you want to do what I did, after installing it, open settings&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/pokki-settings-button.png" &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/pokki-settings-button.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;and make these changes:&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/pokki-my-settings.png" &gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/pokki-my-settings.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Favorite Excel Keyboard Shortcuts</title><link>https://www.tewari.info/2012/08/24/favorite-excel-keyboard-shortcuts/</link><pubDate>Fri, 24 Aug 2012 21:46:23 +0000</pubDate><guid>https://www.tewari.info/2012/08/24/favorite-excel-keyboard-shortcuts/</guid><description>&lt;p&gt;I am a big fan of keyboard shortcuts. Here are some of my favorites keyboard shortcuts in Excel.&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/F2toeditselectedcell.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/Ctrl5tostrikethrough.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/shiftspacetoselectrow.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/ctrlspacetoselectcolumn.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/ctrlminustodeleteselectedrowcolumn.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/dragcopy-b4.png"&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/images/dragcopyafter.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>Sideload Windows Phone</title><link>https://www.tewari.info/2010/11/25/sideload-windows-phone/</link><pubDate>Thu, 25 Nov 2010 21:02:12 +0000</pubDate><guid>https://www.tewari.info/2010/11/25/sideload-windows-phone/</guid><description>&lt;p&gt;1. Create your AppHub account here - &lt;a class="link" href="http://create.msdn.com" target="_blank" rel="noopener"&#10; &gt;http://create.msdn.com&lt;/a&gt;. Registration walk through is &lt;a class="link" href="http://create.msdn.com/en-US/home/about/developer_registration_walkthrough" title="registration-walk-through"&#10; target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;2. Unlock your phone - using PhoneReg.exe (usually) located here - &amp;ldquo;C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools\Phone Registration\PhoneReg.exe&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="wp-Start-WPDevTools" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/wp-Start-WPDevTools.png"&gt;&lt;img alt="wp-dev-phone-registration" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/wp-dev-phone-registration.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;3. Sideload xap into your phone. Use XapDeploy.exe (usually) located here - &amp;ldquo;C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools\XAP Deployment\XapDeploy.exe&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="wp-app-deployment" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/wp-app-deployment.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;You can also deploy straight from Visual Studio to Windows Phone Device. Connect your phone to your computer.&#10;Make sure Visual Studio deployment target is &amp;ldquo;Windows Phone 7 Device&amp;rdquo; :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="wp-device-target" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/wp-device-target1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;From Toolbar, select Build, Deploy Solution.&lt;/p&gt;&#10;</description></item><item><title>SVN Merge - Selecting Changesets</title><link>https://www.tewari.info/2010/04/25/svn-merge-selecting-changesets/</link><pubDate>Mon, 26 Apr 2010 00:15:31 +0000</pubDate><guid>https://www.tewari.info/2010/04/25/svn-merge-selecting-changesets/</guid><description>&lt;p&gt;Here is a simple scenario – I have already merged changesets 45-55 from the trunk to branch b1. After this merge, more changes (56-60) were submitted into the trunk and I now need to merge those changes also to branch b1.&lt;/p&gt;&#10;&lt;p&gt;Which changesets do you select to merge ? 56-60, right ? Well, not exactly. It depends. If you are using &lt;a class="link" href="http://subversion.tigris.org/" target="_blank" rel="noopener"&#10; &gt;Subversion&lt;/a&gt; merge command, you will need to specify 55-60. If you are using &lt;a class="link" href="http://tortoisesvn.net/" target="_blank" rel="noopener"&#10; &gt;TortoiseSVN&lt;/a&gt;, you will select 56-60. You should keep this in mind if you are used to TortoiseSVN and you are attempting a merge using SVN merge command. Otherwise, you will end up with a merge without change 56.&lt;/p&gt;&#10;&lt;p&gt;Selecting changes to merge can become non-trivial when you don’t know which changes have already been merged. However, there is good news. With subversion 1.5, when you are selecting changes from source branch to merge into a target branch, don’t do it ! Subversion 1.5 onwards has built-in merge tracking. When using TortoiseSVN, if your intention is to merge all changes, just leave the changeset selection blank. Subversion knows which ones have already been merged and which ones to merge and it does it automatically. You can also select changes that have already been merged and those will be handled (excluded) automatically too.&lt;/p&gt;&#10;&lt;p&gt;There is a summary of what to expect from Subversion Merge-Tracking feature here - &lt;a class="link" href="http://blog.red-bean.com/sussman/?p=92" target="_blank" rel="noopener"&#10; &gt;Subversion 1.5 merge-tracking in a nutshell&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;There is detailed description of Subversion Merge-Tracking &lt;a class="link" href="http://svn.apache.org/repos/asf/subversion/trunk/notes/merge-tracking/index.html" target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt; and search for ‘mergeinfo property’ in Subversion &lt;a class="link" href="http://svnbook.red-bean.com/" target="_blank" rel="noopener"&#10; &gt;documentation&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/wp-content/20100425_1151.png" &gt;&lt;img alt="changes already merged appear in grey" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tewari.info/wp-content/20100425_1151_thumb.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;The above screen-shot shows the changes already merged in grey. Thanks to Subversion’s mergeinfo property.&lt;/p&gt;&#10;&lt;p&gt;So, can I just stop worrying about changesets altogether, when merging ? There are a few caveats to how mergeinfo metadata is (and sometimes not) recorded. Read this for more information -  &lt;a class="link" href="http://svnbook.red-bean.com/en/1.5/svn.branchmerge.advanced.html#svn.branchmerge.advanced.finalword" target="_blank" rel="noopener"&#10; &gt;The Final Word on Merge Tracking&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Read about &lt;a class="link" href="http://subversion.tigris.org/" target="_blank" rel="noopener"&#10; &gt;Subversion&lt;/a&gt; merging and branching &lt;a class="link" href="http://svnbook.red-bean.com/en/1.5/index.html" target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt; and &lt;a class="link" href="http://tortoisesvn.net/" target="_blank" rel="noopener"&#10; &gt;TortoiseSVN&lt;/a&gt; merging documentation &lt;a class="link" href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html" target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt; – browse down to these sections : Reviewing the Merge Results and Merge Tracking.&lt;/p&gt;&#10;</description></item><item><title>Code Validation in TortoiseSVN pre_commit_hook</title><link>https://www.tewari.info/2010/03/31/code-validation-in-tortoisesvn-pre_commit_hook/</link><pubDate>Thu, 01 Apr 2010 04:32:10 +0000</pubDate><guid>https://www.tewari.info/2010/03/31/code-validation-in-tortoisesvn-pre_commit_hook/</guid><description>&lt;p&gt;If you want to abort a commit if your code fails certain rule and you don&amp;rsquo;t have access to the &lt;a class="link" href="http://subversion.tigris.org/" title="svn"&#10; target="_blank" rel="noopener"&#10; &gt;SVN&lt;/a&gt; Server to configure a hook. What do you do ?&lt;/p&gt;&#10;&lt;p&gt;Assuming you are using &lt;a class="link" href="http://tortoisesvn.tigris.org/" title="tortoisesvn"&#10; target="_blank" rel="noopener"&#10; &gt;TortoiseSVN&lt;/a&gt;, you can configure a &lt;a class="link" href="http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html#client-side-hooks" title="tortoisesvn-client-side-hook"&#10; target="_blank" rel="noopener"&#10; &gt;Client-Side hook&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Here is an example - Say you want to abort commit if you have a comment in your code that starts with &lt;strong&gt;//Do Not Commit&lt;/strong&gt;. You can create a &lt;a class="link" href="http://en.wikipedia.org/wiki/Windows_PowerShell" title="wikipedia-powershell"&#10; target="_blank" rel="noopener"&#10; &gt;PowerShell&lt;/a&gt; script that validates all the files in your changeset and use this script as a Client-Side pre_commit_hook in TortoiseSVN.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://www.tewari.info/wp-content/TortoiseSVN-Settings-HookScripts.png"&#10;&#9;&#9;&#9;alt="TortoiseSVN-Settings-HookScripts"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;TortoiseSVN-Settings-HookScripts&lt;/p&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;The pre_commit_hook configuration :&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://www.tewari.info/wp-content/Configure-Hook-Scripts.png"&#10;&#9;&#9;&#9;alt="Configure-Hook-Scripts"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;Configure-Hook-Scripts&lt;/p&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;//Powershell script : pre_commit.ps1&lt;/p&gt;&#10;&lt;p&gt;$donotcommit = &amp;ldquo;//Do Not Commit&amp;rdquo;;&lt;/p&gt;&#10;&lt;p&gt;$changeset = Get-Content$args[0];&lt;/p&gt;&#10;&lt;p&gt;foreach($file in $changeset)&#10;{&#10;if( Get-Content$file | Select-String$donotcommit-quiet )&#10;{&#10;Write-Error &amp;ldquo;$file contains code that you are not supposed to commit. [$donotcommit]&amp;rdquo;;&#10;exit9;&#10;}&#10;}&lt;/p&gt;&#10;&lt;p&gt;Now, if your changeset has a file with a comment starting with &lt;strong&gt;//Do Not Commit&lt;/strong&gt; and you click on OK to commit this change, the commit will be aborted with this error message -&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://www.tewari.info/wp-content/pre_commit_hook-validation1.png"&#10;&#9;&#9;&#9;alt="pre_commit_hook-validation"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;pre_commit_hook-validation&lt;/p&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;</description></item><item><title>Use Legacy Printer From Windows 7</title><link>https://www.tewari.info/2010/01/23/use-legacy-printer-from-windows-7/</link><pubDate>Sun, 24 Jan 2010 01:10:04 +0000</pubDate><guid>https://www.tewari.info/2010/01/23/use-legacy-printer-from-windows-7/</guid><description>&lt;p&gt;I have NEC SuperScript 870 laser printer connected to my Home PC. I was not able to print to this printer from my new HP dv6-1375dx Windows 7 laptop. My machines are connected via &lt;a class="link" href="http://www.LogMeIn.com" title="hamachi"&#10; target="_blank" rel="noopener"&#10; &gt;Hamachi&lt;/a&gt;. Here is what I did to get around the lack of NEC driver for Windows 7 (I found this tip &lt;a class="link" href="http://social.technet.microsoft.com/Forums/en/w7itprohardware/thread/c2650495-a9f6-4ead-a1d0-aa9c0b265af3" title="social.technet.microsoft.com"&#10; target="_blank" rel="noopener"&#10; &gt;here&lt;/a&gt;) -&lt;/p&gt;&#10;&lt;p&gt;1. Created a new printer (pointing to the same LPT port that is connected to NEC 870) on my Home PC using HP Laser Jet III driver.&lt;/p&gt;&#10;&lt;p&gt;2. Shared this new printer.&lt;/p&gt;&#10;&lt;p&gt;3. On the Windows 7 laptop, I dropped the document I wanted to print on this new printer. Voila !!!&lt;/p&gt;&#10;</description></item><item><title>Using DbUpdater with MySql</title><link>https://www.tewari.info/2009/09/28/using-dbupdater-with-mysql/</link><pubDate>Mon, 28 Sep 2009 07:13:02 +0000</pubDate><guid>https://www.tewari.info/2009/09/28/using-dbupdater-with-mysql/</guid><description>&lt;p&gt;&lt;a class="link" href="https://www.tewari.info/dbupdater/" title="DbUpdater Page"&#10; &gt;DbUpdater&lt;/a&gt; can be used with &lt;a class="link" href="http://www.mysql.com/" title="mysql.com"&#10; target="_blank" rel="noopener"&#10; &gt;mysql&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Here are the files you need to jumpstart the integration - &lt;a class="link" href="https://www.tewari.info/downloads/DbUpdater-MySql.zip" title="DbUpdater-MySql.zip"&#10; &gt;DbUpdater-MySql.zip&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;1. You might need to change the path to mysql.exe in mysql-exec.bat.&lt;/p&gt;&#10;&lt;p&gt;2. Modify values in mysql-sample-command-line.bat.&lt;/p&gt;&#10;&lt;p&gt;Make sure mysql.data.dll is placed in GAC or in the same directory as DbUpdater.exe. Connector binaries can be downloaded from here -&#10;&lt;a class="link" href="http://dev.mysql.com/downloads/connector/net/6.1.html" title="MySql .NET Connector Download"&#10; target="_blank" rel="noopener"&#10; &gt;http://dev.mysql.com/downloads/connector/net/6.1.html&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Online Backup Solution</title><link>https://www.tewari.info/2009/08/25/online-backup-solution/</link><pubDate>Wed, 26 Aug 2009 05:40:40 +0000</pubDate><guid>https://www.tewari.info/2009/08/25/online-backup-solution/</guid><description>&lt;p&gt;Finalized online backup solution : &lt;a class="link" href="http://www.jungledisk.com" title="jungledisk"&#10; target="_blank" rel="noopener"&#10; &gt;JungleDisk&lt;/a&gt;. I can run it on all of my machines &lt;a class="link" href="http://jungledisk.com/desktop/how.aspx" title="jungledisk-features"&#10; target="_blank" rel="noopener"&#10; &gt;without paying extra&lt;/a&gt;. I get to keep the ownership of my data - by using my own &lt;a class="link" href="http://aws.amazon.com/s3/" title="amazon-s3"&#10; target="_blank" rel="noopener"&#10; &gt;Amazon S3&lt;/a&gt; storage. Backed up all family photos - all 30 GBs. Feeling good :)&lt;/p&gt;&#10;</description></item><item><title>GUI Prototyping Tools</title><link>https://www.tewari.info/2009/05/16/gui-prototyping-tools/</link><pubDate>Sun, 17 May 2009 05:34:41 +0000</pubDate><guid>https://www.tewari.info/2009/05/16/gui-prototyping-tools/</guid><description>&lt;p&gt;Special purpose UI prototyping tools, like the ones listed on &lt;a class="link" href="http://c2.com/cgi/wiki?GuiPrototypingTools" target="_blank" rel="noopener"&#10; &gt;C2 Wiki&lt;/a&gt;, offer a convenient blend of usability and flexibility. I have tried some of these tools. I was looking for something that -&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;doesn&amp;rsquo;t become unwieldy when used to prototype a large and complex GUI&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;allows me to use my own screenshots/images/icons&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;allows me to modify the prototype without making it a hair-pulling experience.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;can prototype all aspects and artifacts of &lt;a class="link" href="http://www.balsamiq.com/products/mockups/examples" target="_blank" rel="noopener"&#10; &gt;modern web and desktop interfaces&lt;/a&gt;, specially -&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;tree controls  - you will be surprised how many prototyping tools don&amp;rsquo;t have this. &lt;a class="link" href="http://www.evolus.vn/Pencil/" target="_blank" rel="noopener"&#10; &gt;Pencil&lt;/a&gt;, I am looking at you :)&lt;/li&gt;&#10;&lt;li&gt;tabbed panels  - can you position your tabs at the bottom ? on the right edge ?&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.codeproject.com/KB/miscctrl/CustomFilmstripControl.aspx" target="_blank" rel="noopener"&#10; &gt;film strips&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.devexpress.com/Products/NET/Controls/WinForms/Bars/Features_Ribbon.xml" target="_blank" rel="noopener"&#10; &gt;ribbons&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.devexpress.com/Products/NET/Controls/WinForms/NavBar/" target="_blank" rel="noopener"&#10; &gt;NavBars&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The one that met all these requirements and more (and blew me away) is &lt;a class="link" href="http://www.balsamiq.com/products/mockups" target="_blank" rel="noopener"&#10; &gt;Balsamiq Mockup&lt;/a&gt;.&#10;Disclaimer : I requested and received a complimentary license from &lt;a class="link" href="http://www.balsamiq.com/" target="_blank" rel="noopener"&#10; &gt;Balsamiq&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;[youtube]zLysy3IPfFI[/youtube]&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Balsamiq Mockup&amp;rsquo;s usability is what attracted me at first and then it was just a series of surprises, one after another.&lt;/li&gt;&#10;&lt;li&gt;You can click on the widget &amp;ldquo;legend&amp;rdquo; to toggle aspects of the widget on and off. Very slick !&lt;/li&gt;&#10;&lt;li&gt;You can link (aspects of) widgets to other mockups. This allows you to build some interactivity into your prototype. Very cool !&lt;/li&gt;&#10;&lt;li&gt;You can clone a mockup with a button click - to prototype a transition.&lt;/li&gt;&#10;&lt;li&gt;I could use my own images/screenshots and sketch them (basically,  applies a sketch transformation on the image) !!! If you think that sketchy look of the prototypes looks unfinished, you should read &lt;a class="link" href="http://headrush.typepad.com/creating_passionate_users/2006/12/dont_make_the_d.html" target="_blank" rel="noopener"&#10; &gt;this&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Here are some things I wish I could have in Balsamiq -&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;name (and search for) individual widgets in my mockup&lt;/li&gt;&#10;&lt;li&gt;select multiple widgets by dragging over an area&lt;/li&gt;&#10;&lt;li&gt;auto-group when dropped on containers (or other widgets)&lt;/li&gt;&#10;&lt;li&gt;stretching container stretches everything in it, I wish I could have some control over it&lt;/li&gt;&#10;&lt;li&gt;register my own mockups as library widgets&lt;/li&gt;&#10;&lt;li&gt;zoom in and out&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Just to be thorough, here are some other approaches I have used in the past -&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Using a RAD tool like VisualStudio is great way to prototype. You have to be very proficient, like a GUI developer ;) , with the tool of your choice. Otherwise, it is can be an excruciatingly slow approach. The best part of this approach is that the interactions can be prototyped seemlessly and some of the feasibility doubts can be cleared early on. The problem with this approach is that the prototype can be mistaken as the actual product and the effort /scheduling expectations of the stakeholders can become hard to manage. Read Joel Spolsky&amp;rsquo;s brilliant observations on &lt;a class="link" href="http://www.joelonsoftware.com/articles/fog0000000356.html" target="_blank" rel="noopener"&#10; &gt;The Iceberg Secret, Revealed&lt;/a&gt;. Also, when the prototype looks like a finished product, type of feedback you receive is usually not strategic, it is narrower. Read more about this on &lt;a class="link" href="http://headrush.typepad.com/creating_passionate_users/2006/12/dont_make_the_d.html" target="_blank" rel="noopener"&#10; &gt;Creating Passionate Users&lt;/a&gt; article.&lt;/li&gt;&#10;&lt;li&gt;When you have an existing UI (perhaps from a 3rd-party library&amp;rsquo;s demos) that can become the basis for your new UI, it makes sense to use screenshots of your existing UI and modify them using image editors like &lt;a class="link" href="http://www.getpaint.net/" target="_blank" rel="noopener"&#10; &gt;Paint.NET&lt;/a&gt; or Photoshop or even MS Paint. It is a quick way to produce a prototype but the expected changes to the prototype must be minimal. Otherwise, you will find yourself spending long hours with your image editor.&lt;/li&gt;&#10;&lt;li&gt;General purpose drawing programs, like &lt;a class="link" href="http://projects.gnome.org/dia/" target="_blank" rel="noopener"&#10; &gt;dia&lt;/a&gt; and &lt;a class="link" href="http://office.microsoft.com/en-us/visio/default.aspx" target="_blank" rel="noopener"&#10; &gt;Visio&lt;/a&gt;, can be used to create UI prototypes. With these type of tools, you will probably need to work with building blocks that are a bit too granular, although you may be able to procure widgets/stencils for some of these tools to make things easier. These tools have a some learning curve and less than fluid usability.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>RIA with Silverlight and WCF - Los Angeles .NET Developers Group</title><link>https://www.tewari.info/2009/03/26/ria-with-silverlight-and-wcf-los-angeles-net-developers-group/</link><pubDate>Fri, 27 Mar 2009 04:43:01 +0000</pubDate><guid>https://www.tewari.info/2009/03/26/ria-with-silverlight-and-wcf-los-angeles-net-developers-group/</guid><description>&lt;p&gt;I will be attending &lt;a class="link" href="http://geekswithblogs.net/jberes/Default.aspx" title="Jason Beres&amp;#39; Blog"&#10; target="_blank" rel="noopener"&#10; &gt;Jason Beres&amp;rsquo;&lt;/a&gt; &amp;ldquo;RIA with Silverlight and WCF&amp;rdquo; lecture on Saturday the 4th. Check-out the details here : &lt;a class="link" href="http://ladotnet.org/default.asp" title="Los Angeles .NET Developers Group"&#10; target="_blank" rel="noopener"&#10; &gt;Los Angeles .NET Developers Group.&lt;/a&gt; Let me know If you are planning to be there. It will be a great opportunity to meet.&lt;/p&gt;&#10;</description></item><item><title>ReSharper vs CodeRush + Refactor Pro</title><link>https://www.tewari.info/2009/02/21/resharper-vs-coderush-refactor-pro/</link><pubDate>Sat, 21 Feb 2009 17:43:03 +0000</pubDate><guid>https://www.tewari.info/2009/02/21/resharper-vs-coderush-refactor-pro/</guid><description>&lt;p&gt;I have been playing with JetBrains &lt;a class="link" href="http://www.jetbrains.com/resharper/" target="_blank" rel="noopener"&#10; &gt;ReSharper&lt;/a&gt;(version 4.1) and DevExpress &lt;a class="link" href="http://devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/" target="_blank" rel="noopener"&#10; &gt;CodeRush + Refactor! Pro&lt;/a&gt; (version 3.2.2) lately. I wanted to decide on which one to go with. Here are some notes -&lt;/p&gt;&#10;&lt;p&gt;R# = ReSharper&#10;CodeRush = CodeRush + Refactor! Pro&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;R# seems to be better for refactoring, because it does not assume that I follow a rigid work flow when writing code. For example, I don&amp;rsquo;t always decide on the class hierarchies upfront. I do discover them as I write code. So, when I discover that I need to extract a base class from the class I am working on, I can do so with R#. I couldn&amp;rsquo;t find a way to do extract a base/super class with CodeRush.&lt;/li&gt;&#10;&lt;li&gt;In R#, I can create an overloaded constructor using &amp;ldquo;Change Signature&amp;rdquo; refactoring (Ctrl+R, S). I couldn&amp;rsquo;t find a way to do this in CodeRush. CodeRush does allow me to create overloaded methods.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;However, comparisons that only focus on how many refactorings each tool can do are not very important to me. After all, it should be easy for the individual missing refactorings to be implemented in the subsequent releases of these tools. I want to know which one is a better investment in the long run. The investment is not just a couple of hundred dollars, it is going to be an investment of time too.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;R# &amp;ldquo;finds&amp;rdquo; Types as you try to use them and adds references and &amp;ldquo;using&amp;rdquo; directives from other projects in your solution. You will not believe how useful this is! You don&amp;rsquo;t have to interrupt your train of thought to go add references and &amp;ldquo;using&amp;rdquo; directives. CodeRush doesn&amp;rsquo;t do that.&lt;/li&gt;&#10;&lt;li&gt;I found R# &amp;ldquo;&lt;a class="link" href="http://www.jetbrains.com/resharper/features/code_generation.html#Create_from_Usage" target="_blank" rel="noopener"&#10; &gt;Create From Usage&lt;/a&gt;&amp;rdquo; feature incredibly useful with &lt;a class="link" href="http://en.wikipedia.org/wiki/Test-driven_development" title="TDD"&#10; target="_blank" rel="noopener"&#10; &gt;TDD&lt;/a&gt;. This feature will be available in &lt;a class="link" href="http://blogs.msdn.com/somasegar/archive/2008/12/19/code-focused-development-in-vs-2010.aspx" title="Code Focused Development in VS 2010"&#10; target="_blank" rel="noopener"&#10; &gt;Visual Studio 2010&lt;/a&gt;. They are calling it “Consume-First Development”.&lt;/li&gt;&#10;&lt;li&gt;R# has keyboard shortcuts for individual refactorings. All refactorings are accessible from ALT+ENTER or ALT+R. Again, R# helps you keep focused on the code you are writing.  In CodeRush, individual refactorings don&amp;rsquo;t have keyboard shortcuts.&lt;/li&gt;&#10;&lt;li&gt;R# allows me to specify exactly what to include when doing ExtractXXX refactorings. CodeRush doesn&amp;rsquo;t.&lt;/li&gt;&#10;&lt;li&gt;R# seems to know what I want to do. For example, when I discover that an existing class would be a good starting point to write the class I am thinking about and copy-paste the class and attempt to rename it, CodeRush renames both classes. R# renames the one you intend to rename.&lt;/li&gt;&#10;&lt;li&gt;R# introduces much less friction when running unit tests. It is possible to add unit-testing add-ins to Visual Studio and access similar functionality, but the way unit-testing is integrated into R#, it is much more conducive to &lt;a class="link" href="http://en.wikipedia.org/wiki/Test-driven_development" title="TDD"&#10; target="_blank" rel="noopener"&#10; &gt;TDD&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Collapse a class region. Now try to do a refactoring on this class, like “Rename file to match type” etc. In CodeRush, you will not be able to do it because the three-dot glyph will not be displayed when the class is collapsed.&lt;/li&gt;&#10;&lt;li&gt;CodeRush keeps getting in my way by automatically writing over as I type. It expands its “smart templates” when you press space. Guess what! That is how I separate words in my sentences - by pressing space. It gets quite annoying. I wish I could turn it off.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;As you have probably guessed by now, I think ReSharper is a better fit for me.&lt;/p&gt;&#10;&lt;p&gt;Here is a list of some other comparisons, covering aspects and features of these products I haven’t mentioned here that might be important to you. Some of these concluded in favor of CodeRush. Keep in mind that some of the following articles are a couple of years old.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://devlicio.us/blogs/derik_whittaker/archive/2008/05/05/resharper-4-0-vs-coderush-refactor-smack-down-results.aspx" target="_blank" rel="noopener"&#10; &gt;Derik Whittaker&lt;/a&gt; is keeping CodeRush but uninstalled Refactor Pro.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://davidhayden.com/blog/dave/archive/2008/04/23/ReSharperCodeRushRefactorProInterestingDiscussion.aspx" target="_blank" rel="noopener"&#10; &gt;David Hayden&lt;/a&gt; is keeping an open mind.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://www.hanselman.com/blog/ReSharperVsCodeRush.aspx" target="_blank" rel="noopener"&#10; &gt;Scott Hanselman&lt;/a&gt; likes CodeRush better.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://ryangaraygay.com/blog/post/2008/04/Resharper-vs-CodeRush.aspx" target="_blank" rel="noopener"&#10; &gt;Ryan Garagay&lt;/a&gt; went with R#.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://stackoverflow.com/questions/24216/resharper-vs-coderush" target="_blank" rel="noopener"&#10; &gt;StackOverflow.com&lt;/a&gt; has some useful comments and more links.&lt;/li&gt;&#10;&lt;li&gt;There is some discussion on &lt;a class="link" href="http://discuss.joelonsoftware.com/default.asp?joel.3.515309.7" target="_blank" rel="noopener"&#10; &gt;JoelOnSoftware.com&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Ian decided to stick with &lt;a class="link" href="http://ianolsen.com/2006/06/21/resharper-vs-coderush-part-1/" target="_blank" rel="noopener"&#10; &gt;ReSharper&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Customize log4net Output Path</title><link>https://www.tewari.info/2008/03/06/customize-log4net-output-path/</link><pubDate>Fri, 07 Mar 2008 00:56:55 +0000</pubDate><guid>https://www.tewari.info/2008/03/06/customize-log4net-output-path/</guid><description>&lt;p&gt;The default log4net output path is relative to the startup directory of your executable. To customize the output path, you can override the base Appender&amp;rsquo;s File property in your own Appender class. The following example describes how to route the log files relative to the temp folder :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; public class MyOwnAppender : log4net.Appender.RollingFileAppender&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; public override string File&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; get&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return base.File;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; set&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if (Path.IsPathRooted(value))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base.File = value;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; else&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base.File = Path.Combine(Path.GetTempPath(), value);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your log4net config file must be modified so that log4net can locate and use your custom Appender. If MyOwnAppender is in MyNamespace and you have implemented it in MyLoggerLib.dll :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Career Advice</title><link>https://www.tewari.info/2008/02/29/career-advice/</link><pubDate>Sat, 01 Mar 2008 02:04:11 +0000</pubDate><guid>https://www.tewari.info/2008/02/29/career-advice/</guid><description>&lt;p&gt;The value of any advice is tied to the degree of its relevance to your particular situation and circumstances. Very specific advice, like legal and medical advice, is very expensive. It is very relevant to the individual&amp;rsquo;s situation and therefore quite valuable. The degree of relevance of inexpensive/free advice to your specific circumstances is usually very low. Inexpensive/free advice, as in sayings and quotes, but also in everyday personal and business communication, is very generic. The same message is usually perceived differently by different people. Especially when the entire message is very succinct and pithy. Various aspects of the message are accentuated differently as it is filtered through individual perception.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Developing a sense of how generic advice applies to your individual situation is invaluable.&lt;/li&gt;&#10;&lt;li&gt;Experience, observation and reading feeds the awareness.&lt;/li&gt;&#10;&lt;li&gt;Trying and learning from mistakes is essential.&lt;/li&gt;&#10;&lt;li&gt;Applying the lessons completes the circle.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;One of the best career advice I ever got was from reading Spencer Johnson&amp;rsquo;s &lt;a class="link" href="http://www.amazon.com/Who-Moved-Cheese-Spencer-Johnson/dp/0091816971" title="Who Moved My Cheese ?"&#10; target="_blank" rel="noopener"&#10; &gt;Who Moved My Cheese ?&lt;/a&gt; The message in this book is timeless. I had been through many significant changes in my life and I think I have handled those changes quite well. After reading this book in 2001, I became consciously aware of the existence of change and my own patterns of behavior and responses to events of change. This awareness has helped me anticipate change, prepare better, make better decisions and handle change more productively.&lt;/p&gt;&#10;</description></item><item><title>Leveraging XPATH Axes</title><link>https://www.tewari.info/2007/12/20/leveraging-xpath-axes/</link><pubDate>Fri, 21 Dec 2007 01:14:29 +0000</pubDate><guid>https://www.tewari.info/2007/12/20/leveraging-xpath-axes/</guid><description>&lt;p&gt;XPATH axes come in very handy when nodes need to be selected based on (attribute&amp;rsquo;s or child element&amp;rsquo;s) values that must match those of other nodes elsewhere in the xml tree. Consider the following log4net configuration file :&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;configuration&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;configSections&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;section name=&amp;#34;nhibernate&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type=&amp;#34;System.Configuration.NameValueSectionHandler, System,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Version=2.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;section name=&amp;#34;log4net&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type=&amp;#34;log4net.Config.Log4NetConfigurationSectionHandler,log4net&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/configSections&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;nhibernate&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;add key=&amp;#34;hibernate.connection.provider&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;NHibernate.Connection.DriverConnectionProvider&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;add key=&amp;#34;hibernate.connection.driver_class&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;NHibernate.Driver.SqlClientDriver&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;add key=&amp;#34;hibernate.connection.connection_string&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;Server=servername; Database=dbname;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User=username; Password=secret;&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;add key=&amp;#34;hibernate.connection.isolation&amp;#34; value=&amp;#34;ReadCommitted&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;add key=&amp;#34;hibernate.dialect&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;NHibernate.Dialect.MsSql2000Dialect&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/nhibernate&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;log4net&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender name=&amp;#34;NHibernateFileLog&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type=&amp;#34;log4net.Appender.RollingFileAppender&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;file value=&amp;#34;Logs/nhibernate.txt&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appendToFile value=&amp;#34;true&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;rollingStyle value=&amp;#34;Size&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maxSizeRollBackups value=&amp;#34;10&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maximumFileSize value=&amp;#34;100KB&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;staticLogFileName value=&amp;#34;true&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;layout type=&amp;#34;log4net.Layout.PatternLayout&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;conversionPattern&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/layout&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/appender&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender name=&amp;#34;GeneralLog&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type=&amp;#34;log4net.Appender.RollingFileAppender&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;file value=&amp;#34;Logs/general.txt&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appendToFile value=&amp;#34;true&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maximumFileSize value=&amp;#34;100KB&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;rollingStyle value=&amp;#34;Size&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maxSizeRollBackups value=&amp;#34;5&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;layout type=&amp;#34;log4net.Layout.PatternLayout&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;conversionPattern&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/layout&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/appender&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender name=&amp;#34;DataLog&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type=&amp;#34;log4net.Appender.RollingFileAppender&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;file value=&amp;#34;Logs/data.txt&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appendToFile value=&amp;#34;true&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maximumFileSize value=&amp;#34;100KB&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;rollingStyle value=&amp;#34;Size&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;maxSizeRollBackups value=&amp;#34;5&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;layout type=&amp;#34;log4net.Layout.PatternLayout&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;conversionPattern&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; value=&amp;#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/layout&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/appender&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;root&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;level value=&amp;#34;DEBUG&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender-ref ref=&amp;#34;GeneralLog&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/root&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;logger name=&amp;#34;NHibernate&amp;#34; additivity=&amp;#34;false&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;level value=&amp;#34;DEBUG&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender-ref ref=&amp;#34;NHibernateFileLog&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/logger&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;logger name=&amp;#34;Pushable.Data&amp;#34; additivity=&amp;#34;false&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;level value=&amp;#34;DEBUG&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;appender-ref ref=&amp;#34;DataLog&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/logger&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/log4net&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/configuration&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;p&gt;The &lt;appender&gt;s are referenced by &lt;logger&gt;s using &amp;lsquo;ref&amp;rsquo; attribute of their &amp;lsquo;appender-ref&amp;rsquo; child elements, using the same value as the &amp;rsquo;name&amp;rsquo; attribute of the &lt;appender&gt;. This type of linking is quite common in xml documents. Now, The first question is : How to list files that are referenced by &lt;logger&gt;s ?&#10;In order to solve this problem you will need to reach the &lt;appender&gt;s that are referenced by each &lt;logger&gt; and then extract the &amp;lsquo;value&amp;rsquo; of their &lt;file&gt;s.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Solution:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;xsl:stylesheet xmlns:xsl=&amp;#34;http://www.w3.org/1999/XSL/Transform&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; version=&amp;#34;1.0&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:output method=&amp;#34;text&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:strip-space elements=&amp;#34;*&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:template match=&amp;#34;log4net&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:apply-templates&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; select=&amp;#34;appender[@name=parent::log4net/logger/appender-ref/@ref]&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/xsl:template&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:template match=&amp;#34;appender&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;xsl:value-of&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; select=&amp;#34;file/@value&amp;#34;/&amp;gt; &amp;lt;xsl:text&amp;gt;&amp;amp;#10;&amp;lt;/xsl:text&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/xsl:template&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/xsl:stylesheet&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;p&gt;The second question is : How to write an xslt script to transform this xml document into an html document with a table that looks like this -&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Logger&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;File&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NHibernate&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Logs/nhibernate.txt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pushable.Data&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Logs/data.txt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Solution:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;?&lt;/span&gt;xml version&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:stylesheet xmlns:xsl&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.w3.org/1999/XSL/Transform&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; version&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:output method&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:template match&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;log4net&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;HTML&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;HEAD&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TITLE&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;www&lt;span style="color:#f92672"&gt;.&lt;/span&gt;tewari&lt;span style="color:#f92672"&gt;.&lt;/span&gt;info : using xpath axes&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;TITLE&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;HEAD&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;BODY&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TABLE border&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; width&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;25%&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TR&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;&lt;/span&gt;TH&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Logger&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;TH&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;&lt;/span&gt;TH&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;File&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;TH&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;TR&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:apply&lt;span style="color:#f92672"&gt;-&lt;/span&gt;templates select&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;TABLE&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;BODY&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;HTML&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;xsl:template&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:template match&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;xsl:variable name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;aName&amp;#34;&lt;/span&gt; select&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;appender-ref/@ref&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TR&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TD&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;&lt;/span&gt;xsl:value&lt;span style="color:#f92672"&gt;-&lt;/span&gt;of select&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;@name&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;TD&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;TD&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;&lt;/span&gt;xsl:value&lt;span style="color:#f92672"&gt;-&lt;/span&gt;of&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; select&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;parent::log4net/appender[@name=$aName]/file/@value&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;TD&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;TR&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;xsl:template&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;xsl:stylesheet&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;p&gt;Credits :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;xml document from &lt;a class="link" href="http://www.hibernate.org/364.html" title="hibernate"&#10; target="_blank" rel="noopener"&#10; &gt;hibernate&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;xml converted to html using &lt;a class="link" href="http://www.andre-simon.de/" title="Highlight"&#10; target="_blank" rel="noopener"&#10; &gt;Highlight&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="http://www.sketchpath.com" title="SketchPath"&#10; target="_blank" rel="noopener"&#10; &gt;SketchPath&lt;/a&gt; is a brilliant tool to play with xpath. I love the &amp;ldquo;New Context&amp;rdquo; button : Click on a node and hit &amp;ldquo;New Context&amp;rdquo; to change the context for the xpath query processor !&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>