Scott Hanselman

Tiny Happy Features #2 - ASP.NET Web API in Visual Studio 2012

August 11, 2012 Comment on this post [15] Posted in ASP.NET | ASP.NET Web API | Javascript | Open Source | Tiny Happy Features | VS2012
Sponsored By

REST, POX, and WCF compared to RESTtafarians, a guy with a bag on his head and Darth Vader

(UPDATE: See other Tiny Happy Features)

At some point soon lots of people are going to start writing these epic blog posts about Visual Studio 2012. They will include LOTS of screenshots (some good and some bad), some small code samples and minimal context. I can't speak for other teams; I can only talk about what we worked on. The <AngleBrackets/> folks in Azure Platform and Tools (ASP.NET, IIS, WCF, EF, Azure much and more) have been putting a lot of work into what I sometimes call "Death by a Thousand Tiny Cuts." It's the little irritants that are as frustrating (or more so) as the big missing features.

Rather than a giant super post (although I'll do that at some point) I thought I'd showcase some Tiny Happy Features that the team worked on just because it made life better. Some are large some are small, but all are tiny happy features.

There's Enterprise Web Services that use SOAP and WS-*.* and they are great for many transactional or complex scenarios. Then there are lighter weight RESTful web services or "Web APIs" that use JSON, XML and respect all of the goodness and stability that is the HTTP specification.

WCF is alive and well and ASP.NET is alive and well and there are reasons to use each technology. As this article says very well, "The world of SOAP and the world of HTTP services are very different. SOAP allows us to place all the knowledge required by our service in the message itself" vs. "you can use [Web APIs] to create HTTP services that only use the standard HTTP concepts (URIs and verbs), and to to create services that use more advanced HTTP features – request/response headers, hypermedia concepts etc."

Kelly Sommers wrote what I consider the best explanation of REST out there in "Clarifying REST." Whether you want to write RESTful resource-focused HTTP services or just POX or POJ (Plain Old XML or Plain Old JSON) services, you can do both with ASP.NET Web API. It's all part of the ASP.NET open source web stack.

Rick Strahl says that ASP.NET Web API is different than other frameworks because "it was built from the ground up around the HTTP protocol and its messaging semantics. Unlike WCF REST or ASP.NET AJAX with ASMX, it’s a brand new platform rather than bolted on technology that is supposed to work in the context of an existing framework. The strength of the new ASP.NET Web API is that it combines the best features of the platforms that came before it, to provide a comprehensive and very usable HTTP platform."

I encourage you to check out Rick's excellent analysis. Here's the features of ASP.NET Web API Rick likes:

  • Strong Support for URL Routing to produce clean URLs using familiar MVC style routing semantics
  • Content Negotiation based on Accept headers for request and response serialization
  • Support for a host of supported output formats including JSON, XML, ATOM
  • Strong default support for REST semantics but they are optional
  • Easily extensible Formatter support to add new input/output types
  • Deep support for more advanced HTTP features via HttpResponseMessage and HttpRequestMessage
    classes and strongly typed Enums to describe many HTTP operations
  • Convention based design that drives you into doing the right thing for HTTP Services
  • Very extensible, based on MVC like extensibility model of Formatters and Filters
  • Self-hostable in non-Web applications 
  • Testable using testing concepts similar to MVC

ASP.NET Web API

There's some lovely new samples at this Git Repository. Just "git clone https://git01.codeplex.com/aspnet" or download the zip. You can also familiarize yourself with ASP.NET and the Web API at the new http://www.asp.net/webapi site.

By the way, I'll be publishing a bunch (13!) of new videos showcasing Web API plus a lot of other Tiny Happy Features next week on the 15th. Each video will only be 5 minutes long and will be a great way to get up to speed on all the new tech over lunch.

To use the samples, follow the instructions on Henrik's blog post announcing them.

Here's one nice little sample that will perhaps cause you to rethink what you can accomplish with ASP.NET web technologies. It's a console application that hosts ASP.NET Web API. To be clear, there's no IIS involved.

In the setup instructions we have to register a port and user with HTTP.sys so the Operating System knows it's OK for send our little self-hosted app HTTP traffic. If you're familiar with WCF you may have done this before.

Here's the server. It's a Console App, minus error handling for clarity.

class Program
{
static readonly Uri _baseAddress = new Uri("http://localhost:50231/");

static void Main(string[] args)
{
// Set up server configuration
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress);

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

// Create server
var server = new HttpSelfHostServer(config);

// Start listening
server.OpenAsync().Wait();
Console.WriteLine("Listening on " + _baseAddress + " Hit ENTER to exit...");
Console.ReadLine();
server.CloseAsync().Wait();
}
}

