<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="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" gd:etag="W/&quot;Dk4HQ3o-eSp7ImA9WhRUEEk.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558</id><updated>2012-01-19T23:35:32.451-08:00</updated><category term="articles" /><category term="business" /><category term="reviews" /><category term="office" /><category term="web tools" /><category term="technologies" /><category term="photography" /><category term="gadgets" /><category term="tips and tricks" /><category term="security" /><category term="programming" /><category term="rants" /><category term="music" /><category term="computers" /><category term="opinions" /><category term="technobrief" /><category term="ui" /><category term="sql" /><category term="software" /><category term="services" /><category term="podcasts" /><category term="methodologies" /><category term="windows installer" /><category term="blogs" /><category term="recommendations" /><category term="humor" /><title>Alek Davis: Technoblog</title><subtitle type="html">Random rants on programming, technology, and related stuff</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://alekdavis.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>108</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/atom+xml" href="http://feeds.feedburner.com/AlekDavisTechnoBlog" /><feedburner:info uri="alekdavistechnoblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEYHRX0-fyp7ImA9WhRSGUw.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-3299496315611874971</id><published>2011-11-21T13:39:00.001-08:00</published><updated>2011-11-21T13:48:54.357-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-21T13:48:54.357-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="humor" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>On SQL Server and romance</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Quick comment on SQL Server and PostgreSQL.&lt;/div&gt;
Quote of the day comes from Rob Sullivan:
&lt;blockquote class="quote"&gt;"The SQL Server install is born from a truck stop romance between TFS and Sharepoint that someone found in a garbage bag in a dumpster and burned to a DVD."&lt;/blockquote&gt;
Ha-ha... so true.&lt;br/&gt;
&lt;br/&gt;
On a separate note, Rob's post raised my interest in &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;. I wonder, what challenges PostgreSQL presents to user, admins and developers (especially to those coming from the SQL Server camp).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-3299496315611874971?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/uAXPh8E8b5U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/3299496315611874971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=3299496315611874971" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3299496315611874971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3299496315611874971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/uAXPh8E8b5U/on-sql-server-and-romance.html" title="On SQL Server and romance" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/11/on-sql-server-and-romance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSHg5eip7ImA9WhRSFE0.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-2012361876987062555</id><published>2011-11-03T17:22:00.000-07:00</published><updated>2011-11-15T15:47:19.622-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T15:47:19.622-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Windows batch scripting simplified</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: A few tips for Windows batch script developers.&lt;/div&gt;
One of my recent projects called me to write a couple of &lt;b&gt;batch scripts&lt;/b&gt; (something I haven't done in a while). This post is mostly a reference for myself, but I hope it helps some unfortunate soul stuck in the last century's technology.&lt;br/&gt;
&lt;br/&gt;
If you find yourself working on a batch script, chances are you will need to implement &lt;b&gt;command-line parsing&lt;/b&gt;. You can obviously use simple position-based parameters (e.g. &lt;span class="code"&gt;%1&lt;/span&gt;, &lt;span class="code"&gt;%2&lt;/span&gt;, etc), but if you need anything more sophisticated, you may find the &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; library more rewarding.&lt;br /&gt;
&lt;br/&gt;
"What is the the &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; library?" you may ask. It's a batch file implementing a few &lt;b&gt;general-purpose functions&lt;/b&gt; (such as command-line parsing), which you can call from your batch script. &lt;span class="sidenote"&gt;[In case you wonder: yes, your batch script can call code from another batch script.]&lt;/span&gt; The &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; library  &lt;span class="sidenote"&gt;[&lt;i&gt;mtp&lt;/i&gt; stands for &lt;i&gt;&lt;a href="http://www.macmillan.com/"&gt;MacMillan Technical Publishing&lt;/a&gt;&lt;/i&gt;]&lt;/span&gt; was originally released by Tim Hill, the author of &lt;a href="http://www.amazon.com/gp/product/1578700477/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=1578700477"&gt;Windows NT&amp;reg; Shell Scripting&lt;/a&gt;, a book I cannot overpraise.
 
&lt;center&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=1578700477" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br/&gt;

Unfortunately, the link to the source code in the book does not work. After extensive search, I managed to find a version of &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; at &lt;a href="http://www.codeproject.com/KB/books/1578700477.aspx" title="Windows NT Shell Scripting - Chapter 5: A Scripting Toolkit"&gt;CodeProject&lt;/a&gt;, but some of the characters in the source code appear to be corrupted (I tried them in different browsers and using different character sets to no avail).&lt;br/&gt;

&lt;br/&gt;I cleaned up the file and made a couple of minor changes (e.g. added a helper function to imitate a delay). I also, cleaned up another sample published by Tim Hill: &lt;span class="code"&gt;skeleton.bat&lt;/span&gt; (an outline that can be used to create a batch script). I made one change to the skeleton file: all of the calls to the procedures implemented in &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; from &lt;span class="code"&gt;skeleton.bat&lt;/span&gt; invoke them via full path (instead of just the name of the file). This change assumes that the library is located in the same folder (this way you do not need to put &lt;span class="code"&gt;_mtplib.bat&lt;/span&gt; in your path or working directory when you execute your scripts). And I extended &lt;span class="code"&gt;skeleton.bat&lt;/span&gt; to a more illustrative &lt;span class="code"&gt;sample.bat&lt;/span&gt; which shows how to parse command line, call procedures, handle errors, etc. You can download the source code from:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.box.net/shared/sniys38z9k1y36mlh5sx"&gt;&lt;b&gt;_mtplib.bat&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.box.net/shared/jivshc0czrh6motb845f"&gt;&lt;b&gt;skeleton.bat&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.box.net/shared/5iohhq5vyturru17x7t6"&gt;&lt;b&gt;sample.bat&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
You will find the listings of the source code at the end of this post, but before, let me recommend a few excellent resources for Windows batch script developers:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dostips.com/"&gt;&lt;b&gt;DosTips - The DOS Batch Guide&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Lots of resources including &lt;a href="http://www.dostips.com/DtCodeCmdLib.php"&gt;function library&lt;/a&gt;, &lt;a href="http://www.dostips.com/DtCodeSnippets.php"&gt;script snippets&lt;/a&gt;,&lt;a href="http://www.dostips.com/DtTutoFunctions.php"&gt; function tutorial&lt;/a&gt;,  support forum (available at the bottom of every page), and much more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2006/11/20/top-10-dos-batch-tips-yes-dos-batch.aspx"&gt;&lt;b&gt;Top 10 DOS Batch tips (Yes, DOS Batch...)&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Some helpful tips for beginners (but not only) from Jon Galloway.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.robvanderwoude.com/batchfiles.php"&gt;&lt;b&gt;Batch files for DOS, OS/2, Windows 95/98, NT 4, 2000 and XP&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Rob Vanderwoude offers a few hints.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?DosPatterns"&gt;&lt;b&gt;Dos Patterns&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Not a comprehensive list, but a couple of ideas are worth noting.&lt;/li&gt;
&lt;/ul&gt;
And now, the source code (if you encounter any issues, please let me know):&lt;br/&gt;
&lt;br/&gt;
&lt;center&gt;_mtplib.bat&lt;/center&gt;
&lt;pre class="brush:plain"&gt;@echo OFF

@if not &amp;quot;%ECHO%&amp;quot;==&amp;quot;&amp;quot; echo %ECHO%
@if not &amp;quot;%OS%&amp;quot;==&amp;quot;Windows_NT&amp;quot; goto DOSEXIT

rem $Workfile: _mtplib.bat $ 
rem $Revision: 2 $ 
rem $Date: 12/04/97 9:51a $
rem $Archive: .../_mtplib.bat $
rem UPDATED BY ALEK DAVIS on 11/02/2011

rem If no arguments, show version information and exit
if &amp;quot;%1&amp;quot;==&amp;quot;&amp;quot; (
 (echo Script MTP Script Library [%0] $Revision: 2 $)
 (goto :EOF)
)

rem At least one argument, so dispatch to procedure
set _PROC=%1
shift /1
goto %_PROC%

rem ------------------------------------------------------------------
rem INIT procedure
rem Must be called in local state before other procs are used
rem
:INIT
if defined TRACE %TRACE% [proc %0 %*]

goto :EOF

rem ------------------------------------------------------------------
rem VARDEL procedure
rem Delete multiple variables by prefix
rem
rem Arguments:
rem %1=variable name prefix
rem
:VARDEL
if defined TRACE %TRACE% [proc %0 %*]
 for /f &amp;quot;tokens=1 delims==&amp;quot; %%I in ('set %1 2^&amp;gt;nul') do set %%I=
goto :EOF

rem ------------------------------------------------------------------
rem PARSECMDLINE procedure
rem Parse a command line into switches and args
rem
rem Arguments:
rem CMDLINE=command text to parse
rem %1=0 for new parse (def) or 1 to append to existing
rem
rem Returns:
rem CMDARG_n=arguments, CMDSW_n=switches
rem CMDARGCOUNT=arg count, CMDSWCOUNT=switch count
rem RET=total number of args processed
rem
:PARSECMDLINE
if defined TRACE %TRACE% [proc %0 %*]
 if not {%1}=={1} (
  (call :VARDEL CMDARG_)
  (call :VARDEL CMDSW_)
  (set /a CMDARGCOUNT=0)
  (set /a CMDSWCOUNT=0)
 )
 set /a RET=0
 call :PARSECMDLINE1 %CMDLINE%
 set _MTPLIB_T1=
goto :EOF

:PARSECMDLINE1
if {%1}=={} goto :EOF
set _MTPLIB_T1=%1
set _MTPLIB_T1=%_MTPLIB_T1:&amp;quot;=%
set /a RET+=1
shift /1
if &amp;quot;%_MTPLIB_T1:~0,1%&amp;quot;==&amp;quot;/&amp;quot; goto :PARSECMDLINESW
if &amp;quot;%_MTPLIB_T1:~0,1%&amp;quot;==&amp;quot;-&amp;quot; goto :PARSECMDLINESW
set /a CMDARGCOUNT+=1
set CMDARG_%CMDARGCOUNT%=%_MTPLIB_T1%
goto :PARSECMDLINE1

:PARSECMDLINESW
set /a CMDSWCOUNT+=1
set CMDSW_%CMDSWCOUNT%=%_MTPLIB_T1%
goto :PARSECMDLINE1
goto :EOF

rem ------------------------------------------------------------------
rem GETARG procedure
rem Get a parsed argument by index
rem
rem Arguments:
rem %1=argument index (1st arg has index 1)
rem
rem Returns:
rem RET=argument text or empty if no argument
rem
:GETARG
if defined TRACE %TRACE% [proc %0 %*]
 set RET=
 if %1 GTR %CMDARGCOUNT% goto :EOF
 if %1 EQU 0 goto :EOF
 if not defined CMDARG_%1 goto :EOF
 set RET=%%CMDARG_%1%%
 call :RESOLVE
goto :EOF

rem ------------------------------------------------------------------
rem GETSWITCH procedure
rem Get a switch argument by index
rem
rem Arguments:
rem %1=switch index (1st switch has index 1)
rem
rem Returns:
rem RET=switch text or empty if none
rem RETV=switch value (after colon char) or empty
rem
:GETSWITCH
if defined TRACE %TRACE% [proc %0 %*]
 (set RET=) &amp;amp; (set RETV=)
 if %1 GTR %CMDSWCOUNT% goto :EOF
 if %1 EQU 0 goto :EOF
 if not defined CMDSW_%1 goto :EOF
 set RET=%%CMDSW_%1%%
 call :RESOLVE
 for /f &amp;quot;tokens=1* delims=:&amp;quot; %%I in (&amp;quot;%RET%&amp;quot;) do (set RET=%%I) &amp;amp; (set RETV=%%J)
goto :EOF

rem ------------------------------------------------------------------
rem FINDSWITCH procedure
rem Finds the index of the named switch
rem
rem Arguments:
rem %1=switch name
rem %2=search start index (def: 1)
rem
rem Returns:
rem RET=index (0 if not found)
rem RETV=switch value (text after colon)
rem
:FINDSWITCH
if defined TRACE %TRACE% [proc %0 %*]
 if {%2}=={} (set /a _MTPLIB_T4=1) else (set /a _MTPLIB_T4=%2)

 :FINDSWITCHLOOP
 call :GETSWITCH %_MTPLIB_T4%
 if &amp;quot;%RET%&amp;quot;==&amp;quot;&amp;quot; (set RET=0) &amp;amp; (goto :FINDSWITCHEND)
 if /i &amp;quot;%RET%&amp;quot;==&amp;quot;%1&amp;quot; (set RET=%_MTPLIB_T4%) &amp;amp; (goto :FINDSWITCHEND)
 set /a _MTPLIB_T4+=1
 goto :FINDSWITCHLOOP

 :FINDSWITCHEND
 set _MTPLIB_T4=
goto :EOF

rem ------------------------------------------------------------------
rem REGSETM and REGSETU procedures
rem Set registry values from variables
rem
rem Arguments:
rem %1=reg context (usually script name)
rem %2=variable to save (or prefix to save set of vars)
rem
:REGSETM
if defined TRACE %TRACE% [proc %0 %*]
 for /f &amp;quot;tokens=1* delims==&amp;quot; %%I in (&amp;quot;set %2 2^&amp;gt;nul&amp;quot;) do call :REGSET1 HKLM %1 %%I &amp;quot;%%J&amp;quot;
goto :EOF

:REGSETU
if defined TRACE %TRACE% [proc %0 %*]
 for /f &amp;quot;tokens=1* delims==&amp;quot; %%I in (&amp;quot;set %2 2^&amp;gt;nul&amp;quot;) do call :REGSET1 HKCU %1 %%I &amp;quot;%%J&amp;quot;
goto :EOF

:REGSET1
set _MTPLIB_T10=%4
set _MTPLIB_T10=%_MTPLIB_T10:\=\\%
reg add %1\Software\MTPScriptContexts\%2\%3=%_MTPLIB_T10% &amp;gt;nul
reg update %1\Software\MTPScriptContexts\%2\%3=%_MTPLIB_T10% &amp;gt;nul
goto :EOF

rem ------------------------------------------------------------------
rem REGGETM and REGGETU procedures
rem Get registry value or values to variables
rem
rem Arguments:
rem %1=reg context (usually script name)
rem %2=variable to restore (def: restore entire context)
rem
rem Returns:
rem RET=value of last variable loaded
rem
rem WARNING: 
rem The &amp;quot;delims&amp;quot; value in the FOR commands below is a TAB  
rem character, followed by a space. If this file is edited by
rem an editor which converts tabs to spaces, this procedure
rem will break!!!
rem
:REGGETM
if defined TRACE %TRACE% [proc %0 %*]
 for /f &amp;quot;delims=     tokens=2*&amp;quot; %%I in (&amp;quot;reg query HKLM\Software\MTPScriptContexts\%1\%2 ^|find &amp;quot;REG_SZ&amp;quot;&amp;quot;) do call :REGGETM1 %%I &amp;quot;%%J&amp;quot;
goto :EOF

:REGGETU
if defined TRACE %TRACE% [proc %0 %*]
 for /f &amp;quot;delims=     tokens=2*&amp;quot; %%I in (&amp;quot;reg query HKCU\Software\MTPScriptContexts\%1\%2 ^|find &amp;quot;REG_SZ&amp;quot;&amp;quot;) do call :REGGETM1 %%I &amp;quot;%%J&amp;quot;
goto :EOF

:REGGETM1
set _MTPLIB_T10=%2
set _MTPLIB_T10=%_MTPLIB_T10:\\=\%
set _MTPLIB_T10=%_MTPLIB_T10:&amp;quot;=%
set %1=%_MTPLIB_T10%
set RET=%_MTPLIB_T10%
goto :EOF

rem ------------------------------------------------------------------
rem REGDELM and REGDELU procedures
rem Delete registry values
rem
rem Arguments:
rem %1=reg context (usually script name)
rem %2=variable to delete (def: delete entire context)
rem
:REGDELM
if defined TRACE %TRACE% [proc %0 %*]
 call :GETTEMPNAME
 echo y &amp;gt;%RET%
 reg delete HKLM\Software\MTPScriptContexts\%1\%2 &amp;lt;%RET% &amp;gt;nul
 del %RET%
goto :EOF

:REGDELU
if defined TRACE %TRACE% [proc %0 %*]
 call :GETTEMPNAME
 echo y &amp;gt;%RET%
 reg delete HKCU\Software\MTPScriptContexts\%1\%2 &amp;lt;%RET% &amp;gt;nul
 del %RET%
goto :EOF


rem ------------------------------------------------------------------
rem SRAND procedure
rem Seed the random number generator
rem
rem Arguments:
rem %1=new seed value
rem
:SRAND
if defined TRACE %TRACE% [proc %0 %*]
 set /a _MTPLIB_NEXTRAND=%1
goto :EOF

rem ------------------------------------------------------------------
rem RAND procedure
rem Get next random number (0 to 32767)
rem
rem Returns:
rem RET=next random number
rem
:RAND
if defined TRACE %TRACE% [proc %0 %*]
 if not defined _MTPLIB_NEXTRAND set /a _MTPLIB_NEXTRAND=1
 set /a _MTPLIB_NEXTRAND=_MTPLIB_NEXTRAND * 214013 + 2531011
 set /a RET=_MTPLIB_NEXTRAND ^&amp;gt;^&amp;gt; 16 ^&amp;amp; 0x7FFF
goto :EOF

rem ------------------------------------------------------------------
rem RESOLVE procedure
rem Fully resolve all indirect variable references in RET variable
rem
rem Arguments:
rem RET=value to resolve
rem
rem Returns:
rem RET=as passed in, with references resolved
rem
:RESOLVE
if defined TRACE %TRACE% [proc %0 %*]
 :RESOLVELOOP
 if &amp;quot;%RET%&amp;quot;==&amp;quot;&amp;quot; goto :EOF
 set RET1=%RET%
 for /f &amp;quot;tokens=*&amp;quot; %%I in ('echo %RET%') do set RET=%%I
 if not &amp;quot;%RET%&amp;quot;==&amp;quot;%RET1%&amp;quot; goto :RESOLVELOOP
goto :EOF

rem ------------------------------------------------------------------
rem GETINPUTLINE procedure
rem Get a single line of keyboard input
rem
rem Returns:
rem RET=Entered line
rem
:GETINPUTLINE
if defined TRACE %TRACE% [proc %0 %*]
 call :GETTEMPNAME
 set _MTPLIB_T1=%RET%
 copy con &amp;quot;%_MTPLIB_T1%&amp;quot; &amp;gt;nul
 for /f &amp;quot;tokens=*&amp;quot; %%I in (&amp;quot;type '%_MTPLIB_T1%'&amp;quot;) do set RET=%%I
 if exist &amp;quot;%_MTPLIB_T1%&amp;quot; del &amp;quot;%_MTPLIB_T1%&amp;quot;
 set _MTPLIB_T1=
goto :EOF

rem ------------------------------------------------------------------
rem GETSYNCFILE procedure
rem Get a sync file name (file will not exist)
rem
rem Returns:
rem RET=Name of sync file to use
rem
:GETSYNCFILE
if defined TRACE %TRACE% [proc %0 %*]
 call :GETTEMPNAME
goto :EOF

rem ------------------------------------------------------------------
rem SETSYNCFILE procedure
rem Flag sync event (creates the file)
rem
rem Arguments:
rem %1=sync filename to flag
rem
:SETSYNCFILE
if defined TRACE %TRACE% [proc %0 %*]
 echo . &amp;gt;%1
goto :EOF

rem ------------------------------------------------------------------
rem DELSYNCFILE procedure
rem Delete sync file
rem
rem Arguments: 
rem %1=sync filename
rem
:DELSYNCFILE
if defined TRACE %TRACE% [proc %0 %*]
 if exist %1 del %1
goto :EOF

rem ------------------------------------------------------------------
rem WAITSYNCFILE procedure
rem Wait for sync file to flag
rem
rem Arguments:
rem %1=sync filename
rem %2=timeout in seconds (def: 60)
rem
rem Returns:    
rem RET=Timeout remaining, or 0 if timeout
rem
:WAITSYNCFILE
if defined TRACE %TRACE% [proc %0 %*]
 if {%2}=={} (set /a RET=60) else (set /a RET=%2)
 if exist %1 goto :EOF
 
 :WAITSYNCFILELOOP
 sleep 1
 set /a RET-=1
 if %RET% GTR 0 if not exist %1 goto :WAITSYNCFILELOOP
goto :EOF

rem ------------------------------------------------------------------
rem GETTEMPNAME procedure
rem Create a temporary file name
rem
rem Returns:
rem RET=Temporary file name
rem
:GETTEMPNAME
if defined TRACE %TRACE% [proc %0 %*]
 if not defined _MTPLIB_NEXTTEMP set /a _MTPLIB_NEXTTEMP=1
 if defined TEMP (
  (set RET=%TEMP%)
 ) else if defined TMP (
  (set RET=%TMP%)
 ) else (set RET=%SystemRoot%)
 
 :GETTEMPNAMELOOP
 set /a _MTPLIB_NEXTTEMP=_MTPLIB_NEXTTEMP * 214013 + 2531011
 set /a _MTPLIB_T1=_MTPLIB_NEXTTEMP ^&amp;gt;^&amp;gt; 16 ^&amp;amp; 0x7FFF
 set RET=%RET%\~SH%_MTPLIB_T1%.tmp
 if exist &amp;quot;%RET%&amp;quot; goto :GETTEMPNAMELOOP
 set _MTPLIB_T1=
goto :EOF

rem ------------------------------------------------------------------
rem DELAY procedure
rem Sleep for the specified number of seconds
rem
rem PARAMETERS
rem %1=Number of seconds to sleep
:DELAY
if defined TRACE %TRACE% [proc %0 %*]
 if {%1}=={} goto :EOF
 @ping 127.0.0.1 -n 2 -w 1000 &amp;gt;nul
 @ping 127.0.0.1 -n %1% -w 1000 &amp;gt;nul
goto :EOF

rem These must be the FINAL LINES in the script
:DOSEXIT
echo This script requires Windows NT
rem ------------------------------------------------------------------&lt;/pre&gt;

&lt;br/&gt;
&lt;center&gt;skeleton.bat&lt;/center&gt;
&lt;pre class="brush:plain"&gt;@echo OFF

@if not &amp;quot;%ECHO%&amp;quot;==&amp;quot;&amp;quot; echo %ECHO%
@if not &amp;quot;%OS%&amp;quot;==&amp;quot;Windows_NT&amp;quot; goto DOSEXIT

rem $Workfile: skeleton.bat $ 
rem $Revision: 2 $ 
rem $Date: 12/04/97 9:51a $
rem $Archive: .../skeleton.bat $
rem UPDATED BY ALEK DAVIS

rem Set local scope and call MAIN procedure
setlocal &amp;amp; pushd &amp;amp; set RET=
set SCRIPTNAME=%~n0
set SCRIPTPATH=%~f0
set SCRIPTDIR=%~dp0

if &amp;quot;%DEBUG%==&amp;quot;1&amp;quot; (set TRACE=echo) else (set TRACE=rem)
call %SCRIPTDIR%_mtplib :INIT %SCRIPTPATH%
if /i {%1}=={/help} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
if /i {%1}=={/?} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
if /i {%1}=={/h} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
call :MAIN %*

:HELPEXIT
popd &amp;amp; endlocal &amp;amp; set RET=%RET%
goto :EOF

rem ------------------------------------------------------------------
rem HELP procedure
rem Display usage information
rem
:HELP
if defined TRACE %TRACE% [proc %0 %*]
rem Put help message here
goto :EOF

rem ------------------------------------------------------------------
rem MAIN procedure
rem 
:MAIN
if defined TRACE %TRACE% [proc %0 %*]
rem Put main script code here
goto :EOF

rem ------------------------------------------------------------------
rem Additional procedure go here

rem These must be the FINAL LINES in the script
:DOSEXIT
echo This script requires Windows NT
rem ------------------------------------------------------------------&lt;/pre&gt;

&lt;br/&gt;
&lt;center&gt;sample.bat&lt;/center&gt;
&lt;pre class="brush:plain"&gt;@echo OFF

rem Sample batch script
rem Requires _mtplib.bat to be in the same folder.

@if not &amp;quot;%ECHO%&amp;quot;==&amp;quot;&amp;quot; echo %ECHO%
@if not &amp;quot;%OS%&amp;quot;==&amp;quot;Windows_NT&amp;quot; goto DOSEXIT

rem Set local scope and call MAIN procedure
setlocal &amp;amp; pushd &amp;amp; set RET=
set SCRIPTNAME=%~n0
set SCRIPTPATH=%~f0
set SCRIPTDIR=%~dp0
set SCRIPTEXT=%~x0

if &amp;quot;%DEBUG%&amp;quot;==&amp;quot;1&amp;quot; (set TRACE=echo) else (set TRACE=rem)
call %SCRIPTDIR%_mtplib :INIT %SCRIPTPATH%
if /i {%1}=={/help} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
if /i {%1}=={/?} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
if /i {%1}=={/h} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
call :MAIN %*

:HELPEXIT
popd &amp;amp; endlocal &amp;amp; set RET=%RET%
goto :EOF

rem ------------------------------------------------------------------
rem HELP procedure
rem Display usage information
rem
rem ------------------------------------------------------------------
rem HELP procedure
rem Display usage information
rem
:HELP
if defined TRACE %TRACE% [proc %0 %*]
echo DESCRIPTION
echo.
echo Does this or that on the specified server.
echo.
echo SYNTAX
echo.
echo %ScriptName% [this^|that] [switches]
echo.
echo ARGUMENTS
echo.
echo this
echo    Does this.
echo.
echo that
echo    Does that.
echo.
echo /s:server
echo.
echo    Name of server affected by this or that.
echo    If not specified, local server will be used.
echo.
echo /u:user
echo.
echo    Name of the user performing this or that.
echo    If not specified, active Windows user will be used.
echo.
echo /p:password
echo.
echo    Password of the the user identified by switch /u.
echo.
echo EXAMPLES
echo.
echo    %ScriptName% this /s:XYZ /u:BillieJean /p:IsNotMyLover
echo.
echo        Does this on server XYZ as user BillieJean.
echo.
echo    %ScriptName% that /s:XYZ
echo.
echo        Does that on server XYZ as active Windows user.
goto :EOF

rem ------------------------------------------------------------------
rem MAIN procedure
rem 
:MAIN
if defined TRACE %TRACE% [proc %0 %*]
rem If no arguments, display help
if /i {%1}=={/h} (call :HELP %2) &amp;amp; (goto :HELPEXIT)
if /i {%1}=={} (call :HELP %2) &amp;amp; (goto :HELPEXIT)

rem Initialize variables
set SERVER=
set USER=
set PASSWORD=

rem Process command line and set up variables
set CMDLINE=%*
call %SCRIPTDIR%_mtplib :PARSECMDLINE 0

rem Process positional arguments
if %CMDARGCOUNT% LSS 1 (call :HELP) &amp;amp; (goto :EOF)
call %SCRIPTDIR%_mtplib :GETARG 1
set OPERATION=%RET%
if /i &amp;quot;%OPERATION%&amp;quot;==&amp;quot;this&amp;quot; set OPERATION=this
if /i &amp;quot;%OPERATION%&amp;quot;==&amp;quot;that&amp;quot; set OPERATION=that

rem Process command-line switches
set /a IX=1
:GETSWITCHLOOP
 call %SCRIPTDIR%_mtplib :GETSWITCH %IX%
 if &amp;quot;%RET%&amp;quot;==&amp;quot;&amp;quot; goto :GETSWITCHLOOPEND
 set /a IX+=1
 if /i &amp;quot;%RET%&amp;quot;==&amp;quot;/s&amp;quot; set SERVER=%RETV%
 if /i &amp;quot;%RET%&amp;quot;==&amp;quot;/u&amp;quot; set USER=%RETV%
 if /i &amp;quot;%RET%&amp;quot;==&amp;quot;/p&amp;quot; set PASSWORD=%RETV%
goto :GETSWITCHLOOP
:GETSWITCHLOOPEND

rem Use defaults for non-specified variables
if &amp;quot;%SERVER%&amp;quot;==&amp;quot;&amp;quot; set SERVER=%COMPUTERNAME%
if &amp;quot;%USER%&amp;quot;==&amp;quot;&amp;quot; set USER=%USERDOMAIN%\%USERNAME%

rem Check the operation type and perform this or that
if /i &amp;quot;%OPERATION%&amp;quot;==&amp;quot;this&amp;quot; (
 call :DOTHIS
) else if &amp;quot;%OPERATION%&amp;quot;==&amp;quot;that&amp;quot; (
    call :DOTHAT
) else (
    goto :HELP
)
goto :EOF

rem ------------------------------------------------------------------
rem DOTHIS procedure
rem Print parameter values and sleep for 5 seconds.
rem
:DOTHIS
if defined TRACE %TRACE% [proc %0 %*]
 echo Started this on %DATE% at %TIME%

 call :PRINTPARAMS

 echo Please wait 5 seconds...
 call %SCRIPTDIR%_mtplib :DELAY 5
 if %ERRORLEVEL% neq 0 goto :EOF

 echo Ended this on %DATE% at %TIME%
goto :EOF

rem ------------------------------------------------------------------
rem DOTHAT procedure
rem Print parameter values and sleep for 10 seconds.
rem
:DOTHAT
if defined TRACE %TRACE% [proc %0 %*]
 echo Started that on %DATE% at %TIME%

 call :PRINTPARAMS
 
 echo Please wait 10 seconds...
 call %SCRIPTDIR%_mtplib :DELAY 10
 if %ERRORLEVEL% neq 0 goto :EOF

 echo Ended that on %DATE% at %TIME%
goto :EOF

:PRINTPARAMS
if defined TRACE %TRACE% [proc %0 %*]
 echo Server  =%SERVER%
 echo User    =%USER%
 echo Password=%PASSWORD%
goto :EOF

rem These must be the FINAL LINES in the script
:DOSEXIT
echo This script requires Windows NT
rem ------------------------------------------------------------------&lt;/pre&gt;

&lt;br/&gt;
See also:&lt;br/&gt;
&lt;a href="http://alekdavis.blogspot.com/2008/07/using-parameter-qualifiers-in-windows.html"&gt;Using parameter qualifiers in Windows shell scripts&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-2012361876987062555?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/LWQUaapWyDA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/2012361876987062555/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=2012361876987062555" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/2012361876987062555?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/2012361876987062555?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/LWQUaapWyDA/windows-batch-scripting-simplified.html" title="Windows batch scripting simplified" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/11/windows-batch-scripting-simplified.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4ESH0-fSp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-372956704328017492</id><published>2011-09-27T15:39:00.000-07:00</published><updated>2011-09-28T13:48:29.355-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T13:48:29.355-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technobrief" /><title>Technobrief #13</title><content type="html">&lt;div class="summary"&gt;
&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Recent findings of software, articles, and more.&lt;/div&gt;

&lt;b&gt;CSS&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://sixrevisions.com/css/100-exceedingly-useful-css-tips-and-tricks/"&gt;100 Exceedingly Useful CSS Tips and Tricks&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Showcase of useful CSS tips and tricks.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://designfestival.com/better-semantics-with-css-combinators-and-selectors/"&gt;Better Semantics with CSS Combinators &amp; Selectors&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Chris Sealey explains when and how to use complex CSS combinators.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.alistapart.com/articles/css-positioning-101/"&gt;CSS Positioning 101&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Noah Stokes looks at the CSS position property to see how we can use it to create standards-compliant, table-free CSS layouts.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/articles/should-you-start-using-csslint/"&gt;Should You Start Using CSSLint?&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Discusses &lt;a href="http://csslint.net/"&gt;CSSLint&lt;/a&gt;, a recently released code analysis tool for CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Graphics&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.graphics.com/modules.php?name=Sections&amp;op=viewarticle&amp;artid=977"&gt;10 Things You Need to Know About Compositing in Photoshop&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Adapted from &lt;i&gt;&lt;a href="http://www.peachpit.com/store/product.aspx?isbn=0321808231"&gt;Photoshop Compositing Secrets: Unlocking the Key to Perfect Selections and Amazing Photoshop Effects for Totally Realistic Composites&lt;/a&gt;&lt;/i&gt; by Matt Kloskowski&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://famfamfam.com/lab/icons/"&gt;FAMFAMFAM icons&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Several sets of 16x16 icons in PNG and GIF format.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Hardware&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.smallnetbuilder.com/nas/nas-basics/30914-how-to-buy-a-nas-shorter-version"&gt;How To Buy a NAS - The Short(er) Version - Updated 2011&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
If you don't want (or care) to get into the details behind what makes a NAS tick and just want a short list of candidates to consider, then this article is for you.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;JavaScript&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/create-bookmarklets-the-right-way/"&gt;&lt;b&gt;Create Bookmarklets – The Right Way&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
This tutorial looks into creating bookmarklets from scratch and lists some best practices to follow.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://samples.superexpert.com/JavaScriptReference/"&gt;&lt;b&gt;Superexpert JavaScript Reference&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Great reference with examples and browser support indicators.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/scriptjunkie/gg578608.aspx"&gt;&lt;b&gt;Namespacing in JavaScript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Angus Croll offers several approaches of implementing namespaces in JavaScript.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://coding.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/"&gt;Ten Oddities And Secrets About JavaScript&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
This article is aimed at intermediate developers who are curious about more advanced JavaScript. It is a collection of JavaScript’s oddities and well-kept secrets. Some sections will hopefully give you insight into how these curiosities can be useful to your code, while other sections are pure WTF material.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;jQuery&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.codeproject.com/KB/ajax/AWatermarkedAutocomplete.aspx"&gt;A Watermarked Auto-complete jQuery Plugin&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
This article presents a watermarked auto-complete jQuery plugin built upon the &lt;a href="http://jqueryui.com/demos/autocomplete/"&gt;jQuery UI autocomplete&lt;/a&gt; control.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://stephenwalther.com/blog/archive/2010/11/30/an-introduction-to-jquery-templates.aspx"&gt;An Introduction to jQuery Templates&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
In this blog entry, Stephen Walther you with enough information to start working with jQuery Templates.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://encosia.com/jquery-templates-composite-rendering-and-remote-loading/"&gt;jQuery Templates, composite rendering, and remote loading&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Dave Ward explains how to to build a jQuery template out of simple sub-templates stored in external files.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Libraries&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://github.com/markrendle/Simple.Data"&gt;Simple Data&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
A light-weight, dynamic data access component for C# 4.0.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theobjectguy.com/DotNetLog/"&gt;&lt;b&gt;.NET Logging Framework&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
The logging framework provides you with an easy means to log information to any destination. It comes complete with loggers that support writing to the system console, a file on disk, a TCP/IP socket, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Office&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.slideshare.net/otikik/how-to-make-awesome-diagrams-for-your-slides"&gt;How to make awesome diagrams for your slides&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Good tips for building PowerPoint presentations.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Opinions&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.cringely.com/2010/12/and-then-along-comes-larry/"&gt;And Then Along Comes Larry….&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Robert Cringely describes Oracle's Larry Ellison. Quote: &lt;span class="quote"&gt;"This level of honesty doesn’t make Larry what most of us would think of as a nice person. I once heard him refer to having “nailed” a dinner companion, if you know what I mean and I think you do. But with Larry at least you know where you stand, with most of us standing, frankly, nowhere."&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://wekeroad.com/post/7102729511/a-simple-example-thats-incredibly-complex"&gt;A Simple Example That's Incredibly Complex&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Great discussion about Domain-Driven Design (DDD), simplicity, patterns, and other coding aspects. Quote: &lt;span class="quote"&gt;"If you find yourself writing a sentence with the words “banking, simple, not real-world” you might want to rethinking what it is you’re doing."&lt;/span&gt; Great, great article.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://teddziuba.com/2011/03/osx-unsuitable-web-development.html"&gt;MacOS X is an Unsuitable Platform for Web Development&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Ted Dziuba describes his experience with MacOS.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/articles/the-state-of-video-on-the-web/"&gt;The State of Video on the Web&lt;/a&gt;&lt;/b&gt;&lt;br/&gt;
The history behind the &lt;span class="code"&gt;&amp;lt;video&amp;gt;&lt;/span&gt; tag and its support in various browsers.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Podcasts&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=""&gt;Hanselminutes (Show #262): The Rise of the Micro-ORM with Sam Saffron and Rob Conery/&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Scott sits down with Sam Saffron and Rob Conery to talk about their Micro-ORMs. What have they done in less than 400 lines of code, that the rest of the planet needs a dozen assemblies for? Should you abandon your ORM and start writing inline SQL? All this and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Programming&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/gg309172.aspx"&gt;&lt;b&gt;A Coder’s Guide to Writing API Documentation&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Peter Gruenbaum  offers a guide on how to write API documentation.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codebetter.com/2011/01/11/c-in-depth-optional-parameters-and-named-arguments-2/"&gt;&lt;b&gt;C# In Depth – Optional Parameters and Named Arguments&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Extract from Jon Skeet's book, in which he describes these new features of C# 4.0.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://ss64.com/index.html"&gt;Command line reference: Database and Operating Systems&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Covers Windows command shell (Windows Script Host), VBScript, PowerShell, Oracle, SQL Server, and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://scottonwriting.net/sowblog/archive/2011/01/06/customizing-elmah-s-error-emails.aspx"&gt;&lt;b&gt;Customizing ELMAH’s Error Emails&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Scott Mitchell explains.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/data-access/tutorials/efficiently-paging-through-large-amounts-of-data-cs"&gt;&lt;b&gt;Efficiently Paging Through Large Amounts of Data&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
This tutorial explains how to use custom paging when retrieving data from a SQL Server database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/tutorials/asp-net/the-ins-and-outs-of-webmatrix-net-programming-using-the-razor-syntax/"&gt;The Ins and Outs of WebMatrix: .NET Programming Using the Razor Syntax&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
This tutorial gives you an overview of programming with ASP.NET Web Pages using the Razor syntax.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://peterdn.com/post/To-make-a-Metro-Appx-Package-from-scratch-you-must-first-e280a6.aspx"&gt;To make a Metro Appx Package from scratch, you must first…&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Peter Nelson explains how to deploy a &lt;a href="http://msdn.microsoft.com/en-us/windows/apps/br229516" title="Windows Developer Preview downloads"&gt;Metro&lt;/a&gt; app on Windows 8.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Security&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx"&gt;&lt;b&gt;Keep it secret, keep it safe&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Eric Lippert explains why "the hard part of a secure design that uses crypto is not the math."&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Software&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.avs4you.com/AVS-Cover-Editor.aspx"&gt;&lt;b&gt;AVS Cover Editor&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Create covers for various disc types: CD, DVD, Blu-ray discs, VCD, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pppindia.com/contacts-sync/"&gt;&lt;b&gt;Contact Sync&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Synchronize contacts between Outlook and Gmail.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.animal-software.com/dolphin-text-editor-menu.php"&gt;Dolphin Text Editor Menu&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Adds options to standard text editors (Notepad, OpenOffice.org, Visual Studio, etc) allowing you to sort text alphabetically, reverse line order, remove blank or duplicate lines, change text case, align text, remove HTML tags, remove text formatting, count words and characters, and do more.
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.perry-wolf.de/dropbox-shell-tools-now-in-english"&gt;&lt;b&gt;Dropbox Shell Tools&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
A Windows Explorer shell extension to speed up copy or move files to your Dropbox folder (must install as Administrator).
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.eusing.com/free_mp3_cutter/mp3_cutter.htm"&gt;Eusing Free MP3 Cutter&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Allows you to cut out pieces of an audio file (MP3, WAV, WMA), keeping ID3 tag info.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.prestosoft.com/edp_examdiff.asp"&gt;ExamDiff&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Visual file comparison tool.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://lifehacker.com/5826909/lifehacker-pack-for-windows-our-list-of-the-best-windows-downloads"&gt;Lifehacker Pack for Windows: Our List of the Best Windows Downloads&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
A yearly snapshot of &lt;a href="http://lifehacker.com"&gt;Lifehacker&lt;/a&gt;'s favorite applications.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.kastorsoft.com/index_en.html"&gt;KastorSoft: Free Multimedia Software&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Several free applications including video converter, audio extractor and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wnsoft.com/pixbuilder/"&gt;&lt;b&gt;PixBuilder Studio&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Yet another free image editing software program for digital photo editing, images processing, and resizing.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sweethome3d.com/index.jsp"&gt;&lt;b&gt;Sweet Home 3D&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
A free interior design application that helps you place your furniture on a house 2D plan, with a 3D preview.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jam-software.com/ultrasearch/index.shtml"&gt;&lt;b&gt;UltraSearch&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;
Searches files and folders on local NTFS drives without using file indexing.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Training&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://live.ineta.org/"&gt;&lt;b&gt;INETA Live&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Offers a number of videos on programming and non-programming topics presented at different user groups.&lt;/li&gt;
&lt;/ul&gt;
  
&lt;b&gt;Visual Studio&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vssnippets.codeplex.com/"&gt;&lt;b&gt;StyleCop Compliant Visual Studio Code Snippets&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
 Within this project the code snippetst that come with Visual Studio 2010 have been refactored to provide StyleCo-compliant versions of the original code snippets while also adding many new code snippets.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/gg535675.aspx"&gt;&lt;b&gt;Visual Studio Tools and Extensions&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Good collection of various tools and extensions for Visual Studio 2010.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Web design&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sitepoint.com/a-basic-html5-template/"&gt;&lt;b&gt;A Basic HTML5 Template&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Explains how to build an HTML5-based  to build page template from scratch.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://coding.smashingmagazine.com/2011/01/12/guidelines-for-responsive-web-design/"&gt;&lt;b&gt;Responsive Web Design: What It Is and How To Use It&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Responsive Web design is the approach that suggests that design and development should respond to the user’s behavior and environment based on screen size, platform and orientation. The practice consists of a mix of flexible grids and layouts, images and an intelligent use of CSS media queries. As the user switches from their laptop to iPad, the website should automatically switch to accommodate for resolution, image size and scripting abilities. In other words, the website should have the technology to automatically respond to the user’s preferences. This would eliminate the need for a different design and development phase for each new gadget on the market. This article explains the approach to Responsive Web Design.&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Webtools&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.idphoto4you.com/"&gt;IDPhoto4You&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Easy to use tool to create passport, visa and ID photos (for U.S. and other countries).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mejuba.com/"&gt;&lt;b&gt;Mejuba&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Free, unlimited photo and video storage and sharing site.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/12389-one-page-apps-i-actually-use/"&gt;&lt;b&gt;One Page Apps I Actually Use&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Lists a collection of useful one-page web-based tools including: &lt;a href="CSS3Please.com"&gt;CSS3Please.com&lt;/a&gt;, &lt;a href="Border-Radius.com"&gt;Border-Radius.com&lt;/a&gt;, &lt;a href="HTML-Ipsum.com"&gt;HTML-Ipsum.com&lt;/a&gt;, &lt;a href="ScriptSrc.net"&gt;ScriptSrc.net&lt;/a&gt;, &lt;a href="CopyPasteCharacter.com"&gt;CopyPasteCharacter.com&lt;/a&gt;, &lt;a href="http://css-tricks.com/examples/ButtonMaker/"&gt;Button Maker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://signnow.com/"&gt;&lt;b&gt;SignNow&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Allows you to put add a signature to a digital document (such as PDF file).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-372956704328017492?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/dlqyiwgM7b4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/372956704328017492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=372956704328017492" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/372956704328017492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/372956704328017492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/dlqyiwgM7b4/technobrief-13.html" title="Technobrief #13" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/09/technobrief-13.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFSHY9eSp7ImA9WhdaEEk.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-1498602706848768679</id><published>2011-09-02T12:47:00.000-07:00</published><updated>2011-10-19T10:40:19.861-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T10:40:19.861-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Learning Adobe Photoshop Lightroom</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Resources for Adobe Photoshop Lightroom newbies.&lt;/div&gt;Recently, I spent $120 on a copy of &lt;a href="http://www.amazon.com/gp/product/B003739DVY/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=B003739DVY"&gt;Adobe Photoshop &lt;b&gt;Lightroom&lt;/b&gt; 3&lt;/a&gt; hoping that it would help me improve my &lt;b&gt;post-processing workflow&lt;/b&gt;. I'm not a professional photographer, I do not carry expensive digital photo equipment, but I hate low quality (under/over-exposed, grainy, etc) photos, so I mostly rely on &lt;b&gt;photo editing&lt;/b&gt;, which -- with more photos in my collection -- was becoming more cumbersome. After reading a number of rave reviews and user comments (e.g. &lt;a href="http://www.pcmag.com/article2/0,2817,2365138,00.asp"&gt;PCMag&lt;/a&gt;, &lt;a href="http://arstechnica.com/apple/reviews/2010/06/adobe-lightroom-3-review.ars/"&gt;ARS Technica&lt;/a&gt;, &lt;a href="http://www.amazon.com/Adobe-65064073-Photoshop-Lightroom-3/product-reviews/B003739DVY/ref=dp_top_cm_cr_acr_txt?ie=UTF8&amp;showViewpoints=1"&gt;Amazon&lt;/a&gt;), I decided to give Lightroom a try.&lt;br /&gt;
&lt;center&gt;&lt;a href="http://1.bp.blogspot.com/-nLhFs4AlrFI/TmFnznCjwnI/AAAAAAAAAqk/3Rl8sSr0UX0/s1600/box_lightroom3_150x150.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="150" width="150" src="http://1.bp.blogspot.com/-nLhFs4AlrFI/TmFnznCjwnI/AAAAAAAAAqk/3Rl8sSr0UX0/s400/box_lightroom3_150x150.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt;&lt;br /&gt;
I had some reservations about using Lightroom on my 3+ year-old laptop with 3 GB RAM and a weak integrated graphics card running 64-bit Windows 7, but it installed and launched fine. My &lt;b&gt;first impression&lt;/b&gt; was:&lt;blockquote class="quote"&gt;How the heck do I use this program?&lt;/blockquote&gt;I'm not a pro in digital graphics, but I can find my way around most photo editors, including Adobe products. However, my initial attempts to do something useful in Lightroom left me in the state of... what do I call it... frustration... bewilderment. I really had no idea where or how to start, so I finally decided to spend a few hours looking for short introductory tutorials. I will include references to the helpful resources &lt;a href="#LightroomResources"&gt;below&lt;/a&gt;, but here is my &lt;b&gt;second impression&lt;/b&gt; (after I grasped the basic and tried Ligthroom on a couple of hundred photos): &lt;blockquote class="quote"&gt;I LOVE IT!&lt;/blockquote&gt;I'm still at the very early stage of learning the basics, but the more I learn about Lightroom, the more I like it. &lt;br /&gt;
&lt;br /&gt;
Here are the &lt;b&gt;features&lt;/b&gt; I enjoy (or plan to enjoy) most:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Non-destructive editing&lt;/b&gt;: When you edit an image, Lightroom does not actually modify the original file; it simply saves your editing steps (which can be quite complex) as instructions (metadata) in a catalog (a catalog contains information, or metadata, about a selected collection of your photos, but it does not include the actual image files). The problem here is that if you lose a catalog file, you will lose all edits of the photos referenced in the catalog (this is why it's important to back up your catalog files regularly). The benefit is that you do not need to keep duplicate files. You can also create multiple virtual copies of the files (pointing to the same physical file) and use them to apply different effects, such as black and white or vignette effects. Lightroom will apply your edits to a new physical copy of the file whenever you export or publish them to a hard drive, your web site, or a photo hosting site, such as &lt;a href="http://flickr.com"&gt;Flickr&lt;/a&gt; of &lt;a href="http://picasaweb.google.com"&gt;Picasa&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Batch processing&lt;/b&gt;: Lightroom allows you to apply the same changes to multiple files in a single step. Why is this important? Because many times you will have similar photos shot under similar conditions. Instead of adjusting them one at a time, you can select a group and apply the same changes once.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Before/after shots/previews&lt;/b&gt;: Lightroom offers several ways to compare the effects of your editing steps to the original photos, so you can go back and make adjustments. Presets allow you to apply multiple adjustments in a single step. When you roll the mouse over a specific preset, you can see a preview of the preset applied to your photo before you actually make a change.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Photo editing&lt;/b&gt;: After watching a number of tutorials, I was blown away with the types of adjustments Lightroom supports (and if these are still not enough, it lets you edit your photos in an even more advanced editor like Photoshop CS or Photoshop Elements). I'm using the basic tools (auto toning, exposure correction, clarity improvement, noise reduction, sharpening), and even these produce good results. And since all of the edits are non-destructive, you can always go back to the original.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;File handling&lt;/b&gt;: I always had problems keeping track of my photos. I would copy a new set of shots from a flash card to a dedicated folder, make adjustments, and save the modified files to another folder. Then I may crop the modified files (to 4x6) for printing and save the cropped copies in yet another folder. Messy. With Lightroom, you can easily move photos between different directories without leaving the program. It allows you to rename the files and apply adjustments on import and export.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Metadata&lt;/b&gt;: I'm yet to start using meta tags (such as keywords) on my images, but when I do, I suspect they would make it easier to handle (search, select, group) photos.&lt;/li&gt;
&lt;/ul&gt;&lt;a name="LightroomResources"&gt;&lt;/a&gt;Now, here are some links that I found helpful (if you have additional recommendations, please post them in a comment):&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Videos&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;AdobeTV offers &lt;a href="http://tv.adobe.com/product/lightroom/"&gt;quality episodes&lt;/a&gt;. Check the &lt;a href="http://tv.adobe.com/show/getting-started-with-adobe-photoshop-lightroom-3"&gt;Getting Started with Adobe Photoshop Lightroom 3&lt;/a&gt; series.&lt;/li&gt;
&lt;li&gt;If you like the Getting Started... series, watch other videos by &lt;a href="http://jkost.com/lightroom.html"&gt;Julieanne Kost&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Kelby TV publishes regular &lt;a href="http://kelbytv.com/lightroomkillertips/"&gt;Lightroom Killer Tips&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;George Jardine's collection of &lt;a href="http://mulita.com/blog/?page_id=1962"&gt;free videos&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Michael Tapes' &lt;a href="http://www.whibalhost.com/_Tutorials/Photoshop_LR/01/index.html"&gt;tutorials&lt;/a&gt; cover older version (Lightroom v1), but most of the info is still relevant.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321700945/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0321700945"&gt;Learn Adobe Photoshop Lightroom 3 by Video (Learn by Video)&lt;/a&gt; by Tim Grey, et al (this a DVD-ROM)&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Blogs&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://lightroomkillertips.com/"&gt;Lightroom Killer Tips&lt;/a&gt; by Matt Kloskowski&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mulita.com/blog/"&gt;George Jardine on Adobe Photoshop, Lightroom and Digital Photography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.adobe.com/jkost/"&gt;Julieanne Kost's Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lightroomqueen.com/"&gt;The Lightroom Queen&lt;/a&gt; by Victoria Bampton&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lightroomsecrets.com/"&gt;Lightroom Secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thelightroomlab.com/"&gt;TheLightroomLab.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Books&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I haven't read any of these, but they seem to be getting the most positive reviews:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0956003044/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0956003044"&gt;Adobe Lightroom 3 - The Missing FAQ - Real Answers to Real Questions&lt;/a&gt; asked by Lightroom Users by Victoria Bampton&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321700910/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0321700910"&gt;The Adobe Photoshop Lightroom 3 Book for Digital Photographers&lt;/a&gt; by Scott Kelby&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/047060705X/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=047060705X"&gt;Lightroom 3: Streamlining Your Digital Photography Process&lt;/a&gt; by Nat Coalson&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321680707/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0321680707"&gt;The Adobe Photoshop Lightroom 3 Book: The Complete Guide for Photographers&lt;/a&gt; by Martin Evening&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321670094/ref=as_li_ss_tl?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0321670094"&gt;Vision &amp; Voice: Refining Your Vision in Adobe Photoshop Lightroom&lt;/a&gt; by David duChemin&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Cheat sheets&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jkost.com/pdf/lightroom/LRShortcutsHandout.pdf"&gt;Adobe Photoshop Lightroom 3.0 Shortcuts, Tips and Quick Reference&lt;/a&gt; (PDF)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lightroomqueen.com/keyboard-shortcuts/"&gt;Keyboard shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Presets&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ononesoftware.com"&gt;onOne Software&lt;/a&gt; offers several collections of awesome &lt;a href="http://www.ononesoftware.com/products/perfect-presets-lightroom/"&gt;free presets&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;How-tos&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tv.adobe.com/watch/the-complete-picture-with-julieanne-kost/how-to-migrate-lr-to-another-computer/" title="How to migrate LR to another computer"&gt;How to migrate Lightroom to another computer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
P.S. I must mention that the help file that comes with Ligthroom is quite helpful, so you may want to start there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-1498602706848768679?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/8aJv_VTpH7E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/1498602706848768679/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=1498602706848768679" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1498602706848768679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1498602706848768679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/8aJv_VTpH7E/learning-adobe-photoshop-lightroom.html" title="Learning Adobe Photoshop Lightroom" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-nLhFs4AlrFI/TmFnznCjwnI/AAAAAAAAAqk/3Rl8sSr0UX0/s72-c/box_lightroom3_150x150.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/09/learning-adobe-photoshop-lightroom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECQnsyeip7ImA9WhZaEkU.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-6298173826800410828</id><published>2011-05-26T16:28:00.000-07:00</published><updated>2011-06-28T11:27:43.592-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-28T11:27:43.592-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><title>Build 32- and 64-bit installers using WiX</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Code samples illustrating how to build deployment packages for both x86 and x64 platforms from the same Windows Installer XML (WiX) project.&lt;/div&gt;My &lt;a href="http://alekdavis.blogspot.com/2011/03/beginners-guide-to-wix-35.html" title="Beginner’s guide to Windows Installer XML (WiX) 3.5"&gt;recent post&lt;/a&gt; offers code samples illustrating a life cycle and core features of a WiX deployment project. The samples miss one important aspect: target &lt;b&gt;platforms&lt;/b&gt; (i.e. &lt;span class="code"&gt;x86&lt;/span&gt; vs &lt;span class="code"&gt;x64&lt;/span&gt;). While the samples get installed and run fine on both &lt;b&gt;64-bit&lt;/b&gt; and &lt;b&gt;32-bit&lt;/b&gt; platforms, the deployed applications always appear as 32-bit programs, even though they run as 64-bit processes on 64-bit machines (all assemblies are compiled to run on &lt;a href="http://sedodream.com/2009/08/21/MSBuildBuilding64BitVersus32Bit.aspx" title="MSBuild: Building 64 bit versus 32 bit"&gt;&lt;span class="code"&gt;Any CPU&lt;/span&gt;&lt;/a&gt;). &lt;br /&gt;
&lt;br /&gt;
I tried to add 64-bit support to the existing projects, but ran into several issues (e.g. folder selection wizard always showed the &lt;a href="http://stackoverflow.com/questions/5479790/wix-how-to-override-c-program-files-x86-on-x64-machine-in-wixui-advanced-se" title="WiX: How to override &amp;wuot;C:\Program Files (x86)&amp;quot; on x64 machine in WixUI_Advanced sequence?"&gt;wrong &lt;span class="code"&gt;Program Files&lt;/span&gt; folder on 64-bit systems&lt;/a&gt;). It took me a few weeks to resolve the problems, so here are the &lt;b&gt;updated projects&lt;/b&gt; (all projects use Visual Studio 2010):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.box.net/shared/kih09t9nbj"&gt;&lt;b&gt;Download WiX demo projects (64-bit and 32-bit)&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;These samples do &lt;b&gt;everything&lt;/b&gt; the &lt;a href="http://alekdavis.blogspot.com/2011/03/beginners-guide-to-wix-35.html#Overview"&gt;original samples do&lt;/a&gt;, &lt;b&gt;plus&lt;/b&gt;:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Solutions include build targets for &lt;b&gt;64-bit platforms&lt;/b&gt;: &lt;span class="code"&gt;Debug (x64)&lt;/span&gt; and &lt;span class="code"&gt;Release (x64)&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;WiX projects can build &lt;b&gt;64-bit MSI&lt;/b&gt; files (via 64-bit build targets).&lt;/li&gt;
&lt;li&gt;Build process &lt;b&gt;renames MSI&lt;/b&gt; files to indicate target platforms and copies them to a separate &lt;span class="code"&gt;MSI&lt;/span&gt; folder under the WiX project (in a post-build event).&lt;/li&gt;
&lt;li&gt;Detect and use the &lt;b&gt;original application folder&lt;/b&gt; during &lt;b&gt;upgrades&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;Here is what you need to do to build installers for 32- and 64-bit platforms:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Understand the differences between 32- and 64-bit installers.&lt;/b&gt;&lt;br /&gt;
At the very least, you need to understand that a setup package (MSI file) file can be marked as &lt;a href="http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/single-msi-for-32-bit-and-64-bit-td6358749.html" title="See comment by Pally Sandher [May 13, 2011; 3:13am]"&gt;either a 32- or 64-bit installer&lt;/a&gt; (64-bit installer cannot run on 32-bit systems, but it can install 32-bit components on 64-bit systems). The following article can give you a basic idea of intricacies related to 64-bit platform deployment: &lt;a href="http://csi-windows.com/blog/all/27-csi-news-general/263-how-windows-installer-processes-packages-on-64-bit-windows"&gt;How Windows Installer Processes Packages on 64-bit Windows&lt;/a&gt; (see also other &lt;a href="http://alekdavis.blogspot.com/2010/10/wix-how-tos-and-missing-links.html" title="WiX how-tos and missing links"&gt;relevant articles&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Add the x64 build target to your WiX setup project.&lt;/b&gt;&lt;br /&gt;
Assuming that all application assemblies (and support files) are not platform-specific, keep their build configuration marked as &lt;span class="code"&gt;Any CPU&lt;/span&gt;, but add new configurations to the WiX setup project and associate it with the &lt;span class="code"&gt;x64&lt;/span&gt; platform; make sure configuration names identify the 64-bit platform, e.g. &lt;span class="code"&gt;Debug (x64)&lt;/span&gt; and &lt;span class="code"&gt;Release (x64)&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="tip"&gt;&lt;b&gt;Tip:&lt;/b&gt; I often run into problems adding a new configuration via Visual Studio IDE. E.g. sometimes, I cannot add the &lt;span class="code"&gt;x64&lt;/span&gt; platform to some projects, or I would add it, but when I close the Configuration Manager dialog box, my settings would disappear. If you run into such issues, I suggest making changes directly to the project (&lt;span class="code"&gt;.wixproj&lt;/span&gt;) and solution (&lt;span class="code"&gt;.sln&lt;/span&gt;) files (their structure should be obvious). &lt;span class="sidenote"&gt;[Notice that you can edit a project file directly in the Visual Studio IDE by &lt;a href="http://msdn.microsoft.com/en-us/library/tt479x1t(v=VS.100).aspx" title="How to: Unload and Reload Projects"&gt;unloading and reloading the project&lt;/a&gt;.]&lt;/span&gt; Then open the Configuration Manager dialog box (via the &lt;b&gt;Build - Configuration Manager&lt;/b&gt; menu), and make sure your project build mappings looks right.&lt;/div&gt;Your configuration settings should look similar to this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-T2rwgiHtkeM/Td7Nx2MdlVI/AAAAAAAAApA/X58A8LdViX8/s1600/ConfigurationManagerDlg.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="251" width="400" src="http://1.bp.blogspot.com/-T2rwgiHtkeM/Td7Nx2MdlVI/AAAAAAAAApA/X58A8LdViX8/s400/ConfigurationManagerDlg.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The idea here is that you always build your platform-independent assemblies for &lt;span class="code"&gt;Any CPU&lt;/span&gt; and only use &lt;span class="code"&gt;x86&lt;/span&gt; and &lt;span class="code"&gt;x64&lt;/span&gt; targets for the setup projects (or any platform-specific project).&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Define and use platform-specific properties in the WiX source (.wxs) file.&lt;/b&gt;&lt;br /&gt;
It's a good idea to have platform-specific GUIDs for product ID and upgrade code, as well as product name. You should always use a variable to store platform-specific Win64 flag and folder names (such as Program Files folder). Here is the code that illustrates how to achieve this:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?define ProductName = &amp;quot;WiX Demo&amp;quot; ?&amp;gt;
&amp;lt;?define ProductVersion = &amp;quot;1.0&amp;quot; ?&amp;gt;
&amp;lt;?define ProductFullVersion = &amp;quot;1.0.0.0&amp;quot; ?&amp;gt;
&amp;lt;?define ProductAuthor = &amp;quot;Alek Davis&amp;quot; ?&amp;gt;
&amp;lt;?define ProductAppFolder = &amp;quot;InstallLocation&amp;quot; ?&amp;gt;

&amp;lt;?if $(var.Platform) = x64 ?&amp;gt;
  &amp;lt;?define ProductDisplayName = &amp;quot;$(var.ProductName) 64-bit&amp;quot; ?&amp;gt;
  &amp;lt;?define ProductId = &amp;quot;47861F89-765F-4D6D-BEDE-139F0BCD74ED&amp;quot; ?&amp;gt;
  &amp;lt;?define ProductUpgradeCode = &amp;quot;EE2511C1-75A7-4954-8AB6-0E405C9481B4&amp;quot; ?&amp;gt;
  &amp;lt;?define Win64 = &amp;quot;yes&amp;quot; ?&amp;gt;
  &amp;lt;?define PlatformProgramFilesFolder = &amp;quot;ProgramFiles64Folder&amp;quot; ?&amp;gt;
&amp;lt;?else ?&amp;gt;
  &amp;lt;?define ProductDisplayName = &amp;quot;$(var.ProductName)&amp;quot; ?&amp;gt;
  &amp;lt;?define ProductId = &amp;quot;490CCCF1-54C3-4AC2-8C88-A8903556EEB3&amp;quot; ?&amp;gt;
  &amp;lt;?define ProductUpgradeCode = &amp;quot;E7E6A7CB-1D12-486D-9E53-DBC56B0EDDCB&amp;quot; ?&amp;gt;
  &amp;lt;?define Win64 = &amp;quot;no&amp;quot; ?&amp;gt;
  &amp;lt;?define PlatformProgramFilesFolder = &amp;quot;ProgramFilesFolder&amp;quot; ?&amp;gt;
&amp;lt;?endif ?&amp;gt;&lt;/pre&gt;The code above tells the WiX compiler to check the value of the build platform property &lt;span class="code"&gt;$(var.Platform)&lt;/span&gt;. If the compiler detects the &lt;span class="code"&gt;x64&lt;/span&gt; build platform target, it will set platform-dependent variables to 64-bit specific values; otherwise, it'll use 32-bit values.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use platform-specific properties to set element attributes.&lt;/b&gt;&lt;br /&gt;
Now you can use platform-specific properties set by WiX compiler instead of hard-coded values:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;Product 
  Id=&amp;quot;$(var.ProductId)&amp;quot; 
  Name=&amp;quot;$(var.ProductDisplayName) (v$(var.ProductVersion))&amp;quot; 
  Language=&amp;quot;1033&amp;quot; 
  Version=&amp;quot;$(var.ProductFullVersion)&amp;quot; 
  Manufacturer=&amp;quot;$(var.ProductAuthor)&amp;quot;
  UpgradeCode=&amp;quot;$(var.ProductUpgradeCode)&amp;quot;&amp;gt;

  &amp;lt;Package 
    InstallerVersion=&amp;quot;300&amp;quot; 
    Compressed=&amp;quot;yes&amp;quot; 
    InstallScope=&amp;quot;perMachine&amp;quot; 
    Manufacturer=&amp;quot;$(var.ProductAuthor)&amp;quot; 
    Platform=&amp;quot;$(var.Platform)&amp;quot; /&amp;gt;
  ...
  &amp;lt;Directory Id=&amp;quot;TARGETDIR&amp;quot; Name=&amp;quot;SourceDir&amp;quot;&amp;gt;
    &amp;lt;Directory Id=&amp;quot;$(var.PlatformProgramFilesFolder)&amp;quot; &amp;gt;
      &amp;lt;Directory Id=&amp;quot;APPLICATIONFOLDER&amp;quot; Name=&amp;quot;$(var.ProductName)&amp;quot;/&amp;gt;
    &amp;lt;/Directory&amp;gt;
  ...
  &amp;lt;/Directory&amp;gt;
  ...
&amp;lt;/Product&amp;gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Set platform flag on components.&lt;/b&gt;&lt;br /&gt;
Make sure that all of your product components are marked with the appropriate &lt;span class="code"&gt;Win64&lt;/span&gt; flag. Use a variable (like &lt;span class="code"&gt;$(var.Win64)&lt;/span&gt; defined in the code sample above) to change the value dynamically based on the build platform, such as:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;Component
  ... 
  Win64=&amp;quot;$(var.Win64)&amp;quot;&amp;gt;
  ...
&amp;lt;/Component&amp;gt;&lt;/pre&gt;If you have components which must be deployed only on 32- or 64-bit platform, you can hard-code their &lt;span class="code"&gt;Win64&lt;/span&gt; attribute values and conditionally include or exclude them based on the build target:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?if $(var.Platform) = x64 ?&amp;gt;
  &amp;lt;!-- 64-bit components go here --&amp;gt;
&amp;lt;?else ?&amp;gt;
  &amp;lt;!-- 32-bit components go here --&amp;gt;
&amp;lt;?endif ?&amp;gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Rename MSI files to indicate target platform.&lt;/b&gt;&lt;br /&gt;
You can define a post-build step to rename your MSI files, so that they reflect the intended platform. Select the &lt;b&gt;Project - Properties&lt;/b&gt; menu; in the &lt;b&gt;Build Events&lt;/b&gt; tab, set the Post-build Event Command Line to something like this:&lt;br /&gt;
&lt;pre class="brush: text"&gt;if not exist &amp;quot;$(ProjectDir)msi&amp;quot; mkdir  &amp;quot;$(ProjectDir)msi&amp;quot;
copy &amp;quot;!(TargetPath)&amp;quot; &amp;quot;$(ProjectDir)msi\$(TargetName)($(PlatformName))$(TargetExt)&amp;quot; /Y /V&lt;/pre&gt;These commands rename and copy the output MSI file to the MSI folder (in the project directory). They will create the folder if it does not exist. The file name will contain the &lt;span class="code"&gt;(x86)&lt;/span&gt; or &lt;span class="code"&gt;(x64)&lt;/span&gt; suffix depending in the target platform (e.g. &lt;span class="code"&gt;WixDemo1.0(x64).msi&lt;/span&gt;).&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;That's about it. Oh, almost forgot: test, test, test...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-6298173826800410828?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/6YL4fLe2J2c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/6298173826800410828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=6298173826800410828" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6298173826800410828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6298173826800410828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/6YL4fLe2J2c/build-32-and-64-bit-installers-using.html" title="Build 32- and 64-bit installers using WiX" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-T2rwgiHtkeM/Td7Nx2MdlVI/AAAAAAAAApA/X58A8LdViX8/s72-c/ConfigurationManagerDlg.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/05/build-32-and-64-bit-installers-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4DSXsyeSp7ImA9WhdSEko.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-9142539631761135042</id><published>2011-05-23T17:05:00.000-07:00</published><updated>2011-07-21T12:02:58.591-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-21T12:02:58.591-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="humor" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><title>I don't want to wear the ribbon!</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: I'm no Cosmo Kramer, but I also do not like the ribbon.&lt;/div&gt;I keep hearing and reading articles from people announcing how (often after a short struggle) they fell in love with Microsoft's &lt;a href="http://en.wikipedia.org/wiki/Ribbon_(computing)"&gt;ribbon interface&lt;/a&gt;, but after using it for quite a while (mostly in the Microsoft Office products), I still feel more like &lt;a href="http://en.wikipedia.org/wiki/Cosmo_Kramer"&gt;Kramer&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;iframe width="425" height="349" src="http://www.youtube.com/embed/uY7Zg_dfV7c" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;
Is there something wrong with me?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-9142539631761135042?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/0wheR4tMpsY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/9142539631761135042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=9142539631761135042" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/9142539631761135042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/9142539631761135042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/0wheR4tMpsY/i-dont-want-to-wear-ribbon.html" title="I don't want to wear the ribbon!" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/uY7Zg_dfV7c/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/05/i-dont-want-to-wear-ribbon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcASXw4fSp7ImA9WhZVFEg.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-7135257081213842081</id><published>2011-03-02T13:36:00.000-08:00</published><updated>2011-05-26T16:37:28.235-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-26T16:37:28.235-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><title>Beginner’s guide to Windows Installer XML (WiX) 3.5</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Slides and demo projects.&lt;/div&gt;I just updated and uploaded the &lt;a href="http://www.slideshare.net/alekdavis/beginners-guide-to-windows" title="Beginner’s Guide to Windows Installer XML (WiX)"&gt;&lt;b&gt;slides&lt;/b&gt;&lt;/a&gt; from the presentation I gave to my work group yesterday (you can &lt;a href="http://www.slideshare.net/alekdavis/beginners-guide-to-windows/download"&gt;download the PowerPoint [PPTX] presentation&lt;/a&gt; from the SlideShare site):&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;div style="width:425px" id="__ss_6767321"&gt;&lt;object id="__sse6767321" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wix-110131171837-phpapp02&amp;stripped_title=beginners-guide-to-windows&amp;userName=alekdavis" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6767321" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wix-110131171837-phpapp02&amp;stripped_title=beginners-guide-to-windows&amp;userName=alekdavis" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/center&gt;You can also &lt;a href="http://www.box.net/shared/oenmocqygd"&gt;download the &lt;b&gt;demo projects&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a name="Overview"&gt;&lt;/a&gt;There are three demo solutions, each containing &lt;b&gt;four projects&lt;/b&gt;, all implemented in &lt;b&gt;Visual Studio 2010&lt;/b&gt; (you also need &lt;a href="http://wix.sourceforge.net/downloadv35.html"&gt;WiX 3.5 Toolset/Votive&lt;/a&gt;):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;A &lt;b&gt;client&lt;/b&gt; (Windows Forms) application.&lt;/li&gt;
&lt;li&gt;A &lt;b&gt;server&lt;/b&gt; (Windows service) application.&lt;/li&gt;
&lt;li&gt;A class &lt;b&gt;library&lt;/b&gt; (DLL used by both client and server).&lt;/li&gt;
&lt;li&gt;A WiX 3.5 &lt;b&gt;setup&lt;/b&gt; project handling deployment of the client, server, and class library.&lt;/li&gt;
&lt;/ul&gt;The demo apps (client, server, library) don't do much (they are there only for the WiX project). The WiX setup project illustrates how to accomplish the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Install and configure a &lt;b&gt;Windows service&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Install a client application.&lt;/li&gt;
&lt;li&gt;Install a class &lt;b&gt;library&lt;/b&gt; in Global Assembly Cache (&lt;b&gt;GAC&lt;/b&gt;).&lt;/li&gt;
&lt;li&gt;Install a text (readme.txt) file.&lt;/li&gt;
&lt;li&gt;Create &lt;b&gt;shortcuts&lt;/b&gt; under the Start menu for the client app and text file.&lt;/li&gt;
&lt;li&gt;Create a &lt;b&gt;shortcut&lt;/b&gt; under the Start menu for the application &lt;b&gt;uninstaller&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Display the advanced setup dialog sequence (&lt;b&gt;wizards&lt;/b&gt;) allowing the user to select the installation scope (per user or per machine), specify product destination folder, chose which features to install (client, server, or both).&lt;/li&gt;
&lt;li&gt;Perform &lt;b&gt;major upgrades&lt;/b&gt; (upgrades will retain Windows service definition for the already installed server component).&lt;/li&gt;
&lt;li&gt;Include application files in the setup package via &lt;b&gt;project references&lt;/b&gt; (instead of hard coding the file names).&lt;/li&gt;
&lt;/ul&gt;The &lt;b&gt;three solutions&lt;/b&gt; illustrate a typical &lt;b&gt;life cycle&lt;/b&gt; of a project. First, you build and deploy version 1.0. Then you can build and deploy version 1.5. The version 1.5 installer will &lt;b&gt;upgrade&lt;/b&gt; the already installed version (you don't need to uninstall version 1.0 before installing version 1.5). Then you can do the same for version 2.0. Notice that installers &lt;b&gt;preserve Windows service configuration&lt;/b&gt; during upgrades (if you redefine the service to run as a specific user instead of a local system account, the service configuration will remain intact).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="update"&gt;&lt;span style="font-weight:bold;"&gt;UPDATE:&lt;/span&gt; See &lt;a href="http://alekdavis.blogspot.com/2011/05/build-32-and-64-bit-installers-using.html"&gt;&lt;b&gt;new and improved samples&lt;/b&gt;&lt;/a&gt;, which explain how to implement installers for 32- and 64-bit targets and do other things.&lt;/div&gt;I'd also like to recommend two &lt;b&gt;books&lt;/b&gt; which I found extremely &lt;b&gt;helpful&lt;/b&gt;: one (by Nick Ramirez) covers WiX, the other (by Phil Wilson) - general Windows Installer (MSI) concept:&lt;br /&gt;
&lt;center&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=1849513724" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=1590592972" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/center&gt;And one more thank you to Jeffrey Sharp for his excellent &lt;a href="http://www.jeffreysharp.org/2010/10/13/setup-with-windows-installer-and-wix/" title="Talk: Setup With Windows Installer and WiX"&gt;WiX presentation&lt;/a&gt; (you can get the slides and watch Jeff's talk online).&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
My &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html#series"&gt;three-part introduction to WiX series&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-7135257081213842081?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/7NsF5yVICb4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/7135257081213842081/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=7135257081213842081" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7135257081213842081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7135257081213842081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/7NsF5yVICb4/beginners-guide-to-wix-35.html" title="Beginner’s guide to Windows Installer XML (WiX) 3.5" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2011/03/beginners-guide-to-wix-35.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFQ348eCp7ImA9Wx9SE04.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-858907749708926623</id><published>2010-11-11T23:14:00.000-08:00</published><updated>2010-12-02T17:11:52.070-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-02T17:11:52.070-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technobrief" /><title>Technobrief #12</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Recent findings of software, articles, and more.&lt;/div&gt;&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/"&gt;&lt;b&gt;The 30 CSS Selectors you Must Memorize&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Jeffrey Way describes CSS selectors (includes demos and browser compatibility matrix).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sitepoint.com/newsletter/viewissue.php?id=5&amp;amp;issue=76#5"&gt;&lt;b&gt;Shadow Boxing; CSS3 Glossy Buttons&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Five-step tutorial on building cool-looking buttons.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-you-need-to-check-out-less-js/"&gt;&lt;b&gt;Quick Tip: You Need to Check out LESS.js&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Jeffrey Way explains how to use JavaScript implementation of the &lt;a href="http://lesscss.org/"&gt;LESS&lt;/a&gt; library that offers greater flexibility when creating style sheets, including the use of variables, operators, mix-ins, and nested selectors.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Design&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/11/04/best-practices-of-combining-typefaces/"&gt;&lt;b&gt;Best Practices of Combining Typefaces&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A close look at some the best practices for combining typefaces — as well as some blunders to avoid.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lukew.com/ff/entry.asp?1208"&gt;&lt;b&gt;Warm Gun: the Age of Experience&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Luke Wroblewski offers his notes from Jared Spool's &lt;i&gt;The Dawning of the Age of Experience: How to Build A Killer Design Team&lt;/i&gt; talk at the Warm Gun Design Conference in San Francisco, CA (there are some excellent points).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/06/28/50-powerful-time-savers-for-web-designers/"&gt;&lt;b&gt;50 Powerful Time-Savers For Web Designers&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Useful utilities for web designers and developers.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Firefox&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://instantfirefox.com/"&gt;&lt;b&gt;InstantFirefox&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Add-on that enables instant (Chrome-like) search in Firefox.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/11778/"&gt;&lt;b&gt;Syphon&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Keeps your favorite extensions synced with all your computers.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Humor&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://stuffthathappens.com/blog/2008/03/05/simplicity/"&gt;&lt;b&gt;Simplicity&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Great illustration of what a typical Apple product, Google interface and your company's application look like (funny, and so true).&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Icons&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/11/09/50-free-high-quality-icons-sets/"&gt;&lt;b&gt;50 New Free High Quality Icons Sets&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Most of the listed freebies may be used for commercial projects as well, some of them may not.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.greepit.com/open-source-icons-gcons/"&gt;&lt;b&gt;Gcons&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Comprehensive collection of 100 creative, open source and multi-purpose icons in 12 colors for the web and desktop applications.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Interviews&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cultofmac.com/john-sculley-on-steve-jobs-the-full-interview-transcript/63295"&gt;&lt;b&gt;John Sculley On Steve Jobs&lt;/b&gt;, The Full Interview Transcript&lt;/a&gt;&lt;br /&gt;
Offers awesome insights into how Steve Jobs does things; it’s also one of the frankest CEO interviews you’ll ever read (Sculley talks openly about Jobs and Apple, admits it was a mistake to hire him to run the company and that he knows little about computers).&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;JavaScript&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/the-essentials-of-writing-high-quality-javascript/"&gt;&lt;b&gt;The Essentials of Writing High Quality JavaScript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Stoyan Stefanov offers an excerpt of his book (&lt;a href="http://www.amazon.com/gp/product/0596806752?ie=UTF8&amp;amp;tag=aledavtec-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596806752"&gt;JavaScript Patterns&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=aledavtec-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596806752" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;) detailing the essentials of writing high quality JavaScript, such as avoiding globals, using single var declarations, pre-caching length in loops, following coding conventions, and more. This excerpt also includes some habits not necessarily related to the code itself, but more about the overall code creation process, including writing API documentation, conducting peer reviews, and running JSLint.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;jQuery&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://encosia.com/2010/11/10/composition-with-jquery-templates-why-and-how/"&gt;&lt;b&gt;Composition with jQuery Templates: Why and How&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Dave Ward offers an example of template composition using jQuery templates.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx"&gt;&lt;b&gt;jQuery Templates, Data Link, and Globalization Accepted as Official jQuery Plugins&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Scott Guthrie (ScottGu) introduces new Microsoft's contribution to official jQuery plugins.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/progressively-enhance-a-form-link-to-modal-form/"&gt;&lt;b&gt;Progressively Enhance a Form to a Modal Form&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Erik Wurzer offers a tutorial (with demo and samples) explaining how to implement a modal dialog (form) using progressive enhancement: start with baseline, usable functionality, then increase the user experience for those who have browsers to support it.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/08/04/commonly-confused-bits-of-jquery/"&gt;&lt;b&gt;Commonly Confused Bits Of jQuery&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Andy Croxall clears up some of the confusions about jQuery functions, methods and syntactical peculiarities that appear similar but differ in some ways.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.web-delicious.com/jquery-plugins-demo/"&gt;&lt;b&gt;Web Delicious jQuery Plugins&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A nice collection of jQuery pligins, including date picker, checkbox tree, context menu, scroll tab, and calendar.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Opinions&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://elegantcode.com/2010/10/27/laborers-versus-professionals/"&gt;&lt;b&gt;Laborers versus Professionals&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Jan Van Ryswyck offers a frank look at typical corporate application development practices (fear-driven development!).&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Software&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://diffuse.sourceforge.net/index.html"&gt;&lt;b&gt;Diffuse&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Tool for comparing and merging text files.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.diphso.com/FotoMix.html"&gt;&lt;b&gt;FotoMix&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Allows you to crop, resize, rotate, mix and manipulate different pictures,&lt;br /&gt;
to create a wide variety of images.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://videoconverter.hamstersoft.com/us/"&gt;&lt;b&gt;Hamster Free Video Converter&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Converts video and audio files between various formats.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.freemake.com/free_video_converter/"&gt;&lt;b&gt;Free Video Converter&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Converts video between formats (AVI, MP4, WMV, MKV, SWF, 3GP, MPEG), creates custom presets, converts to devices, rips &amp;amp; burns DVDs, and uploads videos to YouTub.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://java.decompiler.free.fr/?q=jdgui"&gt;&lt;b&gt;JD-GUI&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Java decompiler.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.easexp.com/xsearch/"&gt;&lt;b&gt;xSearch&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A free search tool that offers more features than Windows Search, including searches for special words in files (any of the words, all of the words, exact phrase, without the words, etc), search for hexadecimal values, search for words in Unicode or UTF-8 format, and more. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cpuid.com/softwares/cpu-z.html"&gt;&lt;b&gt;CPU-Z&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Displays information about the main devices of your computer including CPU, graphics card, motherboard, memory, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://arje.net/rasterbator"&gt;&lt;b&gt;Rasterbator&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Creates rasterized versions of images, which can be printed and assembled into enormous (or smaller, if you prefer) posters.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Web tools&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://gmx.com/"&gt;&lt;b&gt;GMX&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Pretty decent web-based email.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crimemapping.com/"&gt;&lt;b&gt;Crime Mapping&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Shows recent crime activity in your neighborhood.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://taxes.kareemshaya.com/"&gt;&lt;b&gt;Your Tax Receipt&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Explains how your tax dollars are allocated between different government program.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://glyde.com/"&gt;&lt;b&gt;Glyde&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Allows you to buy and sell electronic games, DVDs, CDs, and books.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.volunteerspot.com/"&gt;&lt;b&gt;VolunteerSpot&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Free online sign up sheets and volunteer scheduling tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://speckyboy.com/2010/07/25/the-most-powerful-and-feature-rich-web-based-code-editors-ides/"&gt;&lt;b&gt;The Most Powerful and Feature Rich Web-Based Code Editors (IDEs)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A collection of web-based IDEs for various languages, including JavaScript, CSS, ASP.NET, PHP, and more.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Web development&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.sitepoint.com/2010/09/28/the-footers-the-menu/"&gt;&lt;b&gt;The Footer’s the Menu&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
James Edwards suggests ways to address usability and accessibility problems with drop-down and fly-out menus.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-858907749708926623?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/zFyYIPzBkrk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/858907749708926623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=858907749708926623" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/858907749708926623?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/858907749708926623?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/zFyYIPzBkrk/technobrief-12.html" title="Technobrief #12" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/11/technobrief-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08NSXo5eip7ImA9Wx5aFk0.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-7239046281005080737</id><published>2010-11-09T19:39:00.000-08:00</published><updated>2010-11-12T14:44:58.422-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T14:44:58.422-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computers" /><title>Windows Live Essentials 2011 error [SOLVED]</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Why can't I install Photo Gallery and Movie Maker?&lt;/div&gt;This is what an installation error should not look like:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TNoSzM9Ek6I/AAAAAAAAAn8/I_OfMyKZ5vg/s1600/WindowsLiveError.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="334" width="400" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TNoSzM9Ek6I/AAAAAAAAAn8/I_OfMyKZ5vg/s400/WindowsLiveError.jpg"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;Two hours of frustration, searching the web and support sites for possible hints, following any remotely close suggestions, and the only thing I get is:&lt;br /&gt;
&lt;pre class="code"&gt;An unknown error occurred.
Error: 0x80096005
Source: D3DX9&lt;/pre&gt;Thank your Microsoft, kids!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE&lt;/b&gt;: Okay, after getting a number of hints from troubleshooting posts, I was able to fix the problem. It looks like my system missed the original DirectX 9 DLL (&lt;span class="code"&gt;D3DX9.DLL&lt;/span&gt;). I don't know why it's missing. Maybe some program removed it when it was not supposed to (I did not see any errors related to DirectX 9, though). So, I just made copies of the latest version of the DirectX 9 DLL (&lt;span class="code"&gt;D3DX9_&lt;i&gt;XX&lt;/I&gt;.DLL&lt;/span&gt;) in the &lt;span class="code"&gt;System32&lt;/span&gt; and &lt;span class="code"&gt;SysWow64&lt;/span&gt; folders and renamed the copies to &lt;span class="code"&gt;D3DX9.DLL&lt;/span&gt;. Problem solved. Hope it helps someone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-7239046281005080737?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/cVXdz_I4LMA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/7239046281005080737/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=7239046281005080737" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7239046281005080737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7239046281005080737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/cVXdz_I4LMA/windows-live-essentials-2011-error.html" title="Windows Live Essentials 2011 error [SOLVED]" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_J6q1OqNOB0E/TNoSzM9Ek6I/AAAAAAAAAn8/I_OfMyKZ5vg/s72-c/WindowsLiveError.jpg" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/11/windows-live-essentials-2011-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GRHs9fSp7ImA9Wx9QE04.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-3030450997090836878</id><published>2010-10-27T23:43:00.000-07:00</published><updated>2010-12-25T19:58:45.565-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-25T19:58:45.565-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web tools" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>Free web site builders: Weebly vs. Yola</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Pros and cons of using Weebly and Yola free web site builders.&lt;/div&gt;If you need a &lt;b&gt;simple web site&lt;/b&gt;, a wide range of providers can offer you a capability to build and &lt;a href="http://en.wikipedia.org/wiki/List_of_free_web_hosting_services"&gt;host your site for free&lt;/a&gt;, assuming that you can live within their limitations. The most common limitation is &lt;b&gt;banner advertisements&lt;/b&gt; which will be sprinkled across your web pages. &lt;a href="http://en.wikipedia.org/wiki/Web_banner"&gt;Banner ads&lt;/a&gt; may not be a problem for some, but they often make you site look amateurish. If you want a more professionally looking site with no banner ads, your &lt;b&gt;free web hosting&lt;/b&gt; options are limited to:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.wix.com/"&gt;&lt;b&gt;Wix&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yola.com/"&gt;&lt;b&gt;Yola&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.weebly.com"&gt;&lt;b&gt;Weebly&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;I have checked these sites and used two of them to establish web presence for some friends (small businesses owners). Here is a brief summary of my experience (note: I describe the features of free hosting; all companies provide premium -- paid -- hosting with fewer limitations).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.wix.com/"&gt;&lt;b&gt;Wix&lt;/b&gt;&lt;/a&gt; looks &lt;b&gt;slicker&lt;/b&gt; than the other two, but it produces web pages that use &lt;a href="http://en.wikipedia.org/wiki/Adobe_Flash"&gt;Adobe Flash&lt;/a&gt; technology instead of more common (and expected) &lt;a href="http://en.wikipedia.org/wiki/Html"&gt;HTML&lt;/a&gt;. Now that &lt;a href="http://www.yourseoplan.com/google-flash/" title="Does Google Index Flash?"&gt;Google can index Flash&lt;/a&gt;-based pages this may not be a big deal, but being mostly an HTML type of developer, I can't bring myself to embrace Flash as a web page medium. Call me old-fashioned or biased, but I think that for simple web pages, HTML is more appropriate than Flash.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.yola.com"&gt;&lt;b&gt;Yola&lt;/b&gt;&lt;/a&gt; (formerly, Synthasite) and &lt;a href="http://www.weebly.com"&gt;&lt;b&gt;Weebly&lt;/b&gt;&lt;/a&gt; are very &lt;b&gt;similar&lt;/b&gt;. They give you a web site builder to create web pages based on available templates (some templates are free, some are not). You pick a template (you can change the template at any time), then you add elements (such as two-column layout, heading, text, picture, hyperlink) to the page layout via available widgets. Widgets allow you to customize the page elements, but customization options are often limiting. If you need to add an element that does not have a corresponding widget (such as a table), you can use an HTML widget that lets you enter any HTML code snippet.&lt;br /&gt;
&lt;br /&gt;
Once your web site is ready, you publish it to a subdomain under yolasite.com or weebly.com (e.g. &lt;i&gt;mycompany.yolasite.com&lt;/i&gt; or &lt;i&gt;mycompany.weebly.com&lt;/i&gt;), or you can use a custom domain (e.g. &lt;i&gt;mycompany.com&lt;/i&gt;), which you can purchase directly from Yola or Weebly (for a slightly higher fee), or from any domain registrar, such as &lt;a href="http://godaddy.com"&gt;GoDaddy&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Yola and Weebly add their company logos to page footers, but the logos are rather unobtrusive.&lt;br /&gt;
&lt;br /&gt;
Here is a list of &lt;b&gt;problems&lt;/b&gt; I encountered when I worked with Yola and Weebly:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;strike&gt;&lt;b&gt;Yola&lt;/b&gt;: Web site builder &lt;b&gt;requires Firefox&lt;/b&gt; (it did not work for me in Chrome).&lt;/strike&gt; (This seems to have been fixed.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Yola&lt;/b&gt;: &lt;b&gt;CSS customization&lt;/b&gt; is &lt;a href="http://forum.yola.com/yola/topics/custom_css" title="Custom CSS"&gt;tricky&lt;/a&gt; (there is no easy way to define common styles, such as fonts, etc).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: Cannot &lt;b&gt;paste formatted text&lt;/b&gt; (say you paste text copied from a web page); it messes up formatting and does not let you correct it (the only way is to delete the element and recreate it).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: Customization of a &lt;b&gt;window title&lt;/b&gt; is somewhat limited (you cannot define an arbitrary title for a page title).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: Cannot &lt;b&gt;reference&lt;/b&gt; already &lt;b&gt;uploaded images&lt;/b&gt; (e.g. you can upload an image and reference it on one page, but how do you reference it on another page?).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: Some features of the resulting site work &lt;b&gt;only in Internet Explorer&lt;/b&gt; (e.g. ALT properties of IMG elements only work in IE).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: There is no option to &lt;b&gt;preview changes&lt;/b&gt; before publish the site.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Weebly&lt;/b&gt;: &lt;b&gt;Customer support&lt;/b&gt; is sporadic at best (I got a response to one out of four questions I submitted).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Both&lt;/b&gt;: Cannot specify &lt;b&gt;title&lt;/b&gt; (tooltip) for hyperlinks (looks bad for image URLs).&lt;/li&gt;
&lt;/ul&gt;The &lt;b&gt;best&lt;/b&gt; things about &lt;b&gt;Yola&lt;/b&gt; are vibrant &lt;a href="http://forum.yola.com/yola"&gt;&lt;b&gt;user community&lt;/b&gt;&lt;/a&gt; and customer &lt;b&gt;support&lt;/b&gt;. I raised several issues with Yola's customer support and got prompt responses from Yola's representatives. All my issues were resolved. I can say that Yola's customer support rivals (well, it's actually better than) customer support of most big names in software industry. I also found good recommendations at Yola's &lt;a href="http://forum.yola.com/yola"&gt;user forum&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;major limitation&lt;/b&gt; of both sites is their page &lt;b&gt;templates&lt;/b&gt;. Although, they offer dozens of free templates, most of them look like they were designed in mid-90's for a high school project. I found one relatively decent template at Weebly (which I used for &lt;a href="http://www.autovet.biz/" target="_blank"&gt;one site&lt;/a&gt;), but I had even less luck with Yola (I ended up building one site at Yola, but it's not something I would be proud to show).&lt;br /&gt;
&lt;br /&gt;
If you need a simple and unassuming web site, give Weebly or Yola a try. They could be so much better, but even with current limitations, you can use either service to build online presence for a small business, create a personal or family site, and other simple applications.&lt;br /&gt;
&lt;br /&gt;
If you can &lt;b&gt;recommend another alternative&lt;/b&gt; (based on personal experience), please &lt;b&gt;leave a comment&lt;/b&gt; (just make sure that this alternative does not use banner ads and supports other features offered by Yola and Weebly: custom domains, templates, site builder, custom CSS, HTML editing).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE (Dec 25, 2010)&lt;/b&gt;: I recently published &lt;a href="http://www.harborseniorcare.com" target="_blank"&gt;another site&lt;/a&gt; on Weebly, and while working on it, I appreciated the feature that let me easily find and incorporate free stock photos into the  pages. Being able to select a different photo in the page header for each page was especially handy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-3030450997090836878?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/MBQzTllNp6Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/3030450997090836878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=3030450997090836878" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3030450997090836878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3030450997090836878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/MBQzTllNp6Q/review-weebly-vs-yola.html" title="Free web site builders: Weebly vs. Yola" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>13</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/review-weebly-vs-yola.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHRX87cSp7ImA9Wx9RGEU.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-2440037695204229796</id><published>2010-10-19T15:48:00.000-07:00</published><updated>2010-12-20T13:37:14.109-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-20T13:37:14.109-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>How to fix a hanging uninstaller</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: How to fix a hung uninstaller issue due to inclusion of Visual C or MFC runtime merge module in the MSI package.&lt;/div&gt;I have hassled with this problem for a long time and just recently figured out how to fix it, so I'm posting the solution in hope that it will help someone else.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Symptoms&lt;/b&gt;&lt;br /&gt;
You create an MSI package using &lt;a href="http://msdn.microsoft.com/en-us/library/2kt85ked.aspx" title="Visual Studio Installer Deployment"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html" title="What about that WiX?"&gt;WiX Toolset&lt;/a&gt;, or whatever. The MSI package works fine during initial installations, repairs, and upgrades, but it takes really long time to uninstall. It may take two minutes, five minutes, 15 minutes, or longer, when it should've taken a few seconds. In my last case, after 20 minutes of waiting I gave up and killed the &lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/msiexec.mspx"&gt;MSIEXEC&lt;/a&gt; process (this was during testing, so no harm was done).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Troubleshooting&lt;/b&gt;&lt;br /&gt;
I suspect that an uninstaller can (appear to) hang for different reasons. If your setup package includes merge modules for any version of Visual C or MFC runtime, such as &lt;span class="code"&gt;Microsoft_VC80_CRT_x86.msm&lt;/span&gt;, &lt;span class="code"&gt;Microsoft_VC80_MFC_x86.msm&lt;/span&gt;, &lt;span class="code"&gt;Microsoft_VC90_CRT_x86.msm&lt;/span&gt;, &lt;span class="code"&gt;Microsoft_VC90_MFC_x86.msm&lt;/span&gt;, etc, they can cause the problem. To verify, build your MSI package without these merge modules and see if the uninstaller runs faster. If it does not, I'm sorry, I can't help you, but if your uninstaller runs significantly faster, you should be able to correct the problem. Another troubleshooting step could be running uninstaller for the MSI containing the merge modules with logging enabled and checking the log entries. The command line for this should be similar to:&lt;br /&gt;
&lt;pre class="code"&gt;msiexec /uninstall "PATH TO YOUR MSI FILE" /l*vx "PATH TO OUTPUT/LOG FILE"&lt;/pre&gt;In my log file, when the installer appeared hanging, I saw a repetition of the same pattern of log messages that looked like these:&lt;br /&gt;
&lt;pre class="brush: text"&gt;Action start 13:07:24: SxsUninstallCA.
1: sxsdelca tried opening key w/o wow64key  2: Software\Microsoft\Windows\CurrentVersion\SideBySide\PatchedComponents 3: 380 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (235) of type 790531 for thread 200
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (236) of type 790531 for thread 200
1: sxsdelca tried opening wow64key  2: Software\Microsoft\Windows\CurrentVersion\SideBySide\PatchedComponents 3: 404 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (236) of type 790531 for thread 200
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (237) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 1158 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (237) of type 790531 for thread 200
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (238) of type 790531 for thread 200
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (239) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 1186 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (239) of type 790531 for thread 200
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (240) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 732 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (240) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 748 4: 0
MSI (s) (E8!C8) [13:07:24:507]: Creating MSIHANDLE (241) of type 790531 for thread 200
1: scavenge 2: {121634B0-2F4B-11D3-ADA3-00C04F52DD52} 3: {98CB24AD-52FB-DB5F-C01F-C8B3B9A1E18E} 4: {AEA1383C-9A90-406A-8CAE-718170D9CBDA} 5: -1
MSI (s) (E8!C8) [13:07:24:507]: Closing MSIHANDLE (241) of type 790531 for thread 200
...
...
...
MSI (s) (E8!C8) [13:16:37:663]: Creating MSIHANDLE (180783) of type 790531 for thread 200
1: scavenge 2: {EDDF99D9-9FE3-4871-A7DB-D1522C51EE9A} 3: {42CDEC6E-1259-F078-C01F-C8B3B9A1E18E} 4: {AEA1383C-9A90-406A-8CAE-718170D9CBDA} 5: -1
MSI (s) (E8!C8) [13:16:37:663]: Closing MSIHANDLE (180783) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 748 4: 0
MSI (s) (E8!C8) [13:16:37:663]: Creating MSIHANDLE (180784) of type 790531 for thread 200
1: scavenge 2: {0EFDF2F9-836D-4EB7-A32D-038BD3F1FB2A} 3: {42CDEC6E-1259-F078-C01F-C8B3B9A1E18E} 4: {AEA1383C-9A90-406A-8CAE-718170D9CBDA} 5: -1
MSI (s) (E8!C8) [13:16:37:663]: Closing MSIHANDLE (180784) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 748 4: 0
MSI (s) (E8!C8) [13:16:37:663]: Creating MSIHANDLE (180785) of type 790531 for thread 200
1: scavenge 2: {4D7B7CF9-E7EA-4404-B148-0C8B8A520E35} 3: {42CDEC6E-1259-F078-C01F-C8B3B9A1E18E} 4: {AEA1383C-9A90-406A-8CAE-718170D9CBDA} 5: -1
MSI (s) (E8!C8) [13:16:37:663]: Closing MSIHANDLE (180785) of type 790531 for thread 200
1: sxsdelca 2: traceop 3: 748 4: 0&lt;/pre&gt;&lt;b&gt;Reason&lt;/b&gt;&lt;br /&gt;
I'm not quite certain why this is happening, but apparently the problem only occurs under certain conditions, i.e. the same MSI package that includes Visual C or MFC runtime merge modules may work fine on some systems and hang on others. For more information, check the &lt;a href="#seealso" title="Scroll to reference"&gt;&lt;i&gt;See also&lt;/i&gt; section&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution&lt;/b&gt;&lt;br /&gt;
This may not be the most elegant solution, but in the absence of alternatives, to fix the problem, do not process Visual C and MFC runtime components during uninstallation. In the MSI terms, you need to delete the &lt;span class="code"&gt;SxsUninstallCA&lt;/span&gt; action from the &lt;span class="code"&gt;CustomAction&lt;/span&gt; table in the MSI package. &lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="2" cellspacing="3" border="0" align="center" style="border:1px dotted black;font-family:Arial Narrow;"&gt;&lt;tr style="background:#336699;color:white;font-weight:bold;"&gt;&lt;td&gt;Action&lt;/td&gt;&lt;td&gt;Type&lt;/td&gt;&lt;td&gt;Source&lt;/td&gt;&lt;td&gt;Target&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;SxsUninstallCA&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;SxsUninstallCA&lt;/td&gt;&lt;td&gt;CustomAction_SxsMsmCleanup&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
You can delete this record manually using &lt;a href="http://msdn.microsoft.com/en-us/library/aa370557%28VS.85%29.aspx"&gt;Orca&lt;/a&gt;, but it would be more convenient to automate the operation, which you can do with the help of the &lt;a title="Examples of Database Queries Using SQL and Script" href="http://msdn2.microsoft.com/en-us/library/aa368562.aspx"&gt;&lt;span class="code"&gt;WiRunSql.vbs&lt;/span&gt;&lt;/a&gt; script. The script comes with the Windows &lt;a title="Windows SDK Components for Windows Installer Developers" href="http://msdn2.microsoft.com/en-us/library/aa370834.aspx"&gt;Installer Software Development Kit (SDK)&lt;/a&gt;. Once you install the SDK, you can find the &lt;span class="code"&gt;WiRunSql.vbs&lt;/span&gt; file in the location similar to:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="code"&gt;C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\msi\scripts﻿\WiRunSQL.vbs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You can copy this file to your project or solution folder and then execute it as a post-build step. For example, if you keep the script in the solution folder, your post-build command in a &lt;a href="http://wix.sourceforge.net/manual-wix3/votive_project_templates.htm" title="WiX: Project Templates"&gt;WiX project&lt;/a&gt; may look like this (make sure the command appears on one line):&lt;br /&gt;
&lt;br /&gt;
&lt;span class="code"&gt;cscript //nologo "$(SolutionDir)WiRunSql.vbs" "$(TargetPath)" "DELETE FROM CustomAction WHERE CustomAction.Action='SxsUninstallCA'"﻿&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;a name="seealso"&gt;&lt;/a&gt;See also:&lt;br /&gt;
&lt;a href="http://groups.google.com/group/microsoft.public.platformsdk.msi/browse_thread/thread/e61c67741bd60bc1/e57ca5e226c4a7f0?pli=1"&gt;WinForm app Uninstall involving VC++ runtime libs takes a long tim[e]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-2440037695204229796?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/phaHb6mBvGE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/2440037695204229796/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=2440037695204229796" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/2440037695204229796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/2440037695204229796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/phaHb6mBvGE/how-to-fix-hanging-uninstaller.html" title="How to fix a hanging uninstaller" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/how-to-fix-hanging-uninstaller.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEHRHg8fyp7ImA9WhZXFUg.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-8921034083335322009</id><published>2010-10-18T14:40:00.000-07:00</published><updated>2011-05-04T16:43:55.677-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-04T16:43:55.677-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>WiX how-tos and missing links</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Links to articles explaining how to accomplish different tasks in WiX and other helpful information (post #3 of a &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html#series"&gt;three-part series&lt;/a&gt;).&lt;/div&gt;Here is a list of articles covering topics that I either did not find -- or found implemented better than described -- in most popular &lt;a href="http://alekdavis.blogspot.com/2010/10/learning-wix-from-ground-up.html#tutorials"&gt;WiX tutorials and wikis&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;a name="SkipLicense"&gt;&lt;/a&gt;&lt;a href="http://odd-staff.blogspot.com/2010/05/wix-how-to-skip-licenseagreementdlg.html" title="WiX: How to skip LicenseAgreementDlg - more elegant solution"&gt;How to: Exclude &lt;b&gt;license agreement&lt;/b&gt; dialog from the dialog sequence&lt;/a&gt;&lt;br /&gt;
&lt;a name="WindowsService"&gt;&lt;/a&gt;&lt;a href="http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx" title="Installing and starting a Windows Service using WiX"&gt;How to: Install a &lt;b&gt;Windows service&lt;/b&gt;&lt;/a&gt; (see also &lt;a href="http://stackoverflow.com/questions/1942039/how-to-install-and-start-a-windows-service-using-wix" title="How to install and start a Windows Service using WiX"&gt;this&lt;/a&gt; and &lt;a href="http://www.dalun.com/wix/06.10.2005.htm" title="How to Reset Windows Service with Windows Installer Xml(WiX)"&gt;that&lt;/a&gt;)&lt;br /&gt;
&lt;a name="32bit64bit"&gt;&lt;/a&gt;&lt;a href="http://insomniacgeek.com/code/how-to-target-32bit-and-64bit-a-net-applications-with-wix-and-separate-msi-packages/" title="How to target 32bit and 64bit a .NET applications with WiX and separate MSI packages"&gt;How to: Build &lt;b&gt;32-bit&lt;/b&gt; and &lt;b&gt;64-bit&lt;/b&gt; MSI packages&lt;/a&gt; (see &lt;a href="http://stackoverflow.com/questions/1838009/platform-identification-in-wix-3-0" title="Platform Identification in WIX 3.0"&gt;this thread&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/b/astebner/archive/2007/08/09/4317654.aspx" title="Example WiX-based setup that can be used to build both 32-bit and 64-bit MSIs"&gt;that one&lt;/a&gt;, too)&lt;br /&gt;
&lt;a name="Shortcut"&gt;&lt;/a&gt;&lt;a href="http://blog.bittercoder.com/PermaLink,guid,367c1e6a-39c8-4103-8bde-63061b48b1d7.aspx" title="(Long) Shortcuts"&gt;How to: Add a &lt;b&gt;shortcut&lt;/b&gt;&lt;/a&gt; (without an icon [.ICO] file)&lt;br /&gt;
&lt;a name="ShortcutCheckbox"&gt;&lt;/a&gt;&lt;a href="http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/" title="How to add a user interface, optionally create a shortcut on the desktop, and conditionally launch your app after installation"&gt;How to: Add a &lt;b&gt;checkbox&lt;/b&gt; to conditionally install a desktop &lt;b&gt;shortcut&lt;/b&gt;&lt;/a&gt; (via a check box)&lt;br /&gt;
&lt;a name="ShortcutNoRegistry"&gt;&lt;/a&gt;&lt;a href="http://pradeepc.net/blog/2009/11/04/adding-a-desktop-shortcut-using-wix" title="Adding a desktop shortcut using Wix"&gt;How to: Add a &lt;b&gt;desktop shortcut&lt;/b&gt;&lt;/a&gt; (without a registry key)&lt;br /&gt;
&lt;a name="SortcutsForAllUsers"&gt;&lt;/a&gt;&lt;a href="How to install program shortcuts for all users?" title="How to install program shortcuts for all users?"&gt;How to: Create shortcuts for &lt;b&gt;ALL USERS&lt;/b&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a name="CustomActionOnUninstall"&gt;&lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/320921/how-to-add-a-wix-custom-action-that-happens-only-on-uninstall-via-msi" title="How to add a WIX custom action that happens only on uninstall (via MSI)?"&gt;How to: &lt;b&gt;Execute&lt;/b&gt; custom action (CA) &lt;b&gt;on uninstall&lt;/b&gt; only&lt;/a&gt;&lt;br /&gt;
&lt;a name="UninstallerShortcut"&gt;&lt;/a&gt;&lt;a href="http://robmensching.com/blog/posts/2007/4/27/How-to-create-an-uninstall-shortcut-and-pass-all-the" title="How to create an uninstall shortcut (and pass all the ICE validation)"&gt;How to: Create an &lt;b&gt;uninstall shortcut&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a name="LaunchProgramOnExit"&gt;&lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/2325459/executing-a-custom-action-that-requires-elevation-after-install" title="Executing a custom action that requires elevation after install"&gt;How to: &lt;b&gt;Launch program&lt;/b&gt; after installation&lt;/a&gt;&lt;br /&gt;
&lt;a name="CustomCheckboxOnExit"&gt;&lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/471424/wix-tricks-and-tips#1801438" title="WiX tips and tricks: Add a checkbox to the exit dialog to launch the app, or the helpfile."&gt;How to: Add a neat &lt;b&gt;checkbox to the exit&lt;/b&gt; dialog for launching a program or help file&lt;/a&gt;&lt;br /&gt;
&lt;a name="Localization"&gt;&lt;/a&gt;&lt;a href="http://www.codeproject.com/KB/install/WixWindowsInstallerDemo1.aspx" title="Creating a Localized Windows Installer &amp;amp; Bootstrapper: Part 1"&gt;How to: Create a &lt;b&gt;localized&lt;/b&gt; installer and bootstrapper&lt;/a&gt; (see also parts &lt;a href="http://www.codeproject.com/KB/install/WixWindowsInstallerDemo2.aspx" title="Part 2: Defining Conditions"&gt;2&lt;/a&gt;, &lt;a href="http://www.codeproject.com/KB/install/WixWindowsInstallerDemo3.aspx" title="Part 3: Localization"&gt;3&lt;/a&gt;, and &lt;a href="http://www.codeproject.com/KB/install/WixWindowsInstallerDemo4.aspx" title="Part 4: Provision Prerequisites"&gt;4&lt;/a&gt;)&lt;br /&gt;
&lt;a name="XmlFiles"&gt;&lt;/a&gt;&lt;a href="http://www.rrreese.com/Article/Show/WiX%20XML" title="How to use WiX to congiure XML files during installation"&gt;How to: Modify &lt;b&gt;XML files&lt;/b&gt; (e.g. web.config) during installation&lt;/a&gt;&lt;br /&gt;
&lt;a name="CustomActions"&gt;&lt;/a&gt;&lt;a href="http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx" title="From MSI to WiX, Part 5 - Custom actions: Introduction"&gt;How to: Implement &lt;b&gt;custom actions (CAs)&lt;/b&gt;&lt;/a&gt; (excellent explanation of different CA types)&lt;br /&gt;
&lt;a name="MajorUpgrade"&gt;&lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/114165/how-to-implement-wix-installer-upgrade" title="How to implement WiX installer upgrade?"&gt;How to: Implement a &lt;b&gt;major upgrade&lt;/b&gt;&lt;/a&gt; (see &lt;a href="http://stackoverflow.com/questions/114165/how-to-implement-wix-installer-upgrade#214650"&gt;Brian Gillespie's comment&lt;/a&gt; for optimization ideas)&lt;br /&gt;
&lt;a name="WindowsServiceUpgrade"&gt;&lt;/a&gt;&lt;a href="http://stackoverflow.com/questions/2228855/wix-major-upgrade-how-do-i-prevent-windows-service-reinstallation" title="Wix Major Upgrade: how do I prevent Windows service reinstallation?"&gt;How to: &lt;b&gt;Preserve original Windows service&lt;/b&gt; configuration on major upgrade&lt;/a&gt;&lt;br /&gt;
&lt;a name="WebSite"&gt;&lt;/a&gt;&lt;a href="http://ranjithk.com/2009/12/17/automating-web-deployment-using-windows-installer-xml-wix/" title="Automating Web Deployment using Windows Installer XML (WIX)"&gt;How to: Deploy a &lt;b&gt;web site&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.technet.com/b/alexshev/archive/2008/02/09/from-msi-to-wix-part-2.aspx" title="From MSI to WiX, Part 2 - ARP support"&gt;How to: Save path to &lt;b&gt;installation folder&lt;/b&gt; in the &lt;b&gt;registry&lt;/b&gt;&lt;/a&gt; (search for ARPINSTALLLOCATION; see also &lt;a href="http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern" title="The WiX toolset's &amp;quot;Remember Property&amp;quot; pattern"&gt;this post&lt;/a&gt; and &lt;a href="http://robmensching.com/blog/posts/2011/1/14/ARPINSTALLLOCATION-and-how-to-set-it-with-the-WiX-toolset" title="ARPINSTALLLOCATION and how to set it with the WiX toolset"&gt;that one&lt;/a&gt;)&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/5479790/wix-how-to-override-c-program-files-x86-on-x64-machine-in-wixui-advanced-se" title="WiX: How to override 'C:\Program Files (x86)' on x64 machine in WixUI_Advanced sequence?"&gt;How to: Override (wrong) &lt;b&gt;Program Files (x86)&lt;/b&gt; on x64 machines in &lt;b&gt;WixUI_Advanced&lt;/b&gt; sequence&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/55964/make-wix-installation-set-upgrade-to-same-folder" title="Make wix installation set upgrade to same folder"&gt;How to: &lt;b&gt;Upgrade&lt;/b&gt; application in the &lt;b&gt;original installation folder&lt;/b&gt;&lt;/a&gt; ()&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/200743/wix-script-with-only-welcome-and-completed-screens" title="WiX script with only Welcome and Completed screens"&gt;How to: Make setup &lt;b&gt;UI sequence&lt;/b&gt; show only two (&lt;b&gt;Welcome&lt;/b&gt; and &lt;b&gt;Final&lt;/b&gt;) dialog boxes&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I also found the following information very insightful (some related to MSI, other about WiX):&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/1641094/in-wix-files-what-does-name-sourcedir-refer-to" title="In WiX files, what does Name=“SourceDir” refer to?"&gt;Description of &lt;b&gt;TARGETDIR&lt;/b&gt; and &lt;b&gt;SourceDir&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://odd-staff.blogspot.com/2010/05/wix-meaning-of-mergeredirectfolder.html" title="WiX: The meaning of the MergeRedirectFolder variable"&gt;Explanation of the &lt;b&gt;MergeRedirectFolder&lt;/b&gt; variable&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.advancedinstaller.com/user-guide/package-types.html" title="Advanced Installer Package Types"&gt;Differences between &lt;b&gt;32-bit&lt;/b&gt;, &lt;b&gt;64-bit&lt;/b&gt;, and &lt;b&gt;mixed MSI&lt;/b&gt; packages&lt;/a&gt; (includes folder locations, package compatibility and other info)&lt;br /&gt;
&lt;a href="http://csi-windows.com/blog/all/27-csi-news-general/263-how-windows-installer-processes-packages-on-64-bit-windows"&gt;How Windows Installer Processes Packages on &lt;b&gt;64-bit&lt;/b&gt; Windows&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.rrreese.com/Article/Show/A%20gentle%20introduction%20to%20WiX" title="A gentle introduction to the Windows Installer XML toolset"&gt;List of &lt;b&gt;system folders&lt;/b&gt; defined by the Windows Installer engine&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.technet.com/b/alexshev/archive/2008/02/09/from-msi-to-wix-part-2.aspx" title="From MSI to WiX, Part 2 - ARP support"&gt;&lt;b&gt;Add/Remove Programs&lt;/b&gt; (ARP) support&lt;/a&gt; (good explanation and illustration of ARP properties)&lt;br /&gt;
&lt;br /&gt;
I will keep updating these lists updated when I find more useful articles.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://www.dalun.com/wix/"&gt;WiX - Windows Installer XML&lt;/a&gt; (more how-tos)&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/471424/wix-tricks-and-tips"&gt;WiX tricks and tips&lt;/a&gt; (includes a few how-tos)&lt;br /&gt;
&lt;a href="http://www.codeproject.com/KB/install/WiXTricks.aspx"&gt;WiX Tricks&lt;/a&gt; (several good suggestions)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-8921034083335322009?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/BfPL033EO8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/8921034083335322009/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=8921034083335322009" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8921034083335322009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8921034083335322009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/BfPL033EO8Q/wix-how-tos-and-missing-links.html" title="WiX how-tos and missing links" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/wix-how-tos-and-missing-links.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUHSHwycSp7ImA9WhdVFUs.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-4326033744878864930</id><published>2010-10-12T14:20:00.000-07:00</published><updated>2011-09-20T17:00:39.299-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-20T17:00:39.299-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Learning WiX from ground up</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Reference guide for beginners (post #2 of a &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html#series"&gt;three-part series&lt;/a&gt;).&lt;/div&gt;So you decided to create your first setup package using Window Installer XML (WiX). Where do you start? And how much do you need to know about WiX and Windows Installer (MSI) to build a working deployment package?&lt;br /&gt;
&lt;br /&gt;
The answer to the second question is: it depends. Well... sort of. Before you begin, you definitely need to know the &lt;b&gt;fundamentals&lt;/b&gt; of the Windows Installer (&lt;b&gt;MSI&lt;/b&gt;) technology, such as:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The overall structure of an MSI package (MSI database)&lt;/li&gt;
&lt;li&gt;The difference between packages, features, components, and deployment items (files, registry keys, shortcuts, etc)&lt;/li&gt;
&lt;li&gt;Custom actions (CAs) and how they are used&lt;/li&gt;
&lt;li&gt;Upgrade types (minor vs. major upgrade)&lt;/li&gt;
&lt;li&gt;Merge modules&lt;/li&gt;
&lt;/ul&gt;You don't need the in-depth knowledge, but at the very least, you need to understand the &lt;b&gt;terminology&lt;/b&gt; (check the &lt;a href="http://en.wikipedia.org/wiki/Windows_Installer" title="Wikipedia: Windows Installer"&gt;Wikipedia overview&lt;/a&gt; and &lt;a href="http://www.dalun.com/wix/wix.htm"&gt;MSI Basics&lt;/a&gt;). You may need to learn more to implement such complex features as program shortcuts (yes, shortcuts are complex in Windows Installer), but you will be able to learn additional concepts as you go.&lt;br /&gt;
&lt;br /&gt;
To &lt;b&gt;get started&lt;/b&gt;, install the current version of WiX Toolset from:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://wix.codeplex.com/"&gt;&lt;b&gt;Wix Toolset Codeplex Distribution&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;You can download a beta version of the upcoming release or an older version of WiX Toolset from &lt;a href="http://wix.sourceforge.net/"&gt;SourceForge&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I assume that you will be using Visual Studio to develop setup programs. WiX Toolset includes a Visual Studio add-on, &lt;b&gt;Votive&lt;/b&gt;, that enables WiX integration with the Visual Studio IDE. After installing WiX Toolset, make sure that WiX project templates appear in the &lt;i&gt;New Project&lt;/i&gt; dialog box:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_J6q1OqNOB0E/TLOrXF52InI/AAAAAAAAAnQ/7ts853tdppU/s1600/WiX_NewProject.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="http://3.bp.blogspot.com/_J6q1OqNOB0E/TLOrXF52InI/AAAAAAAAAnQ/7ts853tdppU/s320/WiX_NewProject.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;At this point, you can create a WiX project, but when you open the auto-generated WiX source file, you'll realize that you have no idea what to do with it. This is where a &lt;b&gt;tutorial&lt;/b&gt; can help. &lt;br /&gt;
&lt;br /&gt;
The WiX Toolset's &lt;b&gt;help file&lt;/b&gt; is a good place to start (by default, the help file is installed to &lt;span class="code"&gt;C:\Program Files\Windows Installer XML v3\doc\wix.chm&lt;/span&gt;; you can find a shortcut to the help document under the WiX program group in the Start menu; the help file can be also viewed &lt;a href="http://wix.sourceforge.net/manual-wix3/main.htm"&gt;online&lt;/a&gt;). You don't need to read it all; the first few chapters and how-to articles give you a basic idea of what you need to do to get a functional setup project.&lt;br /&gt;
&lt;br /&gt;
To get more in-depth understanding of WiX, check out more advanced tutorials. The ones I found most helpful include:&lt;a name="tutorials"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tramontana.co.hu/wix/index.php"&gt;&lt;b&gt;WiX Tutorial&lt;/b&gt;&lt;/a&gt; by Gábor DEÁK JAHN, Tramontána (official WiX tutorial; a lot of good info, but can be overwhelming)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.merlinia.com/mdt/WiXTutorial.msl"&gt;&lt;b&gt;Yet Another WiX Tutorial&lt;/b&gt;&lt;/a&gt; by Rennie Petersen (addresses fewer topics, but in more depth)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.technet.com/b/alexshev/archive/2008/02/10/from-msi-to-wix.aspx"&gt;&lt;b&gt;From MSI to WiX&lt;/b&gt;&lt;/a&gt; by Alex Shevchuk (excellent information helping understand both MSI and WiX)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.scribd.com/doc/4106509/WiX-Tutorial"&gt;&lt;b&gt;WiX Tutorial&lt;/b&gt;&lt;/a&gt; by r0k0t (awkward format, but great info presented as lessons)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wixwiki.com/index.php"&gt;&lt;b&gt;WiX Wiki&lt;/b&gt;&lt;/a&gt; (I din't use it much, but noticed a few articles that could be helpful)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/471424/wix-tricks-and-tips"&gt;&lt;b&gt;WiX tricks and tips&lt;/b&gt;&lt;/a&gt; (wiki post at StackOverflow with many good suggestions)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/install/WixTutorial.aspx"&gt;&lt;b&gt;Creating an installer using Wix v3.0, Votive, and Visual Studio 2005/2008&lt;/b&gt;&lt;/a&gt; (simple demo; see also &lt;a href="http://www.codeproject.com/KB/install/WixTutorial2.aspx"&gt;&lt;b&gt;Part 2: the GUI&lt;/b&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;There is also a very insightful presentation by Jeffrey Sharp (with slides and video):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jeffreysharp.org/2010/10/13/setup-with-windows-installer-and-wix/"&gt;&lt;b&gt;Talk: Setup With Windows Installer and WiX&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;The following MSDN article by Ibrahim Hashimi is a bit out-of-date and has a slightly different focus (build automation), but it still offers a pretty decent overview of WiX:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163456.aspx"&gt;&lt;b&gt;Automate Releases With MSBuild And Windows Installer XML&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Nick Ramirez just published an excellent book that covers a lot of WiX and Windows Installer (MSI) topics (see &lt;a href="http://www.amazon.com/review/R2ILBMZVTSIQG7/"&gt;my Amazon review&lt;/a&gt;):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1849513724?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1849513724" title="Amazon associate link"&gt;&lt;b&gt;WiX: A Developer's Guide to Windows Installer XML&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;center&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=1849513724" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;
You can read the &lt;a href="https://www.packtpub.com/sites/default/files/3722-chapter-1-getting-started%20.pdf"&gt;&lt;i&gt;Getting Started&lt;/i&gt;&lt;/a&gt; and &lt;a href="http://www.packtpub.com/article/windows-installer-xml-wix-adding-user-interface"&gt;&lt;i&gt;Adding a User Interface&lt;/i&gt;&lt;/a&gt; chapters online.&lt;br /&gt;
&lt;br /&gt;
And here is a list of tools that you may want to check out:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://sharpsetup.eu/"&gt;&lt;b&gt;SharpSetup&lt;/b&gt;&lt;/a&gt; creates bootstrapper and GUI for your WiX installer in C# and WinForms.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/install/WixSharpArticle.aspx"&gt;&lt;b&gt;Wix# (WiXSharp)&lt;/b&gt;&lt;/a&gt; builds MSI packages or WiX source code from C# code.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://iswix.codeplex.com/"&gt;&lt;b&gt;IsWix&lt;/b&gt; (Industrial Strength Windows Installer XML)&lt;/a&gt; is a document editor that enables non-setup developers to collaborate with setup developers using WiX projects.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wixedit.sourceforge.net/"&gt;&lt;b&gt;WixEdit&lt;/b&gt;&lt;/a&gt; is an editor for XML source files for the Windows Installer XML (WiX) toolset to build MSI and MSM setup packages.&lt;/li&gt;
&lt;/ul&gt;
After you feel more comfortable with WiX basics (deploying files, etc), your next challenge will be implementing slightly less obvious operations (registering COM objects, creating shortcuts, using custom actions, etc) that are either not covered in the help file and popular tutorials or covered incompletely. In the &lt;a href="http://alekdavis.blogspot.com/2010/10/wix-how-tos-and-missing-links.html" title="WiX how-tos and missing links"&gt;next post&lt;/a&gt;, I will include the list of references to the &lt;b&gt;how-to&lt;/b&gt; articles that I found most helpful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-4326033744878864930?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/b7mK2eEu3u8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/4326033744878864930/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=4326033744878864930" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/4326033744878864930?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/4326033744878864930?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/b7mK2eEu3u8/learning-wix-from-ground-up.html" title="Learning WiX from ground up" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_J6q1OqNOB0E/TLOrXF52InI/AAAAAAAAAnQ/7ts853tdppU/s72-c/WiX_NewProject.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/learning-wix-from-ground-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHRX85eSp7ImA9Wx9RGEU.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-1871898581567642320</id><published>2010-10-08T22:20:00.000-07:00</published><updated>2010-12-20T13:37:14.121-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-20T13:37:14.121-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Introduction to WiX</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Answers to most likely questions from Windows Installer XML (WiX) novices (post #1 of a &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html#series"&gt;three-part series&lt;/a&gt;).&lt;/div&gt;Here is a list of questions I had a couple of weeks ago before &lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html"&gt;I started working with WiX&lt;/a&gt; (Windows Installer XML). I hope that answers to these questions will help other WiX novices.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is WiX?&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/WiX"&gt;WiX&lt;/a&gt; is a language (Windows Installer XML [eXtensible Markup &lt;b&gt;Language&lt;/b&gt;]), or more specifically, a Windows Installer-specific XML syntax. You can use WiX syntax to author XML source files for your setup project, from which you can then build Windows Installer (MSI) packages with the help of &lt;a href="http://wix.codeplex.com/"&gt;WiX Toolset&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is WiX Toolset?&lt;/b&gt;&lt;br /&gt;
WiX is distributed as a free (open-source) toolkit that includes several command-line tools (such as WiX compiler, linker, etc), documentation, and utilities. Once you create WiX source files defining your setup application (you can do it by hand in a text editor, such as Notepad), you can use WiX Toolset to compile these files into a Windows Installer (MSI) package.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Can I develop WiX projects in Visual Studio?&lt;/b&gt;&lt;br /&gt;
Yes, WiX Toolset's Visual Studio package, &lt;i&gt;&lt;a href="http://wix.sourceforge.net/votive.html"&gt;Votive&lt;/a&gt;&lt;/i&gt;, which is also free (and open-source), adds WiX-specific project templates to Visual Studio, so you can create and build WiX projects directly from Visual Studio. Votive also provides syntax highlighting and IntelliSense for WiX source files.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Which version of Votive do I need?&lt;/b&gt;&lt;br /&gt;
There are several versions of Votive (and WiX Toolset), each targeting specific versions of Visual Studio. At the time of writing, the latest version (v3.5 for Visual Studio 2010) was still in beta. The recommended version (v3.0) works with both Visual Studio 2008 and 2005. Earlier version(s) of the toolset target the earlier version(s) of Visual Studio.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How does Votive/WiX differ from Visual Studio Installer?&lt;/b&gt;&lt;br /&gt;
Visual Studio Installer (or &lt;a href="http://msdn.microsoft.com/en-us/library/wx3b589t.aspx"&gt;Setup and Deployment Project&lt;/a&gt; Template) allowed you to build setup packages via drag-and-drop activities and automation. It automatically detected dependencies for your application files, generated GUIDs for components and features, and did a few other things in the background, so you may have not even realized that they were happening. When working with WiX projects you must perform all these tasks by hand.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;So WiX is not as good as Visual Studio Installer, right?&lt;/b&gt;&lt;br /&gt;
Yes, and no. It's true that WiX requires more manual work. And it has a steep learning curve. But it's more flexible than Visual Studio Installer, it supports more features and customization, and gives you more control over the resulting setup package. And it produces a much cleaner MSI database.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Does WiX support all features of Windows Installer?&lt;/b&gt;&lt;br /&gt;
No, unfortunately not. WiX supports many common features of Windows Installer technology, but not all. The list of supported features includes (but is not limited to):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;32-bit, 64-bit, and mixed (32/64-bit) installers&lt;/li&gt;
&lt;li&gt;Creation of shortcuts and registry entries&lt;/li&gt;
&lt;li&gt;COM server registration&lt;/li&gt;
&lt;li&gt;Windows service registration&lt;/li&gt;
&lt;li&gt;Customization of setup dialog sequence (up to certain extent)&lt;/li&gt;
&lt;li&gt;Creation of web sites&lt;/li&gt;
&lt;li&gt;And much more&lt;/li&gt;
&lt;/ul&gt;If you wonder about WiX support of a particular feature, check the web for articles and posts on the topic of your interest and you're most likely to find whether WiX support it or not.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Can I use WiX to create a &lt;a href="http://blogs.msdn.com/b/chrsmith/archive/2005/05/06/the-way-it-really-is.aspx"&gt;bootstrapper&lt;/a&gt; program (setup.exe)?&lt;/b&gt;&lt;br /&gt;
No, WiX Toolset only allows you to build MSI and MSM (merge module) files.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What are other limitations of WiX?&lt;/b&gt;&lt;br /&gt;
See the &lt;a href="http://stackoverflow.com/questions/3961750/what-are-limitations-of-wix-and-wix-toolset" title="What are limitations of WiX and WiX Toolset?"&gt;answers posted on StackOverflow&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What are the differences between WiX project types?&lt;/b&gt;&lt;br /&gt;
In addition to regular installer projects, Votive allows you to build &lt;a href="http://msdn.microsoft.com/en-us/library/aa369820%28VS.85%29.aspx"&gt;merge modules&lt;/a&gt; and WiX libraries. Merge modules let you share installable components among different products. For example, if you want to deploy a common COM component/ActiveX control with different applications, you can encapsulates its installer in a merge module and than use this merge module with regular WiX installer projects (the merge module will be absorbed in each product's MSI package). WiX libraries allow you to share identical sections of XML code between the WiX source files (this is similar to using include files in C/C++ projects). &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What do I need to know before learning WiX?&lt;/b&gt;&lt;br /&gt;
In theory, you should understand Windows Installer (MSI) before you start learning WiX, but in practice you can learn both technologies concurrently. The abundant information available online can help you get started and achieve progress even if you have very limited understanding of Windows Installer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Where do I find support if I get stuck?&lt;/b&gt;&lt;br /&gt;
You can start at &lt;a href="http://stackoverflow.com/questions/tagged/wix"&gt;StackOverflow&lt;/a&gt; (I found answer to most of my questions there). The "official" support site is at &lt;a href="http://sourceforge.net/projects/wix/support"&gt;SourceForge&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;I want to try WiX. Where do I start?&lt;/b&gt;&lt;br /&gt;
This will be the topic of my &lt;a href="http://alekdavis.blogspot.com/2010/10/learning-wix-from-ground-up.html" title="Learning WiX from ground up"&gt;next post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html"&gt;What about that WiX?&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://alekdavis.blogspot.com/2008/02/dude-where-is-your-installer.html"&gt;Dude, where is your installer?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-1871898581567642320?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/6gpMCg-u2DE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/1871898581567642320/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=1871898581567642320" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1871898581567642320?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1871898581567642320?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/6gpMCg-u2DE/introduction-wix-windows-installer-xml.html" title="Introduction to WiX" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/introduction-wix-windows-installer-xml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcBRH4-fip7ImA9Wx9aEU0.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-8529848739225801075</id><published>2010-10-08T11:55:00.000-07:00</published><updated>2011-03-02T13:40:55.056-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-02T13:40:55.056-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows installer" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>What about that WiX?</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Reflections from my first encounter with Windows Installer XML (WiX).&lt;/div&gt;There comes a time in every Windows programmer's life to face &lt;a href="http://wix.codeplex.com/"&gt;&lt;b&gt;WiX&lt;/b&gt; (Windows Installer XML)&lt;/a&gt;. For me this time came with the news of &lt;a href="http://msmvps.com/blogs/installsite/archive/2010/09/23/microsoft-will-retire-visual-studio-installer.aspx" title="Microsoft will retire Visual Studio Installer"&gt;Microsoft's plan to retire Visual Studio Installer&lt;/a&gt; in favor of &lt;a href="http://www.flexerasoftware.com/promolanding/10909.htm"&gt;InstallShield Limited Edition&lt;/a&gt;. So I spent the last couple of weeks getting to know WiX and using it to implement installers for several production applications. This is what I learned.&lt;br /&gt;
&lt;br /&gt;
Good news: (1) WiX Toolset let me create installers that were &lt;b&gt;on par&lt;/b&gt; with installers I used to build in the good ol' pre-&lt;a href="http://msdn.microsoft.com/en-us/library/aa367449(v=VS.85).aspx"&gt;Windows Installer&lt;/a&gt; days. (2) I did not have a panic attack when I opened the WiX-generated MSI files in &lt;a href="http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx"&gt;Orca&lt;/a&gt; (WiX seem to produce &lt;b&gt;less garbage&lt;/b&gt; than say &lt;a href="http://msdn.microsoft.com/en-us/library/2kt85ked.aspx"&gt;Visual Studio Installer&lt;/a&gt;). (3) It took relatively &lt;b&gt;few lines of XML code&lt;/b&gt; to build an installer that handled deployment of a Windows service, COM object registration, desktop and shortcut menu creation, invocation of a configuration utility, and typical user interface (setup wizard).&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot say that my transition to WiX was seamless. WiX Toolset has a few &lt;b&gt;limitations&lt;/b&gt;. To be fair, some of these limitations are caused by idiosyncrasies imposed by Windows Installer (MSI), but some are native to WiX (e.g. it seems impossible to use the recommended type of custom action when invoking an executable from a merge module). WiX tools sometimes &lt;b&gt;lack features&lt;/b&gt; (e.g. it's relatively easy to extract COM registration information from a COM DLL, but there is absolutely no way to do it from a COM executable). There are &lt;a href="http://sourceforge.net/tracker/?group_id=105970&amp;atid=642714"&gt;&lt;b&gt;bugs&lt;/b&gt;&lt;/a&gt; (probably not as obnoxious as &lt;a href="http://community.flexerasoftware.com/showthread.php?t=163141"&gt;InstallShield bugs&lt;/a&gt;, but still). Project documentation and information is &lt;b&gt;skimpy&lt;/b&gt; and somewhat &lt;b&gt;confusing&lt;/b&gt; (why is the project split between &lt;a href="http://wix.sourceforge.net/"&gt;SourceForge&lt;/a&gt; and &lt;a href="http://wix.codeplex.com/"&gt;CodePlex&lt;/a&gt;? how long should it take a WiX novice to figure out what and how to download the toolkit? why is it called &lt;i&gt;Votive&lt;/i&gt;? and why is "i" in "WiX" lower case?) And the WiX &lt;b&gt;learning curve&lt;/b&gt; is rather steep, especially for those who have not been intimate with Windows Installer (MSI).&lt;br /&gt;
&lt;br /&gt;
One good -- and bad -- thing about WiX is that it's an &lt;b&gt;open-source&lt;/b&gt; project. On the positive side, WiX has a momentum now both inside and outside of Microsoft. On the other hand, it's not clear if, or how long, Microsoft's backing of the project will continue (say, Microsoft strikes another back room deal [I'm speculating here] with Flexera [the InstallShield maker] and withdraws all support from WiX). &lt;br /&gt;
&lt;br /&gt;
As long as you are looking for alternatives, here is a list of commercial products that can help you build MSI-based installers:&lt;br /&gt;
&lt;a name="Tools"&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.flexerasoftware.com/products/installshield.htm"&gt;&lt;b&gt;InstallShield&lt;/b&gt;&lt;/a&gt; by Flexera Software&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wise.com/Products/Installations/WiseInstallationStudio.aspx"&gt;&lt;b&gt;Wise Installation Studio&lt;/b&gt;&lt;/a&gt; by Altiris, Inc/Symantec&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.installaware.com/"&gt;&lt;b&gt;InstallAware for Windows Installer&lt;/b&gt;&lt;/a&gt; by InstallAware Software&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.advancedinstaller.com/"&gt;&lt;b&gt;Advanced Installer&lt;/b&gt;&lt;/a&gt; by Caphyon&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.indigorose.com/products/msi-factory/"&gt;&lt;b&gt;MSI Factory&lt;/b&gt;&lt;/a&gt; by IndigoRose Software Design Corp.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tarma.com/"&gt;&lt;b&gt;Tarma InstallMate&lt;/b&gt;&lt;/a&gt; by Tarma Software Research&lt;/li&gt;
&lt;li&gt;See also &lt;a href="http://en.wikipedia.org/wiki/List_of_installation_software#Microsoft_Windows"&gt;List of installation software (Wikipedia)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Some of these are more popular than others (popularity is often an indicator of the size of the marketing budget than product quality), but I haven't use them to extent of recommending one over the other. &lt;span class="sidenote"&gt;[I used to be a huge fan of InstallShield in the late 90's, but after the InstallShield 7 migration fiasco (3 months wasted on a failed attempt to convert a complex InstallShield 6.x project to InstallShield 7, mostly due to bugs in the product) I would not want to re-live the pain.]&lt;/span&gt; So for the time being I will stick with WiX. &lt;br /&gt;
&lt;br /&gt;
If you are interested in WiX, read my subsequent posts. I will share (time permits) the things that helped me get started. Here is the outline of the upcoming WiX-related posts (I'll convert items to hyperlinks when the posts are ready):&lt;a name="series"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://alekdavis.blogspot.com/2010/10/introduction-wix-windows-installer-xml.html"&gt;&lt;b&gt;Introduction to WiX&lt;/b&gt;&lt;/a&gt; (FAQs for novices)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alekdavis.blogspot.com/2010/10/learning-wix-from-ground-up.html"&gt;&lt;b&gt;Learning WiX from ground up&lt;/b&gt;&lt;/a&gt; (resources for WiX beginners)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alekdavis.blogspot.com/2010/10/wix-how-tos-and-missing-links.html"&gt;&lt;b&gt;WiX how-tos and missing links&lt;/b&gt;&lt;/a&gt; (helpful how-tos and insights)&lt;/li&gt;
&lt;li&gt;Bonus: &lt;a href="http://alekdavis.blogspot.com/2011/03/beginners-guide-to-wix-35.html" title="Beginner’s guide to Windows Installer XML (WiX) 3.5"&gt;Presentation and demo projects&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;See also:&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ee721500.aspx"&gt;Choosing a Windows Installer Deployment Tool&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://alekdavis.blogspot.com/2008/02/dude-where-is-your-installer.html"&gt;Dude, where is your installer?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-8529848739225801075?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/bXDF6_ZLK0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/8529848739225801075/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=8529848739225801075" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8529848739225801075?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8529848739225801075?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/bXDF6_ZLK0w/windows-installer-xml-wix.html" title="What about that WiX?" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/10/windows-installer-xml-wix.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRHczfyp7ImA9Wx5QGUo.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-8458669403375787692</id><published>2010-07-26T22:31:00.000-07:00</published><updated>2010-09-08T12:51:55.987-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-08T12:51:55.987-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reviews" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Total 3D Home, Landscape &amp; Deck software review</title><content type="html">&lt;div class="summary"&gt;&lt;b&gt;Summary&lt;/b&gt;: My trials and tribulations with the Total 3D Home, Landscape &amp;amp; Deck software package.&lt;/div&gt;A few months ago, I moved to a new home. Expecting to make some changes -- pouring concrete around the house, installing a patio cover, painting the fence, landscaping, converting a bonus room into a bedroom, etc -- I wanted to try modeling design changes in software. I've never used home/landscape design software, nor did I have any experience with 3D modeling, so I looked for reviews of the popular consumer home/landscape design packages with the $100 or less price tag. Unfortunately, I did not find many in-depth reviews, and the few ones I read were often conflicting. So I went by the &lt;a href="http://landscaping-software-review.toptenreviews.com/" title="2010 Landscaping Software Review Product Comparisons"&gt;TopTenReviews recommendations&lt;/a&gt; and decided to try their &lt;a href="http://landscaping-software-review.toptenreviews.com/total-3d-home-landscape-deck-review.html"&gt;choice #6&lt;/a&gt;: &lt;a href="http://www.individualsoftware.com/software/home_garden_design/total3d_home_landscape_deck/"&gt;&lt;b&gt;Total 3D Home, Landscape &amp;amp; Deck Premium Suite 11.0&lt;/b&gt;&lt;/a&gt; by Individual Software.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TE4Tbf4XX7I/AAAAAAAAAmM/iL82nfkBUjA/s1600/Total3D_Box.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TE4Tbf4XX7I/AAAAAAAAAmM/iL82nfkBUjA/s320/Total3D_Box.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I chose Total 3D software for two reasons. First, at least based on the feature summary, it seemed to cover more areas of my interest than other alternatives (I was more interested in landscape part, but interior design support was a plus). Second, the software was on sale at a local &lt;a href="http://www.frys.com/product/5425569"&gt;Fry's&lt;/a&gt;, which (after rebate) ended up costing me just the CA sales tax.&lt;br /&gt;
&lt;br /&gt;
In short, Total 3D Home, Landscape &amp;amp; Deck Premium Suite 11.0 &lt;b&gt;did not work that well&lt;/b&gt; for me. Here is a brief summary of my experience with the package.&lt;br /&gt;
&lt;br /&gt;
Total 3D Home, Landscape &amp;amp; Deck Premium Suite 11.0 comes with two disks. The first one contains the program. I'm not sure what the purpose of the second disk is. I installed both disks on a laptop running Windows XP SP3, but once I upgraded it to Windows 7, the &lt;b&gt;second disk failed&lt;/b&gt; to install. After working extensively in both the XP and Windows 7 environments, and I did not notice any advantage of having the second disk installed.&lt;br /&gt;
&lt;br /&gt;
The online &lt;b&gt;registration failed&lt;/b&gt; on both systems (XP and Win7), so I had to register the software manually (via a fax!).&lt;br /&gt;
&lt;br /&gt;
The application &lt;b&gt;desktop shortcut&lt;/b&gt; tried to check updates (on every program launch), but always &lt;b&gt;failed&lt;/b&gt;. I contacted support and received instructions explaining how to change the shortcut to point to the main program instead of the update checker. It worked, but now the program &lt;b&gt;does not check for updates&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Although I found the help articles and &lt;b&gt;tutorials&lt;/b&gt; accompanying the software &lt;b&gt;helpful&lt;/b&gt;, I still had a pretty vague idea of how the workflow should go, so it took me a few false starts and a couple of days to figured out the right approach. &lt;br /&gt;
&lt;br /&gt;
I started my project by importing a blueprint of my home's floor plan (I had a hard copy of the blueprint, which I scanned to generate a PDF file, which I converted to a JPEG image). I then placed the home areas (garage, halls, rooms, kitchen, bathrooms) over the corresponding blueprint areas, which was rather easy. The software created the wall and roof, producing a reasonable 3-D mock-up (even the roof was done right). I then placed the home on a lot and defined the landscape/hardscape features: lawn, walkways, fence. I found the &lt;b&gt;3-D (aerial) and walk-through views impressive&lt;/b&gt;. They allow you to rotate the home and look at it (both from inside and outside) at different angles.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TE8g8luRo_I/AAAAAAAAAmU/8j1xL0OI-CA/s1600/Total3D_Plan.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TE8g8luRo_I/AAAAAAAAAmU/8j1xL0OI-CA/s320/Total3D_Plan.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I added windows, doors, and openings, but with &lt;b&gt;mixed success&lt;/b&gt;. For example, for some reason, adding a porch made the exterior door totally invisible. So did the patio. I assume that this is a bug in the software; the door looked fine (when I added it in the Design Plan tab). I then added a porch in the Space Plan tab, and it looked fine, too. I then switched to the Aerial tab, and once I clicked the Design Plan tab again, the door seemed to be covered by the wall. It also disappeared from the Aerial view. I raised this issue, but got &lt;b&gt;no response from support&lt;/b&gt; (not even an acknowledgement of my message).&lt;br /&gt;
&lt;br /&gt;
In addition to the &lt;b&gt;disappearing doors&lt;/b&gt;, quite a few things &lt;b&gt;did not work as promised&lt;/b&gt; or at all. Here is a brief list &lt;b&gt;problems&lt;/b&gt; that I encountered.&lt;br /&gt;
&lt;br /&gt;
The software promises to produce &lt;b&gt;photo-like&lt;/b&gt; 3-D images assuming that you can apply photos to the design (which was one of the selling points for me; I wanted the software to produce real-life images). You are supposed to cut out an area from a digital photo and apply it to the corresponding area of your design. I tried many times, but &lt;b&gt;could not make it work&lt;/b&gt;. The cut-out area from a &lt;b&gt;photo did not stick&lt;/b&gt; to the right place.&lt;br /&gt;
&lt;br /&gt;
I also had many issues with cabinets and other interior elements. While they worked okay in some areas, in other ares the &lt;b&gt;cabinets kept moving&lt;/b&gt; from the positions I placed them causing overlapping. Sometimes they would appear normal, but once I switch the tabs and come back or make an unrelated change, I would find them stuck to the ceiling or on the top of each other. I raised this issue to support, too, but got &lt;b&gt;no response&lt;/b&gt; either (at this point, I gave up on support; and I gave up on designing internal elements: cabinets, appliances, bath tubs, etc).&lt;br /&gt;
&lt;br /&gt;
Total 3D allows you to import &lt;b&gt;custom textures&lt;/b&gt;. I tried to import the texture of the external wall from a digital photo, but it ended up producing tile-like texture which &lt;b&gt;looked worse&lt;/b&gt; than the built-in textures and colors. Textures and colors is a major &lt;b&gt;pain area&lt;/b&gt;. First of all, it's next to impossible to find the right color or texture. Instead of using a standard and logical color palette, you have to navigate through several levels of screens. Many colors appear the same and some colors are missing. For example, I could not find the basic white color to paint the doors and window frames. The Favorites feature is a joke: instead of keeping your favorite colors and textures in a dedicated area for easy selection, it simply marks your favorites with labels, but you still have to remember how to find them in the &lt;b&gt;maze of screens&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
The software comes with extensive set of built-in objects, but it &lt;b&gt;lacks the most basic options&lt;/b&gt;, such as popular patio covers (lattice or solid), sliding built-in closet doors, realistic gazebos, granite counter tops, and much more. With some creativity, you can mimic some objects (I used marble texture instead of granite, and a stair step to imitate the outside A/C unit), but for others, you're totally out of luck (there is no way you can produce a realistic lattice patio cover).&lt;br /&gt;
&lt;br /&gt;
One of the major hassles is that the program seems arbitrary in allowing you to remove objects from the design. For example, you may &lt;b&gt;not be able to remove a wall&lt;/b&gt; once you add it to the floor plan. I ended up creating a backup project after making a few changes to make sure, I do not have to start from scratch after making a change (I cannot count the number of times I had to revert to these backups).&lt;br /&gt;
&lt;br /&gt;
Screen &lt;b&gt;navigation&lt;/b&gt; is yet another &lt;b&gt;hassle&lt;/b&gt;. It's often needed to zoom the plan in and out or move it around the screen. There is a dedicated tab for this, but using the specialized tab means that you need to switch between this tab and the working tab constantly. It would be much easier to allow zooming and repositioning the plan right in the Space and Design plans.&lt;br /&gt;
&lt;br /&gt;
I also noticed that sometimes, when I keep the program open for some time, it &lt;b&gt;stops working&lt;/b&gt;. I click the tabs (work areas) at the bottom, but the screen still displays the same view. I could only fix it by restarting the program.&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;program crashes&lt;/b&gt; quite often resulting in lost work.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://landscaping-software-review.toptenreviews.com/total-3d-home-landscape-deck-review.html"&gt;TopTen review&lt;/a&gt; praises Total 3D's collection of &lt;b&gt;plants&lt;/b&gt;, but I found them &lt;b&gt;unrealistic&lt;/b&gt; looking and limiting (many plants looked the same to me).&lt;br /&gt;
&lt;br /&gt;
I still found Total 3D Home, Landscape &amp;amp; Deck &lt;b&gt;somewhat helpful in planning&lt;/b&gt; the hardscape/landscape elements (walkways, lawns, etc), but using it was &lt;b&gt;too much hassle&lt;/b&gt; that produced very &lt;b&gt;modest results&lt;/b&gt;. If I did not get it for less than $3 (after rebate), I probably would have returned the software, which is too bad, because the software has potential. &lt;br /&gt;
&lt;br /&gt;
Here are some &lt;b&gt;recommendations&lt;/b&gt; which would make Total 3D Home, Landscape &amp;amp; Deck Premium Suite a much better software package:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Fix the obvious &lt;b&gt;bugs&lt;/b&gt;: object placement, disappearing elements (doors).&lt;/li&gt;
&lt;li&gt;Make the &lt;b&gt;photo import&lt;/b&gt; feature work as promised.&lt;/li&gt;
&lt;li&gt;Redesign the &lt;b&gt;favorites&lt;/b&gt; feature.&lt;/li&gt;
&lt;li&gt;Redesign the &lt;b&gt;color/texture&lt;/b&gt; selection tool.&lt;/li&gt;
&lt;li&gt;Make it &lt;b&gt;crash less&lt;/b&gt; often (and make the &lt;b&gt;auto-save&lt;/b&gt; feature work).&lt;/li&gt;
&lt;li&gt;Integrate &lt;b&gt;zooming and panning&lt;/b&gt; functionality into existing tabs.&lt;/li&gt;
&lt;li&gt;Add common &lt;b&gt;design features&lt;/b&gt;: granite counter tops, more realistic tile roofs, stucco exteriors.&lt;/li&gt;
&lt;li&gt;Add common &lt;b&gt;structures&lt;/b&gt;: small garden tool sheds, A/C units, patio covers, realistic gazebos.&lt;/li&gt;
&lt;li&gt;Create a moderated &lt;b&gt;user forum&lt;/b&gt; for customers using the software.&lt;/li&gt;
&lt;/ul&gt;Until then, I would not recommend Total 3D Home, Landscape &amp;amp; Deck Premium Suite to the general public.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-8458669403375787692?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/oNSncF0sfHI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/8458669403375787692/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=8458669403375787692" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8458669403375787692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8458669403375787692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/oNSncF0sfHI/total-3d-home-landscape-deck-software.html" title="Total 3D Home, Landscape &amp; Deck software review" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_J6q1OqNOB0E/TE4Tbf4XX7I/AAAAAAAAAmM/iL82nfkBUjA/s72-c/Total3D_Box.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/07/total-3d-home-landscape-deck-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQGRXY-eCp7ImA9WhdbGEU.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-779263562163293006</id><published>2010-07-02T18:00:00.000-07:00</published><updated>2011-10-17T13:12:04.850-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T13:12:04.850-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computers" /><title>ASUS RT-N13U wireless-N router quirks</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Tips for new ASUS RT-N13U users.&lt;/div&gt;After a long search for a decent &lt;a href="http://en.wikipedia.org/wiki/IEEE_802.11#802.11n"&gt;802.11n&lt;/a&gt; router (and not finding one that would satisfy my real and perceived needs), I decided to wait until the makers produce something that is feature-full and reliable. In the meantime, I needed something basic:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;no dropped connections&lt;/li&gt;
&lt;li&gt;decent signal&lt;/li&gt;
&lt;li&gt;USB port&lt;/li&gt;
&lt;li&gt;built-in print server&lt;/li&gt;
&lt;/ul&gt;ASUS RT-N13U seemed to meet these requirements. Since Tim Higgins (the &lt;a href="http://www.smallnetbuilder.com/"&gt;SmallNetBuilder&lt;/a&gt; guy) gave it pretty &lt;a href="http://www.smallnetbuilder.com/wireless/wireless-reviews/31051-new-to-the-charts-asus-rt-n13u-wireless-n-router-with-all-in-one-printer-server"&gt;good marks&lt;/a&gt;, I thought I would give it a try.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_J6q1OqNOB0E/TC5uKPxq2qI/AAAAAAAAAl0/4WPrEv93SUw/s1600/Asus_RT-N13U.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_J6q1OqNOB0E/TC5uKPxq2qI/AAAAAAAAAl0/4WPrEv93SUw/s320/Asus_RT-N13U.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I got a new &lt;a href="http://www.amazon.com/gp/product/B002LITY24?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002LITY24" rel="nofollow"&gt;ASUS RT-N13U from Amazon&lt;/a&gt; for about $35 (after $20 mail-in rebate). &lt;span class="sidenote"&gt;[And I would've had it for less - &lt;a href="http://slickdeals.net/forums/showthread.php?sduid=111854&amp;t=2095616"&gt;$25 after rebate&lt;/a&gt; - had I waited a bit longer.]&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
After using the router for a couple of months, I can say that I'm rather happy with it: the signal is stable (no dropped connections) and reasonably strong. However, the setup process took me much longer than it should've had. Here are several issues that I encountered.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Can't connect&lt;/b&gt;&lt;br /&gt;
ASUS RT-N13U can act as a &lt;a href="http://en.wikipedia.org/wiki/Wireless_router"&gt;router&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Wireless_Access_Point"&gt;access point&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Wireless_repeater"&gt;repeater&lt;/a&gt;. Which is a good thing. The bad thing is that it comes from the factory with the repeater mode turned on. It took me about an hour of frustration until I realized why my system could not see the router during initial setup. Once I switch it to the router mode, the setup process went fine.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Still slow&lt;/b&gt;&lt;br /&gt;
Although, I set the router to work in mixed 802.11g/n mode, I noticed that the speed did not exceed 54 Mbps on my laptop and &lt;a href="http://alekdavis.blogspot.com/2010/02/acer-revo-3610-review.html"&gt;nettop&lt;/a&gt;, both of which have wireless-N cards. I played with various settings in the admin panel: all to no avail. Finally, I found an &lt;a href="http://support.asus.com/faq/asus-faq.aspx?type=70004&amp;no=DC60B72B-EDB1-BE2F-62EB-3694D72BA83F&amp;model=RT-N13U&amp;SLanguage=en-us" title="My router and WLAN card both support 802.11n, but the speed of my WLAN Card is always 54Mbps"&gt;FAQ that explained the reason&lt;/a&gt;: the authentication method of my router had to be set to &lt;b&gt;WPA2-AES&lt;/b&gt; (it wasn't); at other authentication settings, the speed will not get over 54 Mbps. It would be helpful if the router's admin panel somehow conveyed this limitation when detecting a wrong authentication method (it does not). Anyway, I changed authentication to WPA2-AES, and...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Can't connect (again)&lt;/b&gt;&lt;br /&gt;
Once I changed authentication to WPA2-AES, my systems could not connect. I submitted the issue to tech support but the person handling my ticket was even more clueless than me (he suggested that my laptop's network card might have not supported 802.11n, even though I had mentioned that I could connect to 802.11n network at work just fine). After spending a few hours contemplating this problem, I finally figured out that I used the wrong variation of WPA2-AES: instead of &lt;a href="http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access#EAP_extensions_under_WPA-_and_WPA2-_Enterprise"&gt;Enterprise&lt;/a&gt; (which is how I connect to WiFi at work), I should've used &lt;a href="http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access#Security_.26_Insecurity_in_pre-shared_key_mode"&gt;WPA2-AES Personal&lt;/a&gt;. After changing authentication mode to Personal (and setting up the password), I was able to connect.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Software&lt;/b&gt;&lt;br /&gt;
ASUS RT-N13U comes with a CD containing software and documentation. Although I successfully used the setup wizard (software) for initial configuration, the software stopped working (it cannot detect the router). This is not a big deal for now because I can access the admin panel &lt;a href="http://192.168.1.1/"&gt;via a browser&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;Additional tips for new ASUS RT-N13U users:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Make sure you download and install the most recent &lt;b&gt;firmware updates&lt;/b&gt; (see the &lt;a href="http://support.asus.com/download/download.aspx?SLanguage=en-us"&gt;Downloads page&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;IP address of the admin panel: &lt;b&gt;192.168.1.1&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Default admin credentials: &lt;b&gt;admin&lt;/b&gt;/&lt;b&gt;admin &lt;/b&gt;(it's recommended to change them).&lt;/li&gt;
&lt;/ul&gt;So far, I've been using the router only for wireless networking (not for printing or file sharing, yet). I'm planning to update this post once I get to test its wireless print server and drive sharing capabilities. Stay tuned.&lt;br /&gt;
&lt;br /&gt;
UPDATE (4/28/2010): Since the original post, newer routers have been released to marked. Among them, &lt;a href="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=B0049YQVHE"&gt;ASUS RT-N56U&lt;/a&gt; (featuring dual-band processor, hardware NAT, 5 internal antennas, fast gigabit ethernet and 128MB DDR2) seems to be getting pretty good &lt;a href="http://www.smallnetbuilder.com/wireless/wireless-reviews/31436-asus-rt-n56u-black-diamond-dual-band-gigabit-wireless-n-router-reviewed"&gt;reviews from professionals&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Freview%2FB0049YQVHE%3Fie%3DUTF8%26ref_%3Ddp_top_cm_cr_acr_txt%26showViewpoints%3D1&amp;tag=aledavtec-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=390957"&gt;users&lt;/a&gt;. Although, it's a bit more expensive, ASUS RT-N56U is much more capable, and it's still cheaper than comparable Cisco or Netgear routers (and seems to be less buggy). &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;b&gt;Best wireless routers on the market&lt;/b&gt;&lt;/center&gt;&lt;br /&gt;
&lt;center&gt;&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=B002LITY24" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=B0049YQVHE" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt; 
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B004PA2B6C" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B002HWRJY4" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B0045JCL22" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;
&lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;asins=B004K1EZDS" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/td&gt; &lt;td&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS1=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=aledavtec-20&amp;o=1&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B003OAGOYE" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://www.asus.com/product.aspx?P_ID=O8alKdC7I2FAs2FQ&amp;templete=2"&gt;ASUS RT-N13U Wireless Router with All-in-one Print Server&lt;/a&gt; (product info by ASUS)&lt;br /&gt;
&lt;a href="http://forums.smallnetbuilder.com/showthread.php?t=3316"&gt;ASUS RT-N13U&lt;/a&gt; (review by Jeff)&lt;br /&gt;
&lt;a href="http://www.amazon.com/RT-N13U-Wireless-N-Router-Access-Repeater/product-reviews/B002LITY24/ref=dp_top_cm_cr_acr_txt?showViewpoints=1"&gt;Amazon product reviews&lt;/a&gt; (some good info there)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-779263562163293006?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/32kXCoYTc68" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/779263562163293006/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=779263562163293006" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/779263562163293006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/779263562163293006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/32kXCoYTc68/asus-rt-n13u-wireless-n-router-review.html" title="ASUS RT-N13U wireless-N router quirks" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_J6q1OqNOB0E/TC5uKPxq2qI/AAAAAAAAAl0/4WPrEv93SUw/s72-c/Asus_RT-N13U.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/07/asus-rt-n13u-wireless-n-router-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04FQXsyfip7ImA9WxFUFEw.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-4423545312475814143</id><published>2010-06-21T16:47:00.000-07:00</published><updated>2010-06-24T13:38:30.596-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T13:38:30.596-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="recommendations" /><category scheme="http://www.blogger.com/atom/ns#" term="technobrief" /><title>Technobrief #11</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Recent findings of software, articles, and more.&lt;/div&gt;&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/05/13/css-2-1-and-css-3-help-cheat-sheets-pdf/"&gt;&lt;b&gt;CSS 2.1 and CSS 3 Help Cheat Sheets (PDF)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Two useful cheat sheets that will help you quickly look up the right CSS 2.1-property or an obscure CSS 3 property.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fadeyev.net/2010/06/19/lessjs-will-obsolete-css/"&gt;&lt;b&gt;Less.js Will Obsolete CSS&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Dmitry Fadeyev explains how to improve CSS using the &lt;a href="http://lesscss.org/"&gt;LESS&lt;/a&gt; preprocessor.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2009/10/26/modern-css-layouts-the-essential-characteristics/"&gt;&lt;b&gt;Modern CSS Layouts: The Essential Characteristics&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Focuses on the broad underlying concepts that you need to know to create successful CSS layouts using the latest techniques (see also &lt;a href="http://www.smashingmagazine.com/2010/05/06/modern-css-layouts-part-2-the-essential-techniques/"&gt;Modern CSS Layouts, Part 2: The Essential Techniques&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/06/07/the-principles-of-cross-browser-css-coding/"&gt;&lt;b&gt;The Principles Of Cross-Browser CSS Coding&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Louis Lazaris describes what he believes are some of the most important CSS principles and tips that can help both new and experienced front-end developers achieve as close to a consistent cross-browser experience as possible, with as little CSS code as possible.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/tutorials/html-css-techniques/the-state-of-css3-in-email-templates/"&gt;The State of CSS3 in Email Templates&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Ros Hodgekiss goes through two CSS3 properties you can use in your email templates, alongside some practical examples.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Design&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2009/08/20/typographic-design-survey-best-practices-from-the-best-blogs/"&gt;&lt;b&gt;Typographic Design Patterns and Best Practices&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Identifies best practices for working with type, such as choosing serif vs. sans-serif fonts, picking font face, light or dark background, font sizes (headlines, body), etc.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fun&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.andrew-hoyer.com/experiments/cloth"&gt;&lt;b&gt;Cloth Simulation&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Andrew Hoyer simulates effects of gravity on a hanging cloth in JavaScript (beautiful!).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.onemotion.com/flash/spider/"&gt;&lt;b&gt;Spider 3D&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Interactive tarantula by Tomas Eriksson (freaky!).&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Graphics&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.iconfinder.com/browse"&gt;&lt;b&gt;iconFinder&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Collection of free icon sets (see also &lt;a href="http://www.iconfinder.com/free_icons"&gt;Free icons!&lt;/a&gt;).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.morguefile.com/"&gt;&lt;b&gt;morgueFile&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Public image archive.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Internet&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.labnol.org/internet/google-answers-seo-questions/13731/"&gt;&lt;b&gt;Google Experts Answer your SEO Questions&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Transcript of an interview with the Google search quality team: John Mueller (Webmaster Trends Analyst, Google Zurich), Matt Cutts (Webspam Engineer, Google California), Zareen Kazim (Strategist, Google India), Koteswara Ivaturi (Project Manager, Google Hyderabad) and Kaspar Szymanski (Strategist, Google Dublin).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sitepoint.com/blogs/2010/05/11/non-latin-tlds-spotted-in-the-wild/"&gt;&lt;b&gt;Non-Latin TLDs Spotted in the Wild&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Don't be surprised when you see URLs containing Russian and Arabic characters (e.g. &lt;a href="http://وزارة-الأتصالات.مصر/"&gt;http://وزارة-الأتصالات.مصر/&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;JavaScript&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/l10n-js-js-localization-library"&gt;&lt;b&gt;l10n.js: JS localization library&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Dion Almaer describes Eli Grey's JavaScript library that enables localization through the native JavaScript method intended for it (and gracefully degrading if the library is not present).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://phpjs.org/functions/sprintf"&gt;&lt;b&gt;JavaScript sprintf&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
JavaScript implementation of C-like sprintf function.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Jobs&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.noop.nl/2010/03/10-questions-to-ask-your-new-manager.html"&gt;&lt;b&gt;10 Questions to Ask Your New Manager&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Jurgen Appelo suggests 10 questions that you may want to ask your hiring manager.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teddziuba.com/2010/05/why-engineers-hop-jobs.html"&gt;&lt;b&gt;Why Engineers Hop Jobs&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Ted Dziuba (humorously) explains why.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;jQuery&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/"&gt;&lt;b&gt;A jQuery UI Growl/Ubuntu-like Notification Widget&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Eric Hynds demonstrates the use of a small, yet effective, jQuery notification widget.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://woorkup.com/2010/06/13/jquery-1-4-2-visual-cheat-sheet/"&gt;&lt;b&gt;jQuery 1.4.2 Visual Cheat Sheet&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A very useful reference for the jQuery API and usage.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx"&gt;&lt;b&gt;jQuery Globalization Plugin from Microsoft&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Scott Guthrie describes the prototype of a new jQuery Globalization Plugin that enables you to add globalization support to your JavaScript applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx"&gt;&lt;b&gt;jQuery Templates and Data Linking&lt;/b&gt; (and Microsoft contributing to jQuery)&lt;/a&gt;&lt;br /&gt;
Scott Guthrie shows a prototype of client-side templates based on jQuery.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://elijahmanor.com/webdevdotnet/post/My-7-jQuery-Articles-on-Script-Junkie.aspx"&gt;&lt;b&gt;My 7 jQuery Articles on Script Junkie&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Collection of excellent articles by Elijah Manor that covers topics such as jQuery debugging, history and back button support, writing plugins, and more (you can start with &lt;a href="Six Things Every jQuery Developer Should Know"&gt;Six Things Every jQuery Developer Should Know&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pixelmatrixdesign.com/uniform/"&gt;&lt;b&gt;Uniform&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Masks your standard form controls with custom themed controls to make the look similar across various web browsers. It works in sync with your real form elements to ensure accessibility and compatibility.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Podcasts&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://boagworld.com/"&gt;&lt;b&gt;Boagworld&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
A weekly podcast by Paul Boag and Marcus Lillington on building and running websites.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Programming&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.expatsoftware.com/articles/2010/03/fixing-internationalization-in-aspnet.html"&gt;&lt;b&gt;Fixing Internationalization in ASP.NET&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Jason Kester introduces a simmple way to add internationalization (i18n) support to your ASP.NET-based web site.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://geekswithblogs.net/csantos/archive/2010/03/01/solution-setup-part-deux.aspx"&gt;&lt;b&gt;Solution Setup, Part Deux&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Hüseyin Tüfekçilerli covers such topics as versioning attributes, resource attributes, project naming convention, web project code and UI separation, and build output (see also &lt;a href="http://blog.blackbeltsolutions.com/archive/2010/02/28/solution-setup.aspx"&gt;part one&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Software&lt;/b&gt; (free)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.daniusoft.com/video-converter-free.html"&gt;&lt;b&gt;Daniusoft Video Converter Free&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Somewhat limited version of the video converter that also allows you to crop and trim videos, merge two or more video clips, adjust video effects, etc.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://formatoz.com/index.html"&gt;&lt;b&gt;Format Factory&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Multifunctional media converter that supports conversion of all media formats to compatible &lt;br /&gt;
MP4/3GP/MPG/AVI/WMV/FLV/SWF (video), MP3/WMA/AMR/OGG/AAC/WAV (audio), and JPG/BMP/PNG/TIF/ICO/GIF/TGA (image). It can also rip video DVDs and music CDs to video and audio files. MP4 file support covers iPod/iPhone/PSP/BlackBerry format. (Note: This is my favorite free media conversion tool so far.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://mh-nexus.de/en/hxd/"&gt;HxD Hex Editor&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Very fast hex editor which can handle files of any size.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.activestate.com/komodo-edit"&gt;&lt;b&gt;Komodo Edit&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Text/code editor that supports PHP, Python, Ruby, Perl Tcl, JavaScript, CSS, HTML and template languages like RHTML, Template-Toolkit, HTML-Smarty and Django (somewhat slow to start, but otherwise quite capable).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://picpick.wiziple.net/home"&gt;&lt;b&gt;PicPick&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Screen capture tool that also comes with image editor, color picker, color palette, pixel ruler, protractor, crosshair and whiteboard.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/projects/imageenlarger/"&gt;&lt;b&gt;SmillaEnlarger&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Small graphical tool for resizing, and especially magnifying bitmaps in high quality.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Tips and tricks&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.labnol.org/internet/fix-slow-internet-connection/13619/"&gt;&lt;b&gt;How to Fix your Slow Internet Connection&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Amit Agarwal explains how to troubleshoot slow internet connections.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.labnol.org/gadgets/skip-dvd-trailers/13460/"&gt;&lt;b&gt;Skip the DVD Trailers &amp; Go Straight to the Movie&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Amit Agarwal suggests several methods of skipping trailers when watching DVDs on DVD players, as well as computers.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Web development&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use"&gt;&lt;b&gt;2010: Web Fonts Are Here and Ready to Use&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Brad Neuberg explains how to incorporate recently released open source fonts from the Google Font Directory in your web site.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://encosia.com/2010/03/03/asmx-and-json-common-mistakes-and-misconceptions/"&gt;&lt;b&gt;ASMX and JSON – Common mistakes and misconceptions&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Dave Ward explores a list of common misconceptions and potential pitfalls when it comes to using ASMX services for AJAX callbacks.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://conditional-css.com/"&gt;&lt;b&gt;Conditional-CSS&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Web-based utility allows you to write maintainable CSS with conditional logic to target specific CSS statements at both individual browsers and groups of browsers.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pagecolumn.com/tool/regtest.htm"&gt;&lt;b&gt;Online Regular Expression Tester&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Allows you to test JavaScript-based regular expressions.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Web tools&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rebatereminder.com/index.php"&gt;&lt;b&gt;Rebate Reminder&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Lets you keep track of your mail-in rebates.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://milo.com/"&gt;&lt;b&gt;Milo&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Lets you search for product availability at local stores.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nolapro.com/"&gt;&lt;b&gt;NolaPro Free Accounting&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Free web-based accounting site (the tool is also available as a free Windows application).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.phonebooth.com/free/"&gt;&lt;b&gt;Phonebooth Free&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Web-based inbound phone system that offers a local business phone number and sophisticated call routing, auto attendant, extensions, voicemail, and more. Free service allows 200 minutes of inbound calling per month (6 cents per minute thereafter).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.paperrater.com/"&gt;&lt;b&gt;Paper Rater&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Checks grammar, proof-reads, detects plagiarism, and does more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://speedtest.net/"&gt;&lt;b&gt;SpeedTest&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Tests the speed of your Internet connection.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://terms-of-service-generator.legalriver.com/"&gt;&lt;b&gt;Terms of Service Generator&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
Construct a sample Terms of Service based on your answers to the questionnaire.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-4423545312475814143?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/jJSUKHLI0As" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/4423545312475814143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=4423545312475814143" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/4423545312475814143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/4423545312475814143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/jJSUKHLI0As/technobrief-11.html" title="Technobrief #11" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/06/technobrief-11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BQ3s6eip7ImA9WxFUEEw.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-7683640953952949011</id><published>2010-06-18T11:29:00.000-07:00</published><updated>2010-06-19T22:47:32.512-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-19T22:47:32.512-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computers" /><title>How to encrypt a USB flash drive</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Recommendations for protecting sensitive data on a USB drive.&lt;/div&gt;I recently lost my primary USB flash drive (the key chain broke), so I had to go over the exercise of setting up a new one using my favorite drive encryption software: &lt;a href="http://www.truecrypt.org/"&gt;&lt;b&gt;TrueCrypt&lt;/b&gt;&lt;/a&gt;. I don't do this very often, and every time it takes me some time to recall the correct procedure and reconstruct my basic USB flash drive setup, so I thought I'd outline these step here. Hope it will help someone else.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Download and run TrueCrypt on your computer&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.truecrypt.org/"&gt;TrueCrypt&lt;/a&gt; can run in &lt;a href="http://www.truecrypt.org/docs/?s=truecrypt-portable"&gt;(semi-)portable mode&lt;/a&gt;, so you have an option of either installing it on your computer or simply downloading and executing the program.&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Create encrypted container on the USB drive&lt;/b&gt;&lt;br /&gt;
This container is just a file with space allocated for the encrypted volume. TrueCrypt will use this file as a virtual drive (volume) that you can map as a regular drive letter. Follow these steps:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In the main TrueCrypt application window, click the &lt;b&gt;Create Volume&lt;/b&gt; button:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBqi-Tm2wtI/AAAAAAAAAks/CJjDOAKOLCQ/s1600/TrueCrypt_CreateVolume.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBqi-Tm2wtI/AAAAAAAAAks/CJjDOAKOLCQ/s320/TrueCrypt_CreateVolume.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;TrueCrypt Volume Creation Wizard&lt;/b&gt;, select the &lt;b&gt;Create an encrypted file container&lt;/b&gt; option, and click &lt;b&gt;Next&lt;/b&gt;:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_J6q1OqNOB0E/TBqj18ynktI/AAAAAAAAAk0/V90rpkMkF-8/s1600/TrueCrypt_CreateVolume1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_J6q1OqNOB0E/TBqj18ynktI/AAAAAAAAAk0/V90rpkMkF-8/s320/TrueCrypt_CreateVolume1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Volume Type&lt;/b&gt; dialog box, select the &lt;b&gt;Standard TrueCrypt volume&lt;/b&gt; option:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqkSjHyBqI/AAAAAAAAAk8/5waSeHIUPcw/s1600/TrueCrypt_CreateVolume2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqkSjHyBqI/AAAAAAAAAk8/5waSeHIUPcw/s320/TrueCrypt_CreateVolume2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Volume Location&lt;/b&gt; dialog box, use the &lt;b&gt;Select File&lt;/b&gt; button and navigate to the drive mapped to your USB drive; then enter the name of the file you want to create (you can give any name and extension to this file):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqlWd6DomI/AAAAAAAAAlE/glAB_6fWC20/s1600/TrueCrypt_CreateVolume3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqlWd6DomI/AAAAAAAAAlE/glAB_6fWC20/s320/TrueCrypt_CreateVolume3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Encryption Options&lt;/b&gt; dialog box, select &lt;b&gt;AES&lt;/b&gt; for encryption algorithm and &lt;b&gt;SHA-512&lt;/b&gt; for hash algorithm (if you wish, you can use another combination of options): &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBqmbcxGvzI/AAAAAAAAAlM/pe28W0a8Rmo/s1600/TrueCrypt_CreateVolume4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBqmbcxGvzI/AAAAAAAAAlM/pe28W0a8Rmo/s320/TrueCrypt_CreateVolume4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Volume Size&lt;/b&gt; dialog box, specify the size of file that you will allocate for the encrypted volume. Make sure that you leave some space for regular (unencrypted) storage. You will need this space to store the TrueCrypt binaries and possibly other files (more on these later). If you are not sure how much space you need to allocate, just use ~75% for encrypted storage, i.e. for a 4 GB USB drive, use 3 GB  for encrypted storage (75% of 4 GB = 3 GB):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqn9t0WN7I/AAAAAAAAAlU/jj6qzDTq0Js/s1600/TrueCrypt_CreateVolume5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqn9t0WN7I/AAAAAAAAAlU/jj6qzDTq0Js/s320/TrueCrypt_CreateVolume5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Volume Password&lt;/b&gt; dialog box, enter the password that you will use to access the encrypted volume (make sure you can remember this password):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqoqDeAJyI/AAAAAAAAAlc/KDrrdqi-a5Q/s1600/TrueCrypt_CreateVolume6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_J6q1OqNOB0E/TBqoqDeAJyI/AAAAAAAAAlc/KDrrdqi-a5Q/s320/TrueCrypt_CreateVolume6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Volume Format&lt;/b&gt; dialog box, select the file system type (I prefer NTFS, but you can use another), and click &lt;b&gt;Format&lt;/b&gt;:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_J6q1OqNOB0E/TBq_C2FSNsI/AAAAAAAAAlk/0RnEcb1_mw4/s1600/TrueCrypt_CreateVolume7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_J6q1OqNOB0E/TBq_C2FSNsI/AAAAAAAAAlk/0RnEcb1_mw4/s320/TrueCrypt_CreateVolume7.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Confirm the operation and wait until TrueCrypt creates and formats the encrypted container (file). When done, click the &lt;b&gt;Exit&lt;/b&gt; button to close TrueCrypt Volume Creation Wizard.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Install TrueCrypt software on the USB drive&lt;/b&gt;&lt;br /&gt;
If you expect to use your encrypted drive on a system where TrueCrypt is not installed, you need to keep the necessary TrueCrypt files along with your encrypted container. Do the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Switch back to the main TrueCrypt application window and select the &lt;b&gt;Tools-Traveler Disk Setup...&lt;/b&gt; menu option.&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Traveler Disk Setup&lt;/b&gt; dialog box, specify the root location of the USB drive and &lt;b&gt;uncheck&lt;/b&gt; the &lt;b&gt;Include TrueCrypt Volume Creation Wizard&lt;/b&gt; option (since you have already created one). Select the &lt;b&gt;Auto-mount TrueCrypt volume&lt;/b&gt; option and specify the encrypted container file you created in the previous step. You can adjust these and other options to your liking:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBrFFLsTG4I/AAAAAAAAAls/wBRYffwd9jE/s1600/TrueCrypt_TravelerDiskSetup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBrFFLsTG4I/AAAAAAAAAls/wBRYffwd9jE/s320/TrueCrypt_TravelerDiskSetup.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Click the Create button and once the operation completes, close the &lt;b&gt;Traveler Disk Setup&lt;/b&gt; dialog box.&lt;/li&gt;
&lt;li&gt;You can close the main TrueCrypt program window.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;At this point your USB drive will have an encrypted container that you can mount as a drive, as well as all necessary TrueCrypt components (for use on systems where TrueCrypt is not installed).&lt;br /&gt;
&lt;br /&gt;
Here are additional changes that improve my experience with TrueCrypt and your USB drive:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Autorun.inf file&lt;/b&gt;&lt;br /&gt;
The default autorun.inf file created by TrueCrypt is fine, but I normally make a couple of changes. E.g. I like all TrueCrypt's Windows shell context menu items to be grouped together, so I rename them. Here is the contents of my &lt;span class="code"&gt;autorun.inf&lt;/span&gt; file (if you decide to use it, make sure that you reference the correct location of the &lt;span class="code"&gt;TrueCrypt.exe&lt;/span&gt; file, as well as the container file):&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;b&gt;autorun.inf&lt;/b&gt;&lt;/center&gt;&lt;pre class="brush: plain"&gt;[autorun]
label=Cruser2GB
icon=TrueCrypt\TrueCrypt.exe
action=TrueCrypt: Auto-mount volume
open=TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "volume.tc"

shell\start=TrueCrypt: Run from USB
shell\start\command=TrueCrypt\TrueCrypt.exe

shell\dismount=TrueCrypt: Dismount all volumes
shell\dismount\command=TrueCrypt\TrueCrypt.exe /q /d

shell\mount=TrueCrypt: Mount volume
shell\mount\command=TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "volume.tc"&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Helper batch scripts&lt;/b&gt;&lt;br /&gt;
The autorun.inf file works great on older versions of Windows, but unfortunately Windows 7 (and I expect later versions) only recognizes the label and icon settings. So, if you plug the USB drive into a USB port on a system running Windows 7, it will neither auto-mount the drive, nor will it show the TrueCrypt's shell context menu options. To make it easier to mount and unmount the volumes, I use the following batch scripts (I put them in the root folder of the USB drive):&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;b&gt;mount.bat&lt;/b&gt;&lt;/center&gt;&lt;pre class="brush: shell"&gt;@echo off
start %~dp0\TrueCrypt\TrueCrypt.exe /q background /e /m rm /v "volume.tc"&lt;/pre&gt;Notes: The &lt;span class="code"&gt;start&lt;/span&gt; command hides the command-line window (without it, you will need to close the window manually). When using this script, make sure that it references the correct location of the &lt;span class="code"&gt;TrueCrypt.exe&lt;/span&gt; file and your volume container.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;b&gt;unmount.bat&lt;/b&gt;&lt;/center&gt;&lt;pre class="brush: shell"&gt;@echo off
%~dp0\TrueCrypt\TrueCrypt.exe /q /d&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Auto-runner&lt;/b&gt;&lt;br /&gt;
As an alternative to the batch scripts I mentioned above, you may want to try the &lt;span class="code"&gt;AutoRunner.exe&lt;/span&gt; program attached to the &lt;a href="http://www.sevenforums.com/general-discussion/13030-autorun-usb-drives-4.html"&gt;&lt;i&gt;Windows 7 - Autorun on USB drives&lt;/i&gt;&lt;/a&gt; post on SevenForums. When you launch this program, it will auto-mount the TrueCrypt volume and create the &lt;b&gt;shell context menus&lt;/b&gt; defined in the &lt;span class="code"&gt;autorun.inf&lt;/span&gt; file on Windows 7. The main problem with this program is that once launched, it will continue running until you kill it in the TaskManager (there seems to be no other interactive way to close the program). And you will need to kill it when you need to remove the USB drive. If you want to use this program, copy the executable to the root folder of the USB drive.&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Safely remove drive helper&lt;/b&gt;&lt;br /&gt;
The built-in Windows' &lt;b&gt;Safely Remove Hardware&lt;/b&gt; feature has been and still is (even in Windows 7) one of the most user-unfriendly interfaces. As an alternative, you can try Uwe Sieber's &lt;a href="http://www.uwe-sieber.de/drivetools_e.html"&gt;&lt;b&gt;Remove Drive&lt;/b&gt;&lt;/a&gt; program. When you run this program from a USB drive, it will keep trying to safely remove the drive until it succeeds or you cancel it. The program will give you a chance to close all open files and perform other cleanup that you may need to do before unplugging the drive. Note: Even though you launch the program from the USB drive, it will actually clone itself in a temporary folder and run from there (sweet! I wish &lt;b&gt;AutoRunner.exe&lt;/b&gt; were as smart). Assuming that you extract the Remove Drive files in &lt;span class="code"&gt;RemoveDrive&lt;/span&gt; folder under the root of your USB drive, you can use the following batch script to launch it with appropriate command-line parameters (place this batch file in the root folder of the USB drive):&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;b&gt;saferemove.bat&lt;/b&gt;&lt;/center&gt;&lt;pre class="brush: shell"&gt;@echo off
if defined ProgramFiles(x86) (
%~dp0\RemoveDrive\x64\RemoveDrive.exe %~d0 -L -i -b
) else (
%~dp0\RemoveDrive\Win32\RemoveDrive.exe %~d0 -L -i -b
)&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;As the very last thing, I add a &lt;span class="code"&gt;readme.txt&lt;/span&gt; file to the root folder with my phone number in case I lose it next time. I don't actually count that a person who finds it will return the drive to me, but you never know: there are some good people out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-7683640953952949011?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/uAxVaStnHO0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/7683640953952949011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=7683640953952949011" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7683640953952949011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/7683640953952949011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/uAxVaStnHO0/how-to-encrypt-usb-flash-drive.html" title="How to encrypt a USB flash drive" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_J6q1OqNOB0E/TBqi-Tm2wtI/AAAAAAAAAks/CJjDOAKOLCQ/s72-c/TrueCrypt_CreateVolume.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/06/how-to-encrypt-usb-flash-drive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBRHg8eip7ImA9WxFbFU8.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-8235143675672611368</id><published>2010-06-16T15:51:00.000-07:00</published><updated>2010-07-07T10:24:15.672-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-07T10:24:15.672-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="technologies" /><title>Introduction to jQuery</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: My latest jQuery presentation.&lt;/div&gt;Here is my latest &lt;a href="http://www.docstoc.com/docs/43818155/Introduction-to-jQuery"&gt;Introduction to jQuery&lt;/a&gt; presentation:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center; width=100%;"&gt;&lt;object id="_ds_43818155" name="_ds_43818155" width="100%" height="500" type="application/x-shockwave-flash" data="http://viewer.docstoc.com/"&gt; &lt;param name="FlashVars" value="doc_id=43818155&amp;mem_id=687922&amp;doc_type=ppt&amp;fullscreen=0&amp;showrelated=0&amp;showotherdocs=0&amp;showstats=0 "/&gt;&lt;param name="movie" value="http://viewer.docstoc.com/" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;/object&gt;&lt;/div&gt;I hope you find the links helpful.&lt;br /&gt;
&lt;br /&gt;
You can download the demo projects from the &lt;a href="http://alekdavis.blogspot.com/2010/06/aspnet-ajax-and-jquery-presentation.html"&gt;ASP.NET AJAX and jQuery Presentation&lt;/a&gt; post.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://www.learningjquery.com/2010/07/great-ways-to-learn-jquery"&gt;Great Ways to Learn jQuery&lt;/a&gt; (nice collection of tutorials, presentations, books, and resources)&lt;br /&gt;
&lt;a href="http://jqueryfordesigners.com/debugging-tools/"&gt;Debugging Tools&lt;/a&gt; by Remi Sharp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-8235143675672611368?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/UarDN4Tw5ec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/8235143675672611368/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=8235143675672611368" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8235143675672611368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/8235143675672611368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/UarDN4Tw5ec/introduction-to-jquery.html" title="Introduction to jQuery" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/06/introduction-to-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUERHY8cCp7ImA9WxFVFkg.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-1644735329304305331</id><published>2010-06-15T18:02:00.000-07:00</published><updated>2010-06-15T18:03:25.878-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-15T18:03:25.878-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tips and tricks" /><title>Convert APE audio to MP3 files</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: So you got an APE file. Now, how do you convert it to MP3s?&lt;/div&gt;I recently downloaded (legally!) a .APE file holding a collection of old Russian/Soviet songs. First thing that came to my mind was: What in the world is APE file and how do I play it? Second: How do I convert the .APE file to a more acceptable MP3 format?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is APE audio?&lt;/b&gt;&lt;br /&gt;
APE is audio encoding used by &lt;a href="http://en.wikipedia.org/wiki/Monkey's_Audio"&gt;Monkey's Audio&lt;/a&gt;. Unlike &lt;a href="http://en.wikipedia.org/wiki/MP3"&gt;MP3&lt;/a&gt; and other popular audio formats, Monkey's Audio encoding reduces the size of uncompressed audio without losing sound quality. Which is a good thing. Unfortunately, decoding APE-encoded audio requires more processor power, so few music players (either software- or hardware-based) can play .APE files.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is a .CUE file?&lt;/b&gt;&lt;br /&gt;
If a .APE file contains several audio tracks (e.g. a full CD album), it may be accompanied with a &lt;a href="http://en.wikipedia.org/wiki/Cue_sheet_(computing)"&gt;.CUE file&lt;/a&gt;. The .CUE file is often referred to as a cue file or cue sheet. It contains the information describing individual tracks in the album file (which can be in APE or other format), such as track ID, start time, end time, etc. The cue file allows audio players to see multiple tracks in a single audio file. It also lets audio converters split a single audio file into multiple tracks automatically. Without the cue file, you can still split an audio file into multiple tracks using such programs as &lt;a href="http://mpesch3.de1.cc/mp3dc.html"&gt;MP3DirectCut&lt;/a&gt; or &lt;a href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt; (both are free), but you would need to manually find the split points, which is more hassle.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How to convert an APE-encoded album into individual MP3 files?&lt;/b&gt;&lt;br /&gt;
Assuming that your .APE file comes with the corresponding .CUE file, you can easily convert it to individual MP3 tracks (or other audio encoding formats) using the free converter and recorder tools that come with the excellent &lt;a href="http://aimp.ru/"&gt;AIMP2&lt;/a&gt; audio player. &lt;span class="sidenote"&gt;[Note: AIMP2 is my favorite audio player, which I highly recommend.]&lt;/span&gt; You can get the main AIMP2 program and the converter and recorder tools from the program's &lt;a href="http://aimp.ru/index.php?do=download"&gt;downloads page&lt;/a&gt;. Once you download and install AIMP2 and AIMP2 Tools, do the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Launch &lt;b&gt;AIMP2 Audio Converter&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;In AIMP2 Audio Converter, select the&amp;nbsp;&lt;b&gt;Load files from playlist&lt;/b&gt;&amp;nbsp;option, and open the CUE file. If there are no problems with the CUE file, AIMP2 Audio Converter will detect and load the contents of the corresponding APE file.&lt;br /&gt;
&lt;br /&gt;
If the converter fails to load the CUE file, chances are it's corrupted. One of the common problems is wrong encoding of the file data. You can open the CUE file in a text editor (such as Notepad) and verify the contents. Here is an example of the file with wrong encoding:&lt;br /&gt;
&lt;pre class="code"&gt;REM GENRE "Âîåííàÿ ïåñíÿ"
REM DATE 2005
REM DISCID 45113F16
REM COMMENT "ExactAudioCopy v0.99pb5"
PERFORMER "Various"
TITLE "Äåíü Ïîáåäû - ñáîðíèê ïåñåí î âîéíå è ïîáåäå"
FILE "Äåíü Ïîáåäû - ñáîðíèê ïåñåí î âîéíå è ïîáåäå.ape" WAVE
  TRACK 01 AUDIO
    TITLE "Track01"
    PERFORMER "Track01"
    INDEX 01 00:00:00
  TRACK 02 ...&lt;/pre&gt;The most critical part of the file is the FILE field. Make sure that it contains a valid file name that corresponds to the APE file (both the CUE and APE files must be in the same folder). To correct text encoding in the CUE file, follow the process I outlined in the &lt;a href="http://alekdavis.blogspot.com/2010/02/fix-subtitle-encoding.html"&gt;How to fix movie subtitle (and other text) encoding issues&lt;/a&gt; post. This is how a corrected file may look like:&lt;br /&gt;
&lt;pre class="code"&gt;REM GENRE "Военная песня"
REM DATE 2005
REM DISCID 45113F16
REM COMMENT "ExactAudioCopy v0.99pb5"
PERFORMER "Various"
TITLE "Песни победы"
FILE "Soviet War Songs2.ape" WAVE
  TRACK 01 AUDIO
    TITLE "Track01"
    PERFORMER "Artist01"
    INDEX 01 00:00:00
  TRACK 02...&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Once the CUE file successfully loads, AIMP2 Audio Converter will show the tracks in the list:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_J6q1OqNOB0E/TBf89CptIJI/AAAAAAAAAkk/ScAW7G2CcRg/s1600/Aimp2_Converter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_J6q1OqNOB0E/TBf89CptIJI/AAAAAAAAAkk/ScAW7G2CcRg/s320/Aimp2_Converter.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Select the encoding parameters including &lt;b&gt;Encoder&lt;/b&gt; (set it to MP3, or whatever your favorite audio format is), output file format, output directory, and MP3 settings (I prefer &lt;b&gt;VBR [Joint Stereo]&lt;/b&gt; and high quality MP3 encoding, but you may want to adjust them for your liking). While at it, you may want to go over each track and set appropriate tags (album, title, artist, genre), but you can change the tags later on the MP3 files directly.&lt;/li&gt;
&lt;li&gt;Click the &lt;b&gt;Start&lt;/b&gt; button.&lt;/li&gt;
&lt;/ol&gt;Enjoy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://www.simplehelp.net/2007/05/13/how-to-convert-ape-files-to-mp3-using-windows/"&gt;How to convert .ape files to .mp3 using Windows&lt;/a&gt; by Ross McKillop&lt;br /&gt;
&lt;a href="http://www.afterdawn.com/guides/archive/convert_ape_to_mp3.cfm"&gt;Convert APE to MP3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-1644735329304305331?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/awcIjBXVNK4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/1644735329304305331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=1644735329304305331" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1644735329304305331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/1644735329304305331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/awcIjBXVNK4/convert-ape-audio-to-mp3-files.html" title="Convert APE audio to MP3 files" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_J6q1OqNOB0E/TBf89CptIJI/AAAAAAAAAkk/ScAW7G2CcRg/s72-c/Aimp2_Converter.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/06/convert-ape-audio-to-mp3-files.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NSHs_fSp7ImA9WxFbFU8.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-3300569342713711009</id><published>2010-06-01T12:42:00.000-07:00</published><updated>2010-07-07T10:16:39.545-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-07T10:16:39.545-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="technologies" /><title>ASP.NET AJAX and jQuery Presentation</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Follow-up to my ASP.NET AJAX and jQuery presentation in Reno, NV.&lt;/div&gt;Many thanks to all who attended my &lt;b&gt;ASP.NET AJAX and jQuery&lt;/b&gt; presentation at &lt;a href="http://www.softwaredevelopersgroup.com/"&gt;Northern Nevada Software Developers Group&lt;/a&gt; last week. Here are the &lt;a href="http://www.docstoc.com/docs/document-preview.aspx?doc_id=5169680"&gt;slides&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center; width=100%;"&gt;&lt;object id="_ds_5169680" name="_ds_5169680" width="100%" height="500" type="application/x-shockwave-flash" data="http://viewer.docstoc.com/"&gt;&lt;param name="FlashVars" value="doc_id=5169680&amp;mem_id=687922&amp;doc_type=ppt&amp;fullscreen=0&amp;allowdownload=1&amp;showrelated=0&amp;showotherdocs=0" /&gt;&lt;param name="movie" value="http://viewer.docstoc.com/"/&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
You can download the following demo Visual Studio 2008 projects:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.box.net/shared/k3m65xyy80"&gt;&lt;b&gt;ASP.NET AJAX and jQuery Demo&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Illustrates how to use ASP.NET AJAX (ScriptManager, UpdatePanel, UpdateProgress controls) with data-bound controls (Repeater) and jQuery.&lt;/li&gt;
&lt;li&gt;Uses a local copy of an older version of jQuery (1.3.2).&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.box.net/shared/j563gfbahd"&gt;&lt;b&gt;User Search Demo&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Illustrates how to use the jQuery &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/"&gt;Autocomplete&lt;/a&gt; (by Jörn Zaefferer) and &lt;a href="http://code.google.com/p/jquery-watermark/"&gt;Watermark&lt;/a&gt; (by Todd Northrop) plugins.&lt;/li&gt;
&lt;li&gt;Uses the Google-hosted version of jQuery (1.4.2).&lt;/li&gt;
&lt;li&gt;Performs user search by name, employee ID, login ID, or e-mail address.&lt;/li&gt;
&lt;li&gt;Code auto-detects the type of search to perform based on user input (or tries the best guess).&lt;/li&gt;
&lt;li&gt;The autocomplete (drop-down) box is customized to show text along with image.&lt;/li&gt;
&lt;li&gt;Data comes from an XML file and retrieved using LINQ-to-XML.&lt;/li&gt;
&lt;li&gt;Backend user search logic is implemented as a generic HTTP handler.&lt;/li&gt;
&lt;li&gt;Data returned from HTTP handler to the Autocomplete plugin is serialized with the help of &lt;a href="http://james.newtonking.com/projects/json-net.aspx"&gt;JSON.NET library&lt;/a&gt; (by James Newton-King).&lt;/li&gt;
&lt;li&gt;.NET user objects are automatically converted to JavaScript objects.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;If you have questions, feel free to post comments.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;a href="http://alekdavis.blogspot.com/2010/06/introduction-to-jquery.html"&gt;Introduction to jQuery&lt;/a&gt; (my newer post focusing purely on jQuery)&lt;br /&gt;
&lt;a href="http://alekdavis.blogspot.com/2009/02/aspnet-ajax-and-jquery.html"&gt;ASP.NET AJAX and jQuery&lt;/a&gt; (my older post on the same topic that contains a few additional references)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-3300569342713711009?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/RUZmxHwTat0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/3300569342713711009/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=3300569342713711009" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3300569342713711009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/3300569342713711009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/RUZmxHwTat0/aspnet-ajax-and-jquery-presentation.html" title="ASP.NET AJAX and jQuery Presentation" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/06/aspnet-ajax-and-jquery-presentation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCQng9cCp7ImA9WxFQFU0.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-6248865504462150272</id><published>2010-04-16T16:27:00.000-07:00</published><updated>2010-05-10T09:19:23.668-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-10T09:19:23.668-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Check T-SQL string for invalid characters</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Transact-SQL user-defined function (UDF) that can help you find illegal characters in user input strings.&lt;/div&gt;When programming in Transact-SQL, it's often needed to verify that input strings do not contain any illegal characters. For example, you may want to make sure that an input string does not contain any single or double quotes. Here is a user-defined function (UDF) that can help you perform this check. &lt;br /&gt;
&lt;br /&gt;
The UDF takes two input parameters:&lt;ul&gt;&lt;li&gt;Input string that needs to be checked and&lt;/li&gt;
&lt;li&gt;String containing characters that are not allowed in the input string&lt;/li&gt;
&lt;/ul&gt;If no illegal characters are found, it will return an empty string; otherwise, it will return a string containing all illegal characters found in the input string.&lt;br /&gt;
&lt;pre class="brush: sql"&gt;------------------------------------------------------
-- Description:  
--  Finds all character from a given set in a string.
--
-- Parameters:
--  @String
--    String to search.
--  @CharSet
--    Character set.
--
-- Returns:
--  Characters found in the string or empty string.
------------------------------------------------------
if exists
(
  select
    1
  from
    sysobjects
  where
    id = Object_ID('[dbo].[CheckChars]')
  and type= 'FN'
)
  drop function [dbo].[CheckChars]
go

-- Create function.
create function [dbo].[CheckChars]
(
  @String  as varchar(8000),
  @CharSet as varchar(255)
)
returns
  varchar(255)
as
begin
  declare @Index int
  declare @Char  varchar
  declare @Chars varchar(255)

  set @Chars = ''

  if (@String is null OR datalength(@String) = 0)
    return @Chars

  if (@CharSet is null OR datalength(@CharSet) = 0)
    return @Chars

  set @Index = 1

  while (@Index &lt;= datalength(@CharSet))
  begin
    set @Char = Substring(@CharSet, @Index, 1)
    
    if (CharIndex(@Char, @String) &gt; 0)
     if (CharIndex(@Char, @Chars) &lt;= 0)
       set @Chars = @Chars + @Char
        
    set @Index = @Index + 1
  end

  return @Chars
end
go

if @@Error = 0
  grant execute on [dbo].[CheckChars] to Public
go&lt;/pre&gt;
You can call this UDF like this:
&lt;pre class="brush: sql"&gt;if (dbo.CheckChars('Hello, world!', ',!') = '')
  print 'Good input.'
else
  print 'Bad input.'&lt;/pre&gt;Here is the source code of the UDF creation script:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.box.net/shared/yvpj8baj0a"&gt;&lt;b&gt;Download CheckChars.sql&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-6248865504462150272?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/lGbZjRqOU2M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/6248865504462150272/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=6248865504462150272" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6248865504462150272?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6248865504462150272?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/lGbZjRqOU2M/check-t-sql-string-for-invalid.html" title="Check T-SQL string for invalid characters" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/04/check-t-sql-string-for-invalid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EER348fip7ImA9WxBbFUk.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-6311248734614251507</id><published>2010-03-01T00:37:00.000-08:00</published><updated>2010-03-13T22:53:26.076-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-13T22:53:26.076-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="recommendations" /><category scheme="http://www.blogger.com/atom/ns#" term="technobrief" /><title>Technobrief #10</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Recent findings of software, articles, and more.&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Blogs&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.noop.nl/2009/09/top-200-blogs-for-developers-q3-2009.html"&gt;&lt;span style="font-weight:bold;"&gt;Top 200 Blogs for Developers (Q3 2009)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
The most recent compilation from Jurgen Appelo.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Freeware&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dcunningham.net/media-tools/encodehd/"&gt;&lt;span style="font-weight:bold;"&gt;EncodeHD&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Re-encode all types of video files for use on your home media player or portable device.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.guuui.com/issues/02_07.php"&gt;&lt;span style="font-weight:bold;"&gt;GUUUI&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
This article explains how to use Visio for rapid prototyping of the web pages. It includes a reference to the GUUUI Web Prototyping Tool and sketchy interface widgets.&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.easy-video-converter.com/index.html"&gt;&lt;span style="font-weight:bold;"&gt;iWisoft Free Video Converter&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Converts videos between all popular formats like AVI, MPEG, WMV, DivX, XviD, MP4, H.264/AVC, AVCHD, FLV, MKV, RM, MOV, 3GP, and audio MP3, WMA, WAV, RA, M4A, AAC, AC3, OGG; directly converts video for playback on your PSP, iPod, iPhone, Apple TV, PS3, Xbox, Zune, Creative Zen, Archos, and other digital multimedia devices; supports cropping, trimming, merging, adding watermark and special effects to videos.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://mp3diags.sourceforge.net/"&gt;&lt;span style="font-weight:bold;"&gt;MP3 Diags&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A GUI-based application that allows end-users to identify issues with their MP3 files, fix some of the issues and make other changes, like adding track information.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://multiavchd.deanbg.com/"&gt;&lt;span style="font-weight:bold;"&gt;multiAVCHD&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A tool for authoring VCHD, Blu-Ray, HD DVD, and SD-Video videos.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.superutils.com/products/mute-on-lock/"&gt;&lt;span style="font-weight:bold;"&gt;Mute on Lock&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A tiny utility that mutes the sound of the speakers when the Windows workstation is locked.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.quicksoundswitch.toflo.de/eng/index.html"&gt;&lt;span style="font-weight:bold;"&gt;Quick Sound Switch&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A small system tray tool, which allows you to switch the default sound device with only one click (it is useful for PCs with more than one sound card, or a sound card and a headset).&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://seleniumhq.org/"&gt;&lt;span style="font-weight:bold;"&gt;Selenium&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A suite of tools to automate web application testing across many platforms.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.thewindowsclub.com/ultimate-windows-tweaker-v2-a-tweak-ui-for-windows-7-vista"&gt;&lt;span style="font-weight:bold;"&gt;Ultimate Windows Tweaker&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A freeware utility for tweaking and optimizing 32-bit &amp;amp; 64-bit Windows 7 &amp;amp; Windows Vista (similar to TweakUI for Windows XP).&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Opinions&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mikehadlow.blogspot.com/2009/09/why-is-buy-not-always-better-than-build.html"&gt;&lt;span style="font-weight:bold;"&gt;Code rant: Why is 'Buy' not always better than 'Build'&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Mike Hadlow explains why.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://designingwebinterfaces.com/nested_clause_builde"&gt;&lt;span style="font-weight:bold;"&gt;iTunes Solves the Nested Clause Dilemma&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Theresa Neil describes UI design patterns for implementing predicate builders for complex rules.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf"&gt;&lt;span style="font-weight:bold;"&gt;Software Engineering: An Idea Whose Time Has Come and Gone?&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Tom DeMarco wonders if the advice he gave in &lt;a href="http://www.amazon.com/gp/product/0131717111?ie=UTF8&amp;tag=aledavtec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0131717111" title="Amazon affiliate link"&gt;"Controlling Software Projects: Management, Measurement, and Estimation"&lt;/a&gt; (Prentice Hall/Yourdon Press, 1982) -- a book that played a role in the way many budding software engineers quantified work and planned their projects -- was correct at the time, is still relevant, and if he still believes that metrics are a must for any successful software development effort. &lt;span class="sidenote"&gt;[SPOILER ALERT: The answers are: "no", "no", and "no".]&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html"&gt;&lt;span style="font-weight:bold;"&gt;The Duct Tape Programmer&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Joel Spolsky discusses when worse (coding practice) is better (than good coding practice).&lt;/li&gt;

&lt;li&gt;&lt;a href="http://dbalink.wordpress.com/2009/09/23/the-benefit-of-attending-user-group-meeting/"&gt;&lt;span style="font-weight:bold;"&gt;The Benefit Of Attending User Group Meeting&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Marlon Ribunal explains how a user group can help you.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/the-myth-of-usability-testing/"&gt;&lt;span style="font-weight:bold;"&gt;The Myth of Usability Testing&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Robert Hoekman, Jr discusses the difficulties and misconceptions related to usability testing.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.randsinrepose.com/archives/2010/01/04/wanted.html"&gt;&lt;span style="font-weight:bold;"&gt;Wanted&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Michael "Rands" Lopp proposes a hiring strategy that managers should appreciate (a very insightful perspective on high-tech hiring).&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Podcasts&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=309"&gt;&lt;span style="font-weight:bold;"&gt;.NET Rocks!, Show #309: Les Pinter Looks Back&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Listen to a very lively conversation with the guy who sold Microsoft Word to Bill Gates.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Presentations&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://identity20.com/media/OSCON2005/"&gt;&lt;span style="font-weight:bold;"&gt;OSCON 2005 Keynote - Identity 2.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
This is an old talk, but I really liked the content and presentation style (it's not long, too).&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Programming&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tripwiremagazine.com/2009/10/10-jquery-form-enhancement-plugins.html"&gt;&lt;span style="font-weight:bold;"&gt;10+ jQuery Form Enhancement Plugins&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Some handy plugins for HTML forms.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.fatcow.com/free-icons/"&gt;&lt;span style="font-weight:bold;"&gt;1000 Free "Farm-Fresh Web Icons"&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
This free icon set includes both 16 and 32 pixel versions of icons in PNG format on transparent backgrounds.&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.usabilitypost.com/2008/07/27/10-great-free-icon-packs/"&gt;&lt;span style="font-weight:bold;"&gt;10 Great Free Icon Packs for Your Website or Web App&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Some great free icon packs.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://line25.com/articles/10-usability-crimes-you-really-shouldnt-commit"&gt;&lt;span style="font-weight:bold;"&gt;10 Usability Crimes You Really Shouldn’t Commit&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Chris Spooner offers great usability tips for web form design.&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://blog.themeforest.net/resources/20-jquery-plugins-worth-implementing-into-your-themes/"&gt;&lt;span style="font-weight:bold;"&gt;20 jQuery Plugins Worth Implementing in Your Themes&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
A nice collection of helpful jQuery plugins.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.devcurry.com/2010/02/click-me-only-once-jquery.html"&gt;&lt;span style="font-weight:bold;"&gt;Click me Only Once - jQuery&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Explains how to execute an event on the HTML page only once.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.antsmagazine.com/2009/11/excellent-jquery-plugins-to-enhance-form-validation/"&gt;&lt;span style="font-weight:bold;"&gt;Excellent JQuery Plugins To Enhance Form Validation&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
jQquery plugins that are related to all kinds of form validation.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://elijahmanor.com/webdevdotnet/post/Jumpstarting-Your-Next-jQuery-Plugin-with-an-Online-Tool.aspx"&gt;&lt;span style="font-weight:bold;"&gt;Jumpstarting Your Next jQuery Plugin with an Online Tool&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Elijah Manor explains how to quickly make a jQuery plugin.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2009/10/05/mastering-css-coding-getting-started/"&gt;&lt;span style="font-weight:bold;"&gt;Mastering CSS Coding: Getting Started&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
This article explains and illustrates the fundamental properties and capabilities of CSS: padding vs. margin, floats, center alignment, ordered vs. unordered lists, styling headings, overflow, position, background images, and image enhancement.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://tympanus.net/codrops/2010/01/07/some-useful-javascript-jquery-snippets-part-2/"&gt;&lt;span style="font-weight:bold;"&gt;Some Useful JavaScript &amp;amp; jQuery Snippets&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
QUite useful code snippets for common tasks (see also &lt;a href="http://tympanus.net/codrops/2010/01/07/some-useful-javascript-jquery-snippets-part-2/"&gt;part 2&lt;/a&gt;, &lt;a href="http://tympanus.net/codrops/2010/01/08/some-useful-javascript-jquery-snippets-part-3/"&gt;part 3&lt;/a&gt;, and &lt;a href="http://tympanus.net/codrops/2010/01/11/some-useful-javascript-jquery-snippets-part-4/"&gt;part 4&lt;/a&gt;).&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://layout.jquery-dev.net/"&gt;&lt;span style="font-weight:bold;"&gt;UI.Layout – The Ultimate Page Layout Manager&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
When used along with &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt; widgets, this jQuery plugin allows to create a sophisticated application (see &lt;a href="http://layout.jquery-dev.net/demos.cfm"&gt;demos&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;&lt;a href="http://visitmix.com/Articles/Web-Forms-for-People"&gt;&lt;span style="font-weight:bold;"&gt;Web Forms for People&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Luke Wroblewski offers great tips for designing web forms.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Webtools&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://free411.com/promo/international/"&gt;&lt;span style="font-weight:bold;"&gt;1-800-FREE411&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Allows callers from the continental United States to place free five-minute international calls after listening to two short advertisements. There is no limit on the number of calls they can make in a day, and many &lt;a href="http://free411.com/promo/international/countries.html"&gt;countries&lt;/a&gt; are supported.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://gomockingbird.com/"&gt;&lt;span style="font-weight:bold;"&gt;Mockingbird&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
An online tool that makes it easy for you to create, link together, preview, and share mockups of your website or application.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.voicememe.com/"&gt;&lt;span style="font-weight:bold;"&gt;VoiceMeMe&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
Provides a personal voicemail box for your web site, classfieds, auctions, blog, social network profile (see &lt;a href="http://www.makeuseof.com/tag/set-up-a-voicemail-system-for-your-blog-with-voicememe/" title="Set Up A Voicemail For Your Blog with VoiceMeMe"&gt;tutorial&lt;/a&gt; and &lt;a href="http://www.knowliz.com/2009/11/allow-voice-comments-on-your-blog-using-google-voice.html" title="Allow Voice comments on your blog using Google Voice"&gt;alternative&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-6311248734614251507?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/xGi32QAyDE0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/6311248734614251507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=6311248734614251507" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6311248734614251507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/6311248734614251507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/xGi32QAyDE0/technobrief-10.html" title="Technobrief #10" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/03/technobrief-10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFQHs5fyp7ImA9Wx5TFE8.&quot;"><id>tag:blogger.com,1999:blog-1956572409605655558.post-5314453291010726232</id><published>2010-02-22T00:28:00.000-08:00</published><updated>2010-07-29T09:16:51.527-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-29T09:16:51.527-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tips and tricks" /><title>How to fix movie subtitle (and other text) encoding issues</title><content type="html">&lt;div class="summary"&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;: Fixing subtitle encoding in DivX videos is easy... once you know how to do it.&lt;/div&gt;&lt;br /&gt;
I have been hunting for a copy of &lt;a href="http://www.imdb.com/title/tt0107588/"&gt;Moi Ivan, toi Abraham&lt;/a&gt; (AKA "Ivan and Abram", "Я - Иван, ты - Абрам") since I saw the movie on cable in mid-90s. The movie has not been released on a DVD, and I do not have a VHS player, but fortunately, I got a decent &lt;a href="http://en.wikipedia.org/wiki/Divx"&gt;DivX&lt;/a&gt; version of the movie with Russian subtitles (the movie is mostly in &lt;a href="http://en.wikipedia.org/wiki/Yiddish_language"&gt;Yiddish&lt;/a&gt;). &lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_J6q1OqNOB0E/S4MK4BrihKI/AAAAAAAAAi8/4t_KI7K80t4/s1600-h/MoiIvanToiAbrahamCover.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 280px;" src="http://4.bp.blogspot.com/_J6q1OqNOB0E/S4MK4BrihKI/AAAAAAAAAi8/4t_KI7K80t4/s400/MoiIvanToiAbrahamCover.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5441204732433695906" /&gt;&lt;/a&gt;&lt;br /&gt;
Unfortunately, instead of legitimate Cyrillic, the subtitle captions displayed garbage (accented characters). As I later found out, the subtitle file was encoded in &lt;a href="http://en.wikipedia.org/wiki/Ascii"&gt;ASCII&lt;/a&gt; for &lt;a href="http://en.wikipedia.org/wiki/Windows-1251"&gt;Windows-1251&lt;/a&gt; (Cyrillic) code page instead of a Western code page (such as &lt;a href="http://en.wikipedia.org/wiki/Windows-1252"&gt;Windows-1252&lt;/a&gt;), so they appear fine only on a Russian version of Windows. So, what's a girl to do? I ran a few Google searches and found some posts from people running into a similar problem, but none of them contained any answers. I thought I would write a post explaining how I fixed the problem (really easy) hoping that it would help someone.&lt;br /&gt;
&lt;br /&gt;
First, a quick intro to subtitles in DivX. Well, I do not really know much about this, but this is how much you -- a typical movie viewer -- need to know (if I misstate or omit something important, feel free to correct me). A typical DivX (AVI) file does not contain embedded subtitles. Subtitles normally come from a separate file, such as &lt;a href="http://en.wikipedia.org/wiki/SubRip"&gt;SRT&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/MicroDVD"&gt;SUB&lt;/a&gt;, &lt;a href="http://www.matroska.org/technical/specs/subtitles/ssa.html"&gt;SSA/ASS&lt;/a&gt;. Normally, a subtitle file has the same name (and different extension) as the DivX file. For example, this would be a pair of a DivX (AVI) and a subtitle (SRT) files:&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Moi Ivan, Moi Abraham.avi&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-style:italic;"&gt;Moi Ivan, Moi Abraham.srt&lt;/span&gt;&lt;/blockquote&gt;There is nothing magic about a subtitle file: it's just a text file, which confirms to a certain data format. Here is the format of the SubRip (SRT) subtitle file (directly &lt;a href="http://en.wikipedia.org/wiki/SubRip"&gt;from Wikipedia&lt;/a&gt;):&lt;blockquote class="codeblock"&gt;Subtitle number&lt;br /&gt;
Start time --&gt; End time&lt;br /&gt;
Text of subtitle (one or more lines)&lt;br /&gt;
Blank line&lt;/blockquote&gt;Here is an example:&lt;blockquote class="codeblock"&gt;1&lt;br /&gt;
00:00:18,700 --&gt; 00:00:21,889&lt;br /&gt;
&amp;lt;i&amp;gt;Говорят по-цыгански&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
00:03:16,190 --&gt; 00:03:21,760&lt;br /&gt;
Я - ИВАН, ТЫ - АБРАМ&lt;/blockquote&gt;Many popular video players (KMPlayer, VLC, etc), as well as DVD players, will automatically load and display the default subtitles from the file with the same name (as the DivX file) and the same folder, but you can also load additional subtitle files manually (e.g. you may have subtitles translated in several languages). In my favorite KMPlayer, you can load non-default subtitles via the &lt;span style="font-weight:bold;"&gt;Subtitles - Load Subtitle&lt;/span&gt; menu.&lt;br /&gt;
&lt;br /&gt;
The original subtitle file I got looked like this:&lt;blockquote class="codeblock"&gt;1&lt;br /&gt;
00:00:18,700 --&gt; 00:00:21,889&lt;br /&gt;
&amp;lt;i&amp;gt;Ãîâîðÿò ïî-öûãàíñêè&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
00:03:16,190 --&gt; 00:03:21,760&lt;br /&gt;
ß - ÈÂÀÍ, ÒÛ - ÀÁÐÀÌ&lt;/blockquote&gt;Although this text looks like garbage, it's not useless: it just needs to be re-encoded from one code page to another (and desirebly, to something non-code-page-specific, e.g. to Unicode). But how do you do it?&lt;br /&gt;
&lt;br /&gt;
Help comes from Mozilla Firefox (and I suspect from any other web browser). If you need to fix the encoding of a subtitle file (or any other text file), here is what you need to do (you can use a similar approach to recover text in other types of documents, such as email, text files, and so on).&lt;ol&gt;&lt;li&gt;Launch Firefox (or you favorite web browser).&lt;/li&gt;
&lt;li&gt;Open the subtitle file. To locate file in Firefox 3.5, use the &lt;span style="font-weight:bold;"&gt;File - Open File&lt;/span&gt; menu; in IE 8, use the &lt;span style="font-weight:bold;"&gt;File - Open&lt;/span&gt; menu, and click the &lt;span style="font-weight:bold;"&gt;Browse&lt;/span&gt; button; in Google Chrome 4.0 press the &lt;span style="font-weight:bold;"&gt;CTRL + O&lt;/span&gt; keys (when using Google Chrome, you need to change extension of the subtitle file to .TXT before opening the file; otherwise, it will launch the default program associated with the original file extension instead of displaying the file text in the browser).&lt;/li&gt;
&lt;li&gt;Once the browser opens the file, it may automatically adjust encoding. If you still see garbage, select a different encoding option until the text appears correctly. To change encoding in Firefox 3.5, select appropriate encoding from the &lt;span style="font-weight:bold;"&gt;View - Character Encoding&lt;/span&gt; menu (&lt;span style="font-weight:bold;"&gt;Auto-Detect&lt;/span&gt; menu for the appropriate language can be helpful); In IE 8, use the View - Encoding menu; In Google Chrome, click the &lt;span style="font-weight:bold;"&gt;Control the current page&lt;/span&gt; toolbar button and pick the appropriate option from the Encoding menu (again, the &lt;span style="font-weight:bold;"&gt;Auto detect&lt;/span&gt; option may help).&lt;/li&gt;
&lt;li&gt;Once you select the correct encoding option and verify that the text is displayed correctly highlight all text (you can use &lt;span style="font-weight:bold;"&gt;CTRL + A&lt;/span&gt;), and copy the selected text to the clipboard (press &lt;span style="font-weight:bold;"&gt;CTRL + C&lt;/span&gt;).&lt;/li&gt;
&lt;li&gt;Open Notepad (or your favorite plain text editor, such as Notepad++, PSPad, etc), create a new file (&lt;span style="font-weight:bold;"&gt;File - New&lt;/span&gt; menu option in Notepad) and paste the contents of the clipboard in the new file (press &lt;span style="font-weight:bold;"&gt;CTRL + V&lt;/span&gt;).&lt;/li&gt;
&lt;li&gt;Save the text file as the new subtitle file. If you decide to overwrite the original subtitle file, make sure that you first make a backup in case something goes wrong. When saving the file, you will most likely be prompted to change the default ANSI encoding, so pick the &lt;span style="font-weight:bold;"&gt;Unicode&lt;/span&gt; encoding.&lt;/li&gt;
&lt;li&gt;Close the newly created subtitle file in Notepad (or your text editor), and reopen it to verify that encoding is still intact and text appears correctly, and if so, use it as a new subtitle file.&lt;/li&gt;
&lt;/ol&gt;Now, if you need the Unicode version of the Russian subtitle file for &lt;span style="font-style:italic;"&gt;Moi Ivan, toi Abraham&lt;/span&gt;, you can download it from here:&lt;blockquote&gt;&lt;a href="http://www.box.net/shared/65ndj3zmpa"&gt;Moi Ivan, toi Abraham.srt&lt;/a&gt;&lt;/blockquote&gt;See also:&lt;br /&gt;
&lt;a href="http://www.makeuseof.com/tag/3-subtitle-sources-movies-tv-series/"&gt;The 3 Best Subtitle Sites For Your Movies &amp; TV Series&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.makeuseof.com/tag/how-to-add-subtitles-to-a-movie-or-television-series/"&gt;How To Add Subtitles To A Movie Or TV Series&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.subdownloader.net/"&gt;SubDownloader: Fast and Easy Subtitle Downloader&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.divxsubtitles.net/"&gt;DivX Subtitles&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lifehacker.com/5040204/divxland-media-subtitler-embeds-subtitles-into-movie-files"&gt;DivXLand Media Subtitler Embeds Subtitles into Movie Files&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.sublight.si/"&gt;Sublight Labs: Searching subtitles has never been this easy&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.joelonsoftware.com/articles/Unicode.html"&gt;The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1956572409605655558-5314453291010726232?l=alekdavis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AlekDavisTechnoBlog/~4/PfaSE40oSXI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://alekdavis.blogspot.com/feeds/5314453291010726232/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1956572409605655558&amp;postID=5314453291010726232" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/5314453291010726232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1956572409605655558/posts/default/5314453291010726232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AlekDavisTechnoBlog/~3/PfaSE40oSXI/fix-subtitle-encoding.html" title="How to fix movie subtitle (and other text) encoding issues" /><author><name>Alek Davis</name><uri>http://www.blogger.com/profile/00436676606581042455</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_J6q1OqNOB0E/R4P-PEX0UcI/AAAAAAAAAIU/EyjXVUceX40/S220/AlekDavis_100x125.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_J6q1OqNOB0E/S4MK4BrihKI/AAAAAAAAAi8/4t_KI7K80t4/s72-c/MoiIvanToiAbrahamCover.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://alekdavis.blogspot.com/2010/02/fix-subtitle-encoding.html</feedburner:origLink></entry></feed>

