<?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;C08ERXgyfyp7ImA9WhRbEE8.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800</id><updated>2012-01-31T12:56:44.697-02:00</updated><category term="logging" /><category term="XHQ" /><category term="web application" /><category term="Visual Studio" /><category term="Win32 API" /><category term="tools" /><category term="Castle Project" /><category term="batch processing" /><category term="development" /><category term="shopping" /><category term="robot" /><category term="UI" /><category term="Haversine" /><category term="XLSX" /><category term="T4" /><category term="Windows" /><category term="algorithms" /><category term="Apple" /><category term="upgrade" /><category term="service" /><category term="lyrics" /><category term="modern age" /><category term="ASP.NET" /><category term="Google Translator Toolkit" /><category term="CountIf" /><category term="webserver" /><category term="job" /><category term="Indie" /><category term="configuration" /><category term="physical exercise" /><category term="self-improvement" /><category term="immutable data structures" /><category term="Hudson" /><category term="Google Spreadsheet API" /><category term="iOS" /><category term="Apache" /><category term="code generation" /><category term="Parallels Desktop" /><category term="IBM" /><category term="StackOverflow" /><category term="SCM" /><category term="PUC-Rio" /><category term="Compliments" /><category term="A*" /><category term="prime number" /><category term="IoC" /><category term="intro" /><category term="data model" /><category term="bitwise operators" /><category term="Microsoft Excel" /><category term="ordinary differential equation" /><category term="Web.config" /><category term="NHibernate Query Analyzer" /><category term="HPC" /><category term="F#" /><category term="memory" /><category term="MSBuild" /><category term="code snippet" /><category term="webservice" /><category term="Tomcat" /><category term="iPhone" /><category term="Firefox" /><category term="iTunes" /><category term="Excel Web App" /><category term="anniversary" /><category term="Transformations" /><category term="Dev-C++" /><category term="Eclipse" /><category term="NHibernate" /><category term="MediaMonkey" /><category term="project" /><category term="tree" /><category term="svn" /><category term=".NET" /><category term="query language" /><category term="linked server" /><category term="critical path method" /><category term="answers" /><category term="reflection" /><category term="computer virus" /><category term="technology" /><category term="management UI" /><category term="coordinates" /><category term="priority queue" /><category term="Microsoft" /><category term="computer graphics" /><category term="territory" /><category term="list" /><category term="hooks" /><category term="Finite State Machine" /><category term="Xcode" /><category term="cluster" /><category term="English" /><category term="state transition diagram" /><category term="ProZ" /><category term="locale" /><category term="import" /><category term="value frequency" /><category term="tag" /><category term="jQuery UI" /><category term="template" /><category term="Oracle" /><category term="ResourceManager" /><category term="lifestyle" /><category term="tasks" /><category term="blob" /><category term="DFA" /><category term="system analyst" /><category term="bulk" /><category term="Mac OS" /><category term="virtual machine" /><category term="BSC" /><category term="productivity" /><category term="image" /><category term="Applications" /><category term="learning" /><category term="artificial intelligence" /><category term="playlist" /><category term="update" /><category term="helpers" /><category term="repository" /><category term="hardware" /><category term="public contest" /><category term="paper" /><category term="flair" /><category term="embedded" /><category term="web project" /><category term="MiniLyrics" /><category term="photography" /><category term="Lyricator" /><category term="fortran" /><category term="counting" /><category term="PLINQ" /><category term="compilers construction" /><category term="Localization" /><category term="gym" /><category term="batch renaming" /><category term="NPOI" /><category term="MP3" /><category term="COM automation" /><category term="music" /><category term="VisualSVN Server" /><category term="oi" /><category term="Babylon" /><category term="Google" /><category term="resx" /><category term="Open Source" /><category term="properties" /><category term="queue" /><category term="PHP" /><category term="IndieRockCafe" /><category term="RavenDB" /><category term="MES" /><category term="data structures" /><category term="ExcelPackage" /><category term="ipod" /><category term="client server architecture" /><category term="computer engineering bachelor's degree" /><category term="Brazil" /><category term="RtPM" /><category term="Paparazzi" /><category term="server" /><category term="log4net" /><category term="ID3" /><category term="OLPC" /><category term="Datepicker" /><category term="Liferay" /><category term="academic" /><category term="fitness center" /><category term="health" /><category term="questions" /><category term="Google Data API" /><category term="continuous integration" /><category term="installation" /><category term="architectural pattern" /><category term="SQL" /><category term="management system" /><category term="encoding" /><category term="C" /><category term="geocoder" /><category term="generation y" /><category term="buy" /><category term="Google Docs" /><category term="ASP.NET Chart" /><category term="quality of life" /><category term="video game" /><category term="settings" /><category term="CPM" /><category term="SSMS" /><category term="Model-View-Presenter" /><category term="PIMS" /><category term="connection string" /><category term="Git" /><category term="iPhoto" /><category term="Apps" /><category term="society" /><category term="software engineering" /><category term="LinkedIn" /><category term="missing numbers" /><category term="family" /><category term="function" /><category term="shortcuts" /><category term="Mac" /><category term="repair" /><category term="nanotechnology" /><category term="link" /><category term="UFRJ" /><category term="character set" /><category term="Last.fm" /><category term="Chemtech" /><category term="NFA" /><category term="MPI" /><category term="backup" /><category term="OpenGL" /><category term="LINQ" /><category term="Petrobras" /><category term="jQuery" /><category term="threads" /><category term="select" /><category term="geotagging" /><category term="XSLT" /><category term="LIMS" /><category term="CRM" /><category term="retrospective" /><category term="tips and tricks" /><category term="tracking" /><category term="sequence" /><category term="badge" /><category term="DLL" /><category term="URL" /><category term="MVP" /><category term="Mp3tag" /><category term="XML" /><category term="screen capture" /><category term="language" /><category term=".NET Framework" /><category term="Mac mini" /><category term="Blogger" /><category term="HQL" /><category term="soapUI" /><category term="radio button" /><category term="scan" /><category term="inversion of control" /><category term="portlet" /><category term="Automator" /><category term="Regex" /><category term="editor" /><category term="robot arm" /><category term="masters degree" /><category term="Google Analytics" /><category term="Excel table" /><category term="Mouse" /><category term="Mac OS 10.6.7" /><category term="software" /><category term="Razor" /><category term="HTML" /><category term="GPS" /><category term="methods" /><category term="Right" /><category term="screenshot" /><category term="OOXML" /><category term="JavaScript" /><category term="automation" /><category term="TortoiseSVN" /><category term="IIS Express" /><category term="entreprise management" /><category term="chemsite" /><category term="Google Maps" /><category term="Excel chart" /><category term="MVC" /><category term="Portuguese" /><category term="revision control" /><category term="enterprise portal" /><category term="SQL Server" /><category term="resource files" /><category term="graph" /><category term="export" /><category term="photos" /><category term="RAM" /><category term="PlayStation" /><category term="XLS" /><category term="ASP.NET MVC" /><category term="BBCode" /><category term="extension methods" /><category term="C++" /><category term="distributed database" /><category term="IndX" /><category term="download" /><category term="spreadsheet" /><category term="Siemens" /><category term="Objective-C" /><category term="top-down approach" /><category term="internet" /><category term="job interview" /><category term="Rock" /><category term="Get Lyrical" /><category term="crawler" /><category term="file" /><category term="traversal" /><category term="database" /><category term="Windows 7" /><category term="L10n" /><category term="sharing" /><category term="parallel programming" /><category term="quicksort" /><category term="stored procedure" /><category term="translation" /><category term="programming" /><category term="thread safety" /><category term="games" /><category term="ERP" /><category term="first" /><category term="website" /><category term="Java" /><category term="API" /><category term="NoSQL" /><category term="Google App Engine" /><category term="Snow Leopard" /><category term="C#" /><category term="GitHub" /><category term="binary search" /><category term="upload" /><category term="Exif" /><category term="parser" /><category term="circular queue" /><category term="data" /><category term="metadata" /><category term="batch file" /><category term="profile" /><title>Leniel Macaferi's blog</title><subtitle type="html">Everything software engineering with a strong background in computer engineering and computer science.

&lt;p align="right"&gt;&lt;a href="http://www.leniel.net/p/reviews.html"&gt;&lt;b&gt;Reviews&lt;/b&gt;&lt;/a&gt; | &lt;a href="http://www.leniel.net/p/consultant.html"&gt;Consultant&lt;/a&gt; | &lt;a href="http://www.proz.com/translator/849397"&gt;Translator&lt;/a&gt; | &lt;a href="http://www.leniel.net/p/contact.html"&gt;Contact&lt;/a&gt;&lt;/p&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.leniel.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.leniel.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default?start-index=16&amp;max-results=15&amp;redirect=false&amp;v=2" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>15</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/leniel" /><feedburner:info uri="leniel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry gd:etag="W/&quot;DEYNSX88eyp7ImA9WhRVGEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-245170972769819055</id><published>2012-01-17T13:10:00.000-02:00</published><updated>2012-01-17T14:03:18.173-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T14:03:18.173-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="repair" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="scan" /><category scheme="http://www.blogger.com/atom/ns#" term="iTunes" /><category scheme="http://www.blogger.com/atom/ns#" term="MP3" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="import" /><title>MP3 Scan+Repair tool for iTunes on Mac OS</title><content type="html">&lt;style type="text/css"&gt;

kbd{
background:none repeat scroll 0 0 #eeeeee;
border-color:#cccccc #aaaaaa #888888 #bbbbbb;
border-style:solid;
border-width:1px 3px 3px 1px;
color:#000000;
padding:2px 4px;
white-space:nowrap;}&lt;/style&gt;  &lt;p&gt;This is another post to add to my &lt;a href="http://www.leniel.net/search/label/MP3" target="_blank"&gt;MP3 series&lt;/a&gt;…&lt;/p&gt;  &lt;p&gt;Yesterday I tried to add/import a folder full of MP3 files to my iTunes library. Just after adding I opened iTunes and went check those MP3s. To my surprise the MP3s were not added to iTunes. I had a hard time trying to find those files since iTunes moved them from their initial location to a special folder called&lt;em&gt; Not Added&lt;/em&gt;. My MP3s ended up here:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;/Users/leniel/Music/iTunes/iTunes Media/Automatically Add to iTunes/Not Added/&lt;font size="2" face="Courier New"&gt;2012-01-16 14.34.38&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Note that iTunes created a folder inside Not Added named with the date and time the import operation occurred. The folder Not Added also stores image files and whatever file iTunes doesn’t recognize as valid files to be imported.&lt;/p&gt;  &lt;p&gt;Now I see that I have some folders like that one - that are being created since 2010-9-17 (when I bought my &lt;a href="http://www.leniel.net/2010/09/developing-for-iphone-with-mac-mini.html" target="_blank"&gt;Mac mini&lt;/a&gt;) and some of those folders have MP3 files that I didn’t notice were missing in my library. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-disappointedsmile" alt="Smiley decepcionado" src="http://lh6.ggpht.com/-7Bq4HorOxn4/TxWPuUpTWRI/AAAAAAAABWQ/dFslqHL7d-E/wlEmoticon-disappointedsmile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://triq.net/articles/mp3-validator-mac-os-x" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="MP3 Scan+Repair Logo" border="0" alt="MP3 Scan+Repair Logo" align="right" src="http://lh4.ggpht.com/-UYH1VO5UdPs/TxWSMt1A_dI/AAAAAAAABXI/haRtc87oFzc/MP3Scan%25252BRepairAppLogo%25255B4%25255D.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;Then I realized that for some odd reason iTunes rejected those files. I googled about it with &amp;quot;iTunes won't import MP3&amp;quot; and to my delight I found a &lt;a href="http://hintsforums.macworld.com/archive/index.php/t-102685.html" target="_blank"&gt;forum thread&lt;/a&gt; in which the user Afric Pepperbird recommended a fantastic tool called &lt;a href="http://triq.net/articles/mp3-validator-mac-os-x" target="_blank"&gt;MP3 Scan+Repair&lt;/a&gt; by Christian Zuckschwerdt. Using this great piece of software I managed to add those MP3s to my iTunes library.&lt;/p&gt;  &lt;p&gt;So as way to say thanks I decided to write a post to demonstrate how it works.&lt;/p&gt;  &lt;p&gt;1 - Download MP3 Scan+Repair (it's in Beta and is free for the moment)&lt;/p&gt;  &lt;p&gt;&lt;a title="http://triq.net/articles/mp3-scan-repair-download" href="http://triq.net/articles/mp3-scan-repair-download" target="_blank"&gt;http://triq.net/articles/mp3-scan-repair-download&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2 - Open the App and drag and drop the problematic folder (the one that lies within the Not Added folder) to the app screen:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="MP3 Scan+Repair main screen" border="0" alt="MP3 Scan+Repair main screen" src="http://lh6.ggpht.com/-3iJynVx83oM/TxWXoIO4hOI/AAAAAAAABXU/Dv1Kkx4L8tI/MP3Scan%25252BRepairMainScreen%25255B6%25255D.png?imgmax=800" width="525" height="249" /&gt;Figure 1 - MP3 Scan+Repair main screen&lt;/p&gt;  &lt;p&gt;3 - Select all the files using &lt;kbd&gt;command&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt; and then click the hammer button (mouse button is over it) to repair the files:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="MP3 Scan+Repair listing the files and their respective problems" border="0" alt="MP3 Scan+Repair listing the files and their respective problems" src="http://lh4.ggpht.com/-IFdG32KoZkY/TxWXrjicyPI/AAAAAAAABXc/Z0J0T0u0Emg/MP3Scan%25252BRepairFiles%25255B6%25255D.png?imgmax=800" width="525" height="433" /&gt;Figure 2 - MP3 Scan+Repair listing the files and their respective problems&lt;/p&gt;  &lt;p&gt;See the Messages column with the description of what’s wrong with each file… even warnings prevent iTunes from adding the MP3 file to its library.&lt;/p&gt;  &lt;p&gt;When repairing MP3 Scan+Repair will try to recreate the MP3s moving the old ones to the trash and writing the new ones to the current folder.&lt;/p&gt;  &lt;p&gt;After following these easy steps you should be good to go and add those MP3s files to your iTunes media library.&lt;/p&gt;  &lt;p&gt;The app is straightforward and does what it advertises… I’m really satisfied!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-245170972769819055?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/blpZv0FSID4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/245170972769819055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/01/mp3-scan-repair-tool-for-itunes-mac-os.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/245170972769819055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/245170972769819055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/blpZv0FSID4/mp3-scan-repair-tool-for-itunes-mac-os.html" title="MP3 Scan+Repair tool for iTunes on Mac OS" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-7Bq4HorOxn4/TxWPuUpTWRI/AAAAAAAABWQ/dFslqHL7d-E/s72-c/wlEmoticon-disappointedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/01/mp3-scan-repair-tool-for-itunes-mac-os.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMNQ3g_eCp7ImA9WhRWEkg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-8046930678232237781</id><published>2011-12-29T21:08:00.001-02:00</published><updated>2011-12-30T12:14:52.640-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T12:14:52.640-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Exif" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="geotagging" /><category scheme="http://www.blogger.com/atom/ns#" term="coordinates" /><category scheme="http://www.blogger.com/atom/ns#" term="metadata" /><category scheme="http://www.blogger.com/atom/ns#" term="GPS" /><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhoto" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Maps" /><title>Extract GPS coord from Google Maps to geotag photos</title><content type="html">&lt;style type="text/css"&gt;






kbd
{
background:none repeat scroll 0 0 #eeeeee;
border-color:#cccccc #aaaaaa #888888 #bbbbbb;
border-style:solid;
border-width:1px 3px 3px 1px;
color:#000000;
padding:2px 4px;
white-space:nowrap;
}&lt;/style&gt;  &lt;p&gt;This is a quick tip related to something that I just tried today and that worked.&lt;/p&gt;  &lt;p&gt;My camera &lt;a href="http://snapsort.com/cameras/Sony-HX100v" target="_blank"&gt;SONY DSC-HX100V&lt;/a&gt; has &lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System" target="_blank"&gt;GPS&lt;/a&gt; capability built-in but it &lt;em&gt;won't work everywhere and it needs some time to acquire the satellite signal&lt;/em&gt;. This way if you just want to take a quick snap you may end with photos that don’t have GPS location in their &lt;a href="http://en.wikipedia.org/wiki/Exif" target="_blank"&gt;Exif metadata&lt;/a&gt;. GPS is a recent capability when we talk about cameras.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SONY DSC-HX100V camera with built-in GPS" border="0" alt="SONY DSC-HX100V camera with built-in GPS" src="http://lh5.ggpht.com/-OGAEYQ8Edog/Tv3D2PivmMI/AAAAAAAABWA/CXXcXBmn3T8/SonyHX100VFront4.jpg?imgmax=800" width="300" height="214" /&gt;Figure 1 - &lt;a href="http://snapsort.com/cameras/Sony-HX100v" target="_blank"&gt;SONY DSC-HX100V&lt;/a&gt; camera with built-in GPS&lt;/p&gt;  &lt;p&gt;Taking that into consideration, let’s say you have some photos in &lt;a href="http://en.wikipedia.org/wiki/IPhoto" target="_blank"&gt;iPhoto&lt;/a&gt; (Mac OS) or whatever program you use to manage your photos. I mention iPhoto here since it’s the app I use. Those photos don't have a location set due to no GPS signal available where the photos were taken. So how can one add that missing GPS location info/data on those photos? By the way, this process is called &lt;a href="http://en.wikipedia.org/wiki/Geotagging" target="_blank"&gt;geotagging&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is what I’ve tried and what worked perfectly in my case:&lt;/p&gt;  &lt;p&gt;1 - Open &lt;a href="http://maps.google.com" target="_blank"&gt;Google Maps&lt;/a&gt; and find the place/point where you’ve taken the photos.&lt;/p&gt;  &lt;p&gt;2 - Right click that place/point you want in the map and select Center Map here.&lt;/p&gt;  &lt;p&gt;3 - Click the Link button. Black mouse pointer is over it in the screenshot bellow.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-2unmfF6L2Q0/Tvzy3kmipxI/AAAAAAAABVY/F-b9-ajYex8/s1600-h/GoogleMapsLinkToGetGPSCoordinates5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Google Maps link popup box with URL that contains GPS coordinates" border="0" alt="Google Maps link popup box with URL that contains GPS coordinates" src="http://lh3.ggpht.com/-RlCYpSv3KAY/Tvzy5ERGmpI/AAAAAAAABVg/PvRHeb-CMBQ/GoogleMapsLinkToGetGPSCoordinates_th.png?imgmax=800" width="525" height="217" /&gt;&lt;/a&gt;Figure 2 - Google Maps link popup box with URL that contains GPS coordinates&lt;/p&gt;  &lt;p&gt;A popup box will open. Copy the text/URL and paste it in your preferred text editor app. The link will look something like this:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;http://maps.google.com/maps/ms?msid=201266260819946046546.0004a0e1b939dec67f18e&amp;amp;msa=0&amp;amp;ll=&lt;font style="background-color: #ffff00"&gt;-22.428568,-44.619633&lt;/font&gt;&amp;amp;spn=0.001983,0.004128&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Pay attention to the highlighted part that correspond to the &lt;a href="http://en.wikipedia.org/wiki/Geographic_coordinate_system" target="_blank"&gt;longitude and latitude&lt;/a&gt; data.&lt;/p&gt;  &lt;p&gt;4 - Select the photos you want in iPhoto to apply Location information and press &lt;kbd&gt;command&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt; to access the Assign a Place box. Copy the highlighted text above and paste it in the box. Press the enter key to finish the task.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Adding GPS coordinates to iPhoto Assign a Place box" border="0" alt="Adding GPS coordinates to iPhoto Assign a Place box" src="http://lh4.ggpht.com/-rHgs2wzFKaM/Tvzy7PanUrI/AAAAAAAABWI/-JHBbaC4OVQ/iPhotoSettingLocationWithGPSCoordina%25255B1%25255D.png?imgmax=800" width="280" height="262" /&gt;Figure 3 - Adding GPS coordinates to iPhoto Assign a Place box&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;his procedure works great when you just want to add GPS coordinates in your photos no matter if your camera has a built-in GPS or not since any photo can be geotagged nowadays.&lt;/p&gt;  &lt;p&gt;Hope it helps!&lt;/p&gt;  &lt;p&gt;You can check my photos in this slideshow:&lt;/p&gt;  &lt;p&gt;&lt;object width="525" height="394"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang;=en-us&amp;amp;page_show_url=%2Fphotos%2Fleniel%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fleniel%2F&amp;amp;user_id=8525461@N04&amp;amp;jump_to="&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fleniel%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fleniel%2F&amp;user_id=8525461@N04&amp;jump_to=" width="525" height="394"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-8046930678232237781?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/xt8TE8lrsfY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/8046930678232237781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/12/extract-gps-coord-google-maps-geotag.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8046930678232237781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8046930678232237781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/xt8TE8lrsfY/extract-gps-coord-google-maps-geotag.html" title="Extract GPS coord from Google Maps to geotag photos" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-OGAEYQ8Edog/Tv3D2PivmMI/AAAAAAAABWA/CXXcXBmn3T8/s72-c/SonyHX100VFront4.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/12/extract-gps-coord-google-maps-geotag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkECSHY_eSp7ImA9WhRRGEg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-7017618519460317856</id><published>2011-12-01T17:33:00.000-02:00</published><updated>2011-12-02T18:44:29.841-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T18:44:29.841-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ResourceManager" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="resource files" /><category scheme="http://www.blogger.com/atom/ns#" term="resx" /><category scheme="http://www.blogger.com/atom/ns#" term="translation" /><category scheme="http://www.blogger.com/atom/ns#" term="helpers" /><category scheme="http://www.blogger.com/atom/ns#" term="Localization" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Razor" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="DLL" /><category scheme="http://www.blogger.com/atom/ns#" term="L10n" /><title>ResourceManager with External Localization Assembly</title><content type="html">&lt;p&gt;As a software developer I like to work with everything that is related to software &lt;a href="http://en.wikipedia.org/wiki/Language_localisation" target="_blank"&gt;Localization&lt;/a&gt; known as L10n. Besides being a developer working defining the architecture that will be adopted in a given project and doing the hard “FUN” work writing the code, I’m also a &lt;a href="http://www.proz.com/translator/849397" target="_blank"&gt;translator&lt;/a&gt; if you don’t know it yet.&lt;/p&gt;  &lt;p&gt;One thing I've been trying to do recently is to be able to use localized strings that are present in an external assembly [ DLL ] using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.resources.resourcemanager.aspx" target="_blank"&gt;ResourceManager&lt;/a&gt; object.     &lt;br /&gt;I have localized strings in resource [ &lt;a href="http://msdn.microsoft.com/en-us/library/ekyft91f%28v=VS.90%29.aspx" target="_blank"&gt;.resx&lt;/a&gt; ] files that are specific for each locale I support. I place these .resx files in a separate class library project to maintain things organized.&lt;/p&gt;  &lt;p&gt;So, suppose the namespace of this class library is &lt;font size="2" face="Courier New"&gt;MyProject.L10n&lt;/font&gt; and the .resx file name is &lt;font size="2" face="Courier New"&gt;Localization.resx&lt;/font&gt;. This gives me access to a class named &lt;font size="2" face="Courier New"&gt;Localization&lt;/font&gt; within the code. I also have &lt;font size="2" face="Courier New"&gt;Localization.pt.resx&lt;/font&gt;. I support English and Portuguese locales in my project for now. This naming pattern allows me to have in the future a file called &lt;font size="2" face="Courier New"&gt;Localization.es-ES.resx&lt;/font&gt; for Castilian Spanish (as written and spoken in Spain) and another one called &lt;font size="2" face="Courier New"&gt;Localization.es-AR.resx&lt;/font&gt; for Argentine Spanish. During runtime the .NET framework will select the correct .resx file to extract the localized string from based on the current culture the user has set while browsing my website. &lt;/p&gt;  &lt;p&gt;After adding a reference to this class library, I'm able to use this code in my ASP.NET MVC project in a Razor view:&lt;/p&gt;  &lt;pre class="code"&gt;MyProject.L10n.&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;.LocalizedString;&lt;/pre&gt;

&lt;p&gt;This works as expected, but it's not what I need, though. As you see the localized string key [ &lt;font size="2" face="Courier New"&gt;LocalizedString&lt;/font&gt; ] is hard coded. I want to be able to use the method &lt;a href="http://msdn.microsoft.com/en-us/library/d17ax2xk.aspx" target="_blank"&gt;GetString&lt;/a&gt; from the ResourceManager object so that I can write code like this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;ResourceManager&lt;/span&gt;.GetString(item.DynamicLocalizedStringValue);&lt;/pre&gt;

&lt;p&gt;The problem and the catchy here is that in order to use the resource manager the way I want, I have to point it to the external assembly this way:&lt;/p&gt;

