<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Refresh Buffalo</title>
	<atom:link href="http://www.refreshbuffalo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.refreshbuffalo.com</link>
	<description>Gather! Share! Grow!</description>
	<lastBuildDate>Wed, 19 Oct 2011 23:45:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Lunchage: Wrapping the Domain with NHibernate 3.2</title>
		<link>http://www.refreshbuffalo.com/blog_mod/lunchage-wrapping-the-domain-with-nhibernate-3-2/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/lunchage-wrapping-the-domain-with-nhibernate-3-2/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 23:00:49 +0000</pubDate>
		<dc:creator>Kyle Pace</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1832</guid>
		<description><![CDATA[Unless you live under a rock or really really really enjoy hand-writing every SQL query you make, chances are you&#8217;ve come across an ORM that maps your domain model to a data storage mechanism.  For Lunchage we&#8217;re opting to use NHibernate mostly out of familiarity, but also to try out the new &#8220;auto-mapping&#8221; functionality that [...]]]></description>
			<content:encoded><![CDATA[<p>Unless you live under a rock or really really really enjoy hand-writing every SQL query you make, chances are you&#8217;ve come across an ORM that maps your domain model to a data storage mechanism.  For Lunchage we&#8217;re opting to use <a title="NHibernate" href="http://nhforge.org/Default.aspx">NHibernate</a> mostly out of familiarity, but also to try out the new &#8220;auto-mapping&#8221; functionality that eliminates the need for .hbm files or a third-party utility like <a title="Fluent NHibernate" href="http:/fluentnhibernate.org/">Fluent NHibernate</a>.  If you need a primer for using NHibernate check out their <a title="First NHibernate application" href="http://nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx">getting started guide</a> or <a title="Ayende's recommendations" href="http://ayende.com/blog/1817/how-to-get-started-with-nhibernate">Ayende&#8217;s recommended learning material</a>.</p>
<p>Given the domain we&#8217;ve created in the last post, I&#8217;ve got to wrap the base amount of information I want stored in the database we&#8217;re using that will be familiar across all objects.  The base &#8220;Entity&#8221; object will contain Id, Version, CreateDate and LastModified properties in order to place nice with our ORM. The Id, CreateDate and LastModified should be obvious, the Version is a field we will use to manage concurrency issues. My next move is to define how NHibernate maps our domain to the database.  As I briefly mentioned above, the newest version of NHibernate (3.2) integrated convention and configuration based mappings that rely on strongly-typed code instead of xml for transforms.  Unfortunately this is a relatively new feature and finding documentation on best practices can be difficult.  Most of what I&#8217;ve done can be referenced through Fabio Maulo&#8217;s <a href="http://fabiomaulo.blogspot.com/2011/04/nhibernate-32-mapping-by-code.html">3.2 series of articles</a>. To leverage this convention based power, I can define a class for our default mapping configurations.</p>
<p><script src="https://gist.github.com/1276835.js?file=LunchageConventionMapper.cs"></script></p>
<p>Pretty simple eh?  This configuration should take care of 80% of what we need out of our ORM. You&#8217;ll notice there is one reference to an explicit map around line 39, that&#8217;s because we&#8217;re defining a ManyToMany for Restaurants to Tags but don&#8217;t really care or have the domain Tag class knowing about our restaurants.  Otherwise, we could probably map a convention for ManyToMany and be done with the whole process.</p>
<p><script type="text/javascript" src="https://gist.github.com/1276858.js?file=LunchageRestauarantMapper.cs"></script>Once configuration is done, I write a test to create and export the schema which should verify that our domain matches the database and will detect whenever we&#8217;ve mapped something improperly.<script type="text/javascript" src="https://gist.github.com/1276869.js?file=LunchageCreateSchema.cs"></script></p>
<p>Before this test can run, I have to define the configuration for NHibernate and this is vastly different (re: way simpler) to do than previous incarnations.  Again, though, there isn&#8217;t a ton of documentation at this time on getting configuration up and running.  Instead of configuration individual variables on the configuration object, we interact we an object called DatabaseIntegration on the Configuration to specify the db dialect and connection string.  The final step is to add the mapping files to the configuration and, BOOM, we&#8217;re ready to go.  You can still specify configuration parameters via Configuration.SetProperty(Key,Value) by why would you when half of the work is already done?  (Note though, we&#8217;ll likely need to make some changes once we get into a web environment).</p>
<p><script src="https://gist.github.com/1276872.js?file=LunchangeNHibernateTestSetUp.cs"></script></p>
<p>That&#8217;s that.  We have enough to generate our database and have our system not die. Also at the bottom notice I&#8217;ve created a function to export our xml mapping files should we feel the need to confirm any mapping issues. If anyone out there knows a native way of doing this in NHibernate 3.2 please do tell.  We&#8217;ve made our UI decisions so we&#8217;ll now start scaffolding up the site&#8217;s layout and UI interaction in order to get some of the back-end work come together.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/lunchage-wrapping-the-domain-with-nhibernate-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Naming and Organizing can be so Satisfying</title>
		<link>http://www.refreshbuffalo.com/blog_mod/naming-and-organizing/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/naming-and-organizing/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 03:14:02 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[code style]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1842</guid>
		<description><![CDATA[To this day it puzzles me that the most important organizational decision that you can make is so often overlooked. Whenever I bring up the importance of naming and proper organizing of projects and namespaces, I get scuffed at. And who out there really knows what the RIGHT way is? I say I don&#8217;t but [...]]]></description>
			<content:encoded><![CDATA[<p>To this day it puzzles me that the most important organizational decision that you can make is so often overlooked. Whenever I bring up the importance of naming and proper organizing of projects and namespaces, I get scuffed at. And who out there really knows what the RIGHT way is? I say I don&#8217;t but I have a vague idea of what the right way will be for Lunchage, at least till &#8220;new shit comes to light&#8221;.</p>
<p>There are two main points that need to be addressed. One is the number of assemblies should be kept to an minimum. Two is proper naming of namespaces and classes.<br />
In my experience improper seperation of projects and namespaces is one of the biggest downfalls of any project. As the number of projects grows, two negative consequences inexplicably happen. One, compilation times shoot up to 2 to 5 minutes per build. Plus the just in time compilation of ASP.NET adds another 2 &#8211; 5 minutes. Thus if a developer compiles code 50 times in a day, then you are looking at a 100 to 250 minute time waste. Two, traversal and searching for classes becomes a burden. Sure with the lovely &#8220;Ctrl-T&#8221; in ReSharper I can quickly go to the class, but find usages becomes a 2 minute wait of checking every project. And if you are just browsing the code to get familiar with the application, well good luck and bring a lot of patience.</p>
<p><span class="info_boxes info_box" style="width:100%;"><span class="info_text">Minimize the number of assemblies!</span></span><br />
<a href="http://codebetter.com/patricksmacchia/2008/12/08/advices-on-partitioning-code-through-net-assemblies/">Shrinking the number of assemblies down</a> to one or two is the best thing you can do! There a few WEAK arguments for multiple assemblies, but they all fall short when inquiring more deeply about application of such methods. Don&#8217;t tell me about your hypothetical situation where monkeys rule the world.</p>
<p><span class="info_boxes warning_box" style="width:100%;"><span class="info_text">Don&#8217;t use IRepository!</span></span><br />
Raise your hand if you understand what Repository really means. Now put them down if you ever have a Repository with any kind of load planning. Repositories do not have load planning! <a href="http://martinfowler.com/eaaCatalog/repository.html">Repository from P of EAA</a> and <a href="http://martinfowler.com/eaaCatalog/repository.html">Repository from DDD</a> have nothing in them about load plans and the depth of objects loaded. By my interpretation the object returned is a fully hydrated object plan that does not need further database query. Using ORM tools such as NHibernate we can remove the full hydration by having lazy loading. But when you start going down that path, remember that it leads to hundreds of database queries just for a single action. I bring up the Repository naming because of its misuse, and:</p>
<p><span class="info_boxes megaphone_box" style="width:100%;"><span class="info_text">You must have a Common Language!</span></span><br />
Just like we agree on the meaning of English words, we must also agree on the meanings of what we name classes and namespaces. Also if you do have a Repository feel free to use the name, and be ready to accept the consequences of following the pattern whatever it entails. Design patterns are one part of the whole of common language for programming. This common language is programming language agnostic and spans operating systems and ignores syntax. This language is also rooted in good programming practices, SOLID principles, and design patterns.</p>
<p>Starting an application with a proper naming structure and organization will save you time and sanity in the long run. If you don&#8217;t have the luxury of starting from scratch, then bring your solution up to date, spend some time organizing and cleaning up, you will not regret it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/naming-and-organizing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lunchage</title>
		<link>http://www.refreshbuffalo.com/lunchage/</link>
		<comments>http://www.refreshbuffalo.com/lunchage/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 01:51:01 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
		
		<guid isPermaLink="false">http://www.refreshbuffalo.com/?page_id=1492</guid>
		<description><![CDATA[Lunchage is a small application to showcase latest development practices in .NET in a real world application. Lunchage will use a variety of technologies for its front end and back end processing. The Tech NHibernate 3.2 Backbone.js Handlebars ASP.NET MVC 3.0 Facebook Authentication Balsamiq Progress can be found on our blog series about Lunchage. Code [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/07/lunchage-banner.png" alt="" title="Lunchage" width="960" height="325" class="alignleft size-full wp-image-1972" /></p>
<p><a title="Lunchage: Creating a Full Featured Web App" href="http://www.refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app/">Lunchage </a>is a small application to showcase latest development practices in .NET in a real world application. Lunchage will use a variety of technologies for its front end and back end processing.</p>
<h3>The Tech</h3>
<div class="divider_hr" style="padding-top:10px; margin-bottom:10px;">&nbsp;</div>
<p><a href="http://nhforge.org/Default.aspx" target="_blank">NHibernate 3.2</a></p>
<p><a href="http://documentcloud.github.com/backbone/" target="_blank">Backbone.js</a></p>
<p><a href="http://www.handlebarsjs.com/" target="_blank">Handlebars</a></p>
<p><a href="http://www.asp.net/mvc/mvc3" target="_blank">ASP.NET MVC 3.0</a></p>
<p><a href="http://developers.facebook.com/docs/authentication/" target="_blank">Facebook Authentication</a></p>
<p><a href="http://balsamiq.com/products/mockups" target="_blank">Balsamiq</a></p>
<div class="divider_hr" style="padding-top:10px; margin-bottom:10px;">&nbsp;</div>
<p>Progress can be found on our <a href="http://www.refreshbuffalo.com/blog_type/lunchage/">blog series about Lunchage</a>.</p>
<p>Code can be found on <a href="https://github.com/garunski/Lunchage" target="_blank">Git Hub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/lunchage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standards! Why and How!</title>
		<link>http://www.refreshbuffalo.com/blog_mod/standards-why-and-how/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/standards-why-and-how/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 23:45:52 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[code style]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1522</guid>
		<description><![CDATA[Standards are important!  Developers read more code than they write. Code style standards define how your code looks, they create polarized debates with shouts and battle axes being brandished. Whatever your process is, come up with standards. In my years of development, I found that if it&#8217;s simple to keep the code standard then the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://scientopia.org/blogs/goodmath/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/">Standards are important!</a>  <a href="http://www.codinghorror.com/blog/2006/09/when-understanding-means-rewriting.html">Developers read more code than they write.</a> Code style standards define how your code looks, they create polarized debates with shouts and battle axes being brandished. Whatever your process is, come up with standards. In my years of development, I found that if it&#8217;s simple to keep the code standard then the standard will be followed, opposite applies double and triple. I cannot say what is the best code formatting, since beauty is in the eye of the beholder. I will say that as long as you are consistent, then you are ok in my book. To avoid a bloodbath, have the architect or manager or lead developer put his foot down and set the standards for everyone. Also remind the developers that &#8220;Smokey, this is not &#8216;Nam. This is bowling. There are rules.&#8221; Those rules are set for the organization and may not be changed on a whim of one.</p>
<p>Following and caring about standards is a trait of a mature and detail oriented developer. When thousands and hundreds of thousands of lines of code follow the same standard, it is easier to read through the code and easier to find bugs and inconsistencies. Combine that with architectural patterns, name conventions and proper namespace separation, the code becomes a joy to work with and the job becomes much more interesting and exciting.</p>
<p>That was my rant, here is the how. Get <a href="http://www.jetbrains.com/resharper/">ReSharper</a> (need help selling, <a href="http://www.jetbrains.com/resharper/docs/resharper_benefits.pdf">check the benefits out</a>). I and everyone I know, LOVES ReSharper. No, we are not sponsored by ReSharper. My instructions are for ReSharper. I&#8217;m sure there are open source, read free, alternatives that do the code formatting, and if anyone would like to do a post on that please let me know.</p>
<p>The shortcut for ReSharper clean up is &#8220;Ctrl &#8211; E &#8211; C&#8221; for Visual Studio scheme and &#8220;Ctrl &#8211; Alt &#8211; F&#8221; for IDEA scheme. For silent clean up, &#8220;Ctrl &#8211; E &#8211; F&#8221;.</p>
<p>Starting with Code Style Sharing, ReSharper allows for code sharing per solution or not sharing, under &#8220;ReSharper -&gt; Options -&gt; Languages -&gt; Common -&gt; Code Style Sharing&#8221;. You can also export and import settings to share with your friends.</p>
<p>One of the overlooked features is the &#8220;Type Member Layout&#8221;, it is also one of the most useful. A consistent member placement makes code easier to navigate to and browse. At the time of this writing, <a href="http://www.jetbrains.com/resharper/webhelp/Reference__Options__Languages__CSharp__Type_Members_Layout.html">ReSharper does not support &#8220;Type Member Layout&#8221; import from the settings file</a>, but here is our <a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/type-member-layout.txt">type member layout</a>. The xml file is pretty straightforward, so by reading it you will get some idea what each node is responsible for.</p>
<p>Another invaluable tool is <a href="http://stylecop.codeplex.com/">StyleCop</a>. The <a href="http://stylecop.codeplex.com/documentation">documentation</a> is full and rich, so I won&#8217;t waste time explaining how it works. What makes StyleCop better is the ReSharper integration. Since the feedback is instant it is easy to follow the standards and quick to notice inconsistencies. StyleCop/ReSharper integration will also run during code clean up fixing most issues. Note when installing StyleCop, make sure you WANT the &#8220;Visual Studio Templates&#8221; replacement option. While it is possible to revert, it is a pain to do so.</p>
<p>You can either use the default code cleanup profiles or set up your own. To set one up go to &#8220;ReSharper -&gt; Options -&gt; Code Cleanup&#8221;.  It is a must with the StyleCop ReSharper extension, since most likely you are not following all the default StyleCop rules. Unfortunately the Code Cleanup options cannot be exported.</p>
<p>Grab the standards for <a href='http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Lunchage-Code-Style-Standards.txt'>Lunchage</a>, use &#8220;Import&#8230;&#8221; under code style sharing to implement our standards.</p>
<p>There are also formatting options part of Visual Studio &#8220;Tools -&gt; Options -&gt; Text Editor -&gt; YOUR LANGUAGE -&gt; Formatting&#8221;, that has the basic formatting options. You can run default formatting with &#8220;Ctrl &#8211; K &#8211; D&#8221; to clean up the current file. It&#8217;s a simple and built in formatter, that can do the job for a more disciplined team.</p>
<p>One last pet peeve of mine is Tabs! Use Tabs. Tab is a standard character with a standard width of 4 spaces, but the excellent people behind Visual Studio actually allow you to set the number of spaces to what ever your heart desires. Leaving my preference of 4 spaces up to me and 4 up to you. To change go to &#8220;Tools -&gt; Options -&gt; Text Editor -&gt; All Languages -&gt; Tabs&#8221;, I prefer the indenting to be &#8220;Smart&#8221;, &#8220;Tab Size&#8221; and &#8220;Indent Size&#8221; to be 4, and most important &#8220;Keep Tabs&#8221; selected. The <a href="http://visualstudiogallery.msdn.microsoft.com/91a3f8ae-3152-438a-b5fc-fb37878dd007?SRC=VSIDE">Fix Mixed Tabs</a> extension is also helpful for those of us with OCD.</p>
<p>Our tools should make code style standards easy to enforce and easy to follow. There are no excuses not to have standards or enforce them, and if you don&#8217;t care about code style standards, then why care about anything in code at all? Naming, Principles and Code Style standards are part of any well seasoned programmer tool belt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/standards-why-and-how/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Application Planning, Mock-Ups</title>
		<link>http://www.refreshbuffalo.com/blog_mod/application-planning-mock-ups/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/application-planning-mock-ups/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 00:57:01 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
				<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Planning]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1332</guid>
		<description><![CDATA[Mock-ups are an important part of any application creation. When creating a mock up you want to stay as simple as possible and get the idea across without an influence on the implementation. There a number of excellent tools available for creating complex UI mockups and some that are really simple. To start, I as [...]]]></description>
			<content:encoded><![CDATA[<p>Mock-ups are an important part of any application creation. When creating a mock up you want to stay as simple as possible and get the idea across without an influence on the implementation. There a number of excellent tools available for creating complex UI mockups and some that are really simple.<br />
To start, I as a product owner first want to jot down some ideas. Putting something into the computer feels permanent to me. I like paper so i will start with that.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/homepage-initial-sketch-e1316134321313.jpg" rel="prettyPhoto[1332]" class="image_frame_effect"><span class="image_frame image_frame_left"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/homepage-initial-sketch-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a> <a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/restaurant-view-initial-sketch-e1316134304483.jpg" rel="prettyPhoto[1332]" class="image_frame_effect"><span class="image_frame image_frame_left"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/restaurant-view-initial-sketch-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a> <a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/search-initial-sketch-e1316134284261.jpg" rel="prettyPhoto[1332]" class="image_frame_effect"><span class="image_frame image_frame_left"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/search-initial-sketch-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
<span class="cleardiv"></span><br />
Those were quick to do and got my ideas on paper and out of my head.<br />
Now to focus on something more easily modifiable and that can be shared with the rest of the team. We use <a title="Balsamiq Mockups" href="http://balsamiq.com/products/mockups">Balsamiq Mockups</a> because it&#8217;s feature rich, easy to use and quick to get started with. As with any tool the more you use it the better and faster you get with it. Another awesome reason is <a title="Mockups To Go" href="http://mockupstogo.net/">Mockups To Go</a>, which has even more mock up goodness for download. I spent about 30 mins on this homepage mock up, after a quick discussion over the hand drawn ones.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/homepage.png" rel="prettyPhoto[1332]" class="image_frame_effect"><span class="image_frame image_frame_left"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/homepage-150x150.png" alt="" style=" width:150px; height:150px;"/></span></a> <span class="cleardiv"></span><br />
Now that we got our general plan for homepage we can get started with design and getting some pages out quickly. We will come back to Balsamiq Mockups in the future for other pages, for now we need to focus on showing progress to our product owners and getting their input. Since our product owners are everyone, feel free to post your ideas in the comments.</p>
<p><span class="info_boxes megaphone_box" style="width:100%;"><span class="info_text">Release often, release quickly, and try to minimize the bugs!</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/application-planning-mock-ups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lunchage: Preserving Domain Model Sanity</title>
		<link>http://www.refreshbuffalo.com/blog_mod/lunchage-preserving-domain-model-sanity/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/lunchage-preserving-domain-model-sanity/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 13:26:29 +0000</pubDate>
		<dc:creator>Kyle Pace</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Object Oriented]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1352</guid>
		<description><![CDATA[Continuing with our full app creation series, Lunchage. Part of my enthusiasm in creating the Lunchage application is the prospect of new beginnings.  Every new project requires significant amounts of thought into my favorite activity, modeling out a domain.  I believe the single most important aspect of a software engineer&#8217;s tool belt is the ability to [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing with <a href="http://refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app">our full app creation series, Lunchage</a>.</p>
<ul class="ul_list arrow">
<li><a href="http://refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app">Intro</a></li>
<li><a href="http://refreshbuffalo.com/blog_mod/lunchage-preserving-domain-model-sanity">Domain Model</a></li>
</ul>
<div class="divider_hr" style="padding-top:20px; margin-bottom:20px;">&nbsp;</div>
<p>Part of my enthusiasm in creating the Lunchage application is the prospect of new beginnings.  Every new project requires significant amounts of thought into my favorite activity, modeling out a domain.  I believe the single most important aspect of a software engineer&#8217;s tool belt is the ability to translate real-world requirements into a set of classes that:</p>
<ul class="ul_list alert">
<li>Properly represents the problem that the software aims to solve</li>
<li>Are capable of being modified with as little resistance as possible</li>
</ul>
<p>So, with these lofty goals in mind, we&#8217;re going to be keeping a very strict sense of Object Oriented Design in mind when developing and writing out the classes in our main domain model.  I&#8217;ve dealt with plenty of DTO/Domain model hybrids in the past with feature envy and am looking to this project to display exactly how easy life can be when we allow our domain to properly encapsulate logic instead of merely providing an interface into our database as is the case with many other systems.</p>
<p>In you&#8217;re interested at all in following along with the code base, feel free to download it from <a href="https://github.com/garunski/Lunchage">github</a>.</p>
<p>Instead of listing every property and field on all our our domain models, I&#8217;ll simply say that if a property is necessary for an object to exist, we make sure that it is passed into a constructor to force on instantiation.  In addition, we&#8217;re going to try and force all List types to be only mutable by the parent.  This means no public getter on lists, we&#8217;ll supply a public getter in the form of IEnumerable  so no other classes can modify the list.</p>
<p>Since our requirements dictate that users need to be able to log in and create an account with Lunchage we&#8217;re going to create a, wait for it, Account class.  I want to try an avoid having a needless amount of properties on the class so naturally my first instinct is to simply add first name, last name and email as the only identifiers of a user that I need.  Further down the line we&#8217;ll add avatar support but, in keeping in line with light requirements, that stuff is fluff so it&#8217;s out for now.  Email is the one property an account needs to be created, so we&#8217;ll force that dependency in the constructor and only have a getter backing a private property to allow field access.  In the future if we (read: when) want to allow changing the email we can add a setter with some null checking logic, but for the time being we&#8217;re creating a contract with a property that always needs to be there, so let&#8217;s make sure that it is.<br />
<a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Account_diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Account_diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
Our Account class is also going to need a list of properties to track when they choose a place to have lunch.  I&#8217;ll then create a LunchSelection class, which is largely immutable, to store the relationship between a Restaurant selected, an Account and the time the lunch is supposed to take place.  After the lunch we&#8217;ll allow the user to submit series of reviews on the service, food quality etc&#8230;.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Restaurant-diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Restaurant-diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
The Restaurant class is just as simple as our Account class.  We need an Address to store it&#8217;s location for geo-targeting, a name, a list of descriptive Tag objects and a list of LunchSelection objects that were created in conjunction with the Restaurant.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/lunch-selection-diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/lunch-selection-diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
You&#8217;ll notice we have a list of Reviews attached to the LunchSelection, this may seem a little silly at the moment, I&#8217;ll explain this decision after describing the Review class properly.  A Review is made up of a user&#8217;s Vote (Great, Ok, Bad), the Question they answered (How was the service?  How did the food taste? etc&#8230;) and the LunchSelection for bi-directional reference.  All properties on this class are immutable, largely because once you review something, you really can&#8217;t take it back.  The premise is that we want multiple mini-reviews for a LunchSelection that describe fully the experience they had.  Restaurants can be crappy some days because of service and excellent simply because of the atmosphere.  We want to capture the flowing nature of this information.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Review-diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Review-diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
Voting in our Lunchage system is designed to be hyper-simple to the point of almost Yes-No question answer pairs.  We have to assume most people don&#8217;t want to spend the time on diatribes about the quality of their lunch, we need to capture their experience though in order to properly recommend other restaurants.  So we can ask brief questions like &#8220;How was the service?&#8221; with Netflix style emails to hopefully garner a response.  Vote is then only going to have a VoteValue, which is an enum for Great, Ok or Bad, comments should the user want to provide them and the LunchSelection it is tied to.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Vote-Diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Vote-Diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
The last major class in our system (as per our initial requirements) is going to be the Tag.  A Tag is a name describing the type of food a restaurant serves.  Tags can range from Chinese or Italian to simply Spicy.  Our goal is to create a really dumb selection process that invites the user to blindly click buttons of words they like.  Next thing you know they&#8217;re eating lunch at a restaurant they love and have never eaten at and thanking us for making suggestions.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Tag-Diagram.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/Tag-Diagram-150x150.jpg" alt="" style=" width:150px; height:150px;"/></span></a><br />
That&#8217;s the whole shebang.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/LunchageDomain.jpg" rel="prettyPhoto[1352]" class="image_frame_effect"><span class="image_frame image_frame_center"><img src="http://www.refreshbuffalo.com/wp-content/uploads/2011/09/LunchageDomain-300x249.jpg" alt="" style=" width:300px; height:249px;"/></span></a><br />
From here the real work on the application begins.  We need to get rolling on our storage mechanism implementation and, from there, whatever testing framework we&#8217;re going to use to make sure this code-base doesn&#8217;t become a mess.  We may have to slightly alter our model once we choose ORM solutions, but we&#8217;ll get to that next time.</p>
<p>Again, if you want to check out the codebase, feel free to download it <a href="https://github.com/garunski/Lunchage">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/lunchage-preserving-domain-model-sanity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keyboard Ninja: Creating New Items</title>
		<link>http://www.refreshbuffalo.com/blog_mod/keyboard-ninja-creating-new-items/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/keyboard-ninja-creating-new-items/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 13:15:31 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
		
		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1142</guid>
		<description><![CDATA[Continuing with our series of becoming a keyboard ninja. Intro Creating New Items Creating New Items! Lets start with an empty MVC shell. If you don&#8217;t have MVC 3.0 installed yet, you probably should, since we will be referencing it a lot. The age old right click on folder in the solution explorer  &#8220;Add-&#62; New [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing with <a href="http://www.refreshbuffalo.com/blog_type/keyboard-ninja/">our series of becoming a keyboard ninja</a>.</p>
<ol>
<li><a href="http://www.refreshbuffalo.com/blog_mod/becoming-a-keyboard-ninja/">Intro</a></li>
<li><a href="http://www.refreshbuffalo.com/blog_mod/keyboard-ninja-creating-new-items/">Creating New Items</a></li>
</ol>
<div class="divider_hr" style="padding-top:20px; margin-bottom:20px;">&nbsp;</div>
<h2>Creating New Items!</h2>
<p>Lets start with an empty MVC shell. If you don&#8217;t have<a href="http://www.asp.net/mvc" target="_blank"> MVC 3.0</a> installed yet, you probably should, since we will be referencing it a lot.</p>
<p>The age old right click on folder in the solution explorer  &#8220;Add-&gt; New Item&#8230;&#8221; is not for the Keyboard Ninja! Same for the &#8220;File -&gt;New -&gt; File&#8221;. It takes far too long and way too much clicking and scrolling with the mouse. </p>
<p>Of course some may say, could it be that &#8220;Ctrl &#8211; N&#8221; maybe of service, but I say no! Try it yourself, first we get the select file type screen, of course what we usually use is not the default highlight. After selecting the &#8220;Visual C# Class&#8221;, we get a clean class called &#8220;Class1&#8243;. But no file in sight, and the cursor at the top of the file, things are not much better than with a mouse click. (the second time with &#8220;Ctrl &#8211; N&#8221; did save the last file type used)</p>
<p>And then there is &#8220;Ctrl &#8211; Shift &#8211; A&#8221;, add new item shortcut. It&#8217;s not a bad choice if you don&#8217;t have ReSharper and you can control the Visual Studio default templates. You can <a href="http://msdn.microsoft.com/en-us/library/y3kkate1.aspx">locate and organize project templates</a>, <a href="http://www.thecodinghumanist.com/Content/HowToEditVSTemplates.aspx">easily</a> <a href="http://msdn.microsoft.com/en-us/library/ms247119.aspx">edit</a>, and <a href="http://msdn.microsoft.com/en-us/library/ms247069.aspx">create item templates</a>. It&#8217;s a lot easier if you have ReSharper and use the <a href="http://www.jetbrains.com/resharper/features/code_templates.html">Live Templates</a> feature.</p>
<p>Now lets try my favorite way,&#8221; Ctrl &#8211; Shift &#8211; Ins&#8221;. The ReSharper insert template, awful to remember, but we will remap &#8220;Ctrl &#8211; N&#8221; to the this command later on. First press &#8220;Ctrl &#8211; W &#8211; S&#8221;, which will either show or focus on the solution explorer, easy way to remember is &#8220;W&#8221; -&gt; window, &#8220;S&#8221; -&gt; solution explorer. Select the folder &#8220;Controllers&#8221; and &#8220;Ctrl &#8211; Shift &#8211; Ins&#8221;. Select the &#8220;Class&#8221; as the template. You can also hit the underlined letter key to insert the template without having to navigate to it, in this case &#8220;l&#8221;. I am naming mine as &#8220;AccountController&#8221;. Extend the &#8220;Controller&#8221;, which will result in a blue pop up to add a reference with &#8220;Alt -Enter&#8221;.<a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-add-new-item.jpg" rel="prettyPhoto[1142]"><img class="aligncenter size-medium wp-image-1222" title="resharper add new item" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-add-new-item-200x300.jpg" alt="" width="200" height="300" /></a></p>
<p>&#8220;Alt &#8211; Enter&#8221; will be the most used shortcut in the process of programming. This brings up the smart ReSharper options, which officially stands for &#8220;ReShaper_ForceCompleteItem&#8221;. The short cut works whenever there is a ReSharper menu icon pops up on the left hand side of the code.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/insert-reference.jpg" rel="prettyPhoto[1142]"><img class="size-medium wp-image-1232 alignleft" title="insert reference" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/insert-reference-300x86.jpg" alt="" width="240" height="69" /></a><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-create-derived-type.jpg" rel="prettyPhoto[1142]"><img class="size-medium wp-image-1242 alignleft" title="resharper create derived type" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-create-derived-type-300x162.jpg" alt="" width="240" height="130" /></a></p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/reshaper-suggestion-menu.jpg" rel="prettyPhoto[1142]"><img class="alignleft size-medium wp-image-1252" title="reshaper suggestion menu" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/reshaper-suggestion-menu-300x235.jpg" alt="" width="240" height="188" /></a></p>
<p><span class="cleardiv"></span></p>
<p>Let&#8217;s remap &#8220;Ctrl &#8211; Alt -Ins&#8221; to an easier to remember and use &#8220;Ctrl &#8211; N&#8221;. Open the &#8220;Tools -&gt; Options -&gt; Keyboard&#8221;, and find out what the command for the ReSharper insert template, go to the &#8220;Press shortcut keys:&#8221; and the command will show up in the &#8220;Shortcut currently used by:&#8221; dropdown. There is a dropdown because the same keystroke can do different things in different scopes. &#8220;Global&#8221; applies to shortcuts at any level, &#8220;Text Editor&#8221; only in text edit mode. <a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/options-keyboard-generate-file-besides.jpg" rel="prettyPhoto[1142]"><img class="aligncenter size-medium wp-image-1262" title="options keyboard generate file besides" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/options-keyboard-generate-file-besides-300x177.jpg" alt="" width="300" height="177" /></a>The command is &#8220;ReSharper.ReSharper_GenerateFileBesides&#8221;, lets find it and reassign &#8220;Ctrl &#8211; N&#8221; to that. Go to &#8220;Show commands containing:&#8221; and start typing in &#8220;GenerateFile&#8221; the command will become highlighted. The search box is an auto search and its an insensitive contains, so you don&#8217;t have to know the exact command to find it. In the &#8220;Shortcuts for selected command:&#8221; dropdown you will find all the current shortcuts assigned to the command. We are going to add a new one. Go back to &#8220;Press shortcut keys:&#8221; and &#8220;Ctrl &#8211; N&#8221;, you may get the double shortcut of &#8220;Ctrl &#8211; Alt &#8211; Ins, Ctrl &#8211; N&#8221;, press &#8220;Ctrl &#8211; N&#8221; again to reset the dialog. Keep &#8220;Global&#8221; in the scope dropdown and click &#8220;Assign&#8221;.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/ctrl-n-reassigned.jpg" rel="prettyPhoto[1142]"><img class="aligncenter size-medium wp-image-1272" title="ctrl n reassigned" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/ctrl-n-reassigned-300x174.jpg" alt="" width="300" height="174" /></a><br />
Check if the &#8220;Ctrl &#8211; N&#8221; is the right shortcut, by pressing the shortcut keys in &#8220;Press shortcut keys:&#8221; and checking the currently used by dropdown. There are two items in my list, one is the global ReSharper generate file and the other &#8220;SqlEditorNewQuery&#8221;  in the &#8220;Transact-SQL Editor&#8221; scope. Since that will not interfere with the new command I will not remove the assignment. If you wanted to remove the command, then you would have to search for it, and select the shortcut you would like to remove in the dropdown menu and click &#8220;Remove&#8221;.</p>
<p>Most of the time I am in the middle of class creation when I run across the need for a new class or interface. For our example lets create &#8220;AccountService&#8221;, that will implement the &#8220;IAccountService&#8221; interface. Instead of using our newly created shortcut we will just start typing the new interface in as a constructor dependency for our Controller.</p>
<p>&#8220;pu&#8221; &#8220;Tab&#8221; will autofill &#8220;public&#8221;, &#8220;Accou&#8221; &#8220;Tab&#8221; will autofill &#8220;AccountController&#8221;, &#8220;(IAccountService accountService)&#8221; &#8220;Enter&#8221; &#8220;{&#8220;, the auto fill will put in our closing curly brace. The &#8220;IAccountService&#8221; will appear red, since we do not have that class, navigate  to the &#8220;IAccountService&#8221; and you will see the red ReSharper can do something about this box, press &#8220;Alt &#8211; Enter&#8221;.</p>
<p><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-missing-class-options.jpg" rel="prettyPhoto[1142]"><img class="aligncenter size-medium wp-image-1312" title="resharper missing class options" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/resharper-missing-class-options-300x217.jpg" alt="" width="300" height="217" /></a>Select create interface(notice the underlined characters), the interface is created at the bottom of the file. Put cursor on the name of the new interface, a new box will appear, a purple pyramid. &#8220;Alt &#8211; Enter&#8221; and select &#8220;Move to another file and match type name&#8221;. Now you have  a new file, and can be done quickly and efficiently. The only downside, the new file probably does not belong in the same folder. And so far I have not discovered a way to move the file without drag and drop. Once in the right folder, you will have an option to adjust the namespace by &#8220;Alt &#8211; Enter&#8221; on the namespace.</p>
<p>Next: Refactor Options</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/keyboard-ninja-creating-new-items/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lunchage: Creating a Full Featured Web App</title>
		<link>http://www.refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 20:45:35 +0000</pubDate>
		<dc:creator>Kyle Pace</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[DDD]]></category>

		<guid isPermaLink="false">http://www.refreshbuffalo.com/?post_type=blog_mod&#038;p=1192</guid>
		<description><![CDATA[Lunchage : The Beginning When I first began using ASP.NET MVC as a web development framework, I found the Nerd Dinner application from Microsoft helped to learn the ropes.  The app though never really went far enough into an application&#8217;s development cycle to answer a lot of questions I had when starting a new project [...]]]></description>
			<content:encoded><![CDATA[<h2>Lunchage : The Beginning</h2>
<p>When I first began using ASP.NET MVC as a web development framework, I found the <a href="http://www.nerddinner.com/">Nerd Dinner</a> application from Microsoft helped to learn the ropes.  The app though never really went far enough into an application&#8217;s development cycle to answer a lot of questions I had when starting a new project (to it&#8217;s credit though, that really wasn&#8217;t the point of the sample application at all).  Trying to find decent help on how to make design decisions can be found in the classic books (<a href="http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420">Patterns</a> and <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/">DDD</a>) but real-world examples are often made into smaller chunks without the big picture on display.  In light of this, we wanted to focus our energies to coming up with requirements for a brand new open source app and take anyone willing along for the ride.  Our open source application will function as a medium to present design decisions and challenges that we can publicly solve for the greater good.</p>
<h2>Introducing :  Lunchage</h2>
<p>We decided that since we like eating lunch so much and are indecisive, why wouldn&#8217;t we create an application that presented us with choices for lunch?  Ok, so right now you might be saying &#8220;Why are you making Urban Spoon?&#8221;, &#8220;Doesn&#8217;t Yelp do this?&#8221; or &#8220;You idiots really have nothing better to do huh?&#8221;.  To that, you&#8217;re probably right, but we have a few requirements that those apps don&#8217;t quite have.</p>
<p>So, over the next few weeks we&#8217;re going to be outlining the requirements, software stack, front-end necessities and design for the full Lunchage application.  I want to detail every thought and plan we have to show exactly how fast an app can be spun up using convention, agile methods and good design practices.  Through the programming process our range of blogs will cover object oriented design principles, modern front-end javascript frameworks, front end design and usage of HTML5, usability and maybe even mobile considerations.  The point being that we&#8217;re tackling a full scale operation and documenting the entire thing.</p>
<h2>Requirements</h2>
<p>Before we can get to coding anything, I&#8217;m taking the liberty of documenting the basic requirements for the team so we can all work off a unified idea.  Keeping with the Agile methodology, our requirements are going to change as we build and play around with our application so we try to keep any ideas we have loose so we can drop, defer or re-prioritize them at any time.  In my experience, creating a gigantic set of software requirements and sticking to every crossed t is a fast way to create an expensive, complicated and bloated piece of you know what.  Agile aims to keep not only the software cycle lean, but the requirements themselves.</p>
<p>The basic idea of our application is this: I want to log into the Lunchage application, select one to a few descriptors of food I want to eat and I want places in the area to show up.  That is all.  Any other details we add is just fluff.  Our software is going to be designed to perform one very specific task very well.</p>
<p>Now that we have our basic concept, other details we know we want are the ability to log-in using at least two major authentication providers (Facebook and Google for starters) and we want to be able to connect with other people in our application to share where we are having lunch for others to tag along.</p>
<p>The other implementation details (i.e. where we get restaurant data, do we want reviews?) will be discovered as the application is built and discovered.  The main point is that we don&#8217;t want to spent a significant amount of time and money on features that we don&#8217;t end up using.  Remember the <a title="Pareto Principle" href="http://en.wikipedia.org/wiki/Pareto_principle" target="_blank">80/20</a> rule!</p>
<p>To finalize then, I want an application that:</p>
<ol>
<li>Let&#8217;s me sign up with Facebook or Google</li>
<li>Let&#8217;s me pick food types like &#8220;Chinese&#8221; or &#8220;Spicy&#8221;</li>
<li>Gives me local places to have lunch.</li>
<li>Allows me to share that lunch choice with friends.</li>
</ol>
<div>Next time we can begin ironing out further implementation details and how we&#8217;re going to attack this problem.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/lunchage-creating-a-web-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Becoming a Keyboard Ninja, Visual Studio Edition</title>
		<link>http://www.refreshbuffalo.com/blog_mod/becoming-a-keyboard-ninja/</link>
		<comments>http://www.refreshbuffalo.com/blog_mod/becoming-a-keyboard-ninja/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 14:16:05 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Resharper]]></category>

		<guid isPermaLink="false">http://refreshbuffalo.com.madsprockethosting.com/?post_type=blog_mod&#038;p=362</guid>
		<description><![CDATA[In these upcoming posts we will explore how to become the keyboard ninja(definition 2). And you will feel slightly more superior to the mouse using population. As software developers, more often than not we&#8217;re able to think ahead to a problem&#8217;s solution well before we can write the code, the only thing getting in our way is [...]]]></description>
			<content:encoded><![CDATA[<p>In these upcoming posts we will explore how to become the <a title="Keyboard Ninja" href="http://www.urbandictionary.com/define.php?term=keyboard%20ninja">keyboard ninja</a>(definition 2). And you will feel slightly more superior to the mouse using population.</p>
<p>As software developers, more often than not we&#8217;re able to think ahead to a problem&#8217;s solution well before we can write the code, the only thing getting in our way is a mouse and keyboard.  Fortunately for the .NET development community, there are wonderful tools out there combined with Visual Studio to make our lives easier.</p>
<p>This series of blogs is going to focus on utilizing keystrokes and keeping our grubby fingers off of our mouse as it only serves to slow us down and annoy co-workers.  Once we&#8217;re all finished, you will sworn into the secret society of keyboard ninjas. We will also try to train ourselves to be more effective by taking advantage of advanced ReSharper commands and features.</p>
<p>You want to make sure that you use any command you learn right away. Try to use as many shortcuts as you can. Consciously recognize often used button clicks and find keyboard alternatives. One last thing, make sure your keyboard shortcuts are consistent across applications that you use.</p>
<p>To start here is my set up of the keyboard shortcuts and screen layout.</p>
<p>My screen layout is simple, I do not use toolbars. So every toolbar is turned off. On the right hand side I have my Solution explorer always open. That also acts like a tabbed pane for any other narrow windows that can fit there like the Team Explorer and Properties. On the bottom, always minimized are any wide panes like Error lists.</p>
<p>My keyboard shortcuts are set to &#8220;Visual C# 2005&#8243; settings, visible in the Tools -&gt; Options -&gt; Environment-&gt; Keyboard(Keyboard Options).</p>
<p style="text-align: center;"><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/Visual-Studio-Options.jpg" rel="prettyPhoto[362]"><img class="size-medium wp-image-1162 aligncenter" title="Visual Studio Options" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/Visual-Studio-Options-300x175.jpg" alt="" width="300" height="175" /></a></p>
<p>My ReSharper shortcuts are set to &#8220;Visual Studio&#8221; scheme, visible under ReSharper -&gt; Options -&gt; Visual Studio Integration.</p>
<p style="text-align: center;"><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/ReSharper-Settings.jpg" rel="prettyPhoto[362]"><img class="size-medium wp-image-1152 aligncenter" title="ReSharper Settings" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/ReSharper-Settings-300x255.jpg" alt="" width="300" height="255" /></a></p>
<p>To use the shortcuts we will introduce you should have your settings match ours. If a shortcut doesn&#8217;t work you can check what if anything is mapped to that shortcut key stroke. To check it go to the Keyboard Options and go to the &#8220;Press Shortcut Keys&#8221;, and check which commands are mapped to the shortcut.</p>
<p style="text-align: center;"><a href="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/show-shortcut-command.jpg" rel="prettyPhoto[362]"><img class="size-medium wp-image-1172 aligncenter" title="show shortcut command" src="http://www.refreshbuffalo.com/wp-content/uploads/2011/08/show-shortcut-command-300x175.jpg" alt="" width="300" height="175" /></a></p>
<p>We will be back to that screen plenty of times to assign and reassign shortcuts. I will provide the exact commands where I can, feel free to ask clarifications on any that are not straightforward in the comments.</p>
<p>Next: How to create a new file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/blog_mod/becoming-a-keyboard-ninja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contact</title>
		<link>http://www.refreshbuffalo.com/contact/</link>
		<comments>http://www.refreshbuffalo.com/contact/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 13:22:54 +0000</pubDate>
		<dc:creator>Garun Vagidov</dc:creator>
		
		<guid isPermaLink="false">http://refreshbuffalo.com.madsprockethosting.com/?page_id=762</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="columns two_third">
<h3>Need to talk to us?</h3>
<div class="contact_submit_form form_22" style="width:600px;">
<div class="quickly_elements_left">
<div class="quickly_elements_label">
<input type="text" name="name" class="input" value="Name *"> </div>
<div class="quickly_elements_label">
<input type="text" name="email" class="input" value="Email *"> </div>
<div class="quickly_elements_label">
<input type="text" name="telephone" class="input" value="Telephone"> </div>
</p></div>
<div class="quickly_elements_right">
<div class="quickly_elements_label">
<input type="text" name="subject" class="input" value="Subject *"> </div>
<div class="quickly_elements_label"> <textarea class="textarea" name="message" style="width:90%; height:65px;">Message *</textarea> </div>
</p></div>
<div class="quickly_elements_label">
<div class="form_22 contact_submit alignright">
<h6><span class="small_buttons"><span class="green_l small_left"><span class="green_r small_right">Send Message</span></span></span></h6>
</p></div>
<div class="quickly_form_message alignright">&nbsp;</div>
</p></div>
</p></div>
<div class="cleardiv"></div>
<div class="divider_hr" style="padding-top:20px; margin-bottom:20px;">&nbsp;</div>
<div class="blog_boxes">
<div class="box_image_shadow">
<div class="box_image_inside"> <iframe width="590" height="200" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Buffalo,+NY&amp;aq=0&amp;sll=42.886447,-78.878369&amp;sspn=0.501596,1.056747&amp;ie=UTF8&amp;hq=&amp;hnear=Buffalo,+Erie,+New+York&amp;z=12&amp;ll=42.886447,-78.878369&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=Buffalo,+NY&amp;aq=0&amp;sll=42.886447,-78.878369&amp;sspn=0.501596,1.056747&amp;ie=UTF8&amp;hq=&amp;hnear=Buffalo,+Erie,+New+York&amp;z=12&amp;ll=42.886447,-78.878369" style="color:#0000FF;text-align:left">View Larger Map</a></small></div>
</div>
</div></div>
<div class="columns one_third last">
<h3>Do you need help ?</h3>
<div class="divider_hr" style="padding-top:10px; margin-bottom:20px;">&nbsp;</div>
<h5>Refresh Buffalo</h5>
<p> Meetings are held at announced places.<br />
<h5>Email</h5>
<p> <a href="garun@refreshbuffalo.com">garun@refreshbuffalo.com</a> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.refreshbuffalo.com/contact/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
