Scott Hanselman

Your words are wasted

August 19, 2012 Comment on this post [77] Posted in Blogging
Sponsored By

Photo by Steven Warburnton - Creative CommonsIt needs to be said again, perhaps this time more strongly. Your Blog is The Engine of Community. Dammit.

Blog More

You are not blogging enough. You are pouring your words into increasingly closed and often walled gardens. You are giving control - and sometimes ownership - of your content to social media companies that will SURELY fail. These companies are profoundly overvalued, don't care about permalinks, don't make your content portable, and have terms of service that are so complex and obtuse that there are entire websites dedicate to explaining them.

I've presented at a number of "town hall" style meetings and often presented (for YEARS now) talks on "Social Media for Developers" where I've said "Every developer should have a blog." Put yourself out there and make it findable. And still you tweet giving all your life's precious remaining keystrokes to a company and a service that doesn't love or care about you - to a service that can't even find a tweet you wrote a month ago.

Where are people writing?

My friend Jon Udell is asking "Where have all the bloggers gone?" and watched both he and his wife's "Blog's Heartbeat" reduce to an almost comatose level. Tim Bray notices this pattern as well.

Now more companies and consortiums are popping up claiming to be "reimagining writing" or "rethinking publishing" or take the concept of a simple "draft post" and, according to Svbtle "[allow] ideas to start abstractly, to ruminate for a while, and then, as I work on them, to become more and more concrete until they’re ready to be published as articles." So, reinventing drafts? Regardless, Svbtle and it's new design has since attracted a who's who of Silicon Valley thinkers and is now on its way to becoming the digirati's Economist, except with bylines.

Here's the thing though, it's still RSS. It's just a blog.

Own Your Words

I've been blogging here for over 10 years. On my domain, running my software pushing out HTML when you visit the site on any device and RSS or ATOM when you look at it with Google Reader (which 97% of you do.) I control this domain, this software and this content. The feed is full content and the space is mine. Tim nails it so I'll make this super clear. If you decide to use a service where you don't control your content, you're renting.

Own your space on the Web, and pay for it. Extra effort, but otherwise you’re a sharecropper. - Tim Bray

In a time where we are all gnashing our teeth about Twitter's API changes that may lock out many 3rd party developers, Google Plus's lack of content portability or lack of respect for the permalink, as well as the rise of country club social networks pay-for social networks like http://app.net we find ourselves asking questions like:

  • Why doesn't someone make a free or cheap social network for the people?
  • Why can't I control my content?
  • Why can't I export everything I've written?
  • Who owns what I type?
  • Why isn't there an open API for my content?
  • Why can't I search posts over a month old?
  • Why can't I have this or that username?
  • Why am I not verified?

All these questions are asked about social networks we don't control and of companies who don't have our best interests at heart. We are asking these questions in 2012? Read those bullets again. These were solved problems in 1999.

You want control? Buy a domain and blog there.


Sponsored Ad: DevExpress Webinar: ROI for 3rd party tools. Is it more cost effective to build or purchase developer tools? In this webinar Jeffrey Hammond, Forrester Research, will walk you through an ROI calculation model and help you consider how you might evaluate your future tools investments. Register Today!

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

Installing HTTPIE (HTTP for Humans) on Windows - Great for ASP.NET Web API and RESTful JSON services

August 18, 2012 Comment on this post [38] Posted in ASP.NET | Open Source | Web Services
Sponsored By

Recently in on a post on the RESTful ASP.NET Web API framework I used curl to post JSON to an HTTP endpoint:

curl -X POST -H "Content-Type: application/json" -d "{ Name: 'Scott Guthrie', Age: 67}"

Curl is lovely and should be in your c:\utils folder and more importantly in your PATH. I have a UTILS folder in my Dropbox and in the PATH on all my machines. Whenever I find a useful no-install utility I put it in there.

Curl is great but it's still confusing enough to me that I don't use it enough. It's slightly obscure command-line switches are keeping me from using it on a regular basis.