&lt;pre class="code"&gt;grid.Column(&lt;br /&gt;columnName: &lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;,&lt;br /&gt;header: &lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;.Type,format: (item) =&amp;gt; &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ResourceManager&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;MyProject.L10n.Localization&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;).Assembly).GetString(item.Type.ToString()))&lt;/pre&gt;

&lt;p&gt;This part does the tricky: &lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;).Assembly&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;In the code block above I’m using &lt;a href="http://msdn.microsoft.com/en-us/magazine/hh288075.aspx" target="_blank"&gt;WebGrid&lt;/a&gt; that is a new helper that comes with ASP.NET MVC 3. It simplifies the task of rendering tabular data. When I do &lt;font size="2" face="Courier New"&gt;item.Type.ToString()&lt;/font&gt; I’m actually getting different values for each row of my grid and I pass this dynamic value to &lt;font size="2" face="Courier New"&gt;ResourceManager&lt;/font&gt; that in return gives me the translated/localized version of a give string key.&lt;/p&gt;

&lt;p&gt;Going even further I’ve implemented a &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx" target="_blank"&gt;Razor’s Helper method&lt;/a&gt; in a file called &lt;font size="2" face="Courier New"&gt;Helpers.cshtml&lt;/font&gt; and placed such file inside the &lt;font size="2" face="Courier New"&gt;App_Code&lt;/font&gt; folder. This is the helper’s code:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System.Resources
&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;MyProject.L10n

&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@helper &lt;/span&gt;&lt;span style="background: white; color: black"&gt;GetLocalizedString(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string &lt;/span&gt;&lt;span style="background: white; color: black"&gt;stringValue)
{
    &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ResourceManager &lt;/span&gt;&lt;span style="background: white; color: black"&gt;rm = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ResourceManager&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;MyProject.L10n.Localization&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;typeof &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Localization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;).Assembly);

    &lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: black"&gt;rm.GetString(stringValue);
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Now it’s just a matter of calling the helper this way in whatever place/view I need it:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;grid.Column(
columnName: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;,
header: &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Localization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Type,
format: (item) =&amp;gt; @Helpers.GetLocalizedString(item.Type.ToString()))&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The above code is way more clear than the one I showed your before…&lt;/p&gt;

&lt;p&gt;Hope this post helps shed some light in this subject since the only thing that should be done is to get a reference to the assembly that holds the &lt;font size="2" face="Courier New"&gt;Localization&lt;/font&gt; class and pass it to the ResourceManger’s constructor.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-7017618519460317856?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/cPUjk4zkRz8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/7017618519460317856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/10/resourcemanager-external-assembly-dll.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7017618519460317856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7017618519460317856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/cPUjk4zkRz8/resourcemanager-external-assembly-dll.html" title="ResourceManager with External Localization Assembly" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/10/resourcemanager-external-assembly-dll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMMQn06cSp7ImA9WhRSGUo.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-7303839205232754434</id><published>2011-11-21T18:38:00.002-02:00</published><updated>2011-11-22T12:51:23.319-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T12:51:23.319-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Data API" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Blogger Posts Searcher using Google Data .NET/Java Client APIs</title><content type="html">&lt;p&gt;It just happened today that I wanted to know if I had already published a post with a given title in one of the blogs I publish: &lt;a href="http://jes4us.blogspot.com" target="_blank"&gt;http://jes4us.blogspot.com&lt;/a&gt;. During translation (I translate the posts from English to Portuguese) I had a feeling that I had&amp;#160; already worked on a similar text… well, it turns out I was mistaken!&lt;/p&gt;

&lt;p&gt;Instead of going through the extensive list of &lt;a style="margin-bottom: 1em; float: right; margin-left: 1em; clear: right" href="http://code.google.com/apis/blogger/docs/2.0/developers_guide.html" target="_blank" imageanchor="1"&gt;&lt;/a&gt;posts looking one by one I thought why not leverage the power of Google Data API? You may say: why not do a simple Google search instead? Good point. As I like to play with code I couldn’t resist.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide.html" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" src="http://www.gstatic.com/codesite/ph/images/search-48.gif" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here it is. A simple and faster way of knowing if I have a post with a given title. Bellow you’ll find the codez to both the .NET client API and the Java one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blogger Data API for .NET 
    &lt;br /&gt;&lt;/strong&gt;1 - Download the client library here: &lt;a title="http://code.google.com/p/google-gdata/downloads/list" href="http://code.google.com/p/google-gdata/downloads/list"&gt;http://code.google.com/p/google-gdata/downloads/list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Install the .msi package &lt;a href="http://code.google.com/p/google-gdata/downloads/detail?name=Google_Data_API_Setup_1.9.0.0.msi"&gt;Google_Data_API_Setup_1.9.0.0.msi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;3 - Create a new Console project and reference the DLL &lt;font size="2" face="Courier New"&gt;Google.GData.Client&lt;/font&gt; that’s in this folder: &lt;font size="2" face="Courier New"&gt;C:\Google Data API SDK\Redist&lt;/font&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System.Linq;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&lt;strong&gt;using &lt;/strong&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&lt;strong&gt;Google.GData.Client;&lt;/strong&gt;

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;namespace &lt;/span&gt;&lt;span style="background: white; color: black"&gt;BlogPostsSearcher
{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;class &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Program
    &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;static void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;Main(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;bloggeService = AcquireService();

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed = AcquireAndSetupFeed(bloggeService);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Search posts that contain the word &amp;quot;StringToSearchFor&amp;quot; in their titles
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query = feed.Entries.Where(p =&amp;gt; p.Title.Text.Contains(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;StringToSearchFor&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Writes the Blog's Title
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.WriteLine(feed.Title.Text);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Prints each post found...
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;foreach &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomEntry &lt;/span&gt;&lt;span style="background: white; color: black"&gt;entry &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;in &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query)
            {
                &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Format(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;Post Title: {0} - Date Published: {1}&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, entry.Title.Text, entry.Published.ToShortDateString()));
            }

        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;private static &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;AcquireAndSetupFeed(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;FeedQuery &lt;/span&gt;&lt;span style="background: white; color: black"&gt;blogFeedUri = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;FeedQuery&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;http://www.blogger.com/feeds/&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ YourBlogID + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;/posts/default&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Setting the number of posts to retrieve
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;blogFeedUri.NumberToRetrieve = 1000;

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed = service.Query(blogFeedUri);
            
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed;
        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;private static &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;AcquireService()
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourCompanyName-BloggerPostsSearcher&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            service.Credentials = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataCredentials&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourEmailAddress@gmail.com&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourPassword&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataGAuthRequestFactory &lt;/span&gt;&lt;span style="background: white; color: black"&gt;factory = (&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataGAuthRequestFactory&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)service.RequestFactory;
            
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service;
        }
    }
}
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Blogger Data API for Java 
    &lt;br /&gt;&lt;/strong&gt;1 - Download the client library here: &lt;a title="http://code.google.com/p/gdata-java-client/downloads/list" href="http://code.google.com/p/gdata-java-client/downloads/list" target="_blank"&gt;http://code.google.com/p/gdata-java-client/downloads/list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Unzip the file &lt;a title="http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip&amp;amp;can=2&amp;amp;q=" href="http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip" target="_blank"&gt;http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 - Create a new Java Project and add references to: 
  &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;- gdata-client-1.0.jar&lt;/font&gt; that’s in this path: &lt;font size="2" face="Courier New"&gt;gdata/java/lib/ 
    &lt;br /&gt;- google-collect-1.0-rc1&lt;/font&gt; that’s in this path: &lt;font size="2" face="Courier New"&gt;gdata/java/deps/&lt;/font&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.io.IOException;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.net.URL;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.util.List;

&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.client.GoogleService;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.data.Entry;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.data.Feed;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.util.AuthenticationException;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.util.ServiceException;

&lt;span style="color: #3f5fbf"&gt;/**
 * &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;@author &lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;Leniel Macaferi
 * &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;@date &lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;11&lt;/span&gt;&lt;span style="color: #7f7f9f"&gt;-&lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;21&lt;/span&gt;&lt;span style="color: #7f7f9f"&gt;-&lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;2011
 */