That code sets up a route, starts the self-hosting process, and waits. Here's a controller at http://localhost:50231/Contact that will ECHO whatever contact you HTTP POST to it as content-type JSON. Note that Contact is a C# type as a parameter to Post().

public class ContactController : ApiController
{
public Contact Post(Contact contact)
{
return contact;
}
}

If I want, I can do a POST from another command line using curl and send some JSON into the server.

POSTing JSON from CURL to ASP.NET Web API

Here's the actual command line. The JSON is echo'ed back.

C:\>curl -X POST -H "Content-Type: application/json" -d "{ Name: 'Scott Guthrie', Age: 67}" http://localhost:50231/api/Contact

That's from the command line but I can also use System.Net.Http.HttpClient to make a call from .NET if I like:

HttpClient client = new HttpClient();

Contact contact = new Contact {
Name = "Henrik",
Age = 100
};

// Post contact
Uri address = new Uri(_baseAddress, "/api/contact");
HttpResponseMessage response = await client.PostAsJsonAsync(address.ToString(), contact);

// Check that response was successful or throw exception
response.EnsureSuccessStatusCode();

// Read result as Contact
Contact result = await response.Content.ReadAsAsync<Contact>();

Console.WriteLine("Result: Name: {0} Age: {1}", result.Name, result.Age);

See how the C# Contact object moves back and forth between the JSON world and C# world easily? That's the JSON.NET open source library making that happen.

JSON and JavaScript is really dynamic, though, and often it's a hassle to try to "deserialize" really dynamic JSON objects into strongly-typed .NET structures. JSON.NET and ASP.NET Web API's model binding offer a happy medium - a middle ground - called JToken.

public class ContactController : ApiController
{
public JToken Post(JToken contact)
{
return contact;
}
}

Check out the watch window as the JSON comes in:

Using JToken to catch a JSON payload

Using JToken gives me a dynamic container but also a DOM-like navigation model. But if that's not dynamic enough for me, why can't my method's parameter just take a "dynamic."

C# is statically typed, sure, but that doesn't mean I can't statically type something dynamic. ;)

Again, note the watch window.

Using dynamic to catch JSON post payloads

See how JSON is moving around the system without any impedance mismatch. The power of C# isn't slowing down the flexibility of JavaScript and JSON.

It makes me happy when things work as they should.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Tiny Happy Features #1 - T4 Template Debugging in Visual Studio 2012

August 10, 2012 Comment on this post [67] Posted in Tiny Happy Features | VS2012
Sponsored By

(UPDATE: See other Tiny Happy Features)

At some point soon lots of people are going to start writing these epic blog posts about Visual Studio 2012. They will include LOTS of screenshots (some good and some bad), some small code samples and minimal context. I can't speak for other teams; I can only talk about what we worked on. The <AngleBrackets/> folks in Azure Platform and Tools (ASP.NET, IIS, WCF, EF, Azure much and more) have been putting a lot of work into what I sometimes call "Death by a Thousand Tiny Cuts." It's the little irritants that are as frustrating (or more so) as the big missing features.

Rather than a giant super post (although I'll do that at some point, I thought I'd showcase some Tiny Happy Features* that I or another passionate member of the team worked on just because it made life better. Some of these features might not be obvious or easily noticed. Actually it'll be better that you notice the absence of a tiny cut than the inclusion of a new shiny drag and drop toy. It's all part of a larger goal to make the experience of making Web Applications in Visual Studio enjoyable.

T4 Template Debugging

I've long said that T4 is one of the best kept "secret" features of Visual Studio. T4 (the Text Template Transformation Toolkit) doesn't have a whole pile of people working on it, but developers like Gareth Jones really care about it and we really like it in the Web team. Lots of our projects use and have used T4 to generate code. In Visual Studio 2012 Gareth worked with Tim Malone so Tim could make a T4 debugger! Be sure to check out the T4 Team Blog.

Sure, T4 fans have always wanted built-in T4 Syntax Highlighting, but in this case, there were already a great T4 SyntaxHighlighting solution or three good options and there was no FREE debugger. Until now.

T4 in Visual Studio 2012 has Debugging!

You can now right-click on a T4 templates and Debug T4 template. I've got a breakpoint there on a line within the T4. My own T4 is syntax highlighted with the Tangible Editor.

There's the Debug T4 Template menu

When I start debugging I can set breakpoints and watches and step through just like any other language.

Debugging a T4 template

Notice here in the Immediate Window I'm looking at this.GenerationEnvironment. I can see the generation AS it happens in this variable.

Viewing T4 output

If you like T4 and you want them to know, leave a comment below and I'll use your comments to bludgeon convince management that we should continue to invest.

* Ya, some features aren't Tiny, but some are refinements and I like saying Tiny Happy Features. Sue me.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Adding AirPlay to a Receiver without an Apple TV - Raspbmc and the Raspberry Pi

August 07, 2012 Comment on this post [45] Posted in Hardware | Open Source
Sponsored By

My Onkyo Receiver now supports AirPlay with a little help from Raspberry PiI'm continually amazed at the usefulness of a small but complete $35 computer that is the size of a deck of cards. I'm coming up with all sorts of uses for the three Raspberry Pi devices in our house. I talk about our experiences in Top 10 Raspberry Pi Myths and Truths, but right now I want to share what I did with a Raspberry Pi over lunch today.

I've got a lot of video on my iPad and iPhone and I've always wanted to be able to use "AirPlay." Basically AirPlay is a simple way to "throw" video or music at a device. I'm always plugging my iPad into the TV with an HDMI cable.

At some point in the future more receivers and TVs will include AirPlay built-in. I could buy an Apple TV for $99 as it includes AirPlay. However, I don't want AirPlay $99-dollar-bad. Maybe $35-dollar-bad. Since a Raspberry Pi with Ethernet is $35, ahem. It's on.

Back during the original Xbox days when folks were rooting their Xboxen left and right, the most useful thing you could install on it was XBMC. It turned your Xbox into a complete, flexible and modular Media Center. Fast-forward almost 10 years to today and XBMC is an ecosystem on its own, long separated from the Xbox. You can get XBMC for Android, even! There's XBMCs for Mac, Linux, Windows, iOS and more. Even Apple TVs themselves can be rooted and run XBMC.

The most promising new entry into the XBMC space is Raspbmc. Yes, a complete XBMC install for a the tiny Raspberry Pi. The most amazing part is the clean Windows installer for Raspbmc in my opinion. You run it on your Windows machine with an SD card plugged in and the installer does all the work of downloading, formatting and prepping your SD Card to run on the Raspberry PI. The whole operation took a few minutes. Then I put the SD Card in the Pi and waited maybe 15 and then I was looking at the boot screen. Very painless.

Raspbmc is full featured and virtually includes all the XBMC functionality - which is an amazing feat given the limitations of the hardware. The most recent Raspbmc Release Candidate 4 added a lot of new improvements that made this the perfect time to jump in.

I just want AirPlay, so note that while there's WAY WAY more in Raspbmc and XBMC than this ONE feature (and technically I could probably make a very stripped down distro that included only this one feature if I wanted to be a purist) I'm only interested in AirPlay. I want AirPlay with a high WAF (Wife Acceptance Factor.) That means she needs to press a button on the Receiver, hit play on her iPad and it needs to Just Work©.

After installing Raspbmc I used a USB keyboard to go into the System > Network menu and checked "Allow XBMC to receive AirPlay content."

If you want to use your iOS or Android device as a remote control to control your Raspbmc you can ditch the keyboard after initial setup. There are iOS and Android versions of the Official XBMC Remote. Just make sure you've enabled your Raspbmc in System > Network to be controlled by a Remote application. If you are feeling extra snazzy you can even get a real remote control and use one of those via USB IR. Perhaps you have a remote control lying around from an older Xbox or ATI Video Card like I did.

After setup, I needed to setup video, power, and networking. Here's what I ended up with.

  • Video - Just plugged a 3 foot HDMI cable from the Raspberry Pi directly into an unused HDMI on my Onkyo Receiver. I used the "PC" input as that would make sense to my wife, then I used the Onkyo setup to make the onscreen label say "AirPlay."
  • Power - I was going to pull a long USB cable to the Pi when I realized that I have a lot of devices (PS3, Xbox, Tivo, etc) that already have USB. I used a 2 foot USB cable and just leached power off the Tivo's built in USB! If your cable box's USB can do 500 mA you can likely do the same! Amazing.
  • Ethernet - I wired the whole house many years ago and actually did a 5 Part Series on my blog about wiring your house for Ethernet. Because I put in a small wiring closet I could adjust ports as I like. I changed an RJ-45 phone port into an Ethernet port at the closet, labeled it, and plugged in. If you don't have wired ethernet near your TV, you can either put in a Hub, a Wireless Ethernet Bridge or get a USB Wireless Adapter for the Raspberry Pi.

My Raspbmc hidden behind the TVMy iOS device says it's throwing video at the Raspbmc

Here's my little Pi behind the TV, and my iPad saying it's playing video on the "XBMC raspbmc."

Using my iPad as a Raspbmc XBMC remote controlWatching "Justified" on my HDTV via AirPlay on an iPad talking to a Raspbmc

Here's me using an iPad as a remote (although since I'm just throwing video at it, I won't need the remote except for configuration, and I'll SSH into the Pi to do system updates) and finally watching 1080p video on my TV, at last.