For HTTP work there is a better utility called HTTPie at http://httpie.org. (It has nothing to do with IE (Internet Explorer)). For Mac and Linux folks who use Python all the time, it's easy to install, you just

pip install -U httpie

For Windows folks who don't use Python it's a little harder to install, but it's worth it and I recommend you take a moment and set it up. You'll wonder how you lived without it.

Installation of HTTPIE

First, go download Python. I got the x86 version of Python 3.2.3 cause it was the latest and I didn't think I needed the x64 one.

I then added c:\python32 and c:\python32\scripts to my path. I do this by hitting WinKey+Break, then Advanced, then Environment.

Add Python and Python/Scripts to your PATH

Second, download CURL. Yes, I realize the irony, but it's still a VERY useful tool. I downloaded the 7.27 binary SSL Win32 version, unblocked it, unzipped it and put it in C:\UTILS so it was automatically in my PATH.

Third, run this from an Administrator command prompt. Note again that it needs both curl.exe and python.exe in the PATH to run as it is. This should run without incident.

curl http://python-distribute.org/distribute_setup.py | python

Then run

curl -k https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

This should end with "successfully installed pip."

Pip is a Python package manager.

Finally, run

pip install -U https://github.com/jkbr/httpie/tarball/master

I'm recommending you install the development edge build of HTTPie rather than just "pip install httpie" as the developer is actively fixing Windows issues and just recently helped me with one.

So, to sum up what you need to run, in four lines, assuming curl.exe, python.exe and python scripts are all in your PATH.

curl http://python-distribute.org/distribute_setup.py | python
curl -k https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
pip install -U https://github.com/jkbr/httpie/tarball/master

Running HTTPie

You'll know it works if you can run "http" from the command line and get this output:

C:\Users\scottha\Desktop> http
usage: http-script.py [--help] [--version] [--json | --form] [--output FILE]
[--pretty | --colors | --format | --ugly]
[--print OUTPUT_OPTIONS | --verbose | --headers | --body]
[--style STYLE] [--stream] [--check-status]
[--auth USER:PASS] [--auth-type {basic,digest}]
[--verify VERIFY] [--proxy PROXY] [--allow-redirects]
[--timeout SECONDS] [--traceback] [--debug]
[METHOD] URL [ITEM [ITEM ...]]
http-script.py: error: too few arguments

Here's where the fun happens. The syntax is VERY intuitive. Here I post some JSON to an endpoint that will echo it back.

C:\> http POST http://localhost:50231/api/Contact name=scott age:=100
HTTP/1.1 200 OK
Content-Length: 26
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Aug 2012 21:59:51 GMT
Server: Microsoft-HTTPAPI/2.0

{
"age": 100,
"name": "scott"
}

It's just like using HTTP itself, except from the command line. The best part is that it will take name=value for strings and name:=value for non-strings and turn it into JSON!

HTTPie supports any HTTP Verb, FORM data, raw JSON, and lots of other features. Here's another example:

C:\>http PUT api.example.com/person/1 name=John age:=29 married:=false hobbies:='["http", "pies"]'
PUT /person/1 HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
Host: api.example.com
User-Agent: HTTPie/0.2.7dev

{
"age": 29,
"hobbies": [
"http",
"pies"
],
"married": false,
"name": "John"
}

There's lots more examples here https://github.com/jkbr/httpie/ and I encourage you to check it out. I'll leave you with a lovely PowerShell screenshot showing that HTTPie also does syntax highlighting at the command line!

HTTPie is HTTP for Humans and Syntax Highlights as well

Awesome. Expect to see this tool in all my Web API and JSON demos. Go get it and star it at GitHub.

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

Visual Studio 2012 and .NET Framework 4.5 is RELEASED - Here's 5 minute videos to get you up to speed quick

August 15, 2012 Comment on this post [92] Posted in ASP.NET | ASP.NET Ajax | ASP.NET Dynamic Data | ASP.NET MVC | Open Source | SignalR | VS2012
Sponsored By