&lt;/span&gt;&lt;span style="color: #7f0055"&gt;public class &lt;/span&gt;BloggerClient&lt;br /&gt;{
    &lt;span style="color: #7f0055"&gt;public static void &lt;/span&gt;main(String[] args) &lt;span style="color: #7f0055"&gt;throws &lt;/span&gt;IOException, ServiceException
    {
        &lt;span style="color: #7f0055"&gt;try
        &lt;/span&gt;{
            GoogleService bloggerService = &lt;span style="color: #7f0055"&gt;new &lt;/span&gt;GoogleService(&lt;span style="color: #2a00ff"&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourCompanyName-BloggerPostsSearcher&amp;quot;&lt;/span&gt;);

            bloggerService.setUserCredentials(&lt;span style="color: #2a00ff"&gt;&amp;quot;YourEmailAddress@gmail.com&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourPassword&amp;quot;&lt;/span&gt;);
&lt;span style="color: #3f7f5f"&gt;            
            &lt;/span&gt;searchPosts(bloggerService, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourBlogID&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;StringToSearchFor&amp;quot;&lt;/span&gt;);
        }
        &lt;span style="color: #7f0055"&gt;catch &lt;/span&gt;(AuthenticationException e)
        {
            &lt;span style="color: #3f7f5f"&gt;// &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;TODO &lt;/span&gt;&lt;span style="color: #3f7f5f"&gt;Auto-generated catch block
            &lt;/span&gt;e.printStackTrace();
        }

    }
    
    &lt;span style="color: #7f0055"&gt;public static void &lt;/span&gt;searchPosts(GoogleService myService, String blogId, String search) &lt;span style="color: #7f0055"&gt;throws &lt;/span&gt;ServiceException, IOException
    {
        &lt;span style="color: #3f7f5f"&gt;// Request the feed
        &lt;/span&gt;URL feedUrl = &lt;span style="color: #7f0055"&gt;new &lt;/span&gt;URL(&lt;span style="color: #2a00ff"&gt;&amp;quot;http://www.blogger.com/feeds/&amp;quot; &lt;/span&gt;+ blogId + &lt;span style="color: #2a00ff"&gt;&amp;quot;/posts/default&amp;quot;&lt;/span&gt;);
            
        Feed resultFeed = myService.getFeed(feedUrl, Feed.&lt;span style="color: #7f0055"&gt;class&lt;/span&gt;);

        &lt;span style="color: #3f7f5f"&gt;// Setting the number of posts to retrieve...
        &lt;/span&gt;resultFeed.setTotalResults(1000);
        
        List&amp;lt;Entry&amp;gt; posts = resultFeed.getEntries();
        
        &lt;span style="color: #3f7f5f"&gt;// Print the results
        &lt;/span&gt;System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println(resultFeed.getTitle().getPlainText());
        
        &lt;span style="color: #7f0055"&gt;for &lt;/span&gt;(Entry post : posts)
        {
            &lt;span style="color: #7f0055"&gt;if&lt;/span&gt;(post.getTitle().getPlainText().contains(search))
            {
                System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println(&lt;span style="color: #2a00ff"&gt;&amp;quot;\t&amp;quot; &lt;/span&gt;+ post.getTitle().getPlainText());
            }
        }
        
        System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println();
    }
}&lt;/pre&gt;

&lt;p&gt;In the code above you need to replace accordingly the following parts:&lt;/p&gt;

&lt;p&gt;- YourEmailAddress 
  &lt;br /&gt;- YourPassword 

  &lt;br /&gt;- YourBlogID&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References 
    &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://code.google.com/apis/blogger/code.html" target="_blank"&gt;Blogger Client Libraries and Sample Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide_dotnet.html" target="_blank"&gt;Blogger Developer's Guide: .NET&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide_java.html" target="_blank"&gt;Blogger Developer's Guide: Java&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-7303839205232754434?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/ycxO8d2j4TE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/7303839205232754434/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/google-blogger-net-java-client-apis.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7303839205232754434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7303839205232754434?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/ycxO8d2j4TE/google-blogger-net-java-client-apis.html" title="Blogger Posts Searcher using Google Data .NET/Java Client APIs" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/google-blogger-net-java-client-apis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8FSXY_cCp7ImA9WhRSFkg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-5282781320130718481</id><published>2011-11-13T19:52:00.001-02:00</published><updated>2011-11-18T21:10:18.848-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T21:10:18.848-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="RavenDB" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="NoSQL" /><category scheme="http://www.blogger.com/atom/ns#" term="management UI" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>RavenDB Embedded with Management Studio UI</title><content type="html">&lt;p align="center"&gt;Go directly to &lt;a href="http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html#NoteToSelf"&gt;solution&lt;/a&gt; with no bla bla bla…&lt;/p&gt;  &lt;p&gt;I’ve been playing with &lt;a href="http://ravendb.net/" target="_blank"&gt;RavenDB&lt;/a&gt; (a &lt;a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank"&gt;NoSQL&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Document-oriented_database" target="_blank"&gt;document-oriented&lt;/a&gt; database) in an ASP.NET MVC 4 project for the past week. One thing I tried to do was to access &lt;a href="http://ayende.com/blog/125953/peeking-behind-the-curtains-the-new-ravendb-management-studio" target="_blank"&gt;RavenDB Management Studio UI&lt;/a&gt; so that I could see what’s actually present within the document store. This is important because one needs to check if docs are really being inserted, related docs are being deleted, etc…&lt;/p&gt;  &lt;p&gt;Given that I’m running the embedded version of RavenDB (&lt;code&gt;&lt;a href="http://www.nuget.org/List/Packages/RavenDB-Embedded" target="_blank"&gt;RavenDB-Embedded.1.0.499&lt;/a&gt;&lt;/code&gt; package installed via NuGet in Visual Studio 2010), I was stuck trying to access the management studio since there isn’t much documentation on this subject when it comes to the &lt;code&gt;EmbeddableDocumentStore.&lt;/code&gt; After struggling with it for about an hour of Googling and try and error, I decided to post a question at StackOverflow: &lt;a href="http://stackoverflow.com/q/8112966/114029" target="_blank"&gt;Running RavenDB as an EmbeddableDocumentStore and accessing RavenDB Management Studio&lt;/a&gt;. Then I took a break to have launch and took a nap. After that I got back here to try a different approach and it really does work. Of course this is &lt;em&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;only a way&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt; to achieve what I want. This may not be the best approach but it’s enough. Just follow theses steps:&lt;/p&gt;  &lt;p&gt;1 - Grab RavenDB latest build here:    &lt;br /&gt;&lt;a title="http://builds.hibernatingrhinos.com/downloadlatest/ravendb" href="http://builds.hibernatingrhinos.com/downloadlatest/ravendb" target="_blank"&gt;http://builds.hibernatingrhinos.com/downloadlatest/ravendb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2 - Extract the files to &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;3 - Edit the &lt;font size="2" face="Courier New"&gt;.config&lt;/font&gt; file in &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499\Server\Raven.Server.exe.config&lt;/font&gt; to point to your embedded database:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;span style="color: #008080"&gt;&amp;lt;appSettings&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/Port&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;8088&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/DataDir&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;C:\MyProject\trunk\MyProject\        &lt;br /&gt;App_Data\Database&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/AnonymousAccess&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Get&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;4 - Click the &lt;font size="2" face="Courier New"&gt;Start.cmd&lt;/font&gt; present in the root folder &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499\Start.cmd&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The server status output window should appear while it starts:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-3Jxbaq1XUeM/TsA8AeLHEZI/AAAAAAAABUc/Vgknn1XiURU/s1600-h/RavenDBServerStartCmdOutputWindow%25255B14%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB server status window" border="0" alt="RavenDB server status window" src="http://lh5.ggpht.com/-Xq-s_fNk3Cg/TsA8CmgWFoI/AAAAAAAABUg/bOx4QaJ15ls/RavenDBServerStartCmdOutputWindow_thumb%25255B10%25255D.png?imgmax=800" width="525" height="694" /&gt;&lt;/a&gt;Figure 1 - RavenDB server status window&lt;/p&gt;  &lt;p&gt;When the server finishes its starting process, the Silverlight Management UI should be automatically opened in your preferred browser.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-LFVw-gBTPio/TsA8DfXaGqI/AAAAAAAABUk/61SHbksONCU/s1600-h/RavenDBManagementStudioUIEmbeddedDatabase%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB Management UI (Web UI)" border="0" alt="RavenDB Management UI (Web UI)" src="http://lh5.ggpht.com/-CyU87qPqfLE/TsA8EqA2O8I/AAAAAAAABUo/IZ5xSZbOPIU/RavenDBManagementStudioUIEmbeddedDatabase_thumb%25255B7%25255D.png?imgmax=800" width="525" height="510" /&gt;&lt;/a&gt;Figure 2 - RavenDB Management Studio UI (Web UI)&lt;/p&gt;  &lt;p&gt;Now I can see my docs, indexes, etc… and I hope you can too! :D&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a name="NoteToSelf"&gt;&lt;strong&gt;Note to self          &lt;br /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;According to &lt;a href="http://stackoverflow.com/questions/8112966/running-ravendb-as-an-embeddabledocumentstore-and-accessing-ravendb-management-s/8115796#8115796" target="_blank"&gt;John Allers&lt;/a&gt;, one should be able to access the Management Studio without having to start the server manually. That’s fine and I had already tried that, but I could not get it working at first (some days ago). This has led me to try everything else today and my last resort was posting a question at StackOverflow. After trying once more the same procedure, that is, trying to access the management studio using the URL http://localhost:8080, I finally got it working! Go figure. One possibility is that I had another service running on port 8080 when I first attempted to access the UI. As Windows has restarted since then, that service (&lt;a href="http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html" target="_blank"&gt;Hudson probably&lt;/a&gt;) that was running on port 8080 is stopped and now everything just works as expected.&lt;/p&gt;  &lt;p&gt;Things to do:&lt;/p&gt;  &lt;p&gt;1 - Instantiate your &lt;span style="color: #2b91af"&gt;&lt;font size="2" face="Courier New"&gt;EmbeddableDocumentStore&lt;/font&gt; &lt;/span&gt;this way:&lt;/p&gt;  &lt;pre class="code"&gt;_documentStore = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EmbeddableDocumentStore
            &lt;/span&gt;{
                ConnectionStringName = &lt;span style="color: #a31515"&gt;&amp;quot;YourDbName&amp;quot;&lt;/span&gt;,
                &lt;strong&gt;UseEmbeddedHttpServer&lt;/strong&gt; = &lt;span style="color: blue"&gt;true
            &lt;/span&gt;};&lt;/pre&gt;

&lt;p&gt;2 - Copy &lt;font size="2" face="Courier New"&gt;Raven.Studio.xap&lt;/font&gt; present in C:\RavenDB-Build-499\Server\ folder to the root folder of your web project&lt;/p&gt;

&lt;p&gt;3 - Run you your web app&lt;/p&gt;

&lt;p&gt;4 - Access &lt;a href="http://localhost:8080"&gt;http://localhost:8080&lt;/a&gt; and voila… everything SHOULD work out of the box.&lt;/p&gt;

&lt;p&gt;5 - Select Default Database:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-pc0yCbBlrrY/TsB5CxSPrUI/AAAAAAAABUs/YSw_trvcakw/s1600-h/RavenDBManagementStudioSelectDatabase%25255B6%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB Management Studio accessed without running the server manually" border="0" alt="RavenDB Management Studio accessed without running the server manually" src="http://lh6.ggpht.com/-VtF9-5DItqg/TsB5EO295oI/AAAAAAAABU0/OTHEM5K21Fo/RavenDBManagementStudioSelectDatabase_thumb%25255B4%25255D.png?imgmax=800" width="525" height="519" /&gt;&lt;/a&gt;Figure 3 - RavenDB Management Studio accessed without running the server manually&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Resources&lt;/strong&gt; 

  &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/pt-br/magazine/hh547101%28en-us%29.aspx" target="_blank"&gt;Embedding RavenDB into an ASP.NET MVC 3 Application&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-5282781320130718481?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Bd6oWEEwmBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/5282781320130718481/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/5282781320130718481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/5282781320130718481?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Bd6oWEEwmBs/ravendb-embedded-management-studio-ui.html" title="RavenDB Embedded with Management Studio UI" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Xq-s_fNk3Cg/TsA8CmgWFoI/AAAAAAAABUg/bOx4QaJ15ls/s72-c/RavenDBServerStartCmdOutputWindow_thumb%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQHw-fCp7ImA9WhRTFkU.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-1417726054433716448</id><published>2011-11-05T21:09:00.001-02:00</published><updated>2011-11-07T14:41:21.254-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T14:41:21.254-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="parallel programming" /><category scheme="http://www.blogger.com/atom/ns#" term="data structures" /><category scheme="http://www.blogger.com/atom/ns#" term="algorithms" /><category scheme="http://www.blogger.com/atom/ns#" term="traversal" /><category scheme="http://www.blogger.com/atom/ns#" term="queue" /><category scheme="http://www.blogger.com/atom/ns#" term="job interview" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="graph" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="tree" /><title>Tree Graph Ordered Traversal Level by Level in C#</title><content type="html">&lt;p&gt;Recently as part of a job interview process, I was asked to solve some programming problems. This post shows the solution for one of such problems.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problem      &lt;br /&gt;&lt;/strong&gt;The problem ( or could we call it an algorithm exercise? ) is this:&lt;/p&gt;  &lt;p&gt;Consider a &lt;a href="en.wikipedia.org/wiki/Tree_(data_structure)" target="_blank"&gt;tree&lt;/a&gt; of integers. Knowing that its root node is 0, and given its &lt;a href="http://en.wikipedia.org/wiki/Adjacency_list" target="_blank"&gt;adjacency list&lt;/a&gt; as a two dimensional array of integers, write a function that prints out the elements/nodes in order/level by level starting from the root. That is, the root is printed in the first line, elements that can be reached from the root by a path of distance 1 in the second line, elements reached by a path of distance 2 in the third line, and so forth. For example, given the following adjacency list (draw the tree for a better view):&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;0 =&amp;gt; 1, 2, 3      &lt;br /&gt;1 =&amp;gt; 0, 4       &lt;br /&gt;2 =&amp;gt; 0       &lt;br /&gt;3 =&amp;gt; 0, 5       &lt;br /&gt;4 =&amp;gt; 1, 6       &lt;br /&gt;5 =&amp;gt; 3       &lt;br /&gt;6 =&amp;gt; 4&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The program should print:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;0      &lt;br /&gt;1 2 3       &lt;br /&gt;4 5       &lt;br /&gt;6&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Little bit of theory      &lt;br /&gt;&lt;/strong&gt;If you read about &lt;a href="http://en.wikipedia.org/wiki/Tree_%28graph_theory%29" target="_blank"&gt;Tree in Graph theory&lt;/a&gt;, you’ll see that we can represent a tree using a graph because a tree is an &lt;a href="http://en.wikipedia.org/wiki/Undirected_graph" target="_blank"&gt;undirected graph&lt;/a&gt; in which any two &lt;a href="http://en.wikipedia.org/wiki/Vertex_%28graph_theory%29" target="_blank"&gt;vertices&lt;/a&gt; are connected by &lt;i&gt;exactly one&lt;/i&gt; &lt;a href="http://en.wikipedia.org/wiki/Path_%28graph_theory%29" target="_blank"&gt;simple path&lt;/a&gt;. In other words, any connected graph without &lt;a href="http://en.wikipedia.org/wiki/Cycle_%28graph_theory%29" target="_blank"&gt;cycles&lt;/a&gt; is a tree.&lt;/p&gt;  &lt;p&gt;The tree in this problem isn’t a &lt;a href="http://en.wikipedia.org/wiki/Binary_tree" target="_blank"&gt;binary tree&lt;/a&gt;, it’s a &lt;a href="http://en.wikipedia.org/wiki/K-ary_tree" target="_blank"&gt;n-ary tree&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;     &lt;br /&gt;With theory in mind, here goes my proposed solution…&lt;/p&gt;  &lt;p&gt;I’m reusing some code from &lt;a href="http://www.leniel.net/2008/01/breadth-and-depth-first-search-part-2.html" target="_blank"&gt;past posts&lt;/a&gt;. In special, the Graph, AdjacencyList, Node, NodeList and EdgeToNeighbor classes.&lt;/p&gt;  &lt;p&gt;I use this method to fill a Graph with the Tree structure:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Fills a graph with a given tree structure.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&amp;quot;graph&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;private static void &lt;/span&gt;FillGraphWithTreeStructure(&lt;span style="color: #2b91af"&gt;Graph &lt;/span&gt;graph)
{
    &lt;span style="color: green"&gt;// Vertexes
    &lt;/span&gt;graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);

    &lt;span style="color: green"&gt;// Edges
    &lt;/span&gt;graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;);
    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;);
    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;);

    &lt;span style="color: green"&gt;/* This is the tree:
               
            0
          / | \
         1  2  3
        /       \
       4         5
      /
     6
             
        This is the expected output:
             
        Level 1 = 0
        Level 2 = 1 2 3
        Level 3 = 4 5
        Level 4 = 6

    */
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;This is the method that does the hard work:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Performs an ordered level-by-level traversal in a n-ary tree from &lt;/span&gt;&lt;span style="color: green"&gt;top-to-bottom and left-to-right.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &lt;/span&gt;&lt;span style="color: green"&gt;Each tree level is written in a new line.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt; 
/// &amp;lt;param name=&amp;quot;root&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Tree's root node&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;LevelByLevelTraversal(&lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;root)
{
    &lt;span style="color: green"&gt;// At any given time each queue will only have nodes that
    // belong to a level
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue1 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();
    &lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue2 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();

    queue1.Enqueue(root);

    &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0 || queue2.Count != 0)
    {
        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;u = queue1.Dequeue();

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(u.Key);

            &lt;span style="color: green"&gt;// Expanding u's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;u.Neighbors)
            {
                queue2.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();

        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue2.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;v = queue2.Dequeue();

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(v.Key);

            &lt;span style="color: green"&gt;// Expanding v's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;v.Neighbors)
            {
                queue1.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
    }
}&lt;/pre&gt;

&lt;p&gt;To spice things up I have implemented a &lt;a href="http://www.leniel.net/2009/11/parallel-linq-plinq-visual-studio-2010.html" target="_blank"&gt;Parallel&lt;/a&gt; version of the above method using a &lt;a href="http://msdn.microsoft.com/en-us/library/dd267265.aspx" target="_blank"&gt;ConcurrentQueue&lt;/a&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Performs an ordered level-by-level traversal in a n-ary tree from &lt;/span&gt;&lt;span style="color: green"&gt;top-to-bottom and left-to-right in Parallel using a ConcurrentQueue.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &lt;/span&gt;&lt;span style="color: green"&gt;Each tree level is written in a new line.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt; 
/// &amp;lt;param name=&amp;quot;root&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Tree's root node&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;LevelByLevelTraversalInParallel(&lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;root)
{
    &lt;span style="color: green"&gt;// At any given time each queue will only have nodes that
    // belong to a level
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue1 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();
    &lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue2 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();

    queue1.Enqueue(root);

    &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0 || queue2.Count != 0)
    {
        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;u;
                    
            queue1.TryDequeue(&lt;span style="color: blue"&gt;out &lt;/span&gt;u);

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(u.Key);

            &lt;span style="color: green"&gt;// Expanding u's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;u.Neighbors)
            {
                queue2.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();

        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue2.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;v;
                    
            queue2.TryDequeue(&lt;span style="color: blue"&gt;out &lt;/span&gt;v);

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(v.Key);

            &lt;span style="color: green"&gt;// Expanding v's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;v.Neighbors)
            {
                queue1.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
    }
}&lt;/pre&gt;

&lt;p&gt;Now it’s time to measure the execution time using a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx" target="_blank"&gt;StopWatch&lt;/a&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
{
    &lt;span style="color: #2b91af"&gt;Graph &lt;/span&gt;graph = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Graph&lt;/span&gt;();

    FillGraphWithTreeStructure(graph);

    &lt;span style="color: #2b91af"&gt;Stopwatch &lt;/span&gt;stopWatch = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Stopwatch&lt;/span&gt;();

    stopWatch.Start();

    LevelByLevelTraversal(graph.Nodes[&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;]);

    stopWatch.Stop();

    &lt;span style="color: green"&gt;// Write time elapsed
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Time elapsed: &lt;/span&gt;&lt;span style="color: #3cb371"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&lt;/span&gt;, stopWatch.Elapsed);

    &lt;span style="color: green"&gt;//Resetting the watch...
    &lt;/span&gt;stopWatch.Reset();

    stopWatch.Start();

    LevelByLevelTraversalInParallel(graph.Nodes[&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;]);

    stopWatch.Stop();

    &lt;span style="color: green"&gt;// Write time elapsed
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Time elapsed: &lt;/span&gt;&lt;span style="color: #3cb371"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&lt;/span&gt;, stopWatch.Elapsed);

    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;

&lt;p align="left"&gt;Now the results:&lt;/p&gt;

&lt;p align="center"&gt;&lt;font style="background-color: #9bbb59"&gt;Sequential 
    &lt;br /&gt;&lt;/font&gt;0 

  &lt;br /&gt;1 2 3 

  &lt;br /&gt;4 5 

  &lt;br /&gt;6 

  &lt;br /&gt;&lt;strong&gt;&lt;font style="background-color: #000000" color="#ffffff" size="3"&gt;Time elapsed: 00:00:00.0040340&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;font style="background-color: #ffc000"&gt;Parallel&lt;/font&gt; 

  &lt;br /&gt;0 

  &lt;br /&gt;1 2 3 

  &lt;br /&gt;4 5 

  &lt;br /&gt;6 

  &lt;br /&gt;&lt;strong&gt;&lt;font style="background-color: #000000" color="#ffffff" size="3"&gt;Time elapsed: 00:00:00.0020186&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p align="left"&gt;As you see, time is cut by a factor of 2. I currently have a Core 2 Duo processor in &lt;a href="http://www.leniel.net/2010/09/developing-for-iphone-with-mac-mini.html" target="_blank"&gt;my Mac mini&lt;/a&gt;.&lt;/p&gt;

&lt;p align="left"&gt;Hope you enjoy it and feel free to add your 2 cents to improve this code! Of course there are other ways of solving this very problem and I would like to see those other ways. Do you have any other better idea?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;

  &lt;br /&gt;You can get the Microsoft Visual Studio Console Application Project at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/leniel/blog/TreeLevelTraversal.rar"&gt;https://sites.google.com/site/leniel/blog/TreeLevelTraversal.rar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try out the code you can use the free Microsoft Visual C# 2010 Express Edition that you can get at: &lt;a title="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express" target="_blank"&gt;http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-1417726054433716448?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/0h3Z8sy9Hac" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/1417726054433716448/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/nary-tree-graph-traversal-level-by.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1417726054433716448?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1417726054433716448?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/0h3Z8sy9Hac/nary-tree-graph-traversal-level-by.html" title="Tree Graph Ordered Traversal Level by Level in C#" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/nary-tree-graph-traversal-level-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MHQ3o4fCp7ImA9WhdaFks.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-3017407576624030895</id><published>2011-10-25T18:49:00.001-02:00</published><updated>2011-10-26T20:50:32.434-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T20:50:32.434-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TortoiseSVN" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><category scheme="http://www.blogger.com/atom/ns#" term="revision control" /><category scheme="http://www.blogger.com/atom/ns#" term="Hudson" /><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild" /><category scheme="http://www.blogger.com/atom/ns#" term="software engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="repository" /><category scheme="http://www.blogger.com/atom/ns#" term="batch file" /><category scheme="http://www.blogger.com/atom/ns#" term="hooks" /><category scheme="http://www.blogger.com/atom/ns#" term="VisualSVN Server" /><title>SVN, Hudson &amp; MSBuild - Building code on post commit</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;SVN, Hudson and MSBuild - Revision control repository&lt;/a&gt;     &lt;br /&gt;
&lt;a href="http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html" target="_blank"&gt;SVN, Hudson and MSBuild - Continuous Integration&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This is the third and last installment in the series I’m writing about &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html"&gt;SVN, Hudson and MSBuild&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Today I’m going to show you the last piece that actually makes the whole thing work. We could call this the plumbing. The piece lies within a specific SVN folder related to your project. It’s called hooks. The path to the hooks folder is this:&lt;/p&gt;&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project’s hooks folder before the set up" border="0" alt="Project’s hooks folder before the set up" src="http://lh5.ggpht.com/-Iy0DOmmByqA/Tqcg4_yauII/AAAAAAAABTc/mSH_rx5tNiY/SVNHooksFolderPath%25255B7%25255D.png?imgmax=800" width="525" height="421" /&gt;Figure 1 - Project’s hooks folder before the setup&lt;/p&gt;&lt;p&gt;As you can see there are some template files ( .tmpl ). The one we’re going to use to inform Hudson that it’s time to build the code just committed to the repository is the file &lt;font size="2" face="Courier New"&gt;post.commit.tmpl&lt;/font&gt;. Make a copy of this file and change its extension to &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; since it’ll be used by SVN to execute some commands. The file should be named &lt;font size="2" face="Courier New"&gt;post-commit.bat&lt;/font&gt;.&lt;/p&gt;&lt;p&gt;Open the &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; file and add this code at the end:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;SET REPOS=%1      &lt;br /&gt;
SET REV=%2       &lt;br /&gt;
SET CSCRIPT=C:\WINDOWS\system32\cscript.exe       &lt;br /&gt;
SET VBSCRIPT=C:\svn\post-commit-hook-hudson.vbs       &lt;br /&gt;
SET SVNLOOK=C:\Program Files\VisualSVN Server\bin\svnlook.exe       &lt;br /&gt;
SET HUDSON=http://leniel-pc:8080/       &lt;br /&gt;
&amp;quot;%CSCRIPT%&amp;quot; &amp;quot;%VBSCRIPT%&amp;quot; &amp;quot;%REPOS%&amp;quot; %REV% &amp;quot;%SVNLOOK%&amp;quot; %HUDSON%&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Note above that we’re setting some vars and pointing to some specific files:&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;CSCRIPT&lt;/strong&gt;&lt;/font&gt; points to &lt;font size="2" face="Courier New"&gt;cscript.exe&lt;/font&gt; file that should be present in your Windows system32 folder.&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;VBSCRIPT&lt;/strong&gt;&lt;/font&gt; points to to the &lt;font size="2" face="Courier New"&gt;post-commit-hook-hudson.vbs&lt;/font&gt; file and its code is as follows:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;repos&amp;#160;&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;0&lt;/font&gt;)       &lt;br /&gt;
rev&amp;#160;&amp;#160;&amp;#160;&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;1&lt;/font&gt;)       &lt;br /&gt;
svnlook = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;2&lt;/font&gt;)       &lt;br /&gt;
hudson&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;3&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; shell = WScript.CreateObject(&lt;font color="#008040"&gt;&amp;quot;WScript.Shell&amp;quot;&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; uuidExec = shell.Exec(svnlook &amp;amp; &lt;font color="#008040"&gt;&amp;quot; uuid &amp;quot;&lt;/font&gt; &amp;amp; repos)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Do Until&lt;/strong&gt;&lt;/font&gt; uuidExec.StdOut.AtEndOfStream       &lt;br /&gt;
&amp;#160; uuid = uuidExec.StdOut.ReadLine()       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Loop&lt;/strong&gt;&lt;/font&gt;       &lt;br /&gt;
Wscript.Echo &lt;font color="#008040"&gt;&amp;quot;uuid=&amp;quot;&lt;/font&gt; &amp;amp; uuid&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;&lt;font color="#9b00d3"&gt;Set&lt;/font&gt;&lt;/strong&gt; changedExec = shell.Exec(svnlook &amp;amp; &lt;font color="#008040"&gt;&amp;quot; changed --revision &amp;quot;&lt;/font&gt; &amp;amp; rev &amp;amp; &amp;quot; &amp;quot; &amp;amp; repos)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Do Until&lt;/strong&gt;&lt;/font&gt; changedExec.StdOut.AtEndOfStream       &lt;br /&gt;
&amp;#160; changed = changed + changedExec.StdOut.ReadLine() + Chr(&lt;font color="#ff0000"&gt;10&lt;/font&gt;)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Loop&lt;/strong&gt;&lt;/font&gt;       &lt;br /&gt;
Wscript.Echo &lt;font color="#008040"&gt;&amp;quot;changed=&amp;quot;&lt;/font&gt; &amp;amp; changed&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;url = hudson + &lt;font color="#008040"&gt;&amp;quot;subversion/&amp;quot;&lt;/font&gt; + uuid + &lt;font color="#008040"&gt;&amp;quot;/notifyCommit?rev=&amp;quot;&lt;/font&gt; + rev       &lt;br /&gt;
Wscript.Echo url&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; http = CreateObject(&lt;font color="#008040"&gt;&amp;quot;Microsoft.XMLHTTP&amp;quot;&lt;/font&gt;)       &lt;br /&gt;
http.open &lt;font color="#008040"&gt;&amp;quot;POST&amp;quot;&lt;/font&gt;, url, &lt;font color="#9b00d3"&gt;&lt;strong&gt;False          &lt;br /&gt;
&lt;/strong&gt;&lt;/font&gt;http.setRequestHeader &amp;quot;Content-Type&amp;quot;, &lt;font color="#008040"&gt;&amp;quot;text/plain;charset=UTF-8&amp;quot;&lt;/font&gt;       &lt;br /&gt;
http.send changed&lt;/font&gt;&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;SVNLOOK&lt;/strong&gt;&lt;/font&gt; points to &lt;font size="2" face="Courier New"&gt;svnlook.exe&lt;/font&gt; file that comes with VisualSVN Server (see &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;part 1&lt;/a&gt; of this series for more details about it).&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;HUDSON&lt;/strong&gt;&lt;/font&gt; points to your Hudson server address. Change it accordingly.&lt;/p&gt;&lt;p&gt;With it all configured we should be ready to get an automatic build when code is committed to the repository.&lt;/p&gt;&lt;p&gt;To test your environment, change any file already versioned and commit it. Open Hudson in your browser and watch a new build start automatically.&lt;/p&gt;&lt;p&gt;If you look in Hudson’s build Console Output you’ll see that the build was initiated by an SCM change.&lt;/p&gt;&lt;p&gt;That’s all!&lt;/p&gt;&lt;p&gt;This is how your SVN project hooks folder should look like now:&lt;/p&gt;&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project’s hooks folder after the set up" border="0" alt="Project’s hooks folder after the set up" src="http://lh5.ggpht.com/-ZoSgncwYyYM/Tqcg7g07Z9I/AAAAAAAABTg/beAaSg2bDYI/SVNHooksFolder%25255B6%25255D.png?imgmax=800" width="525" height="453" /&gt;Figure 2 - Project’s hooks folder after the setup&lt;/p&gt;&lt;p&gt;Can you spot another &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; file in the folder? It’s the &lt;font size="2" face="Courier New"&gt;pre-revprop-change.bat&lt;/font&gt;. I’ve been using it so that I can modify the commit’s log message/comment when I forget to mention something or to correct spelling. More info about this file can be seen in this StackOverflow question: &lt;a href="http://stackoverflow.com/q/197224/114029" target="_blank"&gt;What is a pre-revprop-change hook in SVN and how do I create it?&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-3017407576624030895?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Mn8Q3S0YqjQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/3017407576624030895/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3017407576624030895?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3017407576624030895?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Mn8Q3S0YqjQ/svn-hudson-msbuild-building-code-commit.html" title="SVN, Hudson &amp; MSBuild - Building code on post commit" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Iy0DOmmByqA/Tqcg4_yauII/AAAAAAAABTc/mSH_rx5tNiY/s72-c/SVNHooksFolderPath%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMQXc9cCp7ImA9WhdaE0U.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-905480740721435942</id><published>2011-10-22T20:32:00.001-02:00</published><updated>2011-10-23T13:09:40.968-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T13:09:40.968-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="Last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="profile" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="BBCode" /><category scheme="http://www.blogger.com/atom/ns#" term="tracking" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title>Tracking Last.fm profile visits with Google Analytics</title><content type="html">&lt;p&gt;I'm a big fan of analytics data; therefore I try to collect stats about anything – like visitors that check my web pages/profiles. It’s no different with my Last.fm profile.&lt;/p&gt;  &lt;p&gt;Last.fm profile page uses &lt;a href="http://en.wikipedia.org/wiki/BBCode" target="_blank"&gt;BBCode&lt;/a&gt;&amp;#160;&lt;a href="http://www.last.fm/forum/markup" target="_blank"&gt;markup&lt;/a&gt; that is a lightweight markup language used to format posts in many message boards and unfortunately it has no JavaScript support.     &lt;br /&gt;&lt;a href="http://www.google.com/analytics" target="_blank"&gt;Google Analytics&lt;/a&gt; (GA) on the other hand makes use of JavaScript code when it comes to the tracking code one must include in their website. This causes a frustrating experience to anyone that tries to integrate the GA tracking code in places where JavaScript code isn’t accepted.&lt;/p&gt;  &lt;p&gt;While searching for a solution some time ago I didn’t find a way to solve this impedance, but yesterday after putting a little bit more caring on my Google search query, I finally found a way of filling the gap so that both services could talk to each other: &lt;a href="http://nojsstats.blogspot.com/" target="_blank"&gt;NoJSStats&lt;/a&gt;, short for No JavaScript Stats is the missing piece. It’s a free web service. Basically NoJSStats uses&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;a href="http://code.google.com/appengine/" target="_blank"&gt;Google App Engine&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;to track visitors using just an image or anything that allows external resource requests in the website you want to track.&lt;/p&gt;  &lt;p&gt;Here’s what you need to do in order to get analytics data popping up at your Google Analytics account in respect to your Last.fm profile:&lt;/p&gt;  &lt;p&gt;First, let’s configure GA side…&lt;/p&gt;  &lt;p&gt;1 - Go to Google Analytics and click the Gear icon at the top right of any page and create a new Web Property:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title=" Creating a new Last.fm Google Analytics Web Property" border="0" alt=" Creating a new Last.fm Google Analytics Web Property" src="http://lh3.ggpht.com/-Am6hqXkfCc0/TqNEakGV29I/AAAAAAAABSk/qhtEXJ1fMfM/GoogleAnalyticsNewWebProperty%25255B10%25255D.png?imgmax=800" width="440" height="367" /&gt;Figure 1 - Creating a new Last.fm Google Analytics Web Property&lt;/p&gt;  &lt;p align="left"&gt;2 - Name the Web Property and in the Web Site URL field enter your Last.fm profile URL and click Create property:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Filling Last.fm Web Property with correct data" border="0" alt="Filling Last.fm Web Property with correct data" src="http://lh6.ggpht.com/-NGk9NA18NKE/TqNEcSQdgPI/AAAAAAAABSo/qh6VoRb9B6o/GoogleAnalyticsLastfmWebProperty%25255B6%25255D.png?imgmax=800" width="525" height="229" /&gt;Figure 2 - Filling Last.fm Web Property with the correct data&lt;/p&gt;  &lt;p&gt;3 - Take note of the Web Property ID assigned to your new Web Property:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Checking Web Property ID that’ll be used when configuring Last.fm profile" border="0" alt="Checking Web Property ID that’ll be used when configuring Last.fm profile" src="http://lh5.ggpht.com/-KLAuVEuy6MI/TqNEdQPkWAI/AAAAAAAABSs/76I8AXawMmo/LastFmWebPropertyId%25255B9%25255D.png?imgmax=800" width="226" height="60" /&gt;Figure 3 - Checking Web Property ID that’ll be used when configuring Last.fm profile&lt;/p&gt;  &lt;p&gt;Now let’s configure Last.fm side:&lt;/p&gt;  &lt;p&gt;4 - Edit your Last.fm profile clicking in the Edit link located in the right side of your profile page:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Edit button used to get access to Last.fm profile data" border="0" alt="Edit button used to get access to Last.fm profile data" src="http://lh3.ggpht.com/-J0DENPMmaVU/TqNEesAhYvI/AAAAAAAABSw/jFw-a6svUAs/LastFmProfileEditLink%25255B10%25255D.png?imgmax=800" width="316" height="212" /&gt;Figure 4 - Edit button used to get access to Last.fm profile data&lt;/p&gt;  &lt;p&gt;5 - Head to the “About You” field and add this line at the end:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;[img]http://nojsstats.appspot.com/&lt;font style="background-color: #ffc000"&gt;UA-1234567-89&lt;/font&gt;/&lt;font style="background-color: #a5b592"&gt;www.last.fm/user/leniel&lt;/font&gt;[/img]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Do not forget to click the Save details button.&lt;/p&gt;  &lt;p&gt;Two things related to that img URL deserve a note here:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ffc000"&gt;►&lt;/font&gt; You’re using the Last.fm GA Web Property ID, for example UA-1234567-89 taken from step 3 above.     &lt;br /&gt;&lt;font color="#a5b592"&gt;►&lt;/font&gt; You’re pointing to your Last.fm profile at the last part of the URL.&lt;/p&gt;  &lt;p&gt;DO CHANGE these two parts accordingly.&lt;/p&gt;  &lt;p&gt;Interesting enough to try is that if you copy &amp;amp; paste the URL from step 5 in your browser, you get this result:&lt;/p&gt;  &lt;p&gt;http://www.google-analytics.com/__utm.gif?utmwv=1&amp;amp;utmn=37172618&amp;amp;utmsr=-&amp;amp;utmsc=-&amp;amp;utmul=-&amp;amp;utmje=0&amp;amp;utmfl=-&amp;amp;utmdt=-&amp;amp;utmhn=www.last.fm/user/leniel&amp;amp;utmr=&amp;amp;utmp=&amp;amp;utmac=UA-1234567-89&amp;amp;utmcc=__utma%3D167996071.415430387.1319322154.1319322154.1319322154.1%   &lt;br /&gt;3B%2B__utmb%3D167996071%3B%2B__utmc%3D167996071%3B%2B__utmz%    &lt;br /&gt;3D167996071.1319322154.2.2.utmccn%3D%28direct%29%7Cutmcsr%3D%28direct%    &lt;br /&gt;29%7Cutmcmd%3D%28none%29%3B%2B__utmv%3D167996071.189.24.47.122%3B&lt;/p&gt;  &lt;p&gt;Awesome! &lt;a href="http://nojsstats.blogspot.com/" target="_blank"&gt;NoJSStat&lt;/a&gt;s does its magic and all GA data -- every single item is assembled and packed into the Request URL's query string (everything after the '?'). For more technical details, see this StackOverflow question: &lt;a href="http://stackoverflow.com/q/4170190/114029" target="_blank"&gt;Why does Google Analytics use __utm.gif?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is everything you need to do. Easy, no?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you have problems     &lt;br /&gt;&lt;/strong&gt;I have tested this workflow and it’s indeed working as expected. In case you can’t get it working:&lt;/p&gt;  &lt;p&gt;If you check the Tracking Code status in GA it says: &amp;quot;Tracking Not Installed&amp;quot;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Last.fm Tracking Code status" border="0" alt="Last.fm Tracking Code status" src="http://lh6.ggpht.com/-6g7g7wd2Xk8/TqQuMxSSOnI/AAAAAAAABS0/Aah8jPaDJjg/GoogleAnalyticsTrackingCodeNotInstalled%25255B6%25255D.png?imgmax=800" width="525" height="270" /&gt;Figure 5 - Last.fm Tracking Code status&lt;/p&gt;  &lt;p&gt;It doesn't matter... really. That's because we aren't using the standard JavaScript code provided by GA. GA is waiting to detect the presence of that code. We are not using this approach and so it's OK if it reports &amp;quot;Tracking Not Installed&amp;quot;.&lt;/p&gt;  &lt;p&gt;Analytics data appear within a time frame. It's not real-time at the moment.&lt;/p&gt;  &lt;p&gt;If you still do not see any data after a day or two, please leave a comment in this post and I’ll try to help.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Final notes&lt;/strong&gt;    &lt;br /&gt;You should also see data on GA about your own visits to your profile! You can block this from being counted. Check this: &lt;a href="https://www.google.com/support/googleanalytics/bin/answer.py?answer=55481&amp;amp;hl=en_US" target="_blank"&gt;How do I exclude my internal traffic from reports?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One of the advantages of using this approach instead of others like &lt;a href="http://flagcounter.com/index.html" target="_blank"&gt;FLAG counter&lt;/a&gt; that I usually see all over Last.fm profiles is that you keep your data private and get way more stats from your visitors.&lt;/p&gt;  &lt;p&gt;Last.fm is missing visitor Analytics features in its current incarnation. I sure hope it implements something interesting in this area.&lt;/p&gt;  &lt;p&gt;For now, I hope you get a better insight of how your profile is performing in the internetz.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-905480740721435942?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xqUJ7V6ULfd02JZnxrzqHwOuE64/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xqUJ7V6ULfd02JZnxrzqHwOuE64/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xqUJ7V6ULfd02JZnxrzqHwOuE64/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xqUJ7V6ULfd02JZnxrzqHwOuE64/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=qmdVUBA7uZQ:ZzZ4PcRofeA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=qmdVUBA7uZQ:ZzZ4PcRofeA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=qmdVUBA7uZQ:ZzZ4PcRofeA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=qmdVUBA7uZQ:ZzZ4PcRofeA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=qmdVUBA7uZQ:ZzZ4PcRofeA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/qmdVUBA7uZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/905480740721435942/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/10/track-lastfm-profile-google-analytics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/905480740721435942?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/905480740721435942?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/qmdVUBA7uZQ/track-lastfm-profile-google-analytics.html" title="Tracking Last.fm profile visits with Google Analytics" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-Am6hqXkfCc0/TqNEakGV29I/AAAAAAAABSk/qhtEXJ1fMfM/s72-c/GoogleAnalyticsNewWebProperty%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/10/track-lastfm-profile-google-analytics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACQnk5eip7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-1768654616873374816</id><published>2011-08-22T14:29:00.001-03:00</published><updated>2011-09-08T16:06:03.722-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T16:06:03.722-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GitHub" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="revision control" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="Xcode" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="repository" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>Xcode iPhone beginner projects with GitHub integration</title><content type="html">&lt;p&gt;I decided to follow a different path to learn software development for the iPhone - instead of online tutorials and Apple docs I got a book. I postponed my &lt;a href="http://www.leniel.net/2010/09/developing-for-iphone-with-mac-mini.html" target="_blank"&gt;desire to learn&lt;/a&gt; but it’s time to revive it. I grabbed a beginner’s book on the subject: &lt;a href="http://www.amazon.com/iOS-SDK-Programming-Beginners-Guide/dp/0071759085" target="_blank"&gt;A Beginner's Guide to iOS SDK Programming&lt;/a&gt; by James A. Brannan &amp;amp; Black Ward. This book covers iOS 4.2 + Xcode 4. iOS 5 is on the verge of being released…&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-confusedsmile" alt="Smiley confuso" src="http://lh6.ggpht.com/-hi5PpPpjR24/TlKR8FqLTcI/AAAAAAAABQI/t_YRPJ0KFiQ/wlEmoticon-confusedsmile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;I had to download the recent &lt;a href="http://en.wikipedia.org/wiki/Xcode" target="_blank"&gt;Xcode&lt;/a&gt; and its accompanying &lt;a href="http://en.wikipedia.org/wiki/Software_development_kit" target="_blank"&gt;SDK&lt;/a&gt; bits again ( 3.17 GB ) as the ones I had installed were out of date (from September 2010) &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-thinkingsmile" alt="Smiley pensativo" src="http://lh6.ggpht.com/-_MFbFszkdGo/TlKR8rfNzlI/AAAAAAAABQM/k_6LE-iV8Mk/wlEmoticon-thinkingsmile%25255B2%25255D.png?imgmax=800" /&gt;. It was just a matter of hitting &lt;a href="http://en.wikipedia.org/wiki/Mac_App_Store" target="_blank"&gt;Mac App Store&lt;/a&gt; and looking for Xcode. The download has everything you need to install to be able to follow the book samples.&lt;/p&gt;  &lt;p&gt;As I started creating the sample projects in Xcode I thought it’d be an excellent opportunity to store these samples in an online repository ( repo ) with &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;source code control&lt;/a&gt; for further reference and to share/allow the beginner developer to download and study all the samples. It’s also a good chance I have to play with &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29" target="_blank"&gt;Git&lt;/a&gt; since I’ve been using &lt;a href="http://en.wikipedia.org/wiki/Apache_Subversion" target="_blank"&gt;Subversion&lt;/a&gt; during the last years.&lt;/p&gt;  &lt;p&gt;This post covers the basics to integrate Xcode with &lt;a href="https://github.com/" target="_blank"&gt;GitHub&lt;/a&gt; for the Mac OS user. GitHub is a web-based hosting service for software development projects that use the Git revision control system.&lt;/p&gt;  &lt;p&gt;I try to synthetize lengthy and scattered docs you find on the subject and provide links to key docs and posts…&lt;/p&gt;  &lt;p&gt;I learned how to use Xcode Organizer to integrate my online GitHub repository with Xcode built in support for software control management and started sending the projects to GitHub right after the second book sample. It’s better to start early or you’ll never do it!&lt;/p&gt;  &lt;p&gt;This article in Mac OS Developer Library: &lt;a href="http://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/SCM/SCM.html" target="_blank"&gt;Managing Versions of Your Project&lt;/a&gt; has everything you need to configure your project to use it with Git.&lt;/p&gt;  &lt;p&gt;When you create an online/remote repository in GitHub you get instructions on how to set up the repo as getting a copy of the repo to work locally in your computer or sending an existing project to the remote repo. This help article from GitHub clarifies some things: &lt;a href="http://help.github.com/mac-set-up-git/" target="_blank"&gt;Set up Git in Mac OS&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This post has the steps you have to follow to get a GitHub repo to work with Xcode projects: &lt;a href="http://www.smartapps.co/2011/01/version-control-system-with-xcode-4-and-git-tutorial/" target="_blank"&gt;Version Control System with XCode 4 and Git Tutorial&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You’ll have to use &lt;a href="http://en.wikipedia.org/wiki/Apple_Terminal" target="_blank"&gt;Mac OS Terminal&lt;/a&gt; to type some commands. Nothing difficult.    &lt;br /&gt;
As a matter of fact you should familiarize yourself with Terminal if you haven’t yet. The real fun is when you play with git commands in Terminal (take for example the powerful &lt;a href="http://help.github.com/rebase/" target="_blank"&gt;rebase&lt;/a&gt; command). Later in this post I’m going to use the support offered by Xcode which has UI for basic git commands as commit, push, pull, merge, etc - but Xcode doesn’t give you the power of the full set of git commands that are only available through the command line.&lt;/p&gt;  &lt;p&gt;These are the Terminal commands I typed to send the book’s initial sample projects (QuickStart and C Main Project) to my remote repository located at GitHub: &lt;a title="https://github.com/leniel/iPhone-Beginner-Guide" href="https://github.com/leniel/iPhone-Beginner-Guide" target="_blank"&gt;https://github.com/leniel/iPhone-Beginner-Guide&lt;/a&gt;    &lt;br /&gt;
Take a special look at the highlighted commands:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Last login: Fri Aug 19 19:29:32 on ttys001     &lt;br /&gt;
Leniel-Macaferis-Mac-mini:~ leniel$ cd /      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:/ leniel$ cd iPhone      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:iPhone leniel$ cd Local      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:Local leniel$ ls      &lt;br /&gt;
C Main Project&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; iPhone Beginner's Guide.xcworkspace      &lt;br /&gt;
QuickStart      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:Local leniel$ cd QuickStart      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:QuickStart leniel$ ls      &lt;br /&gt;
QuickStart&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; QuickStart.xcodeproj      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:QuickStart leniel$ &lt;font style="background-color: #ffc000"&gt;git remote add origin &lt;/font&gt;&lt;font style="background-color: #ffc000"&gt;git@github.com:leniel/iPhone-Beginner-Guide.git&lt;/font&gt;      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:QuickStart leniel$ &lt;font style="background-color: #ffc000"&gt;git push -u origin master&lt;/font&gt;      &lt;br /&gt;
Counting objects: 16, done.      &lt;br /&gt;
Delta compression using up to 2 threads.      &lt;br /&gt;
Compressing objects: 100% (14/14), done.      &lt;br /&gt;
Writing objects: 100% (16/16), 8.27 KiB, done.      &lt;br /&gt;
Total 16 (delta 2), reused 0 (delta 0)     &lt;br /&gt;
To git@github.com:leniel/iPhone-Beginner-Guide.git      &lt;br /&gt;
 * [new branch]&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; master -&gt; master      &lt;br /&gt;
Branch master set up to track remote branch master from origin.      &lt;br /&gt;
&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;     &lt;br /&gt;
Leniel-Macaferis-Mac-mini:Local leniel$ cd &amp;quot;C Main Project&amp;quot;      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:C Main Project leniel$ ls      &lt;br /&gt;
C Main Project&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; C Main Project.xcodeproj      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:C Main Project leniel$ &lt;font style="background-color: #ffc000"&gt;git push -u origin master&lt;/font&gt;      &lt;br /&gt;
To git@github.com:leniel/iPhone-Beginner-Guide.git      &lt;br /&gt;
&lt;font style="background-color: #dd8484"&gt;! [rejected]&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; master -&gt; master (non-fast-forward)       &lt;br /&gt;
error: failed to push some refs to 'git@github.com:leniel/iPhone-Beginner-Guide.git'        &lt;br /&gt;
To prevent you from losing history, non-fast-forward updates were rejected.        &lt;br /&gt;
Merge the remote changes (e.g. 'git pull') before pushing again.&lt;/font&gt;&amp;#160; See the 'Note about fast-forwards' section of 'git push --help' for details.      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:C Main Project leniel$ &lt;font style="background-color: #ffc000"&gt;git pull origin&lt;/font&gt; master      &lt;br /&gt;
warning: no common commits      &lt;br /&gt;
remote: Counting objects: 16, done.      &lt;br /&gt;
remote: Compressing objects: 100% (12/12), done.      &lt;br /&gt;
remote: Total 16 (delta 2), reused 16 (delta 2)      &lt;br /&gt;
Unpacking objects: 100% (16/16), done.      &lt;br /&gt;
From github.com:leniel/iPhone-Beginner-Guide      &lt;br /&gt;
 * branch&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; master&amp;#160;&amp;#160;&amp;#160;&amp;#160; -&gt; FETCH_HEAD      &lt;br /&gt;
Merge made by recursive.      &lt;br /&gt;
 QuickStart.xcodeproj/project.pbxproj&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160; 288 ++++++++++++++      &lt;br /&gt;
 QuickStart/QuickStart-Info.plist&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 38 ++      &lt;br /&gt;
 QuickStart/QuickStart-Prefix.pch&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 14 +      &lt;br /&gt;
 QuickStart/QuickStartAppDelegate.h&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 19 +    &lt;br /&gt;
 QuickStart/QuickStartAppDelegate.m&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 73 ++++      &lt;br /&gt;
 QuickStart/QuickStartViewController.h&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 13 +      &lt;br /&gt;
 QuickStart/QuickStartViewController.m&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 44 +++      &lt;br /&gt;
 QuickStart/en.lproj/InfoPlist.strings&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160;&amp;#160; 2 +      &lt;br /&gt;
 QuickStart/en.lproj/MainWindow.xib&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160; 444 ++++++++++++++++++++++      &lt;br /&gt;
 QuickStart/en.lproj/QuickStartViewController.xib |&amp;#160; 156 ++++++++      &lt;br /&gt;
 QuickStart/main.m&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; 17 +      &lt;br /&gt;
 11 files changed, 1108 insertions(+), 0 deletions(-)      &lt;br /&gt;
 create mode 100644 QuickStart.xcodeproj/project.pbxproj     &lt;br /&gt;
 create mode 100644 QuickStart/QuickStart-Info.plist      &lt;br /&gt;
 create mode 100644 QuickStart/QuickStart-Prefix.pch      &lt;br /&gt;
 create mode 100644 QuickStart/QuickStartAppDelegate.h     &lt;br /&gt;
 create mode 100644 QuickStart/QuickStartAppDelegate.m      &lt;br /&gt;
 create mode 100644 QuickStart/QuickStartViewController.h    &lt;br /&gt;
 create mode 100644 QuickStart/QuickStartViewController.m      &lt;br /&gt;
 create mode 100644 QuickStart/en.lproj/InfoPlist.strings      &lt;br /&gt;
 create mode 100644 QuickStart/en.lproj/MainWindow.xib      &lt;br /&gt;
 create mode 100644 QuickStart/en.lproj/QuickStartViewController.xib      &lt;br /&gt;
 create mode 100644 QuickStart/main.m      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:C Main Project leniel$ &lt;font style="background-color: #ffc000"&gt;git push -u origin master&lt;/font&gt;      &lt;br /&gt;
Counting objects: 14, done.      &lt;br /&gt;
Delta compression using up to 2 threads.      &lt;br /&gt;
Compressing objects: 100% (12/12), done.      &lt;br /&gt;
Writing objects: 100% (13/13), 3.95 KiB, done.      &lt;br /&gt;
Total 13 (delta 3), reused 0 (delta 0)     &lt;br /&gt;
To git@github.com:leniel/iPhone-Beginner-Guide.git      &lt;br /&gt;
&amp;#160;&amp;#160; 05ec270..fe84a7a&amp;#160; master -&gt; master      &lt;br /&gt;
Branch master set up to track remote branch master from origin.      &lt;br /&gt;
Leniel-Macaferis-Mac-mini:C Main Project leniel$&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;Great! With the above commands I have sent both projects to my repo located at GitHub.&lt;/p&gt;  &lt;p&gt;It’s important to note that for each project I created in Xcode I selected the option to create a local git repository as shown in &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure1"&gt;Figure 1&lt;/a&gt;:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a name="Figure1"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Xcode - Selecting Create local git repository for this project" border="0" alt="Xcode - Selecting Create local git repository for this project" src="http://lh6.ggpht.com/-B08PcQDnZno/TlKR_F-3FLI/AAAAAAAABQU/ZQlCkdYRk3M/XcodeCreateLocalGitRepository_thumb%25255B3%25255D.png?imgmax=800" width="525" height="434" /&gt;&lt;/a&gt;Figure 1 - Xcode - Selecting Create local git repository for this project&lt;/p&gt;  &lt;p&gt;With this in place I can now safely delete my local copy of both projects (folder Local I used above in Terminal commands) and work directly with the code of my remote repository. Let’s do it:&lt;/p&gt;  &lt;p&gt;Open Xcode Organizer selecting the menu Window =&gt; Organizer:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a name="Figure2"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Organizer window accessible through Xcode’s Window menu" border="0" alt="Organizer window accessible through Xcode’s Window menu" src="http://lh4.ggpht.com/-o-Avv81agA4/TlKSCEI5ujI/AAAAAAAABQc/T_5lb06097U/XcodeOrganizerRepositories_thumb%25255B3%25255D.png?imgmax=800" width="525" height="419" /&gt;&lt;/a&gt;Figure 2 - Organizer window accessible through Xcode’s Window menu&lt;/p&gt;    &lt;p&gt;I suppose you have already configured and added (+ button in the bottom left of &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure2"&gt;Figure 2&lt;/a&gt;) your GitHub repo (green circle in &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure2"&gt;Figure 2&lt;/a&gt;) to the Organizer following the docs I linked above.&lt;/p&gt;  &lt;p&gt;To get a local working copy of your remote repository you must click the Clone button (see bottom part of &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure2"&gt;Figure 2&lt;/a&gt;) and choose a location to place the repo files. After doing this you’ll get a new repo (mine is located in the folder /iPhone/iPhone-Beginner-Guide as you see in &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure2"&gt;Figure 2&lt;/a&gt;). When I click my local copy of the repo I get this beautiful screen where I can see commit comments and changes I made to each file along the way (click to enlarge):&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-EKePUMws6mU/TlKSD4i-DnI/AAAAAAAABQg/P1zWS_smqO4/s1600-h/XcodeLocalWorkingCopyOfGitHubRepository%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Local ( Clone ) copy of my online GitHub repository seen in Xcode Organizer" border="0" alt="Local ( Clone ) copy of my online GitHub repository seen in Xcode Organizer" src="http://lh3.ggpht.com/-JhQnddsZfuI/TlKSFXdHkyI/AAAAAAAABQk/OuhJJrX0fJs/XcodeLocalWorkingCopyOfGitHubRepository_thumb%25255B3%25255D.png?imgmax=800" width="525" height="419" /&gt;&lt;/a&gt;Figure 3 - Local ( Clone ) copy of my online GitHub repository seen in Xcode Organizer&lt;/p&gt;  &lt;p&gt;Now it’s just a matter of working and modifying the project files or adding new projects and commit them to the repository through the menu File =&gt; Source Control =&gt; Commit…&lt;/p&gt;  &lt;p&gt;One more important note is: when you commit something, it’s just committed in your local copy. You need one additional step: push the changes to GitHub. In Xcode you can select the file(s) or project(s) you want and go to File =&gt; Source Control =&gt; Push… For more on this, read: &lt;a href="http://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/Xcode4UserGuide/SCM/SCM.html#//apple_ref/doc/uid/TP40010215-CH7-SW1" target="_blank"&gt;Commit Files to Add Them to a Repository&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In my case, when I select Push I get this Xcode dialog where I can select the Remote endpoint (&lt;a href="https://github.com/leniel/iPhone-Beginner-Guide" target="_blank"&gt;GitHub repository&lt;/a&gt;) to which my committed files will go:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Xcode Push user interface and GitHub remote location" border="0" alt="Xcode Push user interface and GitHub remote location" src="http://lh4.ggpht.com/-821eyX0-uLM/TlPb9wxJzOI/AAAAAAAABQ0/6Pf8g1aqPfQ/XcodePushDialog%25255B5%25255D.png?imgmax=800" width="451" height="165" /&gt;Figure 4 - Xcode Push user interface and GitHub remote location&lt;/p&gt;  &lt;p align="left"&gt;As a bonus I created a &lt;a href="http://developer.apple.com/library/ios/#featuredarticles/XcodeConcepts/Concept-Workspace.html" target="_blank"&gt;Workspace&lt;/a&gt; as seen in &lt;a href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#Figure5"&gt;Figure 5&lt;/a&gt; to have all the sample projects at hand in a single Xcode window. The workspace has references to the projects and work somewhat like Microsoft Visual Studio’s solution file if you’re used to Microsoft developer tools. The workspace helps a lot during the commit and push tasks!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a name="Figure5"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Xcode workspace with projects at left side pane" border="0" alt="Xcode workspace with projects at left side pane" src="http://lh6.ggpht.com/-Nv-4lKI-8IE/TlMc-P56PBI/AAAAAAAABQo/xGGx_1gUc0Y/XcodeWorkspace_thumb%25255B38%25255D.png?imgmax=800" width="525" height="356" /&gt;&lt;/a&gt;Figure 5 - Xcode workspace with projects at left side pane&lt;/p&gt;  &lt;p&gt;Well, I’m new to this new Xcode world and I think I’ll learn a lot from these simple sample beginner projects.&lt;/p&gt;  &lt;p&gt;The next thing I'm gonna do is learn what file types I can ignore when committing… Thanks to StackOverflow there’s already a question addressing this very topic: &lt;a href="http://stackoverflow.com/q/49478/114029" target="_blank"&gt;Git ignore file for Xcode projects&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Edit: following the advice of the above StackOverflow question, I added a &lt;a href="https://github.com/leniel/iPhone-Beginner-Guide/blob/master/.gitignore" target="_blank"&gt;.gitignore&lt;/a&gt; file to the repo.&lt;/p&gt;  &lt;p&gt;Hope this helps.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-1768654616873374816?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P3MqDWGegcubfnggrEX4eM44fOc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P3MqDWGegcubfnggrEX4eM44fOc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P3MqDWGegcubfnggrEX4eM44fOc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P3MqDWGegcubfnggrEX4eM44fOc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=4S6BzBLHHFo:NGObMp8PujA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=4S6BzBLHHFo:NGObMp8PujA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=4S6BzBLHHFo:NGObMp8PujA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=4S6BzBLHHFo:NGObMp8PujA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=4S6BzBLHHFo:NGObMp8PujA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/4S6BzBLHHFo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/1768654616873374816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1768654616873374816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1768654616873374816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/4S6BzBLHHFo/xcode-iphone-beginner-projects-git.html" title="Xcode iPhone beginner projects with GitHub integration" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-hi5PpPpjR24/TlKR8FqLTcI/AAAAAAAABQI/t_YRPJ0KFiQ/s72-c/wlEmoticon-confusedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/08/xcode-iphone-beginner-projects-git.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUINRns9cSp7ImA9WhdRGEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-8274305917452346809</id><published>2011-08-06T13:18:00.001-03:00</published><updated>2011-08-08T12:33:17.569-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-08T12:33:17.569-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="SSMS" /><category scheme="http://www.blogger.com/atom/ns#" term="image" /><category scheme="http://www.blogger.com/atom/ns#" term="bulk" /><category scheme="http://www.blogger.com/atom/ns#" term="update" /><category scheme="http://www.blogger.com/atom/ns#" term="linked server" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="select" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>SQL UPDATE statement with SELECT and SQL Server Image data type column</title><content type="html">&lt;p&gt;In a SQL Server database I have a table called &lt;font size="2" face="Courier New"&gt;users&lt;/font&gt; which has a column named &lt;font face="Courier New"&gt;signature&lt;/font&gt;. This column is of type Image.&lt;/p&gt;  &lt;p&gt;My production SQL Server is located in a &lt;a href="http://en.wikipedia.org/wiki/Shared_web_hosting_service" target="_blank"&gt;shared hosting environment&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;One problem I’ve been facing lately is that I need permission to execute an &lt;font size="2" face="Courier New"&gt;&lt;a href="http://en.wikipedia.org/wiki/Update_%28SQL%29" target="_blank"&gt;UPDATE&lt;/a&gt;&lt;/font&gt; statement to insert a signature image for a given user. This problem occurs because to insert a signature image for a given user I have to execute a &lt;a href="http://msdn.microsoft.com/en-us/library/ms175915.aspx" target="_blank"&gt;&lt;font size="2" face="Courier New"&gt;BULK&lt;/font&gt;&lt;/a&gt; statement like this for example:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;p&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: red"&gt;&lt;font face="Courier New"&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;--Update existing user
&lt;/span&gt;&lt;span style="color: blue"&gt;UPDATE &lt;/span&gt;users &lt;span style="color: blue"&gt;SET &lt;/span&gt;[signature] &lt;span style="color: gray"&gt;=(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT &lt;/span&gt;MyImage&lt;span style="color: gray"&gt;.* &lt;/span&gt;&lt;span style="color: blue"&gt;from Openrowset&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;strong&gt;Bulk&lt;/strong&gt; &lt;/span&gt;&lt;span style="color: red"&gt;'C:\MyProject\trunk\MyCompany.Product\MyCompany.Product.Web\&lt;br /&gt;Images\Signature.jpg'&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;Single_Blob&lt;/span&gt;&lt;span style="color: gray"&gt;) &lt;/span&gt;MyImage&lt;span style="color: gray"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;Id &lt;br /&gt;&lt;span style="color: gray"&gt;= &lt;/span&gt;&lt;span style="color: red"&gt;'1111aaaa-1111-11aa-a111-111111a1a1a1'&lt;/span&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The query above works fine in my local machine but when I tried to execute it on the remote/production server, I got this beautiful message:&lt;strong&gt;&lt;em&gt;You do not have permission to use the bulk load statement.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the shared hosting environment the execution of Bulk command is disabled by default for security reasons. This is annoying but totally understandable!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Using Bulk load - allows the user to populate a database from a file. It’s not available in shared environment because it is necessary to insert client files on SQL server locally (the production server).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So… great! I need a way to bypass this limitation because I won’t spend tubes of money paying a dedicated server… it’d make sense if and only if I needed a dedicated server.&lt;/p&gt;

&lt;p&gt;1st try: import a specific user row from my local SQL Server to the remote instance using &lt;a href="http://www.leniel.net/2011/07/import-export-data-sql-server-database.html" target="_blank"&gt;SQL Server Management Studio Import task&lt;/a&gt;. I got an error about constraint key violation because I already had the same row (for that user) on both databases. It’s just a matter of updating the &lt;font size="2" face="Courier New"&gt;signature&lt;/font&gt; column in the production database. This seemed to be a pain path.&lt;/p&gt;

&lt;p&gt;2nd try: consider a dedicated server? &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-thinkingsmile" alt="Smiley pensativo" src="http://lh4.ggpht.com/-fSvpwmBs_64/Tj1pP_D33VI/AAAAAAAABP0/psLKYGUXpWw/wlEmoticon-thinkingsmile2.png?imgmax=800" /&gt; No thanks… hehehe&lt;/p&gt;

&lt;p&gt;3rd try and solution: a few days later I found myself thinking about this problem again (this signature column updating thing is a recurring task) and so I decided to find another way and it came to light - link the remote server to my local SQL Server Express instance and write a beautiful SQL query that does the job.&lt;/p&gt;

&lt;p&gt;First I stopped in this excellent blog post with a step by step guide written by jen: &lt;a href="http://www.jensbits.com/2010/11/10/create-linked-server-sql-server-2008/" target="_blank"&gt;Create Linked Server SQL Server 2008&lt;/a&gt; 

  &lt;br /&gt;This post provided everything I needed to link both SQL Server instances.&lt;/p&gt;

&lt;p&gt;To make sure you have linked your server correctly, you can execute this query in your local server:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;server_id&lt;span style="color: gray"&gt;, &lt;/span&gt;name&lt;span style="color: gray"&gt;, &lt;/span&gt;product&lt;span style="color: gray"&gt;, &lt;/span&gt;provider&lt;span style="color: gray"&gt;, &lt;/span&gt;data_source, [catalog],&lt;span style="color: gray"&gt; &lt;/span&gt;is_linked&lt;br /&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: green"&gt;sys&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: green"&gt;servers&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The above query gave me this result:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Linked servers linked to my local SQL Server Express instance" border="0" alt="Linked servers linked to my local SQL Server Express instance" src="http://lh4.ggpht.com/-EZcSzEvYK6c/Tj1pQkLsauI/AAAAAAAABP4/DcDTB7k_I1Y/SQLServerManagementStudio2008LinkedServersQuery.png?imgmax=800" width="525" height="71" /&gt; 

  &lt;br /&gt;Figure 1 - Linked servers linked to my local SQL Server Express instance&lt;/p&gt;

&lt;p&gt;Then I Googled about Update with Select + SQL Server or something like that and found this &lt;a href="http://www.leniel.net/2010/07/stackoverflow-best-place-share-learn.html" target="_blank"&gt;StackOverflow&lt;/a&gt; question: &lt;a href="http://stackoverflow.com/questions/3458880/updating-a-table-with-multiple-values-from-a-select-statement-where-the-date-matc" target="_blank"&gt;Updating a table with multiple values from a select statement where the date matches&lt;/a&gt;. Lieven’s &lt;a href="http://stackoverflow.com/questions/3458880/updating-a-table-with-multiple-values-from-a-select-statement-where-the-date-matc/3458906#3458906" target="_blank"&gt;answer&lt;/a&gt; helped. I just had to adapt it to my case. This is the SQL code that does the dirty work:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;UPDATE  &lt;/span&gt;U
&lt;span style="color: blue"&gt;SET     &lt;/span&gt;U&lt;span style="color: gray"&gt;.&lt;/span&gt;[signature] &lt;span style="color: gray"&gt;= &lt;/span&gt;users&lt;span style="color: gray"&gt;.&lt;/span&gt;[signature]
&lt;span style="color: blue"&gt;FROM    &lt;/span&gt;[LOCAWEB]&lt;span style="color: gray"&gt;.&lt;/span&gt;[laudotech]&lt;span style="color: gray"&gt;.&lt;/span&gt;[dbo]&lt;span style="color: gray"&gt;.&lt;/span&gt;[users] U &lt;span style="color: gray"&gt;INNER JOIN &lt;/span&gt;users&lt;br /&gt;&lt;span style="color: blue"&gt;ON &lt;/span&gt;users&lt;span style="color: gray"&gt;.&lt;/span&gt;id &lt;span style="color: gray"&gt;= &lt;/span&gt;U&lt;span style="color: gray"&gt;.&lt;/span&gt;id &lt;span style="color: gray"&gt;AND
&lt;/span&gt;U&lt;span style="color: gray"&gt;.&lt;/span&gt;id &lt;span style="color: gray"&gt;= &lt;/span&gt;&lt;span style="color: red"&gt;'1234aaaa-5678-90aa-b123-456789a0a1a2'&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The above query must be executed within the context of the &lt;em&gt;&lt;strong&gt;local&lt;/strong&gt;&lt;/em&gt; SQL Server instance of course. Where the linked server resides.&lt;/p&gt;

&lt;p&gt;To give you a view… this is how all this is configured inside &lt;a href="http://en.wikipedia.org/wiki/SQL_Server_Management_Studio" target="_blank"&gt;SQL Server Management Studio&lt;/a&gt; (SSMS):&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SSMS Object Explorer and the Linked Server LOCAWEB in my local SQL Server Express instance" border="0" alt="SSMS Object Explorer and the Linked Server LOCAWEB in my local SQL Server Express instance" src="http://lh5.ggpht.com/-F-ULjWUzCvw/Tj1pRenuLyI/AAAAAAAABP8/mEf-ycMcFoA/SQLServerManagementStudio2008LinkedServer.png?imgmax=800" width="384" height="394" /&gt;Figure 2 - SSMS Object Explorer and the Linked Server LOCAWEB in my local SQL Server Express instance&lt;/p&gt;

&lt;p&gt;There’s so many things one can do with SSMS that I feel really happy in learning one more of those things. Last week I blogged about &lt;a href="http://www.leniel.net/2011/07/import-export-data-sql-server-database.html" target="_blank"&gt;Import/Export SQL Server database data with SSMS&lt;/a&gt;. Take a look at it.&lt;/p&gt;

&lt;p&gt;Man! Have I said that I Iike working with databases!?&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-8274305917452346809?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6Xl8S5KXiF6S_UYOHEOuCMabmsM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Xl8S5KXiF6S_UYOHEOuCMabmsM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6Xl8S5KXiF6S_UYOHEOuCMabmsM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Xl8S5KXiF6S_UYOHEOuCMabmsM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=g6kGR-9hU-Q:LO5NnkFC8V0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=g6kGR-9hU-Q:LO5NnkFC8V0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=g6kGR-9hU-Q:LO5NnkFC8V0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=g6kGR-9hU-Q:LO5NnkFC8V0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=g6kGR-9hU-Q:LO5NnkFC8V0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/g6kGR-9hU-Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/8274305917452346809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/08/update-select-sql-server-image-column.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8274305917452346809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8274305917452346809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/g6kGR-9hU-Q/update-select-sql-server-image-column.html" title="SQL UPDATE statement with SELECT and SQL Server Image data type column" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-fSvpwmBs_64/Tj1pP_D33VI/AAAAAAAABP0/psLKYGUXpWw/s72-c/wlEmoticon-thinkingsmile2.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.leniel.net/2011/08/update-select-sql-server-image-column.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCQHs9eyp7ImA9WhdaFks.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-4366015258778171911</id><published>2011-07-30T13:37:00.001-03:00</published><updated>2011-10-26T20:49:21.563-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T20:49:21.563-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="revision control" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="Hudson" /><category scheme="http://www.blogger.com/atom/ns#" term="software engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild" /><category scheme="http://www.blogger.com/atom/ns#" term="repository" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><title>SVN, Hudson and MSBuild - Continuous Integration</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html"&gt;&lt;font style="font-weight: normal"&gt;SVN, Hudson and MSBuild - Revision control repository&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;
&lt;a href="http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html" target="_blank"&gt;SVN, Hudson and MSBuild - Building code on post commit&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This is the second installment in the series I’m writing about &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html"&gt;SVN, Hudson and MSBuild&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This time I’ll show you how to set up a job in Hudson to build and package an ASP.NET MVC 3 Hello World sample app (download it here). This job will point to the SVN repository set up in the &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;1st part&lt;/a&gt; of this series. I’ve committed the app’s source code to the trunk folder and it’s now versioned.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Question: Why should I use a Continuous Integration ( CI ) process?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Because it allows you to fine tune and extend your build process. You’ll be able to plug hooks in various stages of your build process. CI gives you more control over the process allowing an infinite set of possibilities as for example an automated build =&amp;gt; test =&amp;gt; package =&amp;gt; deploy scenario.&lt;/p&gt;&lt;p&gt;In this post I’m going to show this simple workflow: build =&amp;gt; package&lt;/p&gt;&lt;p&gt;So, to start off, the first thing you should do is to download Hudson at &lt;a title="http://hudson-ci.org/" href="http://hudson-ci.org/"&gt;http://hudson-ci.org/&lt;/a&gt;. The latest production version is &lt;a href="http://java.net/projects/hudson/downloads/download/war/hudson-2.1.0.war" target="_blank"&gt;2.1.0&lt;/a&gt; as of the time of this post. Download the &lt;a href="http://java.net/projects/hudson/downloads/download/war/hudson-2.1.0.war" target="_blank"&gt;.war file&lt;/a&gt; (53.3 MB) to your C:/ drive to keep things at hand. When the download finishes, read this thorough installation guide: &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Installing+Hudson+as+a+Windows+service" target="_blank"&gt;Install Hudson as a Windows service&lt;/a&gt;. This is how I’ve set up Hudson. There should be no errors if you follow the instructions.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note      &lt;br /&gt;
&lt;/strong&gt;&lt;tt&gt;&lt;font face="Arial"&gt;Open a command prompt at C:\ and type:&lt;/font&gt;&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;java -jar hudson-2.1.0.war&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;This will start Hudson and you should be able to install it as a service following this &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Installing+Hudson+as+a+Windows+service" target="_blank"&gt;link&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Now I suppose you have Hudson working on your machine.&lt;/p&gt;&lt;p&gt;Head over to you Hudson instance that is located at this URL by default:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;http://localhost:8080/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Let’s configure a new Job in Hudson:&lt;/p&gt;&lt;p align="center"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Selecting New Job in Hudson dashboard" border="0" alt="Selecting New Job in Hudson dashboard" src="http://lh3.ggpht.com/-wpS6A6YOBAo/TjNySxuUlVI/AAAAAAAABPg/fsjOaoKWfo4/HudsonNewJob%25255B1%25255D.png?imgmax=800" width="525" height="344" /&gt;Figure 1 - Selecting New Job in Hudson dashboard&lt;/p&gt;&lt;p&gt;When you click the New Job link you go to a screen where you can give a name to the job and choose what kind of build you want the job to execute.&lt;/p&gt;&lt;p&gt;I named the job HelloWorldMvc3 and selected Build a free-style software project because it fits the purpose of this series.&lt;/p&gt;&lt;p&gt;* As you can see I already have a job called &lt;a href="http://www.leniel.net/2011/06/buy-fitness-center-management-software.html" target="_blank"&gt;FitnessCenter&lt;/a&gt; configured.&lt;/p&gt;&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Naming the New Job and selecting the build type" border="0" alt="Naming the New Job and selecting the build type" src="http://lh4.ggpht.com/-DMnYNQlNYFk/TjQzRR2WD3I/AAAAAAAABPk/o2Izh39cu04/HudsonBuildFreeStyleSoftwareProject%25255B1%25255D.png?imgmax=800" width="525" height="424" /&gt;Figure 2 - Naming the New Job and selecting the build type&lt;/p&gt;&lt;p&gt;After clicking OK we go to a new page that allows us to enter detailed configuration settings. The following image shows the options I used (click the image to enlarge it):&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-_l_DVw9gMAo/TjQzTPn3oeI/AAAAAAAABPo/PN9uov4mxC4/s1600-h/HudsonHelloWorldMvc3Configuration%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Configuring the job and adding a Visual Studio project or solution build step" border="0" alt="Configuring the job and adding a Visual Studio project or solution build step" src="http://lh3.ggpht.com/-ks3jYaDEwIE/TjQzVS_1ZiI/AAAAAAAABPs/tYRepDxwqXw/HudsonHelloWorldMvc3Configuration_thumb%25255B1%25255D.png?imgmax=800" width="525" height="963" /&gt;&lt;/a&gt;Figure 3 - Configuring the job and adding a Visual Studio project or solution build step&lt;/p&gt;&lt;p&gt;Note above in the Source Code Management section that I have chosen Subversion and passed the Repository URL:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;file:///C:/svn/MyProject/trunk&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The path above is related to the SVN repository I set up &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The sample ASP.NET MVC 3 Hello World app is located in the /trunk folder.&lt;/p&gt;&lt;p&gt;Now we must add a build step to tell Hudson we want to build and package the app as part of the job execution. I have highlighted the option in blue in Figure 3 above. I selected Build a Visual Studio project or solution using &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;MSBuild&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;When you add that build step you must pass some info to Hudson as shown in the following picture:&lt;/p&gt;&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Selecting MSBuild version, filling MSBuild Build File and specifying the command line arguments" border="0" alt="Selecting MSBuild version, filling MSBuild Build File and specifying the command line arguments" src="http://lh4.ggpht.com/-2c7hF_Y56bc/TjQzXkHd04I/AAAAAAAABPw/xSBh2Is-C40/HudsonBuildVisualStudioProject%25255B1%25255D.png?imgmax=800" width="525" height="151" /&gt;&lt;/p&gt;&lt;p align="center"&gt;Figure 4 - Selecting MSBuild version, filling MSBuild Build File and specifying the command line arguments&lt;/p&gt;&lt;p align="left"&gt;MsBuild Build File = the path to the .proj or .sln file that MSBuild will use to build. This path is related to the trunk folder structure you have. In this case I have this folder structure:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;C:\MyProject\trunk\HelloWorldMvc3\HelloWorldMvc3.csproj&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Command Line Arguments = a whitespace separated list of command line arguments you can specify. These can be the same as if you were to run msbuild from the command line.&lt;/p&gt;&lt;p&gt;I used these command line arguments above to package the app:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;/T:Package /P:Configuration=Release;      &lt;br /&gt;
SolutionDir=&amp;quot;C:\hudson\jobs\MyProject\workspace\;       &lt;br /&gt;
PackageLocation=&amp;quot;C:\MyProject\Package.zip&amp;quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-pointingup" alt="Apontando para cima" src="http://lh6.ggpht.com/-gawLXcfNDkE/TjQzYUiEZQI/AAAAAAAABPc/NEicGDDid3c/wlEmoticon-pointingup%25255B2%25255D.png?imgmax=800" /&gt; These command line arguments are power in our hands…&lt;/p&gt;&lt;p&gt;You can also select post-build actions as to send an e-mail notification. If configured, Hudson will send out an e-mail to the specified recipients when a certain important event occurs:    &lt;br /&gt;
1 - Every failed build triggers a new e-mail.     &lt;br /&gt;
2 - A successful build after a failed (or unstable) build triggers a new e-mail, indicating that a crisis is over.     &lt;br /&gt;
3 - An unstable build after a successful build triggers a new e-mail, indicating that there's a regression.     &lt;br /&gt;
4 - Unless configured, every unstable build triggers a new e-mail, indicating that regression is still there.&lt;/p&gt;&lt;p&gt;When you finish the configuration, make sure to click the Save button.&lt;/p&gt;&lt;p&gt;This is everything you need to configure a new job in Hudson.&lt;/p&gt;&lt;p&gt;With this we achieved our objective, that is, Hudson and SVN are now plugged.&lt;/p&gt;&lt;p&gt;To run the job and build the app I just have to click the Build Now link in Hudson panel (see left menu bar at the top in Figure 3) but the great thing about a Continuous Integration process it to have the build process happen automatically and this is definitely possible.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;     &lt;br /&gt;
Hudson is a free CI server which makes it a viable option for the majority of developers and companies out there that don’t want to spend a lot of money with equivalent expensive software. Besides, as you saw in this post you can get it working with Subversion in a couple of minutes.&lt;/p&gt;&lt;p&gt;Hudson has a lot of additional goodies that you can and should explore. Go over each menu option to learn about its additional features.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Next in this series      &lt;br /&gt;
&lt;/strong&gt;In the &lt;a href="http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html" target="_blank"&gt;next and final part&lt;/a&gt; of this series I’m going to show you what’s missing to get SVN to inform Hudson that it’s time to build the code just committed to the repository. In the meanwhile I’ll entertain you with the Console Output regarding the first execution of the job we created in this post. It took only 08.33 seconds to build and package the app in a beautiful .zip package that can be used to deploy the app in IIS (I'll do a blog post about this topic in the future):&lt;/p&gt;&lt;pre&gt;Started by user anonymous
Checking out file:///C:/svn/MyProject/trunk
A         HelloWorldMvc3.sln
AU        HelloWorldMvc3.suo
A         HelloWorldMvc3
A         HelloWorldMvc3\HelloWorldMvc3.csproj
A         HelloWorldMvc3\Properties
A         HelloWorldMvc3\Properties\AssemblyInfo.cs
A         HelloWorldMvc3\Web.Release.config
A         HelloWorldMvc3\packages.config
A         HelloWorldMvc3\Global.asax
A         HelloWorldMvc3\Controllers
A         HelloWorldMvc3\Controllers\HomeController.cs
A         HelloWorldMvc3\Controllers\AccountController.cs
A         HelloWorldMvc3\Web.Debug.config
A         HelloWorldMvc3\App_Data
A         HelloWorldMvc3\Scripts
A         HelloWorldMvc3\Scripts\modernizr-1.7.js
A         HelloWorldMvc3\Scripts\jquery.validate.js
A         HelloWorldMvc3\Scripts\jquery.unobtrusive-ajax.js
A         HelloWorldMvc3\Scripts\MicrosoftMvcValidation.js
A         HelloWorldMvc3\Scripts\jquery.validate-vsdoc.js
A         HelloWorldMvc3\Scripts\MicrosoftMvcAjax.js
A         HelloWorldMvc3\Scripts\jquery.validate.unobtrusive.min.js
A         HelloWorldMvc3\Scripts\MicrosoftMvcValidation.debug.js
A         HelloWorldMvc3\Scripts\jquery-1.5.1-vsdoc.js
A         HelloWorldMvc3\Scripts\MicrosoftMvcAjax.debug.js
A         HelloWorldMvc3\Scripts\jquery-ui-1.8.11.min.js
A         HelloWorldMvc3\Scripts\jquery-1.5.1.min.js
A         HelloWorldMvc3\Scripts\MicrosoftAjax.js
A         HelloWorldMvc3\Scripts\jquery-ui-1.8.11.js
A         HelloWorldMvc3\Scripts\jquery-1.5.1.js
A         HelloWorldMvc3\Scripts\MicrosoftAjax.debug.js
A         HelloWorldMvc3\Scripts\modernizr-1.7.min.js
A         HelloWorldMvc3\Scripts\jquery.validate.min.js
A         HelloWorldMvc3\Scripts\jquery.unobtrusive-ajax.min.js
A         HelloWorldMvc3\Scripts\jquery.validate.unobtrusive.js
A         HelloWorldMvc3\Content
A         HelloWorldMvc3\Content\themes
A         HelloWorldMvc3\Content\themes\base
A         HelloWorldMvc3\Content\themes\base\jquery.ui.base.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.slider.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.button.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.progressbar.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.accordion.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.theme.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.selectable.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.resizable.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.autocomplete.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.dialog.css
A         HelloWorldMvc3\Content\themes\base\images
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-icons_2e83ff_256x240.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-icons_222222_256x240.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-icons_888888_256x240.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-icons_454545_256x240.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-icons_cd0a0a_256x240.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png
AU        HelloWorldMvc3\Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png
A         HelloWorldMvc3\Content\themes\base\jquery.ui.datepicker.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.all.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.tabs.css
A         HelloWorldMvc3\Content\themes\base\jquery.ui.core.css
A         HelloWorldMvc3\Content\Site.css
A         HelloWorldMvc3\Global.asax.cs
A         HelloWorldMvc3\Models
A         HelloWorldMvc3\Models\AccountModels.cs
A         HelloWorldMvc3\Web.config
A         HelloWorldMvc3\Views
A         HelloWorldMvc3\Views\Shared
A         HelloWorldMvc3\Views\Shared\_Layout.cshtml
A         HelloWorldMvc3\Views\Shared\Error.cshtml
A         HelloWorldMvc3\Views\Shared\_LogOnPartial.cshtml
A         HelloWorldMvc3\Views\_ViewStart.cshtml
A         HelloWorldMvc3\Views\Web.config
A         HelloWorldMvc3\Views\Account
A         HelloWorldMvc3\Views\Account\ChangePasswordSuccess.cshtml
A         HelloWorldMvc3\Views\Account\LogOn.cshtml
A         HelloWorldMvc3\Views\Account\Register.cshtml
A         HelloWorldMvc3\Views\Account\ChangePassword.cshtml
A         HelloWorldMvc3\Views\Home
A         HelloWorldMvc3\Views\Home\Index.cshtml
A         HelloWorldMvc3\Views\Home\About.cshtml
AU        HelloWorldMvc3.sln.docstates.suo
A         packages
A         packages\jQuery.UI.Combined.1.8.11
A         packages\jQuery.UI.Combined.1.8.11\Content
A         packages\jQuery.UI.Combined.1.8.11\Content\Scripts
A         packages\jQuery.UI.Combined.1.8.11\Content\Scripts\jquery-ui-1.8.11.min.js
A         packages\jQuery.UI.Combined.1.8.11\Content\Scripts\jquery-ui-1.8.11.js
A         packages\jQuery.UI.Combined.1.8.11\Content\Content
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.base.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.slider.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.button.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.progressbar.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.accordion.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.theme.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.selectable.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.resizable.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.autocomplete.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.dialog.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-icons_2e83ff_256x240.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-icons_222222_256x240.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-icons_888888_256x240.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-icons_454545_256x240.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-icons_cd0a0a_256x240.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png
AU        packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.datepicker.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.all.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.tabs.css
A         packages\jQuery.UI.Combined.1.8.11\Content\Content\themes\base\jquery.ui.core.css
AU        packages\jQuery.UI.Combined.1.8.11\jQuery.UI.Combined.1.8.11.nupkg
A         packages\jQuery.Validation.1.8.0
A         packages\jQuery.Validation.1.8.0\Content
A         packages\jQuery.Validation.1.8.0\Content\Scripts
A         packages\jQuery.Validation.1.8.0\Content\Scripts\jquery.validate.js
A         packages\jQuery.Validation.1.8.0\Content\Scripts\jquery.validate-vsdoc.js
A         packages\jQuery.Validation.1.8.0\Content\Scripts\jquery.validate.min.js
AU        packages\jQuery.Validation.1.8.0\jQuery.Validation.1.8.0.nupkg
A         packages\jQuery.vsdoc.1.5.1
A         packages\jQuery.vsdoc.1.5.1\Content
A         packages\jQuery.vsdoc.1.5.1\Content\Scripts
A         packages\jQuery.vsdoc.1.5.1\Content\Scripts\jquery-1.5.1-vsdoc.js
AU        packages\jQuery.vsdoc.1.5.1\jQuery.vsdoc.1.5.1.nupkg
A         packages\repositories.config
A         packages\EntityFramework.4.1.10331.0
AU        packages\EntityFramework.4.1.10331.0\EntityFramework.4.1.10331.0.nupkg
A         packages\EntityFramework.4.1.10331.0\lib
AU        packages\EntityFramework.4.1.10331.0\lib\EntityFramework.dll
A         packages\EntityFramework.4.1.10331.0\lib\EntityFramework.xml
A         packages\jQuery.1.5.1
AU        packages\jQuery.1.5.1\jQuery.1.5.1.nupkg
A         packages\jQuery.1.5.1\Content
A         packages\jQuery.1.5.1\Content\Scripts
A         packages\jQuery.1.5.1\Content\Scripts\jquery-1.5.1.min.js
A         packages\jQuery.1.5.1\Content\Scripts\jquery-1.5.1.js
A         packages\Modernizr.1.7
AU        packages\Modernizr.1.7\Modernizr.1.7.nupkg
A         packages\Modernizr.1.7\Content
A         packages\Modernizr.1.7\Content\Scripts
A         packages\Modernizr.1.7\Content\Scripts\modernizr-1.7.min.js
A         packages\Modernizr.1.7\Content\Scripts\modernizr-1.7.js
At revision 2
Path To MSBuild.exe: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Executing command: cmd.exe /C C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /T:Package /P:Configuration=Debug;SolutionDir=C:\hudson\jobs\MyProject\workspace\;PackageLocation=C:\MyProject\Package.zip HelloWorldMvc3\HelloWorldMvc3.csproj &amp;amp;&amp;amp; exit %%ERRORLEVEL%%
[workspace] $ cmd.exe /C C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /T:Package /P:Configuration=Debug;SolutionDir=C:\hudson\jobs\MyProject\workspace\;PackageLocation=C:\MyProject\Package.zip HelloWorldMvc3\HelloWorldMvc3.csproj &amp;amp;&amp;amp; exit %%ERRORLEVEL%%
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.454]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 7/30/2011 12:16:23 AM.
Project &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\HelloWorldMvc3.csproj&amp;quot; on node 1 (Package target(s)).
ValidateGlobalPackageSetting:
  $(PackageAsSingleFile) is True
  $(PackageFileName) is C:\MyProject\Package.zip. Validating...
PrepareForBuild:
  Creating directory &amp;quot;bin\&amp;quot;.
  Creating directory &amp;quot;obj\Debug\&amp;quot;.
GenerateTargetFrameworkMonikerAttribute:
Skipping target &amp;quot;GenerateTargetFrameworkMonikerAttribute&amp;quot; because all output files are up-to-date with respect to the input files.
CoreCompile:
  c:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\hudson\jobs\HelloWorldMvc3\workspace\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.dll /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ComponentModel.DataAnnotations.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Configuration.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.DataSetExtensions.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.EnterpriseServices.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Abstractions.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.ApplicationServices.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.DynamicData.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Entity.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Extensions.dll&amp;quot; /reference:&amp;quot;c:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Helpers.dll&amp;quot; /reference:&amp;quot;c:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Routing.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Services.dll&amp;quot; /reference:&amp;quot;c:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll&amp;quot; /reference:&amp;quot;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll&amp;quot; /debug+ /debug:full /optimize- /out:obj\Debug\HelloWorldMvc3.dll /target:library Controllers\AccountController.cs Controllers\HomeController.cs Global.asax.cs Models\AccountModels.cs Properties\AssemblyInfo.cs &amp;quot;C:\Windows\TEMP\.NETFramework,Version=v4.0.AssemblyAttributes.cs&amp;quot;
_CopyFilesMarkedCopyLocal:
  Copying file from &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.dll&amp;quot; to &amp;quot;bin\EntityFramework.dll&amp;quot;.
  Copying file from &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.xml&amp;quot; to &amp;quot;bin\EntityFramework.xml&amp;quot;.
CopyFilesToOutputDirectory:
  Copying file from &amp;quot;obj\Debug\HelloWorldMvc3.dll&amp;quot; to &amp;quot;bin\HelloWorldMvc3.dll&amp;quot;.
  HelloWorldMvc3 -&amp;gt; C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\bin\HelloWorldMvc3.dll
  Copying file from &amp;quot;obj\Debug\HelloWorldMvc3.pdb&amp;quot; to &amp;quot;bin\HelloWorldMvc3.pdb&amp;quot;.
CollectFilesFromIntermediateAssembly:
  Gather all files from Project items @(IntermediateAssembly). Adding:
  bin\HelloWorldMvc3.dll to bin\HelloWorldMvc3.dll
  bin\HelloWorldMvc3.pdb to bin\HelloWorldMvc3.pdb
CollectFilesFromContent:
  Gather all files from Project items @(Content). Adding:
  Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png;Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png;Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png;Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png;Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png;Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png;Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png;Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png;Content\themes\base\images\ui-icons_222222_256x240.png;Content\themes\base\images\ui-icons_2e83ff_256x240.png;Content\themes\base\images\ui-icons_454545_256x240.png;Content\themes\base\images\ui-icons_888888_256x240.png;Content\themes\base\images\ui-icons_cd0a0a_256x240.png;Content\themes\base\jquery.ui.accordion.css;Content\themes\base\jquery.ui.all.css;Content\themes\base\jquery.ui.autocomplete.css;Content\themes\base\jquery.ui.base.css;Content\themes\base\jquery.ui.button.css;Content\themes\base\jquery.ui.core.css;Content\themes\base\jquery.ui.datepicker.css;Content\themes\base\jquery.ui.dialog.css;Content\themes\base\jquery.ui.progressbar.css;Content\themes\base\jquery.ui.resizable.css;Content\themes\base\jquery.ui.selectable.css;Content\themes\base\jquery.ui.slider.css;Content\themes\base\jquery.ui.tabs.css;Content\themes\base\jquery.ui.theme.css;Global.asax;Scripts\jquery-1.5.1-vsdoc.js;Scripts\jquery-1.5.1.js;Scripts\jquery-1.5.1.min.js;Scripts\jquery-ui-1.8.11.js;Scripts\jquery-ui-1.8.11.min.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.min.js;Scripts\modernizr-1.7.js;Scripts\modernizr-1.7.min.js;Web.config;Web.Debug.config;Web.Release.config;Content\Site.css;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.unobtrusive-ajax.min.js;Scripts\jquery.validate.unobtrusive.js;Scripts\jquery.validate.unobtrusive.min.js;Scripts\MicrosoftAjax.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcAjax.js;Scripts\MicrosoftMvcAjax.debug.js;Scripts\MicrosoftMvcValidation.js;Scripts\MicrosoftMvcValidation.debug.js;Views\_ViewStart.cshtml;Views\Account\ChangePassword.cshtml;Views\Account\ChangePasswordSuccess.cshtml;Views\Account\LogOn.cshtml;Views\Account\Register.cshtml;Views\Home\About.cshtml;Views\Home\Index.cshtml;Views\Shared\Error.cshtml;Views\Shared\_LogOnPartial.cshtml;Views\Shared\_Layout.cshtml;Views\Web.config;packages.config
CollectFilesFromIntermediateSatelliteAssembliesWithTargetPath:
  Gather all files from Project output (IntermediateSatelliteAssembliesWithTargetPath). Adding:
CollectFilesFromReference:
  Gather all files from Project items @(ReferenceCopyLocalPaths,ReferenceComWrappersToCopyLocal,ResolvedIsolatedComModules,_DeploymentLooseManifestFile,NativeReferenceFile).
CollectFilesFromAllExtraReferenceFiles:
  Gather all files from Project items @(AllExtraReferenceFiles). Adding:
CollectFilesFrom_binDeployableAssemblies:
  Gather all files from Project items @(_binDeployableAssemblies). Adding:
PipelineCollectFilesPhase:
  Publish Pipeline Collect Files Phase
CollectWebConfigsToTransform:
  Found The following for Config tranformation:
  Web.config, Views\Web.config
  Creating directory &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\TransformWebConfig\transformed\&amp;quot;.
  Creating directory &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\TransformWebConfig\transformed\Views\&amp;quot;.
PreTransformWebConfig:
  Copying Web.config to obj\Debug\TransformWebConfig\original\Web.config.
TransformWebConfigCore:
  Transforming Source File: C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\Web.config
    Applying Transform File: C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\Web.Debug.config
    Output File: obj\Debug\TransformWebConfig\transformed\Web.config
  Transformation succeeded
PostTransformWebConfig:
  Transformed Web.config using Web.Debug.config into obj\Debug\TransformWebConfig\transformed\Web.config.
PipelineTransformPhase:
  Publish Pipeline Transform Phase
PreAutoParameterizationWebConfigConnectionStrings:
  Creating directory &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\CSAutoParameterize\transformed\Views\&amp;quot;.
  Copying Views\Web.config to obj\Debug\CSAutoParameterize\original\Views\Web.config.
  Copying obj\Debug\TransformWebConfig\transformed\Web.config to obj\Debug\CSAutoParameterize\original\Web.config.
AutoParameterizationWebConfigConnectionStringsCore:
  Transforming Source File: C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\Views\Web.config
    Applying Transform File: &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
          &amp;lt;configuration xmlns:xdt=&amp;quot;http://schemas.microsoft.com/XML-Document-Transform&amp;quot;&amp;gt;
            &amp;lt;connectionStrings&amp;gt;
              &amp;lt;add
                connectionString=&amp;quot;{% token='$(ReplacableToken_#(parameter)_#(tokennumber))' xpathlocator='name' parameter='$(name)-Web.config Connection String' description='$(name) Connection String used in web.config by the application to access the database.' defaultValue='$(connectionString)' tags='SqlConnectionString' %}&amp;quot;
                xdt:Transform=&amp;quot;SetTokenizedAttributes(connectionString)&amp;quot; xdt:SupressWarnings=&amp;quot;True&amp;quot; /&amp;gt;
            &amp;lt;/connectionStrings&amp;gt;
          &amp;lt;/configuration&amp;gt;
    No element in the source document matches '/configuration/connectionStrings'
    Not executing SetTokenizedAttributes (transform line 6, 15)
    Output File: obj\Debug\CSAutoParameterize\transformed\Views\Web.config
  Transformation succeeded
  Transforming Source File: C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\TransformWebConfig\transformed\Web.config
    Applying Transform File: &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
          &amp;lt;configuration xmlns:xdt=&amp;quot;http://schemas.microsoft.com/XML-Document-Transform&amp;quot;&amp;gt;
            &amp;lt;connectionStrings&amp;gt;
              &amp;lt;add
                connectionString=&amp;quot;{% token='$(ReplacableToken_#(parameter)_#(tokennumber))' xpathlocator='name' parameter='$(name)-Web.config Connection String' description='$(name) Connection String used in web.config by the application to access the database.' defaultValue='$(connectionString)' tags='SqlConnectionString' %}&amp;quot;
                xdt:Transform=&amp;quot;SetTokenizedAttributes(connectionString)&amp;quot; xdt:SupressWarnings=&amp;quot;True&amp;quot; /&amp;gt;
            &amp;lt;/connectionStrings&amp;gt;
          &amp;lt;/configuration&amp;gt;
    Output File: obj\Debug\CSAutoParameterize\transformed\Web.config
  Transformation succeeded
PostAutoParameterizationWebConfigConnectionStrings:
  Auto ConnectionString Transformed Views\Web.config into obj\Debug\CSAutoParameterize\transformed\Views\Web.config.
  Auto ConnectionString Transformed obj\Debug\TransformWebConfig\transformed\Web.config into obj\Debug\CSAutoParameterize\transformed\Web.config.
CopyAllFilesToSingleFolderForPackage:
  Creating directory &amp;quot;obj\Debug\Package\PackageTmp&amp;quot;.
  Copying all files to temporary location below for package/publish:
  obj\Debug\Package\PackageTmp.
  Copying bin\HelloWorldMvc3.dll to obj\Debug\Package\PackageTmp\bin\HelloWorldMvc3.dll.
  Copying bin\HelloWorldMvc3.pdb to obj\Debug\Package\PackageTmp\bin\HelloWorldMvc3.pdb.
  Copying Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png.
  Copying Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png.
  Copying Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png.
  Copying Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png.
  Copying Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png.
  Copying Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png.
  Copying Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png.
  Copying Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png.
  Copying Content\themes\base\images\ui-icons_222222_256x240.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_222222_256x240.png.
  Copying Content\themes\base\images\ui-icons_2e83ff_256x240.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_2e83ff_256x240.png.
  Copying Content\themes\base\images\ui-icons_454545_256x240.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_454545_256x240.png.
  Copying Content\themes\base\images\ui-icons_888888_256x240.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_888888_256x240.png.
  Copying Content\themes\base\images\ui-icons_cd0a0a_256x240.png to obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_cd0a0a_256x240.png.
  Copying Content\themes\base\jquery.ui.accordion.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.accordion.css.
  Copying Content\themes\base\jquery.ui.all.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.all.css.
  Copying Content\themes\base\jquery.ui.autocomplete.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.autocomplete.css.
  Copying Content\themes\base\jquery.ui.base.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.base.css.
  Copying Content\themes\base\jquery.ui.button.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.button.css.
  Copying Content\themes\base\jquery.ui.core.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.core.css.
  Copying Content\themes\base\jquery.ui.datepicker.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.datepicker.css.
  Copying Content\themes\base\jquery.ui.dialog.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.dialog.css.
  Copying Content\themes\base\jquery.ui.progressbar.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.progressbar.css.
  Copying Content\themes\base\jquery.ui.resizable.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.resizable.css.
  Copying Content\themes\base\jquery.ui.selectable.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.selectable.css.
  Copying Content\themes\base\jquery.ui.slider.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.slider.css.
  Copying Content\themes\base\jquery.ui.tabs.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.tabs.css.
  Copying Content\themes\base\jquery.ui.theme.css to obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.theme.css.
  Copying Global.asax to obj\Debug\Package\PackageTmp\Global.asax.
  Copying Scripts\jquery-1.5.1-vsdoc.js to obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1-vsdoc.js.
  Copying Scripts\jquery-1.5.1.js to obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1.js.
  Copying Scripts\jquery-1.5.1.min.js to obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1.min.js.
  Copying Scripts\jquery-ui-1.8.11.js to obj\Debug\Package\PackageTmp\Scripts\jquery-ui-1.8.11.js.
  Copying Scripts\jquery-ui-1.8.11.min.js to obj\Debug\Package\PackageTmp\Scripts\jquery-ui-1.8.11.min.js.
  Copying Scripts\jquery.validate-vsdoc.js to obj\Debug\Package\PackageTmp\Scripts\jquery.validate-vsdoc.js.
  Copying Scripts\jquery.validate.js to obj\Debug\Package\PackageTmp\Scripts\jquery.validate.js.
  Copying Scripts\jquery.validate.min.js to obj\Debug\Package\PackageTmp\Scripts\jquery.validate.min.js.
  Copying Scripts\modernizr-1.7.js to obj\Debug\Package\PackageTmp\Scripts\modernizr-1.7.js.
  Copying Scripts\modernizr-1.7.min.js to obj\Debug\Package\PackageTmp\Scripts\modernizr-1.7.min.js.
  Copying Content\Site.css to obj\Debug\Package\PackageTmp\Content\Site.css.
  Copying Scripts\jquery.unobtrusive-ajax.js to obj\Debug\Package\PackageTmp\Scripts\jquery.unobtrusive-ajax.js.
  Copying Scripts\jquery.unobtrusive-ajax.min.js to obj\Debug\Package\PackageTmp\Scripts\jquery.unobtrusive-ajax.min.js.
  Copying Scripts\jquery.validate.unobtrusive.js to obj\Debug\Package\PackageTmp\Scripts\jquery.validate.unobtrusive.js.
  Copying Scripts\jquery.validate.unobtrusive.min.js to obj\Debug\Package\PackageTmp\Scripts\jquery.validate.unobtrusive.min.js.
  Copying Scripts\MicrosoftAjax.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftAjax.js.
  Copying Scripts\MicrosoftAjax.debug.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftAjax.debug.js.
  Copying Scripts\MicrosoftMvcAjax.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcAjax.js.
  Copying Scripts\MicrosoftMvcAjax.debug.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcAjax.debug.js.
  Copying Scripts\MicrosoftMvcValidation.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcValidation.js.
  Copying Scripts\MicrosoftMvcValidation.debug.js to obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcValidation.debug.js.
  Copying Views\_ViewStart.cshtml to obj\Debug\Package\PackageTmp\Views\_ViewStart.cshtml.
  Copying Views\Account\ChangePassword.cshtml to obj\Debug\Package\PackageTmp\Views\Account\ChangePassword.cshtml.
  Copying Views\Account\ChangePasswordSuccess.cshtml to obj\Debug\Package\PackageTmp\Views\Account\ChangePasswordSuccess.cshtml.
  Copying Views\Account\LogOn.cshtml to obj\Debug\Package\PackageTmp\Views\Account\LogOn.cshtml.
  Copying Views\Account\Register.cshtml to obj\Debug\Package\PackageTmp\Views\Account\Register.cshtml.
  Copying Views\Home\About.cshtml to obj\Debug\Package\PackageTmp\Views\Home\About.cshtml.
  Copying Views\Home\Index.cshtml to obj\Debug\Package\PackageTmp\Views\Home\Index.cshtml.
  Copying Views\Shared\Error.cshtml to obj\Debug\Package\PackageTmp\Views\Shared\Error.cshtml.
  Copying Views\Shared\_LogOnPartial.cshtml to obj\Debug\Package\PackageTmp\Views\Shared\_LogOnPartial.cshtml.
  Copying Views\Shared\_Layout.cshtml to obj\Debug\Package\PackageTmp\Views\Shared\_Layout.cshtml.
  Copying packages.config to obj\Debug\Package\PackageTmp\packages.config.
  Copying C:\hudson\jobs\HelloWorldMvc3\workspace\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.dll to obj\Debug\Package\PackageTmp\bin\EntityFramework.dll.
  Copying C:\hudson\jobs\HelloWorldMvc3\workspace\packages\EntityFramework.4.1.10331.0\lib\EntityFramework.xml to obj\Debug\Package\PackageTmp\bin\EntityFramework.xml.
  Copying obj\Debug\CSAutoParameterize\transformed\Views\Web.config to obj\Debug\Package\PackageTmp\Views\Web.config.
  Copying obj\Debug\CSAutoParameterize\transformed\Web.config to obj\Debug\Package\PackageTmp\Web.config.
PipelinePreDeployCopyAllFilesToOneFolder:
  Publish Pipeline Deploy phase Pre-Deploy CopyAllFilesToOneFolder Stage
Package:
  Invoking Web Deploy to generate the package with the following settings:
  $(LocalIisVersion) is 7
  $(DestinationIisVersion) is 7
  $(UseIis) is False
  $(IncludeIisSettings) is False
  $(_DeploymentUseIis) is False
  $(DestinationUseIis) is False
GenerateMsdeployManifestFiles:
  Generate source manifest file for Web Deploy package/publish ...
CollectDatabasesToPublish:
  Creating directory &amp;quot;obj\Debug\Database&amp;quot;.
PackageUsingManifest:
  Packaging into C:\MyProject\Package.zip.
  Starting Web deployment task from source:manifest(C:\MyProject\Package.SourceManifest.xml) to Destination:package(C:\MyProject\Package.zip).
  Adding package (package).
  Adding child iisApp (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding child createApp (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding child contentPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\bin).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\bin\EntityFramework.dll).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\bin\EntityFramework.xml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\bin\HelloWorldMvc3.dll).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\bin\HelloWorldMvc3.pdb).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\Site.css).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_flat_0_aaaaaa_40x100.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_flat_75_ffffff_40x100.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_55_fbf9ee_1x400.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_65_ffffff_1x400.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_75_dadada_1x400.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_75_e6e6e6_1x400.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_glass_95_fef1ec_1x400.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-bg_highlight-soft_75_cccccc_1x100.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_222222_256x240.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_2e83ff_256x240.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_454545_256x240.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_888888_256x240.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\images\ui-icons_cd0a0a_256x240.png).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.accordion.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.all.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.autocomplete.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.base.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.button.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.core.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.datepicker.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.dialog.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.progressbar.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.resizable.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.selectable.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.slider.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.tabs.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Content\themes\base\jquery.ui.theme.css).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Global.asax).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\packages.config).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1-vsdoc.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery-1.5.1.min.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery-ui-1.8.11.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery-ui-1.8.11.min.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.unobtrusive-ajax.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.unobtrusive-ajax.min.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.validate-vsdoc.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.validate.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.validate.min.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.validate.unobtrusive.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\jquery.validate.unobtrusive.min.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftAjax.debug.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftAjax.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcAjax.debug.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcAjax.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcValidation.debug.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\MicrosoftMvcValidation.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\modernizr-1.7.js).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Scripts\modernizr-1.7.min.js).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Account).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Account\ChangePassword.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Account\ChangePasswordSuccess.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Account\LogOn.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Account\Register.cshtml).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Home).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Home\About.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Home\Index.cshtml).
  Adding child dirPath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Shared).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Shared\Error.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Shared\_Layout.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Shared\_LogOnPartial.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\Web.config).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Views\_ViewStart.cshtml).
  Adding child filePath (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp\Web.config).
  Adding child setAcl (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding child setAcl (C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\obj\Debug\Package\PackageTmp).
  Adding declared parameter 'IIS Web Application Name'.
  Adding declared parameter 'ApplicationServices-Web.config Connection String'.
  Successfully executed Web deployment task.
  Package &amp;quot;Package.zip&amp;quot; is successfully created as single file at the following location:
  file:///C:/MyProject
  To get the instructions on how to deploy the web package please visit the following link:
  http://go.microsoft.com/fwlink/?LinkId=124618
GenerateSampleDeployScript:
  Sample script for deploying this package is generated at the following location:
  C:\MyProject\Package.deploy.cmd
  For this sample script, you can change the deploy parameters by changing the following file: 
  C:\MyProject\Package.SetParameters.xml
Done Building Project &amp;quot;C:\hudson\jobs\HelloWorldMvc3\workspace\HelloWorldMvc3\HelloWorldMvc3.csproj&amp;quot; (Package target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:08.33
Finished: SUCCESS&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-4366015258778171911?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZVyWmbLcYmlijj9ygcHK-Y7N7uM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZVyWmbLcYmlijj9ygcHK-Y7N7uM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZVyWmbLcYmlijj9ygcHK-Y7N7uM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZVyWmbLcYmlijj9ygcHK-Y7N7uM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Gjvt0UfgYhI:aO7944IhBM0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Gjvt0UfgYhI:aO7944IhBM0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Gjvt0UfgYhI:aO7944IhBM0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Gjvt0UfgYhI:aO7944IhBM0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Gjvt0UfgYhI:aO7944IhBM0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Gjvt0UfgYhI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/4366015258778171911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4366015258778171911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4366015258778171911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Gjvt0UfgYhI/svn-hudson-job-continuous-integration.html" title="SVN, Hudson and MSBuild - Continuous Integration" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-wpS6A6YOBAo/TjNySxuUlVI/AAAAAAAABPg/fsjOaoKWfo4/s72-c/HudsonNewJob%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAGQHczcSp7ImA9WhdSFUs.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-2597772841211733593</id><published>2011-07-25T01:12:00.001-03:00</published><updated>2011-07-25T01:38:41.989-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-25T01:38:41.989-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="SSMS" /><category scheme="http://www.blogger.com/atom/ns#" term="export" /><category scheme="http://www.blogger.com/atom/ns#" term="import" /><category scheme="http://www.blogger.com/atom/ns#" term="tasks" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>Import/Export SQL Server database data with SSMS</title><content type="html">&lt;p&gt;This post is a visual guide about one of the most powerful features of &lt;a href="http://en.wikipedia.org/wiki/SQL_Server_Management_Studio" target="_blank"&gt;Microsoft SQL Server Management Studio (SSMS) 2008&lt;/a&gt;: Import/Export database data.&lt;/p&gt;  &lt;p&gt;These tasks are useful for example when you need to debug an application with real world/production data to find possible bugs in your code. You can import the production database data to your local development database and find what’s causing problems. These tasks can be used to create a protection layer because you won’t be working “directly” with production data.&lt;/p&gt;  &lt;p&gt;As you see, if I right click a database in SSMS I get access to this rich menu full of interesting options that deserve a careful study:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SSMS 2008 Import Export Database Tasks" border="0" alt="SSMS 2008 Import Export Database Tasks" src="http://lh6.ggpht.com/-RMGB5glI2C0/TizvkGS1gDI/AAAAAAAABOU/SI7kM7WMVoc/SSMS2008ImportExportDatabaseTasks%25255B6%25255D.png?imgmax=800" width="525" height="576" /&gt;&lt;/p&gt;  &lt;p&gt;Looking at the above picture you see in Object Explorer that I’m connected to two SQL database servers. The first one is a remote SQL Server (version 10.0.2775) and the other one is my local SQL Server Express (version 10.50.1617) instance.&lt;/p&gt;  &lt;p&gt;With this configuration I have the perfect scenario to &lt;strong&gt;&lt;em&gt;visually&lt;/em&gt;&lt;/strong&gt; show you how the Import/Export Data… menu options work.&lt;/p&gt;  &lt;p&gt;In this blog post I’ll execute the Export Data task. This allows me to test my web application using my local SQL Server instance with real world/production data.   &lt;br /&gt;The Import Data… task does practically the same thing but in reverse, logically. I’ll let the execution of the Import task to you dear reader!&lt;/p&gt;   &lt;p&gt;OK… If I proceed and select the Export Data… menu option I’ll be able to bring new data to the database that is located on my machine. Data comes from the remote/production server to my local copy of the same database.&lt;/p&gt;  &lt;p&gt;After clicking Export Data…, &lt;em&gt;SQL Server Import and Export Wizard&lt;/em&gt; pops up. I then select the Data source/Server name (from which Data source type and Server I want to get the data to be imported). In this case, the data comes from the remote SQL server. I use SQL Server Authentication, fill the user name and password and select the Database that’ll provide the data. In Server name field I used the &lt;a href="http://en.wikipedia.org/wiki/IP_address" target="_blank"&gt;IP&lt;/a&gt; address of my remote server.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Choose a Data Source" border="0" alt="SQL Server Import and Export Wizard - Choose a Data Source" src="http://lh5.ggpht.com/-iPwsv58JdcE/Tizs1Jc4FwI/AAAAAAAABOY/orP5-yuLU60/SQLServerImportAndExportWizardPart1.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;Now is the time to choose the Destination. In this case it’s my local SQL Server instance. LENIEL-PC is my Windows 7 machine name. SQLEXPRESS is the default SQL Express server name. I also selected the Database I want to receive the imported data. As you see both databases (source and destination) have the same name to make things easy.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Choose a Destination" border="0" alt="SQL Server Import and Export Wizard - Choose a Destination" src="http://lh5.ggpht.com/-Z5KCC9grlQU/Tizs3u-eegI/AAAAAAAABOc/kRu0bI3V9qA/SQLServerImportAndExportWizardPart2.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;The wizard then asks if I want to copy data directly from table to table or if I want to write a custom SQL query to shape the data according to specific needs. I’ll select the first option to keep things simple.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Specify Table Copy or Query" border="0" alt="SQL Server Import and Export Wizard - Specify Table Copy or Query" src="http://lh3.ggpht.com/-O8LPncDEYYk/Tizs56A3pZI/AAAAAAAABOg/e-0fHSTpH4s/SQLServerImportAndExportWizardPart3.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;In the next screen we get a beautiful list of available tables and views. I’ve selected two tables that I want to copy.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Select Source Table and Views" border="0" alt="SQL Server Import and Export Wizard - Select Source Table and Views" src="http://lh3.ggpht.com/-IyeAeZ59aoA/TizvmZXVKwI/AAAAAAAABOk/4gCdyTOVqY4/SQLServerImportAndExportWizardPart4%25255B6%25255D.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;If you click the Edit Mappings… button (which applies to each table selected in the grid), I can also specify if I want to delete rows before importing data or if I want to append rows to the destination table. I’ll append rows because I have already erased both tables (exams and files) on my local database.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-pointingup" alt="Apontando para cima" src="http://lh4.ggpht.com/-BYF8SBzC8gw/Tizs8chuk7I/AAAAAAAABNc/xuus1Z6xR7M/wlEmoticon-pointingup%25255B2%25255D.png?imgmax=800" /&gt; Table files is linked to table exams through a foreign key. I disabled this foreign key constraint in my local database to avoid &lt;strong&gt;conflicts/errors&lt;/strong&gt; during the import process. Beware because conflicts do appear most of the time. Conflicts are generally related to key violation/duplication.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Column Mappings" border="0" alt="SQL Server Import and Export Wizard - Column Mappings" src="http://lh5.ggpht.com/-S-kjzkBdhEE/Tizs-Zgz0-I/AAAAAAAABOo/gYcCRhfYg1o/SQLServerImportAndExportWizardPart5%25255B7%25255D.png?imgmax=800" width="525" height="423" /&gt;&lt;/p&gt;  &lt;p&gt;As I’m using the free SQL Server Express Edition, the following screen has an interesting information:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;In SQL Server Express, Web, or Workgroup, you can run the package that the Import and Export Wizard creates, but cannot save it. To save packages that the wizard creates, you must upgrade to SQL Server Standard, Enterprise, Developer or Evaluation.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is telling me that I’ll have to go over the wizard (#7 steps) again if I happen to execute this very import process. Really annoying… &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-annoyed" alt="Irritado" src="http://lh4.ggpht.com/-w3PrcV-cpv0/Tizs-4HUnXI/AAAAAAAABNo/ilEsdPEOerc/wlEmoticon-annoyed2.png?imgmax=800" /&gt; … but that’s the price you must pay when using free tools.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Run Package" border="0" alt="SQL Server Import and Export Wizard - Run Package" src="http://lh5.ggpht.com/-Q34EDrRFrbE/TiztAmgyF0I/AAAAAAAABOs/ebwZdpnmUio/SQLServerImportAndExportWizardPart6%25255B1%25255D.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;Next button once more (the last one hallelujah) and we’re ready to go. It’s just a matter of reviewing what’ll be done and pressing the finish button.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Complete the Wizard" border="0" alt="SQL Server Import and Export Wizard - Complete the Wizard" src="http://lh4.ggpht.com/-Mx6PCW7e7zI/TiztChC1-1I/AAAAAAAABOw/h_zAnofCKaM/SQLServerImportAndExportWizardPart7%25255B6%25255D.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;    &lt;p&gt;After clicking Finish I got this last window:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="SQL Server Import and Export Wizard - Execution Successful" border="0" alt="SQL Server Import and Export Wizard - Execution Successful" src="http://lh4.ggpht.com/-KnX6GqSd1CA/TiztFA7fGxI/AAAAAAAABO0/WhWVK1Nt6-A/SQLServerImportAndExportWizardPart8%25255B6%25255D.png?imgmax=800" width="525" height="534" /&gt;&lt;/p&gt;  &lt;p&gt;Hope this simple and visual guide helps you understand how the data Import and Export processes work when dealing with a SQL Server database inside SSMS.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Free tools&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://www.microsoft.com/sqlserver/en/us/editions/express.aspx" target="_blank"&gt;Microsoft SQL Server Express Edition&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=22985" target="_blank"&gt;Microsoft SQL Server 2008 Management Studio Express (SSMSE)&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-2597772841211733593?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aJAO-w3pIWwErjE9k8jFBDrAJck/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aJAO-w3pIWwErjE9k8jFBDrAJck/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aJAO-w3pIWwErjE9k8jFBDrAJck/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aJAO-w3pIWwErjE9k8jFBDrAJck/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=fMx-Y__QoPs:bMilrx23x9k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=fMx-Y__QoPs:bMilrx23x9k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=fMx-Y__QoPs:bMilrx23x9k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=fMx-Y__QoPs:bMilrx23x9k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=fMx-Y__QoPs:bMilrx23x9k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/fMx-Y__QoPs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/2597772841211733593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/07/import-export-data-sql-server-database.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2597772841211733593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2597772841211733593?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/fMx-Y__QoPs/import-export-data-sql-server-database.html" title="Import/Export SQL Server database data with SSMS" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-RMGB5glI2C0/TizvkGS1gDI/AAAAAAAABOU/SI7kM7WMVoc/s72-c/SSMS2008ImportExportDatabaseTasks%25255B6%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.leniel.net/2011/07/import-export-data-sql-server-database.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFRn47fyp7ImA9WhdUFEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-9088306935230265727</id><published>2011-07-07T14:04:00.001-03:00</published><updated>2011-09-30T18:05:17.007-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T18:05:17.007-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Applications" /><category scheme="http://www.blogger.com/atom/ns#" term="web application" /><category scheme="http://www.blogger.com/atom/ns#" term="buy" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="fitness center" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="management system" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Sistema para Gerenciamento de Academia de Ginástica</title><content type="html">&lt;p&gt;Esta é uma aplicação web que nasceu através de uma parceria entre mim (o único desenvolvedor) e o proprietário de uma academia de ginástica ( a qual eu frequento ). O sistema está em uso e o proprietário/usuário está muito satisfeito.&lt;/p&gt;  &lt;p&gt;A aplicação valoriza a simplicidade e é super fácil de usar.&lt;/p&gt;  &lt;p&gt;A figura a seguir mostra a home page de onde o usuário pode acessar as funcionalidades da aplicação. Clique nela para ver uma versão ampliada...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-l7aaghBPcww/ThXu_7RqRxI/AAAAAAAABLU/fHQCav_7ew8/s1600-h/FitnessCenterAppHomept-BR%25255B14%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Página inicial da aplicação Fitness Center" border="0" alt="Página inicial da aplicação Fitness Center" src="http://lh4.ggpht.com/-zVhUqqYMxAM/ThXvBJciqgI/AAAAAAAABLY/h3y1_dwthHc/FitnessCenterAppHomept-BR_thumb%25255B8%25255D.jpg?imgmax=800" width="525" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A aplicação é composta por 5 módulos:    &lt;br /&gt;- Alunos     &lt;br /&gt;- Anamneses     &lt;br /&gt;- Medidas     &lt;br /&gt;- Pagamentos     &lt;br /&gt;- Relatórios ( baseados em gráficos e listas )&lt;/p&gt;  &lt;p&gt;O sistema está disponível em Português do Brasil (pt-BR) e Inglês (en-US). Ele tem tudo pronto para o caso em que exista a necessidades de localizações adicionais. É completamente viável ter a aplicação em execução em qualquer outra cultura/idioma com pouco trabalho.&lt;/p&gt;  &lt;p&gt;Estilos/cores/formatação e logotipo podem ser personalizados usando (&lt;a href="http://pt.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank"&gt;CSS&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tecnologias &lt;/strong&gt;    &lt;br /&gt;A aplicação usa o estado da arte das tecnologias da pilha Microsoft, bem como bibliotecas de código aberto:     &lt;br /&gt;    &lt;br /&gt;C#, .NET Framework 4, ASP.NET MVC 3, SQL Server Compact 4.1, CSS, jQuery 1.5.2, jQuery UI 1.8.12, jQuery Globalization 1.0, jQuery qTip2, modernizr 1.7, Microsoft MVC Ajax, Microsoft Chart Controls for. NET 4, WebGrid, Chirpy&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Telas &lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;Você pode ver screenshots da aplicação &lt;a href="http://www.flickr.com/photos/leniel/sets/72157627789020958/" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Descrição&lt;/strong&gt;     &lt;br /&gt;As seções subsequentes descrevem cada módulo e as ações que o usuário tem permissão para executar.&lt;/p&gt;  &lt;p&gt;A lógica de negócios também é descrita ao longo do caminho se eu ver que ela se encaixa na descrição do módulo.&lt;/p&gt;  &lt;p&gt;Não é minha intenção descrever cada regra de negócio da aplicação neste post. Este post é uma visão geral.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Alunos&lt;/strong&gt;     &lt;br /&gt;Ações: Criar, Editar, Detalhes, Excluir     &lt;br /&gt;Este módulo trata de dados básicos do aluno como foto, nome e sobrenome, data de nascimento, endereço, sexo, telefone, e-mail, etc.&amp;#160; &lt;br /&gt;Tudo no sistema está relacionado ao aluno. Isto significa que se um aluno é excluído, os dados de cada módulo que fazem referência aquele aluno também serão excluídos.     &lt;br /&gt;Alunos que estão em débito são destacados em vermelho na lista/grid de alunos.     &lt;br /&gt;Se o nome de um aluno é clicado na lista de alunos, o sistema leva o usuário à lista de pagamentos do respectivo aluno.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Anamneses&lt;/strong&gt;     &lt;br /&gt;Ações: Criar, Editar, Detalhes, Excluir     &lt;br /&gt;Este módulo manipula as informações básicas sobre o histórico de saúde do aluno, tais como se o aluno é hipertenso, diabético, fumante, etc. Diferentes tipos de doenças também podem ser selecionados. Estas doenças são agrupadas em categorias, tais como doenças dos ossos e articulações, respiratórias e doenças da tireoide. O estilo da atividade física na qual um aluno se encaixa quando ele se matricula na academia também pode ser selecionado.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Medidas&lt;/strong&gt;     &lt;br /&gt;Ações: Criar, Editar, Detalhes, Excluir     &lt;br /&gt;Este módulo trata das medidas das circunferências do corpo do aluno. Estas são as medidas que o sistema controla:     &lt;br /&gt;- Altura (m)     &lt;br /&gt;- Peso (kg)     &lt;br /&gt;- Gordura (%)&amp;#160; &lt;br /&gt;- Pescoço (m)     &lt;br /&gt;- Tórax (m)     &lt;br /&gt;- Glúteos (m)     &lt;br /&gt;- Ombro (m)     &lt;br /&gt;- Abdome (m)     &lt;br /&gt;- Cintura (m)     &lt;br /&gt;- Braço Esquerdo (m)     &lt;br /&gt;- Braço Direito (m)     &lt;br /&gt;- Coxa Esquerda (m)     &lt;br /&gt;- Coxa direita (m)     &lt;br /&gt;- Panturrilha Esquerda (m)     &lt;br /&gt;- Panturrilha Direita (m)&lt;/p&gt;  &lt;p&gt;O usuário é notificado através da lista de medidas se é hora de tomar novas medidas de um aluno. O intervalo de tempo entre as avaliações (medidas) pode ser configurado no sistema. Atualmente está definido como um intervalo de três meses.    &lt;br /&gt;A % de Gordura é calculada pelo sistema através de uma fórmula padrão (&lt;a href="http://en.wikipedia.org/wiki/Body_fat_percentage#Height_and_circumference_methods" target="_blank"&gt;ver link&lt;/a&gt;). Se o usuário passar o mouse sobre o cabeçalho da coluna (%) Gordura na listagem de medidas ele verá uma tabela com valores padrão para % de gordura que inclui Essencial, Atleta, Fitness, Média e Obeso.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pagamentos &lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;Ações: Criar, Editar, Detalhes, Excluir     &lt;br /&gt;Este módulo é o coração do sistema, uma vez que lida com o que podemos chamar de a &lt;i&gt;Raison d'être&lt;/i&gt; (razão de ser) de um sistema como este.     &lt;br /&gt;O sistema permite a criação de pagamentos para um determinado aluno.     &lt;br /&gt;O usuário define um valor de desconto (se necessário) e o campo total é calculado automaticamente. Depois disso uma data de pagamento deve ser selecionada. Há também um campo de observação no qual o usuário pode anotar alguma coisa importante relacionada ao pagamento.     &lt;br /&gt;O usuário sinaliza que o pagamento foi realizado marcando o campo pago.     &lt;br /&gt;Sempre que um pagamento é marcado como pago, o sistema gera um novo pagamento automaticamente (cópia do pagamento feito) para o mesmo aluno com a data de vencimento 1 mês à frente.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Relatórios&lt;/strong&gt;     &lt;br /&gt;Este módulo gera 4 tipos de relatórios. São eles:&lt;/p&gt;  &lt;p&gt;- Total de Pagamentos (gráfico)    &lt;br /&gt;O usuário seleciona uma data de início e uma data de fim para gerar um gráfico de colunas que agrupa os pagamentos por mês.&lt;/p&gt;  &lt;p&gt;- Pagamentos em Atraso/Vencidos (grid/lista)&amp;#160; &lt;br /&gt;O sistema gera automaticamente um relatório em formato de lista extraindo os dados dos pagamentos que têm uma data de vencimento inferior a uma data especificada. Por exemplo: pode-se conceder uma margem (em dias) para que o sistema considere que o aluno está em débito - 1 semana, 2 semanas, etc após a data do vencimento do pagamento. Isso pode ser configurado no sistema.&lt;/p&gt;  &lt;p&gt;- % Alunos Ativos/Inativos (gráfico)    &lt;br /&gt;O sistema gera automaticamente um gráfico em formato de pizza que retrata muito bem essa informação.&lt;/p&gt;  &lt;p&gt;- Medidas ao Longo do Tempo (gráfico)    &lt;br /&gt;O usuário seleciona um aluno e uma data de início e fim para gerar um belo gráfico de linhas que mostra o aumento/diminuição das medidas ao longo do tempo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Por que comprar? &lt;/strong&gt;    &lt;br /&gt;O principal benefício é que você terá um ponto central para gerenciar sua Academia de Ginástica. A partir dele você pode extrair informações valiosas dos dados. Isto te permite estar sempre um passo à frente para planejar seu próximo passo. Não haverá mais anotações em cadernos e com isso você deixará de perder dados importantes!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Instalação &lt;/strong&gt;    &lt;br /&gt;A aplicação é um arquivo .zip (arquivo compactado) e possui todo o que é necessário para ser executada em um servidor web que tenha o &lt;a href="http://pt.wikipedia.org/wiki/Microsoft_.NET" target="_blank"&gt;.NET Framework 4&lt;/a&gt; instalado.&lt;/p&gt;  &lt;p&gt;Se precisar de ajuda adicional no que diz respeito à hospedagem web/instalação e configuração, eu também posso fazer isso por você. É só me avisar.&lt;/p&gt;  &lt;p&gt;Há também a possibilidade de executar a aplicação em um servidor web local usando &lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;Microsoft WebMatrix&lt;/a&gt; por exemplo. É assim que instalei o sistema no computador do usuário. Fazendo dessa forma você não terá que pagar um provedor de hospedagem on-line. A única desvantagem neste caso é que você não será capaz de acessar a aplicação a partir de qualquer lugar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como comprar?&lt;/strong&gt;     &lt;br /&gt;Basta clicar no botão abaixo para comprar esta app barata ( somente R$ 600,00 ) através do PayPal:&lt;/p&gt;  &lt;br /&gt;&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;&lt;input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHfwYJKoZIhvcNAQcEoIIHcDCCB2wCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBeZYdNfyi9WVzwdQccocCuJxDfOWXk3+xLGvaCUprpq7Ce+E/uotfCVuo3eUWsv+HAWWNTrQw/B4O2fiEHCaGbZhjB6ntjIFCI87b6opwiStDCFtxXfbJEo1NB0EXjMZWnw3vs5Yevy6kIXj5XZXp6JTMlwAz0uAH/OMLmTe+p3jELMAkGBSsOAwIaBQAwgfwGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIv/LQM5wV0gmAgdgIA138subWQxR92lP/6RrmbagP70D2qNnJ7YJbOJZoY5piulpyMSLmpyxenczRDXrJd/wcNf+TDFDZOHgY13T1zm+ym6NG7GXsV5AKhVde3WustpNhWGQpFz6/uhXNKNPCrF6gIVv/SP6Xa8/ru9jr7YjuqoxkcringSYKtj54jwZCWUkYPa/GW4LLX++/7MNy/anKit42fxFMQ5rQ5AUyi65xmAdrDgfF8wl2F8rrJZhMKsVBq4Ug2NhKJrB4Sezj0uNf1ia0Nc4GJQEQDBKdvVtd4pizUQCgggOHMIIDgzCCAuygAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wHhcNMDQwMjEzMTAxMzE1WhcNMzUwMjEzMTAxMzE1WjCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFHTt38RMxLXJyO2SmS+Ndl72T7oKJ4u4uw+6awntALWh03PewmIJuzbALScsTS4sZoS1fKciBGoh11gIfHzylvkdNe/hJl66/RGqrj5rFb08sAABNTzDTiqqNpJeBsYs/c2aiGozptX2RlnBktH+SUNpAajW724Nv2Wvhif6sFAgMBAAGjge4wgeswHQYDVR0OBBYEFJaffLvGbxe9WT9S1wob7BDWZJRrMIG7BgNVHSMEgbMwgbCAFJaffLvGbxe9WT9S1wob7BDWZJRroYGUpIGRMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIFfOlaagFrl71+jq6OKidbWFSE+Q4FqROvdgIONth+8kSK//Y/4ihuE4Ymvzn5ceE3S/iBSQQMjyvb+s2TWbQYDwcp129OPIbD9epdr4tJOUNiSojw7BHwYRiPh58S1xGlFgHFXwrEBb3dgNbMUa+u4qectsMAXpVHnD9wIyfmHMYIBmjCCAZYCAQEwgZQwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xMTA5MzAyMTA0NTJaMCMGCSqGSIb3DQEJBDEWBBTmO4yICrTxIA9YqqthqrkU1kweRzANBgkqhkiG9w0BAQEFAASBgApAyJvKVGEqzZYmG0DKdWpfqcnVKAop4V+cjBv86Y7VI8RI2Wt0ZIVQ3+JteTFLi9xaeld1CblTS1FfVkVM2raa2L6/T9h8/kTlp0SiXsNOb8WglUX/DCmkvmlhoUHtwK3fVACqPQulQKdgEdyoroUHTJ9rUm/7tnYkAw7QCmXv-----END PKCS7-----"&gt;&lt;input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"&gt;&lt;img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"&gt;&lt;/form&gt;  &lt;p&gt;Depois de clicar no botão acima e concluir o processo de pagamento, &lt;a href="http://www.leniel.net/2007/12/contact.html"&gt;escreva para mim&lt;/a&gt; e me informe sobre sua compra. Poderei, então, dar prosseguimento no processo de negociação entregando para você a aplicação através de e-mail. A aplicação está contida em um arquivo .zip pequeno ~4MB.&lt;/p&gt;  &lt;p&gt;Software é um campo muito interessante porque você trabalha muito para construir uma aplicação, digamos meses, e o produto é apenas um pacote de alguns megabytes. Vai entender…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Direitos autorais&lt;/strong&gt;     &lt;br /&gt;Este produto de software é protegido por direitos autorais.&lt;/p&gt;  &lt;p&gt;Você pode ler a EULA aqui (em construção).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Suporte&lt;/strong&gt;     &lt;br /&gt;Ficarei mais do que feliz em fornecer qualquer informação adicional que você precise para que a aplicação seja instalada e funcione em seu servidor.&lt;/p&gt;  &lt;p&gt;Se você encontrar algum bug na aplicação eu prontamente irei corrigi-lo e disponibilizarei a aplicação atualizada para você.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Recursos adicionais&lt;/strong&gt;     &lt;br /&gt;Se você precisar de qualquer outro recurso, seja ele um novo módulo ou relatório que não faz parte desta aplicação, apenas &lt;a href="http://www.leniel.net/2007/12/contact.html"&gt;me informe&lt;/a&gt; e o considerarei para uma versão futura.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-9088306935230265727?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MnCTCz9McprqQUlyWcCxOLxRzSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MnCTCz9McprqQUlyWcCxOLxRzSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MnCTCz9McprqQUlyWcCxOLxRzSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MnCTCz9McprqQUlyWcCxOLxRzSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=w8F0CALf_ts:js1QBIoAfIE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=w8F0CALf_ts:js1QBIoAfIE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=w8F0CALf_ts:js1QBIoAfIE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=w8F0CALf_ts:js1QBIoAfIE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=w8F0CALf_ts:js1QBIoAfIE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/w8F0CALf_ts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/9088306935230265727/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/07/sistema-gerenciamento-academia.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/9088306935230265727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/9088306935230265727?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/w8F0CALf_ts/sistema-gerenciamento-academia.html" title="Sistema para Gerenciamento de Academia de Ginástica" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-zVhUqqYMxAM/ThXvBJciqgI/AAAAAAAABLY/h3y1_dwthHc/s72-c/FitnessCenterAppHomept-BR_thumb%25255B8%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/07/sistema-gerenciamento-academia.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMAR30yfSp7ImA9WhZaFks.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-6252511048514446592</id><published>2011-07-02T12:58:00.001-03:00</published><updated>2011-07-03T01:30:46.395-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-03T01:30:46.395-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web application" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Paparazzi" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac" /><category scheme="http://www.blogger.com/atom/ns#" term="automation" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="website" /><category scheme="http://www.blogger.com/atom/ns#" term="batch processing" /><category scheme="http://www.blogger.com/atom/ns#" term="screenshot" /><category scheme="http://www.blogger.com/atom/ns#" term="screen capture" /><title>Software to automate website screenshot capture</title><content type="html">&lt;p&gt;I needed a software that allowed me to capture screenshots of a web application I developed. The software should do it automatically (batch capture). This way it’d save me a lot of time.&lt;/p&gt;  &lt;p&gt;How do I used to do that?    &lt;br /&gt;I visited each web page I wanted to take a screenshot. It took me about &lt;font style="background-color: #ffffff"&gt;&lt;em&gt;1 hour&lt;/em&gt;&lt;/font&gt; to finish the work.&lt;/p&gt;  &lt;p&gt;I posted a question at Super User as always: &lt;a href="http://superuser.com/q/300432/33242" target="_blank"&gt;Software to automate website screenshot capture&lt;/a&gt; and got an answer suggesting that I use a combination of a URL fetcher + &lt;a href="http://en.wikipedia.org/wiki/Selenium_(software)" target="_blank"&gt;Selenium&lt;/a&gt; capability to take screenshots.&lt;/p&gt;  &lt;p&gt;Well, I tried &lt;a href="http://en.wikipedia.org/wiki/Selenium_(software)" target="_blank"&gt;Selenium&lt;/a&gt; (.NET bindings &lt;a href="http://code.google.com/p/selenium/downloads/detail?name=selenium-dotnet-2.0rc3.zip&amp;amp;can=2&amp;amp;q=" target="_blank"&gt;selenium-dotnet-2.0rc3.zip&lt;/a&gt; ) to test its screenshot capture feature but it doesn’t seem to fit the job because it doesn’t allow you to configure screenshot properties as size (height x width). Moreover it doesn’t work well with Ajax (requires you to write a lot of code to check for the existence of Ajax calls, etc). This kills a screenshot that needs everything in place (I mean every DOM object should be part of the screenshot). I tried the 3 drivers available: Internet Explorer, Firefox and Chrome. Screenshots taken with Internet Explorer driver were close to what I expected.&lt;/p&gt;  &lt;p&gt;This is a sample code I used based on the code taken from &lt;a href="http://deanhume.com/Home/BlogPost/capturing-web-page-screenshots-with-selenium-2/48" target="_blank"&gt;here&lt;/a&gt;:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Drawing.Imaging;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Text;
&lt;span style="color: blue"&gt;using &lt;/span&gt;NUnit.Framework;
&lt;span style="color: blue"&gt;using &lt;/span&gt;OpenQA.Selenium;
&lt;span style="color: blue"&gt;using &lt;/span&gt;OpenQA.Selenium.Chrome;
&lt;span style="color: blue"&gt;using &lt;/span&gt;OpenQA.Selenium.Firefox;
&lt;span style="color: blue"&gt;using &lt;/span&gt;OpenQA.Selenium.IE;
&lt;span style="color: blue"&gt;using &lt;/span&gt;OpenQA.Selenium.Support.UI;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;SeleniumTest
{
    [&lt;span style="color: #2b91af"&gt;TestFixture&lt;/span&gt;]
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SeleniumExample
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FirefoxDriver &lt;/span&gt;firefoxDriver;
    
        &lt;span style="color: blue"&gt;#region &lt;/span&gt;Setup

        [&lt;span style="color: #2b91af"&gt;SetUp&lt;/span&gt;]
        &lt;span style="color: blue"&gt;public void &lt;/span&gt;Setup()
        {
            firefoxDriver = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FirefoxDriver&lt;/span&gt;();
        }

        &lt;span style="color: blue"&gt;#endregion

        #region &lt;/span&gt;Tests

        [&lt;span style="color: #2b91af"&gt;Test&lt;/span&gt;]
        &lt;span style="color: blue"&gt;public void &lt;/span&gt;DisplayReport()
        {
            &lt;span style="color: green"&gt;// Navigate
            &lt;/span&gt;firefoxDriver.Navigate().GoToUrl(&lt;span style="color: #a31515"&gt;&amp;quot;http://localhost/FitnessCenter/Report/TotalPaymentsByPeriod&amp;quot;&lt;/span&gt;);

            &lt;span style="color: #2b91af"&gt;IWebElement &lt;/span&gt;startDate = firefoxDriver.FindElement(&lt;span style="color: #2b91af"&gt;By&lt;/span&gt;.Name(&lt;span style="color: #a31515"&gt;&amp;quot;StartDate&amp;quot;&lt;/span&gt;));
            
            startDate.Clear();
            startDate.SendKeys(&lt;span style="color: #a31515"&gt;&amp;quot;January 2011&amp;quot;&lt;/span&gt;);

            &lt;span style="color: #2b91af"&gt;IWebElement &lt;/span&gt;generate = firefoxDriver.FindElement(&lt;span style="color: #2b91af"&gt;By&lt;/span&gt;.Id(&lt;span style="color: #a31515"&gt;&amp;quot;Generate&amp;quot;&lt;/span&gt;));
            generate.Click();

            &lt;span style="color: blue"&gt;var &lt;/span&gt;wait = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebDriverWait&lt;/span&gt;(firefoxDriver, &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.FromSeconds(5));
            wait.Until(driver =&amp;gt; driver.FindElement(&lt;span style="color: #2b91af"&gt;By&lt;/span&gt;.Id(&lt;span style="color: #a31515"&gt;&amp;quot;Map&amp;quot;&lt;/span&gt;)));

            SaveScreenShot(firefoxDriver.Title);
        }

        &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="color: green"&gt;Saves a screenshot of the current error page
        &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
        &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;SaveScreenShot(&lt;span style="color: blue"&gt;string &lt;/span&gt;fileName)
        {
            &lt;span style="color: green"&gt;// Get the screenshot
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Screenshot &lt;/span&gt;screenshot = firefoxDriver.GetScreenshot();

            &lt;span style="color: green"&gt;// Build up our filename
            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder &lt;/span&gt;filename = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder&lt;/span&gt;(fileName);
            filename.Append(&lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;);
            filename.Append(&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now.ToString(&lt;span style="color: #a31515"&gt;&amp;quot;yyyy-MM-dd HH_mm_ss&amp;quot;&lt;/span&gt;));
            filename.Append(&lt;span style="color: #a31515"&gt;&amp;quot;.png&amp;quot;&lt;/span&gt;);

            &lt;span style="color: green"&gt;// Save the image
            &lt;/span&gt;screenshot.SaveAsFile(filename.ToString(), &lt;span style="color: #2b91af"&gt;ImageFormat&lt;/span&gt;.Png);
        }

        &lt;span style="color: blue"&gt;#endregion

        #region &lt;/span&gt;TearDown

        [&lt;span style="color: #2b91af"&gt;TearDown&lt;/span&gt;]
        &lt;span style="color: blue"&gt;public void &lt;/span&gt;FixtureTearDown()
        {
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(firefoxDriver != &lt;span style="color: blue"&gt;null&lt;/span&gt;) firefoxDriver.Close();
        }

        &lt;span style="color: blue"&gt;#endregion
    &lt;/span&gt;}
}&lt;/pre&gt;

&lt;p&gt;Indeed, Selenium is powerful for what it does, that is, helping you automate browser interactions while you test your code. It even allows you to take a screenshot let’s say when something goes wrong (a test fail for example). That’s great and that’s what it does best. It’s a choice for every operating system since it’s an &lt;a href="http://en.wikipedia.org/wiki/API" target="_blank"&gt;API&lt;/a&gt; that can be programmed against.&lt;/p&gt;

&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Paparazzi! beautiful application icon" border="0" alt="Paparazzi! beautiful application icon" align="right" src="http://lh4.ggpht.com/-Hd1H7RH32hM/Tg8_-Zpz0QI/AAAAAAAABJk/TPrUHSCQmqQ/PaparazziAppIcon%25255B23%25255D.png?imgmax=800" width="240" height="142" /&gt;What I needed was something more specialized to take screenshots. A software that allows me to configure screenshot properties. The good news is that I managed to find such piece of software and it’s called &lt;a href="http://derailer.org/paparazzi/" target="_blank"&gt;Paparazzi!&lt;/a&gt; - a very suggestive name by the way. One drawback is that it’s only available for &lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X" target="_blank"&gt;Mac OS&lt;/a&gt;. As one would expect, it uses &lt;a href="http://en.wikipedia.org/wiki/Safari_%28web_browser%29" target="_blank"&gt;Safari&lt;/a&gt; browser engine behind the curtains to capture the screenshots. Paparazzi! has minor bugs but it gets the job done. It doesn’t have documentation. I had a hard time trying to make it work. It has batch capture capability but no docs explaining how to do it. So I hope this post will shed some light…&lt;/p&gt;

&lt;p&gt;The following lines describe what I did to achieve my objective with Paparazzi!:&lt;/p&gt;

&lt;p&gt;1 - Created a list of URLs I’d like to take screenshots of. Like this (one URL per line):&lt;/p&gt;

&lt;p&gt;&lt;font size="2" face="Courier New"&gt;http://192.168.1.106/FitnessCenter/Account/ChangeCulture?lang=en&amp;amp;returnUrl=%2FFitnessCenter%2F 
    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Student 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Student/Create 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Student/Edit/79 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Student/Details/79 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Student/Delete/79 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Anamnesis 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Anamnesis/Create 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Anamnesis/Edit/79 

    &lt;br /&gt;http://192.168.1.106/FitnessCenter/Anamnesis/Details/79&lt;/font&gt; 

  &lt;br /&gt;&lt;font size="4"&gt;. 
    &lt;br /&gt;. 

    &lt;br /&gt;.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;2 - Open Paparazzi! and click the Window menu =&amp;gt; Batch capture (really difficult to find this option &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-disappointedsmile" alt="Disappointed smile" src="http://lh5.ggpht.com/-u4H_dCOm2S0/Tg8__G5t2PI/AAAAAAAABJo/8xmHjoyd0KA/wlEmoticon-disappointedsmile%25255B2%25255D.png?imgmax=800" /&gt; ):&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! difficult to find Batch Capture menu option" border="0" alt="Paparazzi! difficult to find Batch Capture menu option" src="http://lh6.ggpht.com/-ANpg3PNxMvw/Tg9ABo9IAHI/AAAAAAAABKs/_r-KZWxGqjI/PaparazziBatchCaptureMenuOption%25255B1%25255D.png?imgmax=800" width="186" height="170" /&gt;Picture 1 - Paparazzi! difficult to find Batch Capture menu option&lt;/p&gt;

&lt;p align="left"&gt;3 - Drag and drop a text file .txt (the file that contains the URLs) to the Batch Capture window:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! Batch Capture window surface" border="0" alt="Paparazzi! Batch Capture window surface" src="http://lh5.ggpht.com/-Erm3FHSa1q0/Tg9ADOOh9jI/AAAAAAAABKw/dmL7FI1sfIY/PaparazziBatchCaptureWindow%25255B1%25255D.png?imgmax=800" width="400" height="296" /&gt;Picture 2 - Paparazzi! Batch Capture window surface&lt;/p&gt;

&lt;p&gt;Here is where I think I found a limitation and it’s by design. This should definitely not happen IMHO. If you try to add a file clicking on ( + button), Paparazzi won’t let you select a text file. The only way I got it working was selecting the .txt file and then drag and dropping the file to the Batch Capture window.&lt;/p&gt;

&lt;p&gt;4 - Configure screenshot properties by clicking the list button (see mouse cursor above it):&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! screenshot process basic configurations" border="0" alt="Paparazzi! screenshot process basic configurations" src="http://lh6.ggpht.com/-tqKcgNuUdbg/Tg9AFe2VfRI/AAAAAAAABK0/7QJnJL5oFsk/PaparazziBatchCaptureConfigure%25255B1%25255D.png?imgmax=800" width="518" height="291" /&gt;Picture 3 - Paparazzi! screenshot process basic configurations&lt;/p&gt;

&lt;p&gt;You can define the screenshot size. There are pre-defined values for standard screen resolutions. It allows you to define new presets.&lt;/p&gt;

&lt;p&gt;You can also delay the capture to wait the page finish loading, etc.&lt;/p&gt;

&lt;p&gt;There are a set of configurations available related to the batch capture functionality. To access these configurations, go to Paparazzi! menu and select Preferences:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! Preferences… menu option" border="0" alt="Paparazzi! Preferences… menu option" src="http://lh4.ggpht.com/-U_6m1pv7zR4/Tg9AHDD40AI/AAAAAAAABK4/UpcxK632t0Q/PaparazziPreferencesMenuOption%25255B4%25255D.png?imgmax=800" width="194" height="239" /&gt;Picture 4 - Paparazzi! Preferences… menu option&lt;/p&gt;

&lt;p&gt;The first configuration worth mentioning the Default Filename Format available in the General section:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! General preferences section" border="0" alt="Paparazzi! General preferences section" src="http://lh4.ggpht.com/-gfpYPhYrzXY/Tg9AJv4OehI/AAAAAAAABK8/N-2tlYRasjI/PaparazziGeneralConfiguration%25255B6%25255D.png?imgmax=800" width="524" height="437" /&gt;Picture 5 - Paparazzi! General preferences section&lt;/p&gt;

&lt;p&gt;Above I’m defining this format:&lt;/p&gt;

&lt;p&gt;%t = page title 
  &lt;br /&gt;%Y = year 

  &lt;br /&gt;%m = month 

  &lt;br /&gt;%d = day 

  &lt;br /&gt;%H = hour 

  &lt;br /&gt;%M = minute 

  &lt;br /&gt;%S = second&lt;/p&gt;

&lt;p&gt;The example in the picture is pretty clear… &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh6.ggpht.com/-9SmqzzzFpps/Tg9AKSB9-eI/AAAAAAAABKU/8EIggU84W78/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;

&lt;p&gt;Another set of configurations is available in the Batch capture section:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! Batch Capture preferences section" border="0" alt="Paparazzi! Batch Capture preferences section" src="http://lh5.ggpht.com/-Y1CRGC9nS2A/Tg9AMQ_EVkI/AAAAAAAABLA/kFdHgR5dGeQ/PaparazziBatchCaptureConfiguration%25255B5%25255D.png?imgmax=800" width="524" height="467" /&gt;Picture 6 - Paparazzi! Batch Capture preferences section&lt;/p&gt;

&lt;p&gt;Here you can choose where to save the screenshots as well as the type of the images.&lt;/p&gt;

&lt;p&gt;After configuring the batch capture session, it’s the gran finale time...&lt;/p&gt;

&lt;p&gt;5 - Click the Play button, go take a coffee and relax while the computer does the job for you &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-fingerscrossed" alt="Fingers crossed" src="http://lh3.ggpht.com/-Jb0VxUBMFA0/Tg9AM0Tc26I/AAAAAAAABKg/_BGUoyTZaT0/wlEmoticon-fingerscrossed%25255B2%25255D.png?imgmax=800" /&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Paparazzi! Batch Capture in action" border="0" alt="Paparazzi! Batch Capture in action" src="http://lh3.ggpht.com/--qLYiXtit_k/Tg9AOgGdGFI/AAAAAAAABLE/jWWeZ8MwzpQ/PaparazziBatchCapturingScreenshots%25255B1%25255D.png?imgmax=800" width="518" height="291" /&gt;Picture 7 - Paparazzi! Batch Capture in action&lt;/p&gt;

&lt;p&gt;Hope you have found this post interesting and that it’s useful to help in documenting a little bit of this small but really powerful application.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-pointingup" alt="Pointing up" src="http://lh6.ggpht.com/-0RfybK4_fUg/Tg_vfKMOwUI/AAAAAAAABLI/mXehhaki9DE/wlEmoticon-pointingup%25255B2%25255D.png?imgmax=800" /&gt; Now I get all the screenshots in less than &lt;font style="background-color: #ffffff"&gt;&lt;em&gt;1 minute&lt;/em&gt;&lt;/font&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References 
    &lt;br /&gt;&lt;/strong&gt;Paparazzi! 

  &lt;br /&gt;&lt;a title="http://derailer.org/paparazzi/" href="http://derailer.org/paparazzi/" target="_blank"&gt;http://derailer.org/paparazzi/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-6252511048514446592?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qkTDwHl0AZ5FWOvB4h4e3sKWioY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qkTDwHl0AZ5FWOvB4h4e3sKWioY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qkTDwHl0AZ5FWOvB4h4e3sKWioY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qkTDwHl0AZ5FWOvB4h4e3sKWioY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=2dZazLN_eYg:yL1Q7WU81Ko:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=2dZazLN_eYg:yL1Q7WU81Ko:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=2dZazLN_eYg:yL1Q7WU81Ko:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=2dZazLN_eYg:yL1Q7WU81Ko:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=2dZazLN_eYg:yL1Q7WU81Ko:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/2dZazLN_eYg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/6252511048514446592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/07/software-automate-site-screenshot.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/6252511048514446592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/6252511048514446592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/2dZazLN_eYg/software-automate-site-screenshot.html" title="Software to automate website screenshot capture" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-Hd1H7RH32hM/Tg8_-Zpz0QI/AAAAAAAABJk/TPrUHSCQmqQ/s72-c/PaparazziAppIcon%25255B23%25255D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.leniel.net/2011/07/software-automate-site-screenshot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHRX05fip7ImA9WhdUFEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-3698431387464209244</id><published>2011-06-18T00:57:00.001-03:00</published><updated>2011-09-30T18:37:14.326-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T18:37:14.326-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Applications" /><category scheme="http://www.blogger.com/atom/ns#" term="web application" /><category scheme="http://www.blogger.com/atom/ns#" term="buy" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="fitness center" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="management system" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Fitness Center management software ( web app )</title><content type="html">&lt;p&gt;&lt;strong&gt;Fitness Center Management System/Web Application      &lt;br /&gt;&lt;/strong&gt;This is&lt;strong&gt; &lt;/strong&gt;a web application that was born in a partnership between me (the only developer) and the owner of a Fitness Center that I happen to be a frequenter/student. It’s currently being used there and he (the owner/user) is really satisfied with it.&lt;/p&gt;  &lt;p&gt;The application values simplicity and is super easy to use.&lt;/p&gt;  &lt;p&gt;The following screenshot shows the home page from where the user can access the application functionalities. Click it to see a larger version…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-zBO8SdLjO84/TfwxkbtkyGI/AAAAAAAABIw/EajYYEvzLuw/s1600-h/FitnessCenterAppHome%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Fitness Center Management System Home page" border="0" alt="Fitness Center Management System Home page" src="http://lh3.ggpht.com/-H7oqm_aJf7Q/TfwxllYcapI/AAAAAAAABI0/xiNFWjvBNvw/FitnessCenterAppHome_thumb%25255B3%25255D.jpg?imgmax=800" width="525" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The app comprises 5 modules:    &lt;br /&gt;- Students     &lt;br /&gt;- Anamneses     &lt;br /&gt;- Measurements     &lt;br /&gt;- Payments     &lt;br /&gt;- Reports (chart and grid based reports)&lt;/p&gt;  &lt;p&gt;It’s available in Portuguese from Brazil (pt-BR) and English (en-US). It has everything in place in case of additional localization needs. It’s completely viable to have the app running in any other culture/language with little work.&lt;/p&gt;  &lt;p&gt;Application styles/colors and logo can be customized using cascading style sheet (CSS).&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Technologies      &lt;br /&gt;&lt;/strong&gt;The app uses state of the art technologies from Microsoft stack as well as open source libraries:     &lt;br /&gt;C#, .NET Framework 4, ASP.NET MVC 3, SQL Server Compact 4.1, CSS, jQuery 1.5.2, jQuery UI 1.8.12, jQuery Globalization 1.0, jQuery qTip2, modernizr 1.7, Microsoft MVC Ajax, Microsoft Chart Controls for .NET 4, WebGrid, Chirpy&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Screenshots      &lt;br /&gt;&lt;/strong&gt;You can see screenshots of the application &lt;a href="http://www.flickr.com/photos/leniel/sets/72157627665326603/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Description      &lt;br /&gt;&lt;/strong&gt;The subsequent sections describe each module and the actions the user is allowed to perform. Business logic is also described along the way if I see it fits. It’s not my intention to describe every business rule of the application in this post. It’s just an overview.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Students&lt;/strong&gt;     &lt;br /&gt;Actions: Create, Edit, Details, Delete     &lt;br /&gt;This module handles basic student data as photo, first and last names, birth date, address, gender, phone, email, etc.&amp;#160; &lt;br /&gt;Everything in the system is related to Student. This means that if a Student is deleted, every other module's data is deleted as well.     &lt;br /&gt;Students that are in debt are highlighted in red in the Students list/grid.     &lt;br /&gt;If the name of a Student is clicked in the list, the system takes the user to the Payments list of that respective Student.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Anamneses&lt;/strong&gt;     &lt;br /&gt;Actions: Create, Edit, Details, Delete     &lt;br /&gt;This module handles basic information about the Student health history such as if the student is hypertense, diabetic, smoker, etc. Different types of diseases can also be selected. These diseases are grouped in categories such as Bones and Joints, Respiratory and Thyroid diseases. The style of physical activity a student currently fits in when he/she joins the Fitness Center can also be selected.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Measurements&lt;/strong&gt;     &lt;br /&gt;Actions: Create, Edit, Details, Delete     &lt;br /&gt;This module handles measurements of a Student's body circumferences. These are the measurements the system keeps track:     &lt;br /&gt;- Height (m)     &lt;br /&gt;- Weight (kg)     &lt;br /&gt;- Fat (%)     &lt;br /&gt;- Neck (m)     &lt;br /&gt;- Thorax (m)     &lt;br /&gt;- Buttocks (m)     &lt;br /&gt;- Shoulder (m)     &lt;br /&gt;- Abdomen (m)     &lt;br /&gt;- Waist (m)     &lt;br /&gt;- Left Arm (m)     &lt;br /&gt;- Right Arm (m)     &lt;br /&gt;- Left Thigh (m)     &lt;br /&gt;- Right Thigh (m)     &lt;br /&gt;- Left Calf (m)     &lt;br /&gt;- Right Calf (m)&lt;/p&gt;  &lt;p&gt;The user is notified through the measurements list if it's time to take new measurements for a Student. The time interval between measurements can be configured in the system. Currently this is set as a 3 month interval.    &lt;br /&gt;Fat (%) is calculated by the system. If the user hovers his mouse over the Fat (%) table header he/she can see a table with standard Fat (%) values that include Essential, Athletes, Fitness, Average and Obese.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Payments      &lt;br /&gt;&lt;/strong&gt;Actions: Create, Edit, Details, Delete     &lt;br /&gt;This module is the heart of the system since it handles what we can call the &lt;i&gt;Raison d'être of&lt;/i&gt; a system like this.     &lt;br /&gt;The system allows the creation of payments for a given Student. The user defines a value, discount (if necessary) and the Total field is automatically calculated. After that a Due date must be selected. There’s also an observation field in which the user can annotate anything important related to that payment. The user signals that a payment was made by checking the Paid field.     &lt;br /&gt;Whenever a payment is marked paid, the system automatically generates a new payment (copy of the payment being made) for that same Student with a due date 1 month ahead.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reports&lt;/strong&gt;     &lt;br /&gt;This module generates 4 types of reports. They are:&lt;/p&gt;  &lt;p&gt;- Total Payments ( chart )    &lt;br /&gt;The user selects a Start and End date to generate a column chart that groups the payments by month.&lt;/p&gt;  &lt;p&gt;- Overdue Payments ( grid/listing )&amp;#160; &lt;br /&gt;The system automatically generates a grid/listing report extracting data for payments that have a due date less than a specified date. This can be configured in the system.&lt;/p&gt;  &lt;p&gt;- % of Active/Inactive Students ( chart )    &lt;br /&gt;The system automatically generates a pie chart that depicts very well this information.&lt;/p&gt;  &lt;p&gt;- Measurements Over Time ( chart )    &lt;br /&gt;The user selects a Student and a Start and End date to generate a beautiful line chart that shows measurements increase/decrease over time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why to buy?      &lt;br /&gt;&lt;/strong&gt;I think the main benefit is that you’ll have a centralized point to manage your Fitness Center. From this you can extract valued information from data and be always one step ahead to plan your next endeavor. No more notebook entries and missing important data!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Installation      &lt;br /&gt;&lt;/strong&gt;The app is self-contained in a .zip file that has everything it needs to run on a webserver that has the .NET Framework 4 installed.&lt;/p&gt;  &lt;p&gt;If you need additional assistance regarding installation/web server hosting and configuration, I can also do that for you. Just let me know.&lt;/p&gt;  &lt;p&gt;There's also the possibility of running the app in a local webserver by using &lt;a href="http://www.microsoft.com/web/webmatrix/" target="_blank"&gt;Microsoft WebMatrix&lt;/a&gt; for example. This is how I installed it in the user's computer. Doing this way you won't need to pay an online hosting provider. The only downside here is that you won't be able to access the app on the go.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to buy?&lt;/strong&gt;     &lt;br /&gt;Just click the following button to buy this cheap app ( only $ 350.00 ) through PayPal:&lt;/p&gt;  &lt;p&gt;&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;&lt;input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHdwYJKoZIhvcNAQcEoIIHaDCCB2QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYAgPwV9X/jjGxvaW2Aaty2sI/fLoVTa6R5bsYehfKRUctHhfZgJSeQCEU8t6d1Ntx2uRkbOdi16UE5y3MQ4ojtyHyVO1+gbamAaGS/f5h+LbCyc+Mz+GBMLBUh2zB316QaVpDVAX+LtB76u7bgrrwOi5epl71hI6Ej4GA3oziAY8jELMAkGBSsOAwIaBQAwgfQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI4mfBEkh6I+mAgdA0l6M7oWbF1DfCKCRZi6X1696WLhD8D8oPwBmC7hw5vafhursY9rdJVRxnVVutpgcn41L9vA8Mgv9p4upgYo7KzFsl1+hzOf9N6rQGZf/XwLfeGRGSY45W+/+4G3BmFbG8hKta6iXqlMwdDr63sJMkd8MKYkxErgte8UeY6VMwiJhHP5OJZEdoI8XZyqmR1BYg4Ws87BY78Zfm6JJaETHxSY/9xmraAvB9AVEfGGx+NV8WpWPk8ugaLso6KAVJBPCqxY1wmjBYvssTawYqnSCwoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTEwOTI5MTgxMjE5WjAjBgkqhkiG9w0BCQQxFgQUaBHrimjd884S1/5ltglqaEEo1JwwDQYJKoZIhvcNAQEBBQAEgYCvpRtjixz9cLoGPdkzbVRvMIT5waxzxF/ZxvKfIOd3d31/47qfaLlQ2A/RAwVzqgWXUsVq0yPNXTZsBZJuwIYhkGh/pRXTjQ4EmF5l+pfcdSTz6V4Qbg/uxweVbWHgexehofbLoDJfj55xn70TNrEE3p15bdMJNQnkIC80FvgAfA==-----END PKCS7-----"&gt;&lt;input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"&gt;&lt;img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"&gt;&lt;/form&gt;&lt;/p&gt;  &lt;p&gt;After clicking the button above and completing the payment process, &lt;a href="http://www.leniel.net/2007/12/contact.html" target="_blank"&gt;write to me&lt;/a&gt; and let me know about the purchase. I can then go further in the negotiation process and handle you the app through e-mail since it’s a small .zip package ~4MB.&lt;/p&gt;  &lt;p&gt;Software is a really interesting field because you put a lot of work to construct it, let’s say months and the product is just a package of only a few megabytes. Go figure.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Support&lt;/strong&gt;     &lt;br /&gt;I'll be more than happy in providing any further information you need to get the app up and running on your server.&lt;/p&gt;  &lt;p&gt;If you find any bug in the app I'll promptly correct it and send the patched app to you.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Additional features&lt;/strong&gt;     &lt;br /&gt;If you need any other feature, be it a new module or report that is not part of this app, just &lt;a href="http://www.leniel.net/2007/12/contact.html" target="_blank"&gt;let me know&lt;/a&gt; and I'll consider it for a future release.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-3698431387464209244?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e0FjMgPqV8d5GoRaEOd2kFf16XU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e0FjMgPqV8d5GoRaEOd2kFf16XU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e0FjMgPqV8d5GoRaEOd2kFf16XU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e0FjMgPqV8d5GoRaEOd2kFf16XU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=vDZbBc5K5ls:cclOlhUQw2s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=vDZbBc5K5ls:cclOlhUQw2s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=vDZbBc5K5ls:cclOlhUQw2s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=vDZbBc5K5ls:cclOlhUQw2s:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=vDZbBc5K5ls:cclOlhUQw2s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/vDZbBc5K5ls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/3698431387464209244/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/06/buy-fitness-center-management-software.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3698431387464209244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3698431387464209244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/vDZbBc5K5ls/buy-fitness-center-management-software.html" title="Fitness Center management software ( web app )" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABB0/RPAsyiKRWKk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-H7oqm_aJf7Q/TfwxllYcapI/AAAAAAAABI0/xiNFWjvBNvw/s72-c/FitnessCenterAppHome_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.leniel.net/2011/06/buy-fitness-center-management-software.html</feedburner:origLink></entry></feed>