Because any video app within the iOS ecosystem gets AirPlay support this also means I can throw YouTube videos or whatever HTML5 video I find up on the TV as well. All for $35 and a lunch hour. Such fun!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Productivity vs. Guilt and Self-Loathing

August 02, 2012 Comment on this post [56] Posted in Productivity
Sponsored By

Pomodoro TimerThe guilt can be crushing. Everyone seems to be getting stuff done, except you. You drag yourself out of bed, go to work, start checking email, start deleting, then poof, it's noon. Lunch, perhaps at your desk, then some awful meetings, then it's 3pm. You start REALLY working, then you start feeling decent but then it's 5pm or 6pm. It's time to start getting home. You feel like you didn't really get a lot done today so you'll work late - just tonight - to catch up.

The not getting stuff done sucks, but the guilt and self-loathing is where you really get into trouble. You likely don't say it out loud, but you think it. You might not tell your spouse, but you think it. I suck. Man, I suck. I'm just not getting a damn thing done.

Sometimes I feel like this. I've talked about feeling like a Phony before. Folks say that Einstein felt like a phony and that was motivating. I'll let you know if that's true next time I revolutionize science, but for now, I still get down on my self for not getting stuff done.

I don't have the answers, nor do I have a proper "system." My system is always changing, and I've decided that THAT is the system. I adapt. If it's not working, I'll change it. I encourage you do to the same.

At WebStock I did a talk that I'm mostly proud of called "It's not what you read, it's what you ignore" and I like to point people to this video as a decent place to start when thinking about productivity. My system is a combination of thinking from Stephen Covey, David Allen, and J.D. Meier's Getting Results. All of these systems are highly recommended and I've pulled much of what I know from them and then synthesized my own ideas.

Here's what I do when I'm feeling non-productive and guilty. Again, watch the video for more details, it's not selling anything and I go into more detail. I need to just write a small book on this..

Stop Checking Email in the Morning

The quickest way to time travel into the afternoon is to check email in the morning. Time-box your email. Set aside an hour for email, and do that hour. Try to get work done before lunch in order to set yourself up for success and feel better about your day. Getting something awesome done before lunch is a great way to stop guilt. Email is the thing that we turn to because it FEELS like we're getting work done but unless it's truly focused project email, it's usually just pushing bits around.

Don't make Guilt Piles