Jason Zander announced today that Visual Studio 2012 and .NET Framework 4.5 is RELEASED to web. The .NET Web Tools Team (the team I'm on) has coverage on their blog as well. 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.

I'll continue for a few more Tiny Happy Features over the next few weeks but this last week I took some time and recorded 13 (ya, thirteen, oy) short videos to show you guys these features in action. These are SHORT videos that are at most 4 to 6 minutes. It's hard to watch 60 to 90 minute screencast so I did these little one-take quick shots so you could watch them at lunch.

If you watch all these videos it will take you less than an hour and you'll have a good practical idea of what's new in Web Development and Tools with Visual Studio 2012. This is by no means exhaustive, but it's a lot.

The other concept that's worth pointing out is One ASP.NET. We've pulled the Web Tooling and Templates out into extensions in Visual Studio 2012. This means we can update Web Tools without updating all of Visual Studio. I talked about this in the One ASP.NET keynote at aspConf. We'll be updating the tools - not in major scary ways - but in useful and important ways that make front end web development easier. We'll look at small updates either quarterly or maybe semi-annually so when a new technique comes out you don't have to wait for the next version of Visual Studio.

Download Visual Studio 2012

MSDN Subscribers can download now at the MSDN Subscriber Download Page. For volume licensing customers, Visual Studio 2012 products will be on the Volume Licensing Service Center tomorrow. If you want to download Visual Studio 2012 free trial versions, or to download the free Express versions, head over to the the Visual Studio product website.

Azure SDK for both Visual Studio 2012 and Visual Studio 2010

It's also worth noting that the Windows Azure .NET SDK has been updated today as well and you can download versions for either Visual Studio 2010 SP1 or Visual Studio 2012.

The Videos

Here's the 13 short videos showing each of my favorite features in just a few minutes. There are new Entity Framework 5 videos as well, so be sure to scroll all the way down!

CODEC NOTE: These are using HTML5 video and MP4. If you are using a browser that doesn't support that codec, click the Header links to go to the ASP.NET site directly and the videos will stream with Silverlight.

Model Binding

HTML Editor

CSS Editor

JavaScript Editor

Page Inspector

ASP.NET 4.5 Web Forms Strongly Typed Data Controls

Web Publishing Improvements

ASP.NET MVC 4

ASP.NET Web API

Bundling and Optimization

SignalR and Web Sockets

Async and Await

OAuth in the Default ASP.NET 4.5 Templates

Entity Framework 5

There are also 5 new Entity Framework videos done by Rowan Miller that show new features of the new Entity Framework 5 as well as walk you through Code First vs. Model First vs. Database First. They are excellent screencasts and I recommend them.

I want to write code:

I want to use a visual designer:

EF5 is the newest version of Entity Framework. These short videos and step-by-step walkthroughs will get you started with the new EF5 features

  • Enum Support in Code First - The domain classes that make up your Code First model can now contain enum properties that will be mapped to the database.
  • Enum Support in EF Designer - Using the EF Designer you can now add enum properties to your entities.
  • Spatial Data Types in Code First - Spatial data types can now be exposed in your Code First model using the new DbGeography and DbGeometry types.
  • Spatial Data Types in EF Designer - Spatial data types can now be used in the EF Designer using the new DbGeography and DbGeometry types.
  • Table-Valued Functions - Table-valued functions (TVFs) in your database can now be used with Database First models created using the EF Designer.
  • Multiple Diagrams per Model - The EF Designer now allows you to have several diagrams that visualize subsections of your overall model. This allows larger models to be broken up into multiple smaller diagrams. You can also add color to the entities to help identify sections of your model.

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

Introducing LyncAutoAnswer.com - An open source remote worker's Auto Answer Kiosk with Lync 2010

August 15, 2012 Comment on this post [11] Posted in Lync | Remote Work
Sponsored By

The name badge on my door in Redmond, Washington says "Virtual Scott Hanselman" because I'm not there!Last month I did a blog post called "Introducing Lync 2010 Super Simple Auto Answer Video Kiosk with Full Screen" where I rewrote the original Embodied Social Proxy software that I'd borrowed from Microsoft Research and just made a better "auto answer client" for Lync. (Lync being the Microsoft Unified Communications software that includes phone calls, IMs and video chats. You get Lync with Office 365.)

This auto-answer software automated the Lync client. You'd still run the Lync client and see the Lync client show up in the Windows taskbar. However, sometimes you might want a simpler "kiosk" solution where the manager end user can't even see Lync or know that it's there. Lync calls this "UI Suppressed" mode. In this mode YOU are Lync and you have to automate the entire solution, paint the video, and manage events. You are using the Lync transport but providing all the UI. The benefits of UI Suppressed mode is that the user can't mess it up or fiddle with Lync. This can be useful in CRM applications where you might want chat and video embedded in some larger system where the user doesn't need to know you're using Lync.

In my case, I want people to come by my physical office in Redmond, Washington - where I am NOT - and sit down and have everything Just Work™. I decided I needed both a Kiosk and a non-Kiosk version. I started coding and realized not only that I was in over my head but also that the idea of a UI Suppression in Lync was in need of an abstraction. The ideas were high level and general but the Lync 2010 SDK code was, in my estimation, rather too low level to make it super easy. Why not wrap Lync and make a reusable library.

I reached out to Tom Morgan in the UK who knows Lync backwards and forwards and works for Modality Systems, a Lync and Unified Communications consultancy. I pitched him the idea - remotely, over Lync, in fact - and we got to pairing. I though it was a problem worth solving that could help not only the Lync community but also Remote Workers everywhere. Big thanks to Tom's bosses at Modality Systems for trusting Tom's judgment with this little weekend project! Feel free to thank them in Tom's blog post on the subject. ;)

Tom created a project on GitHub called Lync-UISuppression-VideoAutoAnswer that includes a WPF control and Lync wrapper abstraction to make UI Suppressed Lync applications easier. Then we updated my LyncAutoAnswer GitHub project to use Tom and Paul Nerney's new library! The project now includes BOTH a UI Suppressed AND non-UI Suppressed version. Tom and friends also redesigned the UI Suppressed version to be more "kiosky" and brighter so people could walk by and immediately know if I was busy or not.

http://lyncautoanswer.com

I am happy to announce (or re-announce) the LyncAutoAnswer client at LyncAutoAnswer.com as a collaboration by Tom Morgan from Thought Stuff and Paul Nearney from CodeLync and me.

Here's a few screenshots of the UI Suppressed version that you can download today to setup your own Lync based remote kiosk.

image

Here I'm away at a conference. Note that not only does the color change but my status message from Lync presence updated as well. The headshot comes directly from Lync and Active Directory.

image

The general idea is simple. You create a Lync account that is NOT you; it's an account for your cart and the one you will call. Mine is called "Cart #7." I made a Domain Account that does NOT have the ability to login to a desktop. It doesn't have file system or network share access, it can only use Lync. Then I setup my remote machine to auto logon when it boots up. I also disabled it's power management and screensaver as this is a dumb kiosk.

The video works!

Then you change the Lync Auto Answer settings like this:

<userSettings>
<SuperSimpleLyncKiosk.Properties.Settings>
<setting name="sipEmailAddress" serializeAs="String">
<value>sip:scottha@microsoft.com</value> <!-- THIS IS YOU -->
</setting>
<setting name="LyncAccountDomainUser" serializeAs="String">
<value>DOMAIN\thecart7</value>
</setting>
<setting name="LyncAccountEmail" serializeAs="String">
<value>thecart7@microsoft.com</value>
</setting>
<setting name="LyncAccountPassword" serializeAs="String">
<value><![CDATA[YOUR*CART*PASSWORDISHERE]]></value>
</setting>
</SuperSimpleLyncKiosk.Properties.Settings>
</userSettings>

And that's it! The kiosk does the rest. You can read more about the UI Suppressed version on Tom's blog post and the non-UI Suppressed version on my site. Also, note that UI Suppressed mode needs a registry key changed, but we include those .reg files for ON and OFF, 32- and 64-bit.

Again, Big thanks to Tom, Paul, their bosses, and the spirit of open source. http://lyncautoanswer.com. We look forward to redesigns, forks and pull requests as well as stories of remote work.

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 #3 - Publishing Improvements, chained Config Transforms and Deploying ASP.NET Apps from the Command Line

August 13, 2012 Comment on this post [39] Posted in ASP.NET | ASP.NET MVC | Tiny Happy Features
Sponsored By

(UPDATE: See other Tiny Happy Features)

Publish Profiles are stored with the projectAt 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.

Publishing and Deployment Improvements

Visual Studio 2012 has a number of subtle but significant improvements to publishing. Of course you likely know you can push code to Azure or AppHarbor using Git. You can publish your web app with Web Deploy which I demonstrated at Mix in my talk Web Deployment Made Awesome: If You're Using XCopy, You're Doing It Wrong. You can see a quick closed-captioned video I did of Web Deployment to Azure in just 4 minutes over here.

Visual Studio added web.config transforms a while back so you can have a Web.config along with a Web.debug.config with the changes you want for debug time, and web.release.config for release time. You can add the free SlowCheetah add-on and get transform support for all your config files, not just web.config.

However, things fell down because Web Deploy and Visual Studio didn't have a way to easily represent Dev, Testing, Staging, Production, Whatever. You could have build configurations but they didn't relate to deployments, which doesn't reflect a developer's reality.

Publishing with Environment-specific Configurations

Publish Profiles are either created manually, or now in VS2012 downloaded as .publishsettings from your host and imported into Visual Studio. In Visual Studio 2012 publish profiles are stored along with your code in the Properties folder so they can be checked in and used by others.

Visual Studio 2012 adds deployment config transforms

You can rename a profile whatever you like by changing the name. Here I've named my publish profile "Production."  There's the coolest part.

PublishProfiles live in the Properties folder

I can make a Web.config file with the same name as my Publish Profile and that transform will be run after the build transform.

Even better you can right click on a Transform now and select Preview Transform and see not only the results, but a Diff of the results.

Transformed Web.config ( transforms applied: Web.Release.config, Web.Production.config)

See right there, and in the large image above? It says "Transformed Web.config ( transforms applied: Web.Release.config, Web.Production.config)." Build transforms happen first, then Publish Transforms. Right now you need to create the file with the same name yourself but we'll be adding tooling for this.

This means I can do things in Web.debug.config like changing compilation options while Web.production.config is for changing connection strings, setting log levels, and adding specific Production settings.

Deploying from the Command Line

Deploying your web application from the command line has long been possible but it's been a pretty obscure and frustrating affair. Now that the Publish Profiles can live with the project and Web.config transforms can be chained in you can publish from the command line much easier.

msbuild MySolution.sln /p:DeployOnBuild=true;PublishProfile=Production;Password=poo

If you have a untrusted certificate on the deployment server you haven't added to your local certs you'll need to add AllowUntrustedCertificate=true as an acknowledgement.

I just make a Deploy.bat that looks like this with a %1 for the Profile Name.

msbuild MySolution.sln /p:DeployOnBuild=true;PublishProfile=%1;AllowUntrustedCertificate=true;Password=poo

Then I can just do

Deploy Production

or

Deploy Staging

I've found these outwardly small but impactful changes have made it a lot easier for me to deploy sites. Deployment shouldn't be hard. I stand by my original statement: If you are using XCopy (or Windows Explorer or FileZilla) to deploy your website, you're doing it wrong.

If you are using Web Sites rather than Web Products, head over to the Web Team blog (and subscribe, too) and add your voice to the comments around our teams' plans regarding Website projects and Web Deployment Projects.

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.