<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8144771710349360193</id><updated>2011-12-29T11:39:49.286-08:00</updated><category term='Rails 3'/><category term='Heroku'/><category term='GitHub'/><category term='Shell Script'/><category term='Maddotnet'/><category term='CQRS'/><category term='Presentations'/><category term='AWS'/><title type='text'>Linq 2 You</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.linq2you.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-8957470527892569777</id><published>2011-12-29T11:20:00.001-08:00</published><updated>2011-12-29T11:39:49.299-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GitHub'/><category scheme='http://www.blogger.com/atom/ns#' term='Heroku'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell Script'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 3'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>Paperclip, Heroku, and AWS-S3</title><content type='html'>&lt;p&gt;I recently had a requirement to build an “avatar for users” feature.&amp;nbsp; The application is a Rails 3 app running on &lt;a href="http://www.heroku.com" target="_blank"&gt;Heroku&lt;/a&gt;.&amp;nbsp; Easy enough.&amp;nbsp; I chose to use the &lt;a href="https://github.com/thoughtbot/paperclip" target="_blank"&gt;Paperclip&lt;/a&gt; gem provided by &lt;a href="http://www.thoughtbot.com/" target="_blank"&gt;ThoughtBot&lt;/a&gt;.&amp;nbsp; Paperclip’s default is to save uploaded files to the filesystem. The catch, Heroku doesn’t let you write to the filesystem, and I couldn’t use Gravatar.&amp;nbsp; Well, there are a couple of ways to work around this Heroku limitation.&amp;nbsp; One is to save the file to the database as a blob.&amp;nbsp; There are pros and cons to this approach.&amp;nbsp; The other approach, and the one I chose, was to use Amazon’s AWS-S3 service.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Setting up Paperclip&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Setting up paperclip is pretty easy.&amp;nbsp; There are various ways to do it, but I’m going to discuss how I did it.&lt;/p&gt; &lt;p&gt;First I added the paperclip and aws-s3 gems to my project’s Gemfile.&lt;/p&gt;&lt;script src="https://gist.github.com/1535735.js"&gt; &lt;/script&gt; &lt;p&gt;Then run bundle to install the gems.&lt;/p&gt; &lt;p&gt;Paperclip stores metadata about the uploaded files into the database, and therefore needs fields added to a table to do so.&amp;nbsp; I added those fields right along side the fields in the user table.&amp;nbsp; I didn’t have the need to track past history of upload avatar images.&amp;nbsp; So this was an acceptable approach.&amp;nbsp; Installing the paperclip gem gave us a generator to help us create the database fields we need.&amp;nbsp; Run the following command in a terminal window.&lt;/p&gt; &lt;p&gt;$ rails g paperclip user avatar&lt;/p&gt; &lt;p&gt;Lets quickly break this command down.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;rails g&lt;/strong&gt; is a short cut for rails generate.&amp;nbsp; You should know this.  &lt;li&gt;&lt;strong&gt;paperclip&lt;/strong&gt; is the name of the generator we want to run  &lt;li&gt;&lt;strong&gt;user&lt;/strong&gt; is the table we are going to add the fields to.&amp;nbsp; For me this table already existed.  &lt;li&gt;&lt;strong&gt;avatar&lt;/strong&gt; is the prefix name we want to use for the database fields&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This will create a migration file that adds the necessary fields to the user table, or what ever table name you supplied the generator.&lt;/p&gt;&lt;script src="https://gist.github.com/1535280.js"&gt; &lt;/script&gt; &lt;p&gt;Now you can run this migration.&lt;/p&gt; &lt;p&gt;$ rake db:migrate&lt;/p&gt; &lt;p&gt;The last thing needed to set up the paperclip gem is to add a little bit of code to the model that is going to be responsible for the attachment.&amp;nbsp; In my case, this is the user model.&amp;nbsp; The little bit of code to add is the has_attachment_file method.&amp;nbsp; As you can see from the gist below the code is pretty simple, and maybe even a little self explanatory.&amp;nbsp; In traditional Ruby fashion, this gives you a bunch of extra functionality that you can take advantage of in your views.&amp;nbsp; Not going to cover that here though.&lt;/p&gt;&lt;script src="https://gist.github.com/1535346.js"&gt; &lt;/script&gt; &lt;p&gt;Take note of a few important items in the code.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;storage&lt;/strong&gt; tells paperclip where to save the uploaded file.&amp;nbsp; Default is the file system.&amp;nbsp; Here I’ve specified it as s3.  &lt;li&gt;&lt;strong&gt;bucket&lt;/strong&gt; is the name of the location in the AWS-S3 service that the file will be saved to.&amp;nbsp; Think of it as a folder in the cloud.  &lt;li&gt;&lt;strong&gt;s3_credentials&lt;/strong&gt; are used to authenticate to the AWS services.&amp;nbsp; There are a couple of ways to set the credentials.&amp;nbsp; I used a hash and set the access key and secret key individually for reasons that we’ll cover in a bit.&amp;nbsp; You can also use a Yaml file here as well.&amp;nbsp; See paperclip documentation for that.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And don’t forget to whitelist the avatar property for mass assignment by adding it to the attr_accessible list.&amp;nbsp; See the gist above.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Create an AWS Account&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;You are going to obviously need an AWS account.&amp;nbsp; I’m not going to go through all the steps to create an AWS account, but if you made it this far you should be pretty committed to going through the process.&amp;nbsp; It’s a pretty cheap service to use, and you only pay for what you use.&amp;nbsp; New users get the first year of S3 use for free.&amp;nbsp; To date, I’ve spent $0.14 for it.&amp;nbsp; Not a type-o, yes 14 cents.&amp;nbsp; Here is the link to the &lt;a href="http://aws.amazon.com/s3/" target="_blank"&gt;AWS-S3&lt;/a&gt; service.&amp;nbsp; When you sign up for an AWS account you will be assigned an access key and a secret access key.&amp;nbsp; I try and keep both private.&amp;nbsp; The more important one is the secret access key.&amp;nbsp; You can change this if needed, or even add more keys if that is a requirement.&amp;nbsp; You can find your keys by going into the Security Credentials screen.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Ijj7RrFGXHQ/Tvy9cyEQsQI/AAAAAAAAF5k/eWMP-QnCHSY/s1600-h/security_credentials%25255B2%25255D.png"&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="security_credentials" border="0" alt="security_credentials" src="http://lh3.ggpht.com/-TkDYaU_P3JM/Tvy9dIgum9I/AAAAAAAAF5s/Zozl5CY-6DI/security_credentials_thumb.png?imgmax=800" width="244" height="169"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once you find them, keep them handy, you’re going to need them in a bit.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Shell scripts – Local and Heroku&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This is where things got a little different for me.&amp;nbsp; Since this is an open source project on GitHub, I didn’t want to have any reference to my AWS keys any where in my source code.&amp;nbsp; Hence the reason for using ENV variables that we saw earlier.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Local Development&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In Rails applications you can set ENV variables at start up and have them exist for the duration of the application’s life.&amp;nbsp; As an example.&lt;/p&gt; &lt;p&gt;$ S3_KEY=123456789ABCDEF S3_SECRET=x+yabld235lll654 rails s&lt;/p&gt; &lt;p&gt;Now two environment variables exist with the names S3_KEY and S3_SECRET.&amp;nbsp; If you review the user model gist above you’ll see how you access these two values.&amp;nbsp; You probably see right away typing this at the command line is error prone and very tedious every time you want to start the server.&amp;nbsp; Sure there’s the bash history.&amp;nbsp; But, I chose to make a simple shell script to start the server and set these variables.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Important: &lt;/strong&gt;First add the *.sh file extension to your .gitignore file.&amp;nbsp; This will ensure you don’t accidently check your AWS keys in and upload them to GitHub.&lt;/p&gt; &lt;p&gt;Next in the root of your application add the following command line, replacing the appropriate values with your AWS keys, to a file with the .sh file extension.&amp;nbsp; I used run.sh.&lt;/p&gt; &lt;p&gt;S3_KEY=&amp;lt;your access key&amp;gt; S3_SECRET=&amp;lt;your secret access key&amp;gt; rails s&lt;/p&gt; &lt;p&gt;Save and then set this file as executable.&lt;/p&gt; &lt;p&gt;$ chmod +x run.sh&lt;/p&gt; &lt;p&gt;Test it.&amp;nbsp; If all works, your application will start up as usual.&amp;nbsp; I like this cause it doesn’t really interrupt my workflow.&lt;/p&gt; &lt;p&gt;$ ./run.sh&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Heroku Production&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The process is very similar as it was for the local development section above.&amp;nbsp; For brevity I’m going to list the steps out instead of going into detail.&lt;/p&gt; &lt;p&gt;Create a .sh file in your application root.&amp;nbsp; I used deploy_heroku.sh.&lt;/p&gt; &lt;p&gt;Add the following lines to that file.&lt;/p&gt; &lt;p&gt;git push heroku master &lt;br&gt;heroku rake db:migrate &lt;br&gt;heroku config:add S3_KEY=&amp;lt;your access key&amp;gt; &lt;br&gt;heroku config:add S3_SECRET=&amp;lt;your secret access key&amp;gt;&lt;/p&gt; &lt;p&gt;Make the file executable&lt;/p&gt; &lt;p&gt;$ chmod +x deploy_heroku.sh&lt;/p&gt; &lt;p&gt;Test it.&lt;/p&gt; &lt;p&gt;$ ./deploy_heroku.sh &amp;amp;&amp;amp; heroku open&lt;/p&gt; &lt;p&gt;I loaded this script up with a few more things.&amp;nbsp; I got tired of typing each step out every time I wanted to deploy to Heroku.&amp;nbsp; You are free to change these steps any way you want.&amp;nbsp; The important two pieces are where the config settings are getting set.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I hope you found this helpful and that it all makes sense.&amp;nbsp; Please leave a comment below if you like this, have a suggestion to improvement, or if you have any questions.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://devcenter.heroku.com/articles/s3"&gt;http://devcenter.heroku.com/articles/s3&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.labnol.org/internet/tools/amazon-s3-buckets-tutorial/3890/"&gt;http://www.labnol.org/internet/tools/amazon-s3-buckets-tutorial/3890/&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip"&gt;http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip&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/8144771710349360193-8957470527892569777?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/8957470527892569777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=8957470527892569777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8957470527892569777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8957470527892569777'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/12/paperclip-heroku-and-aws-s3.html' title='Paperclip, Heroku, and AWS-S3'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-TkDYaU_P3JM/Tvy9dIgum9I/AAAAAAAAF5s/Zozl5CY-6DI/s72-c/security_credentials_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-4930535616879606401</id><published>2011-08-27T06:09:00.001-07:00</published><updated>2011-08-27T06:09:27.235-07:00</updated><title type='text'>A new chapter</title><content type='html'>&lt;p&gt;Next week Wednesday Aug 31st I start a new chapter in my computer career.&amp;nbsp; I’m going back to school.&amp;nbsp; Well, kind of.&amp;nbsp; I’m taking a Ruby on Rails class.&amp;nbsp; It’s a full semester 3 credit course, but I’m only taking it as a continuing education program.&amp;nbsp; The class itself is an elective for the college’s computer science program.&amp;nbsp; In order for me to take it I had to get an instructor authorization for enrollment.&amp;nbsp; But no biggy there.&amp;nbsp; I’m very excited for this.&amp;nbsp; The Ruby on Rails community has always intrigued me.&amp;nbsp; And there are .NET and Java developers moving to Ruby on Rails in droves.&amp;nbsp; Over the past year or so I’ve dabbled with Ruby on Rails from time to time.&amp;nbsp; But I never felt confident enough with it to take on a big project.&amp;nbsp; It is my hope that this class will get me to a more comfortable level.&lt;/p&gt; &lt;p&gt;Last weekend I attended the first ever Madison Ruby conference.&amp;nbsp; It was AWESOME!!!&amp;nbsp; Very enlightening being around that crowd.&amp;nbsp; I met some great people and discovered some new opportunities that I can get involved with.&amp;nbsp; For example the Mad-Railers group that meets here in town.&amp;nbsp; The Mad-Railers are a Ruby on Rails user group.&amp;nbsp; They meet the last Monday of each month.&amp;nbsp; Very excited for that as well.&lt;/p&gt; &lt;p&gt;It is my intention to do some more blogging over the next few months.&amp;nbsp; Mostly with my experiences as a .NET developer moving towards Ruby on Rails.&amp;nbsp; There is a mind shift that has to take place.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-4930535616879606401?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/4930535616879606401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=4930535616879606401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/4930535616879606401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/4930535616879606401'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/08/new-chapter.html' title='A new chapter'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-7149961009585609833</id><published>2011-07-01T05:31:00.001-07:00</published><updated>2011-07-01T05:32:30.625-07:00</updated><title type='text'>Performance issues with Visual Studio 2010</title><content type='html'>&lt;p&gt;I’ve been noticing some performance issues with Visual Studio 2010.&amp;nbsp; Specifically when I type.&amp;nbsp; The editor wasn’t able to keep up.&amp;nbsp; And I’m not a super fast typer, 55 wpm.&amp;nbsp; I have a few plugins installed, mainly ones you can get via the Extension Manager along with DevExpress’ Code Rush Pro.&amp;nbsp; I thought maybe it was the accumulation of all the plugins trying to do their thing behind the scenes.&amp;nbsp; I’ve tried disabling or uninstalling plugins, but that didn’t really help.&amp;nbsp; Plus once you get use to using the added features that the plugins provide, you start to feel crippled after they are gone.&amp;nbsp; So I searched around a bit, and found that the culprit was, “My video card”????&amp;nbsp; Turns out its an easy fix.&amp;nbsp; Tools –&amp;gt; Options.&amp;nbsp; I unchecked the three check boxes from below.&amp;nbsp; Restarted Visual Studio, and that fixed it.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-7fcliMFPAjo/Tg2-M-cLp3I/AAAAAAAAF3Q/m0JKJp37QKs/s1600-h/image%25255B9%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-6M6OsS0N_WY/Tg2-Nv8_TPI/AAAAAAAAF3U/tBBVyc95blk/image_thumb%25255B5%25255D.png?imgmax=800" width="496" height="292"&gt;&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/8144771710349360193-7149961009585609833?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/7149961009585609833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=7149961009585609833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/7149961009585609833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/7149961009585609833'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/07/performance-issues-with-visual-studio.html' title='Performance issues with Visual Studio 2010'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-6M6OsS0N_WY/Tg2-Nv8_TPI/AAAAAAAAF3U/tBBVyc95blk/s72-c/image_thumb%25255B5%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-1147672522332635294</id><published>2011-06-10T08:08:00.001-07:00</published><updated>2011-06-10T08:08:55.478-07:00</updated><title type='text'>Caliburn.Micro Series</title><content type='html'>&lt;p&gt;I’m working on a MVC3 personal project that exposes some services.&amp;#160; The reason for the services is because I see a need for a desktop (WPF) client as well.&amp;#160; A few months ago I was introduced to the Caliburn.Micro project.&amp;#160; I don’t know much about it, but from that discussion I got pretty interested in it.&amp;#160; As I was Googling around for some good documentation, tutorials, or code examples I ran into a Soup to Nuts series on Devlicio.us.&amp;#160; Below is a TOC of the series.&amp;#160; I put this together because over the next few months I’ll be using this as my reading guide.&amp;#160; I also noticed there is no part 4.&amp;#160; Not sure whats up with that.&amp;#160; I’ll update this post if I find out more.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/07/04/mvvm-study-segue-introducing-caliburn-micro.aspx" target="_blank"&gt;MVVM Study – Segue - Introducing Caliburn.Micro&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/07/06/caliburn-micro-soup-to-nuts-pt-1-configuration-actions-and-conventions.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Pt. 1 – Configuration, Actions and Conventions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/07/08/caliburn-micro-soup-to-nuts-pt-2-customizing-the-bootstrapper.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Pt. 2 – Customizing The Bootstrapper&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/07/17/caliburn-micro-soup-to-nuts-pt-3-all-about-actions.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Pt. 3 – All About Actions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/08/21/caliburn-micro-soup-to-nuts-part-5-iresult-and-coroutines.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Pt. 5 – IResult and Coroutines&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/10/08/caliburn-micro-soup-to-nuts-part-6a-screens-conductors-and-composition.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 6a – Screens, Conductors and Composition&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/10/12/caliburn-micro-soup-to-nuts-part-6b-simple-navigation-with-conductors.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 6b – Simple Navigation with Conductors&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/10/19/caliburn-micro-soup-to-nuts-part-6c-simple-mdi-with-screen-collections.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 6c – Simple MDI with Screen Collections&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/11/18/caliburn-micro-soup-to-nuts-part-6d-a-billy-hollis-hybrid-shell.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 6d – A “Billy Hollis” Hybrid Shell&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/12/16/caliburn-micro-soup-to-nuts-part-7-all-about-conventions.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 7 - All About Conventions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2011/05/30/caliburn-micro-soup-to-nuts-part-8-the-eventaggregator.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 8–The EventAggregator&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2011/06/09/caliburn-micro-soup-to-nuts-part-9-new-wp7-features.aspx" target="_blank"&gt;Caliburn.Micro Soup to Nuts Part 9–New WP7 Features&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-1147672522332635294?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/1147672522332635294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=1147672522332635294' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1147672522332635294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1147672522332635294'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/06/caliburnmicro-series.html' title='Caliburn.Micro Series'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-925621773553632643</id><published>2011-06-08T13:25:00.000-07:00</published><updated>2011-06-09T10:46:31.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Presentations'/><category scheme='http://www.blogger.com/atom/ns#' term='Maddotnet'/><category scheme='http://www.blogger.com/atom/ns#' term='CQRS'/><title type='text'>CQRS Presentation video</title><content type='html'>I have completed the editing and uploading of my CQRS presentation from 6-1-2011.  It took me some time to edit the video, and get it uploaded, but I think the result is worth the effort.  I have also included the &lt;a href="http://dl.dropbox.com/u/11721015/screencasts/CQRSPresentation/Building%20High%20Availability%20Systems%20Utilizing%20CQRS.pptx"&gt;Power Point slides&lt;/a&gt; for you to download.  I hope you all like it, and any comments are welcome.  As I watched the video back, I noticed a few places where I miss spoke.  I'm going to do some follow up articles to clarify the instances where I miss spoke, and also to answer some of the questions that came out of the meeting.  I believe there were some good questions that came out.  I've been thinking about them and I've come up with some answers to a few of them.  So be on the look out for those follow up posts.&lt;br /&gt;&lt;br /&gt;Thanks again to all that attended.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/24882285?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-925621773553632643?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/925621773553632643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=925621773553632643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/925621773553632643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/925621773553632643'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/06/cqrs-presentation-video.html' title='CQRS Presentation video'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-5068477600762692798</id><published>2011-04-26T08:27:00.000-07:00</published><updated>2011-04-26T08:27:40.835-07:00</updated><title type='text'>Free .NET Libraries</title><content type='html'>There is a great list of free .net libraries posted at &lt;a href="http://goo.gl/EHofk"&gt;Qink&lt;/a&gt; that you can use in your applications.  Check it out.  The list is continually being updated from the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-5068477600762692798?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/5068477600762692798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=5068477600762692798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5068477600762692798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5068477600762692798'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2011/04/free-net-libraries.html' title='Free .NET Libraries'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-5687538651391612202</id><published>2010-08-09T07:54:00.001-07:00</published><updated>2010-08-09T07:54:33.112-07:00</updated><title type='text'>Current Packages for the Nu Package Management</title><content type='html'>&lt;p&gt;I’ve been doing Rub on Rails now for about 3 months, and I’m really getting into it.&amp;#160; So many nice libraries and conventions to help get applications out the door faster.&amp;#160; Unfortunately my RoR work doesn’t pay the bills yet.&amp;#160; By day I’m a .NET developer.&amp;#160; Recently I came across a blog post written by &lt;a href="http://ayende.com/Blog/archive/2010/08/01/package-management-for-.net-nu.aspx" target="_blank"&gt;Ayende Rahien&lt;/a&gt; that mentions the use of a new package management utility for .NET developers.&amp;#160; For years Ruby on Rails developers have enjoyed the luxury of installing libraries using the gem utility.&amp;#160; Its really handy to have at your disposal.&amp;#160; Read up on it.&amp;#160; There is now a similar package management utility available for .NET developers called Nu, short for Nubular.&amp;#160; If you read Ayende Rahien’s blog you’ll see how it works.&lt;/p&gt;  &lt;p&gt;Current Nu packages are available &lt;a href="http://nu.wikispot.org/Current_Packages" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;I hope this project catches on and the list continues to grow.&amp;#160; This is going to make things really handy and really quick to get the latest versions of the most common libraries that I use for development.&amp;#160; Best of all now I don’t have to do the package management myself on some file share of mine.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-5687538651391612202?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/5687538651391612202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=5687538651391612202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5687538651391612202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5687538651391612202'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2010/08/current-packages-for-nu-package.html' title='Current Packages for the Nu Package Management'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-8643924751025567393</id><published>2010-08-04T08:20:00.001-07:00</published><updated>2010-08-04T08:21:48.585-07:00</updated><title type='text'>Git back here</title><content type='html'>&lt;p&gt;If you used the git rm command, ignored the warning, you will notice that the file doesn't get removed from your repository, it gets removed from your file system.&amp;#160; There is no trash bin with git either.&amp;#160; You might be in luck if you did a git add first, then issued the git rm command.&amp;#160; Your file will have been hashed and added to the git staging area.&amp;#160; You can retrieve that file by issuing the following command: &lt;/p&gt;  &lt;p&gt;git fsck --lost-found &lt;/p&gt;  &lt;p&gt;This will pull all the files out of the staging area and drop them in the folder .git/lost-found/other.&amp;#160; One catch though.&amp;#160; The file isn't named as you would think, or hope.&amp;#160; The file is named with its hash value.&amp;#160; This is ok, you haven't lost the contents of the file, just the file name.&amp;#160; If you poke around in the files a bit, you'll find what you are looking for.&amp;#160; Its not perfect, but the content is there.&amp;#160; And yes, I did do this.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-8643924751025567393?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/8643924751025567393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=8643924751025567393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8643924751025567393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8643924751025567393'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2010/08/git-back-here.html' title='Git back here'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-7695664296282513682</id><published>2010-06-23T09:46:00.001-07:00</published><updated>2010-06-23T09:46:53.824-07:00</updated><title type='text'>Uploading files with ASP.NET MVC</title><content type='html'>&lt;p&gt;Dino Esposito has posted a great article on DotNetSlackers.com on how to &lt;a href="http://dotnetslackers.com/articles/aspnet/ASP-NET-MVC-and-File-Uploads.aspx" target="_blank"&gt;Upload Files using ASP.NET MVC&lt;/a&gt;.&amp;#160; Enjoy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-7695664296282513682?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/7695664296282513682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=7695664296282513682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/7695664296282513682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/7695664296282513682'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2010/06/uploading-files-with-aspnet-mvc.html' title='Uploading files with ASP.NET MVC'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-6702344738625665333</id><published>2010-05-22T06:12:00.001-07:00</published><updated>2011-03-22T13:35:33.658-07:00</updated><title type='text'>Deleting a detached entity with EF4</title><content type='html'>&lt;p&gt;As unconventional as it may have seemed, it was the reality.  With EF1 you had to first query the database to get the entity you wanted to delete.  Talk about a waste of time, but the ObjectContext needs to be aware of the entity somehow.  In my previous post I talked about how to &lt;a href="http://linq2you.blogspot.com/2010/05/updating-detached-entity-with-ef4.html" target="_blank"&gt;update a detached entity&lt;/a&gt; with EF4.  Now deleting a detached entity is just as easy.&lt;/p&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;  void DeleteBook(Book book)&lt;br /&gt;  {&lt;br /&gt;    using(var ctx = new BookEntities())&lt;br /&gt;    {&lt;br /&gt;      ctx.Books.Attach(book);&lt;br /&gt;      ctx.DeleteObject(book);&lt;br /&gt;      ctx.SaveChanges();&lt;br /&gt;    }&lt;br /&gt;  }&lt;/pre&gt;&lt;p&gt;Again pretty easy and should improve on performance.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-6702344738625665333?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/6702344738625665333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=6702344738625665333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/6702344738625665333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/6702344738625665333'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2010/05/deleting-detached-entity-with-ef4.html' title='Deleting a detached entity with EF4'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-3664022572197259482</id><published>2010-05-22T05:49:00.001-07:00</published><updated>2011-03-22T13:37:25.348-07:00</updated><title type='text'>Updating a detached entity with EF4</title><content type='html'>&lt;p&gt;With the introduction of EF4 we now have the ability to update entities without having to query the database first.  This was always a performance hit with EF1, but a necessary hit.  I’m not going to get into that, lets see the code.&lt;/p&gt;&lt;pre class="brush: c-sharp"&gt;&lt;br /&gt;void UpdateBook(Book book) {&lt;br /&gt;    using(var ctx = new BookEntities()){&lt;br /&gt;        ctx.Books.Attach(book);&lt;br /&gt;        ctx.ObjectStateManager.ChangeObjectState(&lt;br /&gt;            book,&lt;br /&gt;            EntityState.Modified);&lt;br /&gt;        ctx.SaveChanges();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Pretty easy.  The drawback is that the ChangeObjectState method marks every property of the book object as being Modified.  So when EF generates the SQL Update statement, every column in the database for this book record will be updated.  This really isn’t an issue if you’ve set all the properties on the book entity.  Where it becomes an issue is if you are trying to update only one property.  For instance you just want to update book.Title, well if the Title property is the only property you set, then Author, Copyright, NumberOfPages, etc. will all get overwritten with null in the database.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-3664022572197259482?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/3664022572197259482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=3664022572197259482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/3664022572197259482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/3664022572197259482'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2010/05/updating-detached-entity-with-ef4.html' title='Updating a detached entity with EF4'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-9003226734394126586</id><published>2009-03-21T07:03:00.001-07:00</published><updated>2009-03-21T07:03:15.507-07:00</updated><title type='text'>Dream Team</title><content type='html'>&lt;p&gt;I've been developing software professionally now for about 7 years and for the past three I've been a consultant.&amp;#160; I've met a lot of people, been on a lot of teams, and worked on some pretty cool projects.&amp;#160; Recently I rolled off of a client project that was probably one of the most challenging projects I've ever worked on.&amp;#160; My previous software development experience has been mostly with financial applications.&amp;#160; This is helpful when trying to put the requirements for the next project into some sort of context.&amp;#160; A loan is a loan and an interest rate is an interest rate.&amp;#160; My last client was a Biotechnology company.&amp;#160; I've never worked with highly scientific data and terminology before.&amp;#160; Trying to put the project requirements into some familiar context was pretty difficult.&amp;#160; The same level of difficulty though also made for a very rewarding environment.&amp;#160; But that's not the point of this post.&amp;#160; What I found most rewarding about the project was the team that came together.&amp;#160; I was a member of a 5 person tech lead team.&amp;#160; We had a collective experience that complemented each other better than any team I've ever worked on.&amp;#160; Each of us could challenge the others in different ways.&amp;#160; The dynamic of the team really forced you to think a problem through, and even then, when I felt I had a pretty solid design, they still poked holes in it.&amp;#160; I can confidently say that I'm most proud of some of the components I wrote there.&amp;#160; None of us knew each other before this project, and the Madison IT community is like small town America where everybody knows everybody, or so it seems.&amp;#160; How we all ended up coming together is a mystery.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-9003226734394126586?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/9003226734394126586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=9003226734394126586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/9003226734394126586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/9003226734394126586'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2009/03/dream-team.html' title='Dream Team'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-1872325066749986656</id><published>2009-02-23T16:29:00.001-08:00</published><updated>2009-02-23T16:29:29.806-08:00</updated><title type='text'>Face to Face with Employer</title><content type='html'>&lt;p&gt;So I'm an active member of Facebook.&amp;#160; I love it.&amp;#160; I've reconnected with several friends that I haven't seen in years&amp;#160; and keep in touch with friends that don't live near by.&amp;#160; I chat, write on my friends' walls, and have even planed reunions using Facebook.&amp;#160; But recently people from my employer are now getting on Facebook and sending me friend requests.&amp;#160; I have no problems with any of these people.&amp;#160; I talk to them all the time at company get togethers and business meetings.&amp;#160; But you won't find me out on a Friday night stomping the town with them.&amp;#160; I like to draw a line between my personal life and my professional one.&amp;#160; I feel I'm probably in the majority here.&amp;#160; I'm not sure if I like the idea of management from my employer wanting to be friends with me on my Facebook.&amp;#160; In contrast, if you are going to publish your life on the internet, then you better be willing to accept the fact that its there for everybody to read.&lt;/p&gt;  &lt;p&gt;I digress.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-1872325066749986656?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/1872325066749986656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=1872325066749986656' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1872325066749986656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1872325066749986656'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2009/02/face-to-face-with-employer.html' title='Face to Face with Employer'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-3466419055320988490</id><published>2008-11-11T07:37:00.001-08:00</published><updated>2008-11-11T07:37:06.412-08:00</updated><title type='text'>Mentoring techniques</title><content type='html'>&lt;p&gt;Yesterday while at work I was asked by a junior developer what type of data access layer my team is using on our project.&amp;#160; He was wondering about the use of data sets or business objects.&amp;#160; Do we use inline SQL or stored procedures.&amp;#160; So I sat with him and had a short conversation about his inquiries.&amp;#160; After he left, I got to thinking, I better go see what he's working on before he tries to kill a mosquito with a canon.&amp;#160; Good thing to.&amp;#160; His initiative on his application was to take some ideas from a data access layer that another senior developer had wrote, and try and improve on it.&amp;#160; I love the young sponges in the world.&amp;#160; They just want to learn, push their abilities, and absorb as much knowledge as they can.&amp;#160; But where do you draw the line with them?&amp;#160; The data access layer he was going to try and enhance was solid, and has pasted the test of time.&amp;#160; Its been implemented in several other applications as well.&amp;#160; I'm all for enhancing and trying to find a better way, but the path he was going down I was skeptical about.&amp;#160; It is my job after all to set him up for success.&amp;#160; So I worked through some scenarios with him.&amp;#160; I asked him how would you unit test your data layer?&amp;#160; Would it be easier to maintain your design, or the current design?&amp;#160; Does your design or the current design make more logical sense?&amp;#160; My goal with him was to try and get him to understand the challenges that he'll face instead of telling him to just do it this way and be bombarded with a series of &amp;quot;what if's&amp;quot; and &amp;quot;ya but's&amp;quot;.&amp;#160; After he started to see the light, we talked about maybe some other technologies he could use instead of rolling his own data layer.&amp;#160; One technology we talked about was the use of the ADO.NET Entity Framework.&amp;#160; It basically builds the entire data layer for you, but its still cutting edge technology and maybe hasn't yet pasted the test of time yet.&amp;#160; What other techniques do you use?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-3466419055320988490?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/3466419055320988490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=3466419055320988490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/3466419055320988490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/3466419055320988490'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2008/11/mentoring-techniques.html' title='Mentoring techniques'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-1975214864228499431</id><published>2008-09-15T08:00:00.000-07:00</published><updated>2008-09-15T08:37:09.528-07:00</updated><title type='text'>Scientific Notation to Decimal</title><content type='html'>I recently had a situation come up where I needed to convert numeric data that was in scientific notation to a decimal.  As an example I would receive a string that was in the form 1E-9.  The decimal representation of this is 0.000000001.  Seems simple enough.&lt;br /&gt;&lt;br /&gt;string sVal = "1E-9";&lt;br /&gt;decimal val = Convert.ToDecimal(sVal);&lt;br /&gt;&lt;br /&gt;The above code fails because ToDecimal uses NumberStyles.Number which doesn't include the AllowExponent switch.  You'll receive a FormatException exception that states the input string was not in a correct format.  Use the following to convert to a decimal.&lt;br /&gt;&lt;br /&gt;string sVal = "1E-9";&lt;br /&gt;decimal val = 0M;&lt;br /&gt;&lt;br /&gt;if(!Decimal.TryParse(sVal, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out val))&lt;br /&gt;val = 0M;&lt;br /&gt;&lt;br /&gt;Jefferson&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-1975214864228499431?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/1975214864228499431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=1975214864228499431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1975214864228499431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/1975214864228499431'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2008/09/i-recently-had-situation-come-up-where.html' title='Scientific Notation to Decimal'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-5746407255448903250</id><published>2008-09-12T23:25:00.000-07:00</published><updated>2008-09-12T23:48:27.508-07:00</updated><title type='text'>Mirra, Mirra, who's the fairest of them all.</title><content type='html'>I've always wanted a nice home office.  Back in December we bought a new house and I finally had the opportunity to set up a nice home office.  Now that my office is on its way to being a sanctuary of productivity, I needed a nice office chair to finish the package.  I shopped all over for office chairs.  The the major retailers, and online.  None really fit what I wanted.  I had bought cheep chairs before, and they only really last a couple of years and don't support your body the way it should be.  Then I started a new job, and the chair they provided was a nice ergonomic chair.  Its a Hon.  I finally thought I found the chair.  I searched down a local retailer and went into their show room to check them out.  Turns out this retailer does sell Hon chairs, but they are primarily a Herman-Miller dealer.  I never really sat in a Herman-Miller so I tried out the Herman-Miller Mirra.  The fit was right.  The support was there.  But that much money, and I wasn't sure how it is sitting in front of my desk with it.  The selling point, they let me take home a trial Mirra chair for two weeks before I bought.  Wow...lets do it.  When I got the Mirra home, I immediately put it in front of my desk and I was sold.  Hands down it is the best chair out there.  After my two weeks was up I returned the trial chair and ordered one of my very own.  Its a small investment, mine was $710.00.  But if you spend a lot of time at your desk, its worth the investment.  The construction is solid, the support is second to none.  And it has a 12 year warranty.  That right there pays for itself.  If you're serious about getting a nice chair check out the &lt;a href="http://www.hermanmiller.com/CDA/SSA/Product/0,1592,a10-c440-p205,00.html"&gt;Mirra&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-5746407255448903250?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/5746407255448903250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=5746407255448903250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5746407255448903250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/5746407255448903250'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2008/09/mirra-mirra-whos-fairest-of-them-all.html' title='Mirra, Mirra, who&apos;s the fairest of them all.'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8144771710349360193.post-8725451360245260196</id><published>2008-07-27T20:22:00.000-07:00</published><updated>2008-07-27T20:47:45.950-07:00</updated><title type='text'>Hello World</title><content type='html'>This is my first post.  I've been meaning to start blogging, but never got around to setting one up.  What was holding me up?  Trying to find a meaningful name.  Something catchy, easy to for readers to remember.  What best fits what I want to write about.  Something all encompassing.  Well maybe not all encompassing, but close enough.  I've been a computer programmer professionally now for about 7 years.  The latest bit of technology I'm reading about is a Microsoft product called Linq (pronounced Link).  Linq stands for Language Integrated Query.  If you are not a programmer, you won't find this interesting at all.  But if you are, and you don't know what Linq is, check it out.  Its great.  Basically its a way to interact with several types of data sources all in a very common way.  Linq is very extensible, and several flavors of it have been popping up all over the web.  Linq to SQL and Linq to Xml are apart of .NET 3.5.  Linq to Amazon, Linq to Active Directory, Linq to Oracle, Linq to SAP, some very cool stuff here.  It hit me one night, Linq 2 You.  Thats what blogs are anyway.  Scribing my thoughts, for the world to read.  This blog is my Linq 2 you.&lt;br /&gt;&lt;br /&gt;Thanks for joining me,&lt;br /&gt;&lt;br /&gt;Jefferson&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8144771710349360193-8725451360245260196?l=blog.linq2you.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.linq2you.com/feeds/8725451360245260196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8144771710349360193&amp;postID=8725451360245260196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8725451360245260196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8144771710349360193/posts/default/8725451360245260196'/><link rel='alternate' type='text/html' href='http://blog.linq2you.com/2008/07/hello-world.html' title='Hello World'/><author><name>Jefferson Carley</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