You know that pile of books that you'll never read that sitting next to the computer you are reading this blog post on? That pile is too tall. You'll never read all those. That pile of books is a monolith of guilt. It's a monument of sadness and failure. Pick the book or two that you can read this week and put the rest away.

If it's important, Schedule It.

If you really want to read a book, catch up on HTML5, watch a video on Python, or learn to cook, schedule it. You schedule an hour for a  meeting at work and you show up, why not schedule an hour in your work day to read. If you boss asks you what you're doing, you're doing technical research on a project. You're sharpening the saw. Schedule time for you rather than trying to find time for yourself within a schedule you've setup to help everyone else. Make time for yourself as well as relationships.

Measure, then Cut

You can't decide what to stop doing unless you know what you're doing. I recommend Rescue Time as a great lightweight way to measure what you are up to, and when you review your numbers you can hold yourself accountable. If you know where you spend your time you can decide what your time is worth. We thought that hiring a guy to cut the lawn was too expensive, but when we realized that it was totally stressing me out, we measured, then cut and we're all happier. Are there meetings you can NOT go to? Are there projects you are unable to do to the best of your ability? Are you over-committed? Hope is not a strategy. Make appropriate cuts - saying No is your most powerful tool.

Do smaller things

Paint House is too big and too stressful for a single item on your TODO list. Break it up like Select Color, find Paint Store, Buy Paint, etc. Focus on the Rule of Three. Three Successes for the day, for the week, for the month, for the year. Have a Vision for your week on Monday and Reflect on that Vision on Friday. Find a small thing that you can do in a small amount of time and do it. Accomplish something small, anything and that will buoy you forward to the next thing.

Let go of Psychic Weight

List out all the things that weigh you down and find out how to let them go. I used to  get stressed by the shows I wasn't watching or the books I wasn't reading or the blogs I couldn't keep up with. Seemed like everyone else was able to keep up but me. But I let it go. I don't argue on Twitter and I don't try to read every blog post. I have never watched Lost and I don't worry about watching the news. Doing less - and more of it - is the only way to scale.

Schedule Work Sprints

It's hard to focus all day. You don't have to and stop being mad at yourself for not being able to. Rather than beating yourself up, trying focusing for just 25 minutes. Just focus on one thing for 25 minutes. When you're done, you'll get a 5 minute break to do whatever you want. Sprint. Run your day like a mini-Scrum. Try the Pomodoro Technique. It's free and easy and it is a great tool to increase your focus.

Stop Beating Yourself Up

Don't feel so bad about not getting enough stuff done. Eat well, sleep well, say NO more often and try your best. Remember you can always make a small change in your system and try again tomorrow.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Top 10 Raspberry Pi Myths and Truths

July 30, 2012 Comment on this post [64] Posted in Hardware | Open Source
Sponsored By

Two little boys on a Raspberry PIFirst, let me go on the record as saying I'm a huge Raspberry Pi fan. If you haven't heard already, a Raspberry Pi is a small but complete $35 computer (or $25 without Ethernet). It's a complete 700 MHz ARM CPU with a GPU and 256MB of RAM. It has two USB ports, Ethernet, Audio as well as video out over RCA (Composite) or HDMI at 1080p. It uses an SD Card for its hard drive and takes 5V at >700mA of power over a mini USB. You can order one from Farnell online and there is a waiting period.

All that said, I wanted to talk about some misconceptions one might have about these amazing little devices.

Raspberry Pi Myths (Debunked)

  • It runs Windows 8 - And that's OK. It's a 700MHz Broadcom BCM2835 ARM11. It's a little underpowered to run Windows (not to mentioned totally unsupported) but it can run a lot of different stripped down Linux distributions like Debian or Fedora. The current recommended distro is Raspian and you can download a Raspbian image directly from Raspberry PI and write the image to an SD Card using Win32DiskImager.
  • It's a great email and browsing appliance - It's too slow today for anything but the most basic of browsing. The current browser available is Midori but it slows down with any complex JavaScript or sufficiently complex HTML DOM. Honestly, it's not a laptop or living room PC and it's not trying to be.
  • It's a breeze to setup - Ok, it IS easy IF everything works. It's actually easy until it's totally not easy and then it's almost always a hardware or power problem. What do I mean by this? Well, the idea with the Raspberry PI is that it uses parts and equipment you likely already have. It doesn't even come with a power supply! They figure - rightly so, I think - that you already have a 5V micro-USB adapter laying around your house so why spend money on another one? Good thinking, except a Pi needs power at at LEAST a 5V and 700mA. The former is easy, but the latter is tricky. I had literally 10 USB adapters and only two could do over 500mA. One did 700mA and the other a full 1A. I am not saying panic, but I am saying that the forums are filled with questions and concerns over flaky behavior. I even had to hook up a multimeter and check the voltage over their two (thoughtfully located) voltage test points. I would say that if you have and know how to use a multimeter than you should totally get a Raspberry PI. But if you are a teacher who has the idea that you'll fill a classroom with fast, cheap, reliable and easy to manage PCs, the Pi isn't the answer. It's cheap and fun, but it's not quite plug and play yet. One other point of note, NONE of my wireless keyboards or mice worked, and this is being talked about on the forums as well. The PI can handle only 100mA of draw on each of the two USB ports (get it? ~500mA for the PI and 100mA each for the two USB ports) and some devices pull more than 100mA. Some keyboards have little USB hubs of their own, like the Apple Wired Keyboard and they can't be driven by the PI alone. Expect to need a USB hub for any external drives or devices. I tried 3 different hubs before I had success with the Belkin USB 2.0 7 Port Hub. I also ended up getting a cheap Mini USB wired keyboard and cheap USB wired mouse. The Pi may be $35 but you'll spend another $75 if your parts on-hand don't work. Moral of this story? check all your parts against the Raspberry Pi Verified Peripherals list.

Raspberry Pi Truths

  • Raspberry PI in a LEGO CaseIt supports 1080p video - Yes, it's good a very nice little GPU on it, and hopefully future versions of the little Linux distros will take better use of it. For example, offloading some of the X-Windows work onto the GPU would make it feel a little snappier.
  • It's easy to overclock - It's modest, but it's overclockable. I took it from 700Mhz to 900Mhz just by running
    sudo nano /boot/config.txt
    and changing arm_freq=700 to arm_freq=900 as well as adding sdram_freq=500. If you mess it up, just edit the file on the SD Card on another computer. Be aware you can also "overvoltage" but you'll void the warranty immediately.
  • It's a complete Linux machine - It really is. You don't need to use it for anything they expect you to use it for. If you want to install Fedora Remix and make it a little NAS with an attached USB hard drive, feel free. You can make it a tiny web server or use it as a little VNC client while you VNC into your work at 1080p from your 42" HDTV.
  • It's a Media Center with AirPlay - You can run an XBMC fork called RaspBMC that puts together a Debian Linux distro with most of the power of the well-known and open source XMBC media center system. Most importantly, it has AirPLay support so a RaspBMC-running Raspberry PI can be the easiest and cheapest way to throw wireless video on your giant TV from your iPhone or iPad. It doesn't do MPEG2 but it does play MPEG4 and h.264.
  • It is great for learning to code - It not only runs Python but it will run anything that a tiny ARM machine can run, even Mono and .NET! The Raspian default distro of Linux includes Python 2 and Python 3 IDEs and is easy to script.
  • It's a fun educational PC for little kids - With the addition of the GCompris software suite you've got dozens of games and activities that cover everything from math to reading, science to geography.
  • It's a gaming machine - I can say it runs MAME and SCUMMVM pretty darn well and if you check out the forums you'llf find a very interested community with ambitious plans.

The Raspberry PI is a tiny little joy. The boys are having great fun with it and frankly I'm happy that it's hard. I don't want them using an Xbox or some "easy" technology. They are using espeak from the command line to get the computer to talk to them and are learning how to read. As they get older I hope we'll start trying out some of the hundreds of other uses for these tiny devices.

We spent all day today building a LEGO case then found a clever design online as well. The little Pi community is having such fun and I think it's because of the device's constraints. It's small, it's cheap, but it's got such potential. If you are aware of it's limitations and are armed with a little patience, you'll have a blast introducing your kids to the Raspberry PI.

Related Links

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.