Coding On Campus and Geeking out in Orlando with VS Live
Posted On Sunday, August 18, 2013 at at Sunday, August 18, 2013 by Ben HThis week I will be presenting at VS Live Redmond. I will also be presenting at VS Live Orlando in November as part of Live! 360. For those of you that are not familiar with VS Live, it is a 3 to 5 day conference featuring code-filled days, networking at night and independent education for .NET developers, software architects and designers. I love speaking at and attending VS Live because these conferences provide an opportunity to discuss technology not just teach it. Four conferences in four different locations allows for smaller more affordable conferences that benefit attendee and speaker alike. Below is the information related to my talks. If you are attending in Redmond I look forward to seeing you there. If your looking for a great conference hopefully I will see you in Orlando.
Aug. 21 - VS Live Redmond:
9:15 – Blend For Visual Studio
3:15 – Tips for Building Multi-Touch Enabled Web Sites
Nov. 21 - VS Live Orlando (Register Here):
1:30 – Adventures in Unit Testing : TDD vs. TED
3:00 – Blend For Visual Studio
C# Developer’s Anonymous (Defending C# in a JavaScript World)
Posted On Thursday, May 16, 2013 at at Thursday, May 16, 2013 by Ben HHi, My name is Ben and I am a C# developer. It’s been 1 minute since I wrote a line of C# code.
Am I the only one that has noticed some negativity towards C# and .NET these days? All this buzz and talk about HTML5, CSS3 and JavaScript has C# devs on the defensive. Lately, I feel like I need to apologize for using C#, ASP.NET, XAML and\or Visual Studio. Everyone wants to use JavaScript for everything. It looks like this post by Jeff is 100% accurate. In the article, Jeff says anything that can be written in JavaScript will be.
Node.js is a huge example of this. Don’t get me wrong Node is a great way to build a fast, scalable cross platform web interface for FREE! I get it, it’s FREE. However, let’s discuss the word “free” for minute. Is it free if it takes me twice as long to develop it? Is it free if I have to import all these open source modules, libraries and frameworks, some of which have licensing that forbid commercial use? Is it free if my application breaks due to a bug in a new version of one of these open source projects? To me the productivity gains I get from using IIS, ASP.NET MVC (or Web Forms), C# and Visual Studio are well worth the licensing fees required to build applications with .NET. Not to mention all the unbelievable productivity tools provided by 3rd party vendors like Telerik. In the long run, my users and customers don’t care about the backend technology as long as the architecture performs and can be scaled. They also want it done as soon as possible.
Most of the C# developers I know love developing using .NET and Visual Studio (VS). Hardcore open source proponents might say VS is cheating. It abstracts much of the low level details and plumbing so the developer can focus on just building the application. Is that wrong? Maybe if you are writing a hardcore application that needs control over some low level operations. Most apps these days don’t need that. Plus I would argue that 3rd party JavaScript frameworks like jQuery, backbone, knockout, etc. do the same thing in the JavaScript world. To me the abstractions that VS provides are all that is right with software development.
Ever since Microsoft killed Silverlight and provided HTML5, CSS3 and JavaScript development for Windows Store Apps, C# developers get no love. TypeScript is a perfect example of this. I love TypeScript and use it to write large JavaScript based applications. But TypeScript exists for one reason, because JavaScript development is painful for C# developers that have been spoiled by the most powerful language (C#) and IDE (VS) on the planet. TypeScript is trying to bring all the features of these tools to JavaScript. Eventually it will get there and we will all be writing applications that “compile” to JavaScript.
Visual Studio and C# produce software that runs on many different devices. The apps created with these technologies might not always run on every device but they can target a large range of devices. They might require some licensing fees, hosting fees or cloud fees. My experiences is that these fees are a reasonable cost (or even a necessary cost) for writing and deploying good quality applications.
Finally, I want to say that I do not hate JavaScript. I find it very similar to C#. However, I miss all the value that the .NET framework and Visual Studio provides. If I can ensure the environment my application runs in will have .NET installed I will use it every time.
My VS Live Las Vegas Session Contents for TypeScript and Touch Enabled Web Sites
Posted On Tuesday, March 26, 2013 at at Tuesday, March 26, 2013 by Ben HJust a couple quick links to my slides and demos from my VS Live sessions. I spoke on TypesScript and how to Build Touch Enabled Web Sites. Attendees at both sessions where great. Thanks for attending! Please fill out the session evals to let us know how we are doing.
Thanks again for attending. More to come related to VS Live Vegas…
Space Shuttle Coding - SoCal Code Camp a Huge Success
Posted On Thursday, October 18, 2012 at at Thursday, October 18, 2012 by Ben HLast weekend I spoke at the SoCal Code Camp in LA. The event was held on the University of Southern California campus. As a C# MVP and Telerik Insider, this code camp was a great opportunity for me to discuss geek stuff with my peers. Here are a few pictures from the event:
I had two sessions during the weekend. One on Windows 8 Development for the Enterprise and the other on Tips For Building Fast Multi-Touch Web Sites. I got tons of positive feedback so I think the talks went well. Below are links to the slide decks and code samples:
Windows 8 Apps for the Enterprise Links:
Tips For Building Fast Multi-Touch Web Sites Links:
Finally, when I signed up for the code camp I was unaware the the Space Shuttle Endeavor was being moved to it’s permanent home at the LA Science museum. When I landed in LA the shuttle was just leaving the airport on a 48+ hour journey to the museum. Here are a few shots of the shuttle heading down the streets of LA:
I had a great time and enjoyed meeting fellow geeks and discussing all things related to code and space travel!
Code in the Sun! (Silicon Valley Code Camp, SoCal Code Camp, Desert Code Camp and VS Live Orlando)
Posted On Tuesday, October 02, 2012 at at Tuesday, October 02, 2012 by Ben HThanks to my employer Aspenware, the Telerik Insider program and VS Live 360 I’m getting ready to embark on an adventure to sunny Arizona, California and Florida.
First, I will be in the San Francisco area this weekend (Oct. 6 and 7) to speak and represent Telerik at the Silicon Valley Code Camp. I’m doing two sessions: the first on speeding up your websites and enabling them for touch browsing (Session Details). My second session is on ASP.NET MVC and using the Kendo UI MVVM (Session Details). Click here for more details about the code camp and to register for the event.
The next weekend (Oct. 13 and 14) I will be in LA for the SoCal Code Camp. I am also representing Telerik and doing two talks at this code camp as well. The first is the same talk on speeding up your websites and enabling them for touch browsing (Session Details). My second session is on Windows 8 for the Enterprise (Session Details). The Win 8 sessions will detail how to install your Windows Store apps without using an actual “Store”. This is handy for testing and also for deploying apps inside your enterprise. To see the other sessions and register for the event click here.
Next I will be representing Telerik in Chandler, Arizona for the Desert Code Camp on Nov. 17. I will be presenting all three of the presentations I mentioned above (speeding up your websites and enabling them for touch browsing, Windows 8 for the Enterprise and ASP.NET MVC and using the Kendo UI MVVM). You can see my sessions for this camp here. You can see all the sessions and register here.
And for the grand finale I’ll be speaking at Visual Studio Live! December 10-14 in Orlando, FL http://bit.ly/VOSPK12. Providing expert solutions for .NET Developers, Visual Studio Live! is great for developers, software architects, programmers and designers who are looking for hard-hitting, practical training from both industry experts and Microsoft insiders.
I’ll be presenting the following sessions:
· Expression Blend 5 For Developers: Design Your XAML or HTML5\CSS3 UI Faster
· Windows 8 Metro Style Apps for the Enterprise
SPECIAL OFFER: As a speaker, I can extend $500 savings on the 5-day package. Register here: http://bit.ly/VOSPK12Reg and use code VOSPK12.
The extra-cool part about Visual Studio Live!: four events in one! This year, the event will be co-located with SQL Server Live!, SharePoint Live!, and Cloud & Virtualization Live!. You can customize your conference agenda and attend ANY sessions from all four events. Register now: http://bit.ly/VOSPK12Reg
Many thanks to Telerik for sponsoring me as an Insider. I love their tools and the people that work there. They are passionate about helping developers do their job. I’m also very thankful to the folks at VS Live for selecting me to speak at their conferences as well. VS Live conferences are the best conferences for the price out there period!
Please visit the websites for these great events and attend as many of them as you can!
Windows 8 Development For The Enterprise Using Side Loading
Posted On Monday, October 01, 2012 at at Monday, October 01, 2012 by Ben HLast week I spoke at the Denver Visual Studio User Group meeting on developing Windows 8 Metro (Windows Store) Style application for the Enterprise. The main purpose of the talk was to inform developers that these types of applications can be useful for an Enterprise. I also want the world to know that these Windows Store applications can be installed without going through the actual Windows Store using a technique called “side loading”. When you side load an app on Windows 8 you can bypass some of the rules and regulations in place for these apps and build apps that might be more useful for internal line of business apps. The details on how this is done and some links to online references are included in the slides. The Demos demonstrate some of the techniques discussed in the slides. Please download all the content and let me know if you have any questions.
VS Live Redmond Recap. Who’s ready for VS Live Orlando?
Posted On Thursday, October 27, 2011 at at Thursday, October 27, 2011 by Ben HLast week was VS Live in Redmond. I’m just recovering enough to write a post about it. It was a great conference. The best thing about this conference is the interaction between presenters and attendees. As a presenter I love the ability to talk offline with attendees at all the different events setup by the conference organizers. I also like interacting with the rest of the presenters at the conference as well. I really feel energized and ready to go after taking in all the information at the conference.
I presented two sessions in Redmond. One on Internet Explorer\HTML5\CSS3 and one on using MEF to build composable applications. Both sessions went well. The attendees had great questions and were well engaged. During these sessions a few code changes and demos were done. Below are links to the updated slides and demo code:
Let me know if you have any feedback regarding the content of these files. Other than that I want to say thank you to all those that attended my sessions.
After all that happened in Redmond I am jazzed to do it all again in Orlando. If you have not registered for the Orlando conference do it here now as early bird pricing ends next week. As a presenter I love to attend the other sessions at the conference and gain as much knowledge as possible. In Redmond I was always conflicted on which sessions to attend. I’m looking forward to catching those sessions I missed in Orlando.
Hopefully the temperature in Orlando will be a bit warmer as well. See you there.
VS Live October 17–21 in Redmond
Posted On Monday, August 29, 2011 at at Monday, August 29, 2011 by Ben HWe all know that PDC… I mean BUILD is coming up in a couple weeks in Anaheim, California. Microsoft is keeping all the announcements (Including a real agenda) for BUILD really close to the vest. One thing is for sure, there will be some fallout after BUILD. Many questions, rumors and suspicions will be debated out there in cyberspace. What better place to get the real answers than at Microsoft Headquarters in Redmond? VS Live in Redmond includes sessions from some of the top names in the industry, including many Microsoft Product\Program Managers. No one knows what will come out at BUILD (Or no one can talk about it until after BUILD). In the short time between BUILD and VS Live the speakers will undoubtedly be up to speed on what is going on in the Microsoft world. Join us at VS Live and have access to all the speakers to get your questions answered by real world software engineers.
Early bird rates are available until Sept. 7th. Click on the image below to register for VS Live in Redmond and get a special speaker discount.
By the way I will be presenting on HTML 5 and MEF at VS Live in Redmond. I sincerely hope to see you there.
HTML 5 vs. Silverlight
Posted On Monday, April 11, 2011 at at Monday, April 11, 2011 by Ben HEver since PDC 2010 there has been tons of controversy and debate swirling around HTML 5 and what it means for Silverlight. About a week ago Scott Guthrie wrote a post that I found on the Silverlight Team Blog (here) that addresses this issue. I recommend reading that post and the comments as well. When all the buzz came out about HTML 5 I saw a bunch of angry posts from Silverlight developers. Many of the comments on Scott’s post fall along the same lines. However, it has been months since PDC and people are starting to calm down and realize that HTML 5 is just another tool in the tool box. I compare this to the ASP.NET MVC release and how it affected Web forms developers. At first you feel threatened. You think that all the hard work you put into mastering Web forms or Silverlight will be irrelevant. After awhile you realize that new technologies simply give you more options when solving problems for your clients.
My opinion is that HTML 5 and Silverlight will co-exist for a very long time. The reason is they have different usages and solve different problems. Especially in the mobile space. No matter how you slice it users like the native experience of apps on their mobile devices. I know with HTML 5 you can make websites look and feel like native mobile apps, but the experience is still just a bit off. So Silverlight will be around as a mobile development story for some time.
I also believe Silverlight will remain for awhile because of the fact that HTML 5 is JavaScript intensive. In my opinion JavaScript is still not as friendly to work with as managed code, even with all the new libraries like JQuery and Dojo. Maybe someday the libraries and tooling will make developing JavaScript easier. Again that is not going to happen for some time.
So, let’s review our UI choices for developing new .NET applications. There is ASP.NET, ASP.MVC, Silverlight and don’t forget WPF. I know that is simplifying things quite a bit, but in general that is what we have from a .NET perspective. Each one of these technologies have there pros and cons. The best advice I can give you is to design your applications with services and business layers so your UI is as thin as possible. If you do that, it is not really that hard to create a UI layer for every one of these technologies.
Server Side and Client Side Caching with .NET and the Microsoft Sync Framework
Posted On Wednesday, June 30, 2010 at at Wednesday, June 30, 2010 by Ben HI recently presented at the Denver Visual Studio User Group on this topic. The approach I took was to start with an out of the box working Silverlight application and then tweak to using caching for performance reasons. The next step is to persist that cache on the client side to make it even faster and not even require a round trip to the server. After that I took it even further by saving the entire data structure to isolated storage to allow offline use of the application using the out of browser option of Silverlight. Finally I expanded it even further by turning it into a WPF application that stored the data in a local SQL Server data base that was synced back to the server using the Microsoft Sync Framework. To me this is a pretty natural progression of an application. Build the prototype and then tweak it through different phases to expand it’s capability.
While building these demos I had to refactor a bunch of things through the progression of the changes. This again to me is very natural. I find that if I start by simply solving the problem the pieces of the system that need to be refactored and extend become crystal clear in the end. Where as if I try to architect the application for every possible future change I tend to end up with an over architected system. Again keep it simple and refactor later.
I think we all know caching is an essential part of almost every web based application. That was the gist of the first part of the presentation. The last part showed some of the pros and cons of the Microsoft Sync Framework. There is some great documentation around this framework here. If you are new to the sync framework I suggest taking the time to read through a couple of these docs to understand how it works. My slides also contain some of information regarding the sync framework. My personal take on it is it is pretty easy to get started with. The issue I have is what happens when you get errors. Synchronizing two data sources is by nature a difficult process and errors will occur. Using this framework is kind of like using a black box. You sometimes want more control than you are going to get. Bottom line if I was looking to sync multiple data sources I would start with this framework. It is a no brainer to get started with and provides a ton a cool functionality. However, if I started having issues I might revert back to my old ways of just building a sync tool for my own need.
I had a great time presenting and putting together this talk. Below is a link to the slides and the completed solution if you are interested.
Rocky Mountain Tech Trifecta - .NET Beginner’s Track
Posted On Monday, March 01, 2010 at at Monday, March 01, 2010 by Ben HLast Saturday was the 2nd annual Rocky Mountain Tech Trifecta. Just like last year it was a great event. For a list of the speakers and topics go to the site for the event here. Julie Yack organized the event this year and it was awesome once again. Kathleen Dollard put together a beginners track and Jeff Certain, Drew Devault and myself where lucky enough to do the presentations. Jeff did a great job going over the best practices related to architecting an application. His main point was that coding furiously with no design in a bad idea. Instead use UML and other technologies to design the architecture first. It might take a bit longer at the start, but it will save time in refactoring and backtracking later.
The topic of my talk was beginning ASP.NET. It is almost impossible to decide on how to talk about ASP.NET in a 75 minute session. Most of the audience was familiar with HTML and JavaScript concepts. So, I decided to focus on how to utilize ASP.NET to help extend the concepts and languages you already know. I talked about code behind and how it automatically wired up events and some state management. We also talked a bit about master pages and themes. At the end I showed a bit more advanced stuff like AJAX and the AJAX Control Toolkit to display some of the power of ASP.NET. After my session I created a basic media player to fit in the application using Silverlight. Drew also created a media player that worked outside the browser and was not integrated into ASP.NET.
In the end I think it was a great day. Below are the slides and demos from my session. The demos do not include the final version of Jeff’s code or Drew’s Media player. They are my web application and the architecture as it was when I started. Thanks to those that attended and let me know if you have any questions.
Microsoft AJAX CDN (Plus jQuery)
Posted On Thursday, September 17, 2009 at at Thursday, September 17, 2009 by Ben HI just saw this today and it looks cool. Let me give you the high level overview and then you can go to Scott Guthrie’s detailed post. A while back I started to use jQuery to help with all my JavaScript coding. I really like it. Even if you don’t use the really advanced features it is a huge help just selecting and operating on elements client side. If you want some more info on jQuery just search the web and you will find tons of good documentation out there on the blogosphere.
So, one of the hassles with jQuery is that you have to include the libraries in script tags on your page in order to use them. This is not a huge deal, but it can be a pain if you want to use the libraries in multiple projects and maintain one central version of the jQuery libraries. That is were the Microsoft AJAX CDN comes into play. It is a Microsoft hosted version of both the AJAX libraries and the jQuery libraries. So, you can point to a Microsoft URL and bring in these libraries. This will find the location that is closest to your user and bring down the libraries from the cache on that server. Should be a much faster solution for everyone. Check out the details on Scott Guthrie’s blog here.
More on C# Dynamic Programming
Posted On Tuesday, July 14, 2009 at at Tuesday, July 14, 2009 by Ben HJust wanted to share this article on C# dynamic programming from DevFusion. It explains the difference between anonymous types and dynamic programming. Don’t get too caught up on the opinions of the author Mike Jones. Whether you agree with him or not this is a great explanation of using the dynamic keyword in C#.
Enjoy!
Silverlight 3 Jumpstart Book
Posted On Monday, July 13, 2009 at at Monday, July 13, 2009 by Ben HJust wanted to let everyone know that my employers and friends Dave and Julie Yack have done it again. They have published another book. This one is a 200 page jumpstart to the recently released Silverlight 3. I helped do some tech editing of the book the last couple weeks and I can say it is really good for getting started with Silverlight. Read more about the release on Julie’s blog here. You can also get some more details about the book at the books website http://silverlightjumpstart.com/Default.aspx or on Amazon.
Happy reading….
Dynamic Programming with C# 4.0
Posted On Friday, July 10, 2009 at at Friday, July 10, 2009 by Ben HYesterday Joe Mayo talked to the South Colorado .NET User Group about the new features of C# 4.0. The most interesting change is the addition of the “dynamic” datatype. This datatype allows developers to declare a variable that is not actually typed until runtime. This is different than the “var” keyword which actually types the variable using the return value from the right side of the equals sign. Let’s take a look at a quick example:
1: private void Main()
2: {
3: Dog thisDog = new Dog();
4: AnimalSpeak(thisDog);
5:
6: Cat thisCat = new Cat();
7: AnimalSpeak(thisCat);
8:
9: Frog thisFrog = new Frog();
10: AnimalSpeak(thisFrog);
11:
12: Bird thisBird = new Bird();
13: AnimalSpeak(thisBird);
14: }
15:
16: private void AnimalSpeak(dynamic Animal)
17: {
18: Animal.Speak();
19: }
The dynamic datatype is very powerful, especially when it comes to dealing with COM interop. It also will aid test driven development (TDD) by allowing developers to write unit tests without worrying about the actual implementation of the objects they are testing until after the tests are written. Again very powerful.
However, with great power comes great responsibility.
I feel that there are a couple issues with dynamic programming. It seams we have come full circle with .NET. I remember when .NET first came out and everyone was promoting type safety as a huge benefit. Now with dynamic programming we can bypass type safety and just wing it. One problem I have with this is that the errors are runtime errors. So, for example lets say we are accessing a COM object dynamically. In our dev environment we have a the new version of the COM object that supports some new functionality we are using. If we move the application to test or prod and forget to upgrade the COM object, the application may start and run without a problem but will bomb at runtime whenever a user tries to access that one section of our app that is using the new functionality. To me this puts too much emphasis on QA testing when the application still compiles but may bomb at runtime.
Another disadvantage of dynamic programming is the lack of intellisense. If you declare the variable as dynamic then intellisense will not work. Again, this opens up the issue of misspelling some of the properties or methods that will not get caught until runtime. I really like intellisense so I will not use dynamic unless it is the last option.
My fear is that many developers will get lazy with dynamic programming and use it in the wrong situations. Using it as a replacement for using interfaces or good old fashion reflection may cause more runtime issues that slip past testing and hit production users. Some developers may see that as job security. I see it as a sure fire way to lose customers.
Extending the ADO.NET Entity Framework
Posted On Tuesday, March 24, 2009 at at Tuesday, March 24, 2009 by Ben HLast night I gave a presentation on the ADO.NET Entity Framework at the Denver Visual Studio User Group. It was a great discussion and the questions from the audience helped me tell the story I was trying to tell. That story is that the Entity Framework is a great data access tool. It’s extendable and in turn flexible enough to meet the needs of the small point solutions to the enterprise caliber solutions. What I really like about it is the ability to start simple. Let’s get a solution up and running and then go back and extend\refactor certain areas to improve the architecture and\or performance. That’s not saying we shouldn’t do some design work up front, but let’s start by getting a solid solution built and then add on features and improvements in the future.
Sometimes I think architects focus too much on creating the perfect architecture instead of creating a flexible one. The solution just needs to work given the current requirements. Beyond that, it also needs to be flexible so it can change when new requirements and features get defined. EF lends itself very well to flexibility and extensibility.
The zip file below contains the final solution. That solution has all the extensions we did to the context as well as the entities in the context. It also includes a basis for a validation framework. The validation framework could use some tweeks to make it better. I leave that to you and your creative minds.
The zip file also contains a SQL script that will quickly and easily create the sample DB for you. Both the schema and the data. All you need to do is change the location of the DB file (.mdf) and the log file (.ldf) in order to run the script. Once you get the DB created you will have to change the server name in the connection string located in the web.config. After that everything should run great. Here is the zip:
I hope that you enjoyed the talk. If you would like the step by step guide to creating the initial model and setting up the inheritance please visit Rob Bagby’s blog of EF.
XRM Taking Off
Posted On Wednesday, March 18, 2009 at at Wednesday, March 18, 2009 by Ben HAt Colorado Technology Consultants (CTC) we do quite a bit of work with MS Dynamics CRM. One of things Julie and David Yack are big on is the concept of XRM. If you are not familiar with it, it extends the Customer Relationship Management side of MS CRM to any kind of Line of Business application. MS CRM is a very customizable product and can be extended to be used for many non CRM type applications.
That being said CTC is kind of the XRM gurus right now. Dave’s book on the subject is actually being used on MSDN in some places as reference material. You can purchase the entire book, including a usable .NET framework that comes ready to use with the book, here. Julie is starting up an XRM Virtual User Group that will consist of monthly Live Meetings related to the XRM space. The user group site is actually built on top of MS CRM Live and hosted on Azure in the cloud. Please visit the site to check out an impressive display of XRM and to register with the group.
XRM is becoming one of the hot Dynamic products. So, you next step is to attend the XRM Virtual User Group meetings and learn how to use XRM to solve your software needs.
LINQ : The DBA vs the Developer
Posted On Wednesday, March 04, 2009 at at Wednesday, March 04, 2009 by Ben HAt the Rocky Mountain Tech-Trifecta Eric and Johnson and I did a session related to this topic. David Yack wanted us to do something that he could use to promote the session during his keynote. So, we went over the top and created this video. Enjoy!
Rocky Mountain Tech-Trifecta : A Week Later
Posted On Monday, March 02, 2009 at at Monday, March 02, 2009 by Ben HIt’s been a week since the Rocky Mountain Tech-Trifecta and I’m still getting caught up and processing everything that I learned there. I presented a couple sessions and I also attended a bunch of sessions. Fun stuff. I think the event was huge success. Thanks to my employer Colorado Technology Consultants, Inc. for letting me spend so much time volunteering for the event. A special shout out to Julie Yack for all the time and effort she put in. Please visit her blog at http://julieyack.blogs.com for a couple cool pictures from the event as well as some fun facts.
As stated above, I did two sessions at the Tri-Fecta. The code and slides are below. Please email me any questions or comments to benh@coloradotc.com. You can also catch up with me on Twitter. My handle is benhnet.
Thanks again to everyone that volunteered, organized and attended.
Updated 3/3/2009: I forgot one of the projects being referenced in the Design Patterns for UX. I have updated the link so please download the project again and it should work.
Silverlight is the Future?
Posted On Friday, February 06, 2009 at at Friday, February 06, 2009 by Ben HJust wanted to pass on this link to a post from Rocky Lhotka. He describes why many of his new projects are starting to favor Silverlight over ASP.NET and Win Forms. It’s a quick read and gets you thinking. Check it out:
