I travel a lot. Not like some folks that are gone every week, mind you, although in the last month I’ve been to: Cambridge, UK; Anchorage, AK; San Jose, CA; Copenhagen, DK, Boston, MA; and I’m currently en-route to Anaheim, CA. While this many places in a month is a bit unusual for me, I would say I travel frequently. I’ve travelled most of my 28+ years in IT, and at one time was a consultant traveling weekly.
With that much time away from my primary work location, I have to find ways to stay productive. Some might say “just rest – take a nap!” – but I’m not able to do that. For one thing, I’m a very light sleeper and I’ve never slept on a plane - even a 30+ hour trip to New Zealand in Business Class - so that just isn’t option. I also am not always in the plane, of course. There’s the hotel, the taxi/bus/train, the airport and then all that over again when I arrive. Since my regular jobs have many demands, I have to get work done.
Note: No, I’m not always focused on work. I need downtime just like everyone else. Sometimes I just think, watch a movie or listen to tunes – and I give myself permission to do that anytime – sometimes the whole trip. I have too few
heartbeats left in life to only focus on work – it’s just not that important, and neither am I. Some of these tasks are letters to friends and family, or other personal things. What I’m talking about here is a plan, not some task list I have to follow. When I get to the location I’m traveling to, I always build in as much time as I can to ensure I enjoy those sights and the people I’m with. I would find traveling to be a waste if not for that.
The Unrealistic Expectation
As I would evaluate the trip I was taking – say a 6-8 hour flight – I would expect to get 10-12 hours of work done. After all, there’s the time at the airport, the taxi and so on, and then of course the time in the air with all of the room, power, internet and everything else I needed to get my work done. I would pile up tasks at home, pack my bags, and head happily to the magical land of the TSA.
On return from the trip, I had accomplished little, had more e-mails and other work that had piled up, and I was tired, hungry, and unorganized. This had to change.
So, I decided to do three things:
- Segment my work
- Set realistic expectations
- Plan accordingly
Segmenting By Available Resources
The first task was to decide what kind of work I could do in each location – if any. I found that I was dependent on a few things to get work done, such as power, the Internet, and a place to sit down.
Before I fly, I take some time at home to get all of the work I’d like to accomplish while away segmented into these areas, and print that out on paper, which goes in my suit-coat pocket along with a mechanical pencil. I print my tickets, and I’m all set for the adventure ahead. Then I simply do each kind of work whenever I’m in that situation.
There are certain times when I don’t have power available. But not only that, I might not even be able to use most of my electronics.
So I now schedule as many phone calls as I can for the taxi/bus/train ride and the airports as I can. I have a paper notebook (Moleskine, of course) and a pencil and I print out any notes or numbers I need prior to the trip.
Once I’m airborne or at the airport, I work on my laptop. I check and respond to e-mails, create slides, write code, do architecture, whatever I can.
If I can’t use any electronics, or once the power runs out, I schedule time for reading. I can read at the airport or anywhere, actually, even in-flight or any other transport. I “read with a pencil”, meaning I take a lot of notes, which I like
to put in OneNote, but since in most cases I don’t have power, I use the Moleskine to do that.
Speaking of which, sometimes as I’m thinking I come up with new topics, ideas, blog posts, or things to teach in my classes. Once again I take out the notebook and write it down. All of these notes get a check-mark when I get back to the office and transfer the writing to OneNote. I’ve tried those “smart pens” and so on to automate this, but it just never works out. Pencil and paper are just fine.
As I mentioned, sometime I just need to think. I’ll do nothing, and let my mind wander, thinking of nothing in particular, or some math problem or science question I’m interested in. My only issue with this is that I communicate to
think, and I don’t want to drive people crazy by being that guy that won’t shut up, so I think in a different way.
Power, but no Internet or Phone
If I have power but no Internet or phone, I focus on the laptop and the tablet as before, and I also recharge my other gadgets.
Power, Internet, Phone and a Place to Work
At first I thought that when I arrived at the hotel or event I could get the same amount of work done that I do at the office. Not so. There’s simply too many distractions, things you need, or other issues that allow this. Of course, I
can work on any device, read, think, write or whatever, but I am simply not as productive as I am in my home office.
So I plan for about 25-50% as much work getting done in this environment as I think I could really do. I’ve done some measurements, and this holds out to be true almost every time. The key is that I re-set my expectations (and my co-worker’s expectations as well) that this is the case. I use the Out-Of-Office notices to let people know that I’m just not going to be 100% at this time – it’s hard for everyone, but it’s more honest and realistic, and I’d rather they know that – and that I realize that – than to let them think I’m totally available. Because I’m not – I’m traveling. I don’t tend to put too much detail, because after all I don’t necessarily want to let people know when I’m not home :) but I do think it’s important to let people that depend on my know that I’ll get back with them later.
I hope this helps you think through your own methodology of staying productive when you travel. Or perhaps you just go offline, and don’t worry about any of this – good for you! That’s completely valid as well.
(Oh, and yes, I wrote this at 35K feet, on Alaska Airlines on a trip. :) Practice what you preach, Buck.)
I've written before (as have others) about the dangers of an "either/or" mentality with various technologies, including the "cloud". Companies are starting to understand this message - I've been traveling a lot this year from Alaska to California, from the UK to Copenhagen, Denmark, talking with companies that are implementing Hybrid systems, and giving presentations on how to implement one.
I'm doing another of these Monday of next week, in Boston here in the US. You can read about it and register here (it's a free event) and learn not only more about Hybrid systems using on-premises databases and Windows Azure, but more about SQL Server as well from other speakers.
In on-premises solutions we have the full range of options open for a given computing solution – but we don’t always take advantage of them, for multiple reasons. Data goes in a Relational Database Management System, files go on a share, and e-mail goes to the Exchange server.
Over time, vendors (including ourselves) add in functionality to one product that allow non-standard use of the platform. For example, SQL Server (and Oracle, and others) allow large binary storage in or through the system – something not originally intended for an RDBMS to handle. There are certainly times when this makes sense, of course, but often these platform hammers turn every problem into a nail. It can make us “lazy” in our design – we sometimes don’t take the time to learn another architecture because the one we’ve spent so much time with can handle what we want to do.
But there’s a distinct danger here. In nature, when a population shares too many of the same traits, it can cause a complete collapse if a situation exploits a weakness shared by that population. The same is true with not using the right
tool for the job in a computing environment. Your company or organization depends on your knowledge as a professional to select the best mix of supportable, flexible, cost-effective technologies to solve their problems, whether you’re in an architect role or not.
So take some time today to learn something new. The way I do this is to select a given problem, and try to solve it with a technology I’m not familiar with. For instance – create a Purchase Order system in Excel, then in Hadoop or MongoDB, or even in flat-files using PowerShell as an interface. No, I’m not suggesting any of these architectures are the proper way to solve the PO problem, but taking something concrete that you know well and applying that meta-knowledge to another platform will assist you in exercising the “little grey cells” and help you and your organization understand what is open to you.
And of course you can do all of this on-premises – but my recommendation is to check out a cloud platform (my suggestion would of course be Windows Azure :) ) and try it there. Most providers (including Microsoft) provide free time to do that.
Windows Azure is a platform that allows you to write software, run software, or use software that we've already written. We provide lots of resources to help you do that - many can be found right here in this blog series. There are two primary resources you can use, and it's important to understand what they are and what they do.
The Windows Azure Software Development Kit (SDK)
Actually, this isn't one resource. We have SDK's for multiple development environments, such as Visual Studio and also Eclipse, along with SDK's for iOS, Android and other environments. Windows Azure is a "back end", so almost any technology or front end system can use it to solve a problem.
The SDK's are primarily for development. In the case of Visual Studio, you'll get a runtime environment for Windows Azure which allows you to develop, test and even run code all locally - you do not have to be connected to Windows Azure at all, until you're ready to deploy.
You'll also get a few samples and codeblocks, along with all of the libraries you need to code with Windows Azure in .NET, PHP, Ruby, Java and more.
The SDK is updated frequently, so check this location to find the latest for your environment and language - just click the bar that corresponds to what you want:
The Windows Azure Training Kit (WATK)
Whether you're writing code, using Windows Azure Virtual Machines (VM's) or working with Hadoop, you can use the WATK to get examples, code, PowerShell scripts, PowerPoint decks, training videos and much more. This should be your second download after the SDK. This is all of the training you need to get started, and even beyond. The WATK is updated frequently - and you can find the latest one here:
There are many other resources - again, check the http://windowsazure.com site, the community newsletter (which introduces the latest features), and my blog for more.
It’s an interesting time in computing technology. At one point there was a dearth of information available for solving a given problem, or educating ourselves on broader topics so that we can solve problems in the future. With dozens, perhaps hundreds or thousands of web sites and content available (for free, in many cases) from vendors, peers, even colleges and universities, it seems like there is actually too much information. Who has the time to absorb all this information and training? Even if you had the inclination, where to start?
In fact, it seems so overwhelming that I often hear people saying that they can’t find the training they need, or that vendor X or Y “doesn’t help their users”. On questioning these folks, however, I often find that they – and sometimes I - haven’t put in the effort to learn what resources we have.
That’s where blogs, like this one, can help. If you follow a blog, either by checking it often or perhaps subscribing to the Really Simple Syndication (RSS) feed, you’ll be able to spread out the search or create a mental filter for the information you need.
But it’s not enough just read a blog or a web page. The creators need real feedback – what doesn’t work, and what does. Yes, you’re allowed to tell a vendor or writer “This helped me because…” so that you reinforce the positives. To be sure, bring up what doesn’t work as well – that’s fine. But be specific, and be constructive. You’d be surprised at how much it matters. I know for a fact at Microsoft we listen – there is a real live person that reads your comments. I’m sure this is true of other vendors, and I also know that most blog authors – yours truly most especially – wants to know what you think.
In this blog entry I’d to call your attention to three resources you have at your disposal, and how you can use them to help. I’ll try to bring up things like this from time to time that I find useful, and cover in them in more depth like this. Think of this as a synopsis of a longer set of resources that you can use to filter whether you want to research further, bookmark, or forward on to a circle of friends where you think it might help them.
Data Driven Design Concepts
I’ll start with a great site that walks you through the process of designing a solution from a data-first perspective. As you know, I believe all computing is merely re-arranging data. If you follow that logic as well, you’ll realize
that whenever you create a solution, you should start at the data-end of the application. This resource helps you do that. Even if you don’t use the specific technologies the instructions use, the concepts hold for almost any other technology that deals with data. This should be a definite bookmark for a developer, DBA, or Data Architect.
When I mentioned my admiration for this resource here at Microsoft, the team that created it contacted me and asked if I’d share an e-mail address to my readers so that you can comment on it. You’re guaranteed to be heard – you can suggest changes, talk about how useful – or not – it is, and so on. Here’s that address: email@example.com
End-to-End Example of a complete Hybrid Application – with Live Demo
I learn by example. I also like having ready-made, live, functional demos that show the completed solution at work. If you’ve ever wanted to learn how a complex, complete, hybrid application that bridges on-premises systems with cloud-based databases, code, functions and more, this is it. It’s a stock-trading simulator, and you can get everything from the design to the code itself, or you can just play with the application. It’s running on Windows Azure, the actual production servers we use for everything else.
Using a Cloud-Based Service
Along with that stock-trading application, you have a full demonstration and usable code sample of a web-based service available. If you’re a developer, this is a style of code you need to understand for everything from iPhone development to a full Service-Oriented Architecture (SOA) environment.
So check out these resources. I’ll post more from time to time as I run across them. Hopefully they’ll be as useful to you as they are to me. Oh, and if you have a comment on any of the resources, let them know. And if you have any comments about these or any of my entries, feel free to post away.
To quote a famous TV Show: “Hello Seattle – I’m listening…”
I've written here a little about how I work during the day, including things like using a stand-up desk (still doing that, by the way). Inspired by a Twitter conversation yesterday, I thought I might explain how I set up my computing environment.
First, a couple of important points. I work in Cloud Computing, specifically (but not limited to) Windows Azure. Windows Azure has features to run a Virtual Machine (IaaS), run code without having to control a Virtual Machine (PaaS) and use databases, video streaming, Hadoop and more (a kind of SaaS for tech pros). As such, my designs run the gamut of on-premises, VM's in the Cloud, and software that I write for a platform.
I focus on data primarily, meaning that I design a lot of systems that use an RDBMS (like SQL Server or Windows Azure Databases) or a NoSQL approach (MongoDB on Azure or large-scale Key-Value Pairs in Table storage) and even Hadoop and R, and also Cloud Numerics in F#.
All that being said, those things inform my choices below.
I have a Lenovo X220 tablet/laptop which I really like a great deal - it's a light, tough, extremely fast system. When I travel, that's the system I take. It has 8GB of RAM, and an SSD drive. I sometimes use that to develop or work at a client's site, on the road, or in the living room when I'm not in my home office.
My main system is a GateWay DX430017 - I've maxed it out on RAM, and I have two 1TB drives in it. It's not only my workstation for work; I leave it on all the time and it streams our videos, music and books. I have about 3400 e-books, and I've just started using Calibre to stream the library. I run Windows 8 on it so I can set up Hyper-V images, since Windows Azure allows me to move regular Hyper-V disks back and forth to the Cloud. That's where all my "servers" are, when I have to use an IaaS approach.
The reason I use a desktop-style system rather than a laptop only approach is that a good part of my job is setting up architectures to solve really big, complex problems. That means I have to simulate entire networks on-premises, along with the Hybrid Cloud approach I use a lot. I need a lot of disk space and memory for that, and I use two huge monitors on my stand-up desk. I could probably use 10 monitors if I had the room for them. Also, since it's our home system as well, I leave it on all the time and it doesn't travel.
For the software for my systems, it's important to keep in mind that I not only write code, but I design databases, teach, present, and create Linux and other environments.
Windows 8 - While the jury is out for me on the new interface, the context-sensitive search, integrated everything, and speed is just hands-down the right choice. I've evaluated a server OS, Linux, even an Apple, but I just am not as efficient on those as I am with Windows 8.
Visual Studio Ultimate - I develop primarily in .NET (C# and F# mostly) and I use the Team Foundation Server in the cloud, and I'm asked to do everything from UI to Services, so I need everything.
Windows Azure SDK, Windows Azure Training Kit - I need the first to set up my Azure PaaS coding, and the second has all the info I need for PaaS, IaaS and SaaS. This is primarily how I get paid. :)
SQL Server Developer Edition - While I might install Oracle, MySQL and Postgres on my VM's, the "outside" environment is SQL Server for an RDBMS. I install the Developer Edition because it has the same features as Enterprise Edition, and comes with all the client tools and documentation.
Microsoft Office - Even if I didn't work here, this is what I would use. I've just grown too accustomed to doing business this way to change, so my advice is always "use what works", and this does. The parts I use are:
OneNote (and a Math Add-in) - I do almost everything - and I mean everything in OneNote. I can code, do high-end math, present, design, collaborate and more. All my notebooks are on my Skydrive. I can use them from any system, anywhere. If you take the time to learn this program, you'll be hooked.
Excel with PowerPivot - Don't make that face. Excel is the world's database, and every Data Scientist I know - even the ones where I teach at the University of Washington - know it, use it, and love it.
Outlook - Primary communications, CRM and contact tool. I have all of my social media hooked up to it, so when I get an e-mail from you, I see everything, see all the history we've had on e-mail, find you on a map and more.
Lync - I was fine with LiveMeeting, although it has it's moments. For me, the Lync client is tres-awesome. I use this throughout my day, present on it, stay in contact with colleagues and the folks on the dev team (who wish I didn't have it) and more.
PowerPoint - Once again, don't make that face. Whenever I see someone complaining about PowerPoint, I have 100% of the time found they don't know how to use it. If you suck at presenting or creating content, don't blame PowerPoint. Works great on my machine. :)
Zoomit - Magnifier - On Windows 7 (and 8 as well) there's a built-in magnifier, but I install Zoomit out of habit. It enlarges the screen. If you don't use one of these tools (or their equivalent on some other OS) then you're presenting/teaching wrong, and you should stop presenting/teaching until you get them and learn how to show people what you can see on your tiny, tiny monitor. :)
Cygwin - Unix for Windows. OK, that's not true, but it's mostly that. I grew up on mainframes and Unix (IBM and HP, thank you) and I can't imagine life without sed, awk, grep, vim, and bash. I also tend to take a lot of the "Science" and "Development" and "Database" packages in it as well.
PuTTY - Speaking of Unix, when I need to connect to my Linux VM's in Windows Azure, I want to do it securely. This is the tool for that.
Notepad++ - Somewhere between torturing myself in vim and luxuriating in OneNote is Notepad++. Everyone has a favorite text editor; this one is mine. Too many features to name, and it's free.
Browsers - I install Chrome, Firefox and of course IE. I know it's in vogue to rant on IE, but I tend to think for myself a great deal, and I've had few (none) problems with it. The others I have for the haterz that make sites that won't run in IE.
Visio - I've used a lot of design packages, but none have the extreme meta-data edit capabilities of Visio. I don't use this all the time - it can be rather heavy, but what it does it does really well. I also present this way when I'm not using PowerPoint. Yup, I just bring up Visio and diagram away as I'm chatting with clients. Depending on what we're covering, this can be the right tool for that.
Tweetdeck - The AIR one, not that new disaster they came out with. I live on social media, since you, dear readers, are my cube-mates. When I get tired of you all, I close Tweetdeck. When I need help or someone needs help from me, or if I want to see a picture of a cat while I'm coding, I bring it up. It's up most all day and night.
Windows Media Player - I listen to Trance or Classical when I code, and I find music managers overbearing and extra. I just use what comes in the box, and it works great for me.
R - F# and Cloud Numerics now allows me to load in R libraries (yay!) and I use this for statistical work on big data loads.
Microsoft Math - One of the most amazing, free, rich, amazing, awesome, amazing calculators out there. I get the 64-bit version for quick math conversions, plots and formula-checks.
Python - I know, right? Who knew that the scientific community loved Python so much. But they do. I use 2.7; not as much runs with 3+. I also use IronPython in Visual Studio, or I edit in Notepad++
Camstudio recorder - Windows PSR - In much of my training, and all of my teaching at the UW, I need to show a process on a screen. Camstudio records screen and voice, and it's free. If I need to make static training, I use the Windows PSR tool that's built right in. It's ostensibly for problem duplication, but I use it to record for training.
OK - your turn. Post a link to your blog entry below, and tell me how you set your system up.
At one point in my life I would build my own computing system for home use. I wanted a particular video card, a certain set of drives, and a lot of memory. Not only could I not find those things in a vendor’s pre-built computer, but those were more expensive – by a lot. As time moved on and the computing industry matured, I actually find that I can buy a vendor’s system as cheaply – and in some cases far more cheaply – than I can build it myself.
This paradigm holds true for almost any product, even clothing and furniture. And it’s also held true for software…
If you need an office productivity package, you simply buy one or use open-sourced software for that. There’s really no need to write your own Word Processor – it’s kind of been done a thousand times over. Even if you need a full system for customer relationship management or other needs, you simply buy one.
But there is no “cloud solution in a box”. Sure, if you’re after “Software as a Service” – type solutions, like being able to process video (Windows Azure Media Services) or running a Pig or Hive job in Hadoop (Hadoop on Windows Azure) you can simply use one of those, or if you just want to deploy a Virtual Machine (Windows Azure Virtual Machines) you can get that, but if you’re looking for a solution to a problem your organization has, you may need to mix Software, Infrastructure, and perhaps even Platforms (such as Windows Azure Computing) to solve the issue.
It’s all about starting from the problem-end first. We’ve become so accustomed to looking for a box of software that will solve the problem, that we often start with the solution and try to fit it to the problem, rather than the other way around.
When I talk with my fellow architects at other companies, one of the hardest things to get them to do is to ignore the technology for a moment and describe what the issues are. It’s interesting to monitor the conversation and watch how many times we deviate from the problem into the solution.
So, in your work today, try a little experiment: watch how many times you go after a problem by starting with the solution. Tomorrow, make a conscious effort to reverse that. You might be surprised at the results.
When you create something in the cloud, it's real, and you're charged for it. There are free offerings, and you even get free resources with your Microsoft Developer Network (MSDN) subscription, but there are limits within those. Creating a 1 GB database - even with nothing in it - is a 1 GB Database. If you create it, drop it, and create it again 2 minutes later, that's 2 GB of space you've used for the month. Wait - how do I develop in this kind of situation?
With Windows Azure, you can simply install the free Software Development Kit (SDK) and develop your entire application for free - you need never even log in to Windows Azure to code. Once you're done, you simply deploy the app and you start making money from the application as you're paying for it.
Windows Azure Databases (The Artist Formerly Known As SQL Azure) is a bit different. It's not emulated in the SDK - because it doesn't have to be. It's just SQL Server, with some differences in feature set. To develop in this environment, you can use SQL Server, any edition. Be aware of the feature differences, of course, but just develop away - even in the free "Express" or LocalDB flavors - and then right-click in SQL Server Management Studio to script objects. Script the database, but change the "Advanced" selection to the Engine Type of "SQL Azure". Bing.
Although most all T-SQL ports directly, one thing to keep in mind is that you need a Clustered Index on every table. Often the Primary Key (PK) is a good choice for that.
I recently read a blog post from a technical professional who’s account had been hacked (http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/all/) – not because he used poor passwords or unsafe practices, but because the hackers used some social engineering to get around the safety he had put into place.
While I won’t focus on the particulars of his situation, the interesting part of his loss was the fragility of the security of his data. In this case, he lost personal data – with no way to replace it. Two things stood out for me in his article: the chain of security through his accounts, and the single-source of data he had.
In this case, someone contacted the vendor and pretended to be this person. Using easily obtained information, they simply gained access to the account, and didn’t even have to hack the password. From there, the chain was that using various convenience-features, the hackers could delete the smartphone, and then on to the laptop the person owned. They completely wiped that out, and this is where there is an issue – he had his data on that laptop, and on the same vendor’s cloud backup. Since the hacker *was* the account owner by that time, they wiped out both. The person’s personal pictures, etc were gone forever. From there the hackers impersonated the person on Twitter and made racist and other statements to embarrass the person.
Although lots of features are available in all vendor products, I’ve always been….paranoid about using them. I try to follow the “moats and bridges” approach to security, meaning that one account or feature doesn’t lead to another. I don’t link things together that can be used to attach to more than one account, even when it's a cool new feature. One public logon from an airport’s “free” wifi (which I never use, by the way) can lead to these attacks – even if you don’t think you’re logging on. Ever check your mail from the airport? Do you have more than one mail account in your mail client? You could be hacked. I realize most client software does a good job of trying to prevent this, but I use my own MiFi device which I have set to the highest encryption I can.
I also keep lots of data in the cloud – but that’s not the only place. Periodically I have my important data backed up to a local drive,which I rotate to another secure location. After all, I’ve moved most of my books, pictures, scans, everything to a digital format. There’s no way I’m keeping that in just one place, or on just one vendor.
There are other things you can do to protect yourself – a great list is here: http://gizmodo.com/5932663/9-things-you-absolutely-must-do-to-keep-your-online-identity-secure
When I help clients design solutions on Windows Azure, I recommend another copy of the storage wherever possible – even on other vendor's cloud storage or locally on a drive, or both. I’m paranoid that way – I don’t want them to lose data. We take extraordinary precautions against losing data. Azure data has three copies on separate fault domains, and then those three are copied again to another physical datacenter automatically, that’s just built into the system. Even so, I recommend periodic backups to other
locations of data the client can’t easily re-generate.
While we provide lots of tools, information and guidance about security and protection in Windows Azure, ultimately it's up to you to properly secure your assets and plan for disaster recovery. That's true of any cloud provider - you need to learn the platform well to understand how to protect your data.
What I architect in Windows Azure I practice at home. Read that blog post, and I think you will agree it’s good to be a little paranoid. Sometimes they really are out to get you.
The SQL Server community is really engaged. They are an active bunch on Twitter, Facebook and LinkedIn, they help each other on forums, they attend conferences. But that isn’t enough interaction – the community started a grass-roots effort to hold local conferences on a Saturday. Free conferences. Odds are there’s one near you… http://www.sqlsaturday.com/default.aspx … and if not, you can start one.
Sessions at SQL Saturdays are all over the map, and there’s something for (almost) everyone, from Business Intelligence to Database Administration and Development. Some of these events have “training days” associated with them – longer, more in-depth training that has a fee. I’ve taught quite a few of these, and of course I’ve done my share of other presentations at the events as well.
I’m honored to be presenting at the Cambridge, UK SQL Saturday this year (http://www.sqlsaturday.com/162/eventhome.aspx) in September. For one thing, I used to live near there and plan to take the family with me to show them my old stomping grounds. For another, I’m excited about the sessions I get to present.
The Training Day
Friday I’ll be leading one of those training days – and I’ll be delivering a very important workshop, where I’ll cover SQL Server – all of it. OK, maybe not *all* of it, and maybe you won’t be a complete PhD after the class, but we’ll do a complete immersion in learning SQL Server as a product from the ground up. It’s a workshop format, so no sitting and listening to someone droning on and on for hours. You’ll be asked to bring a laptop, and do actual work on the product from the first few minutes of the 8-hour day to the last of the workshop. You’ll be jumping in from the very start, and in deep until the end of the day.
But wait – this is kind of a “beginner” thing, isn’t it? Shouldn’t I be doing something on the internals of the locking mechanism of the hashing system in memory on x64 architectures, with complete code diagrams? Shouldn’t you be able to snatch the T-SQL pebble from the master’s hand when you’re done, or be able to shoot the wings off of an XML fly when you’re done?
We need this kind of session. For one thing, you can get that depth in other sessions. For another, we need to have a place for someone that wants to learn SQL Server but doesn’t have a lot of time to do that. We need something relatively inexpensive that a boss can send a developer, administrator or new employee to learn how to take over the SQL Server, or augment the DBA team. We need a place where good habits are formed, and where someone can branch out into a new part of technology, into one of the best places in tech to be – data.
After you’re done with this session, stick around for Saturday – now all those presentations will make more sense. And you’ll be able to network with a lot of folks that already do what you learn about on Friday, and who knows – find out where to look for work in this amazing career field.
What will you learn?
You’ll start with knowing that SQL Server is a database product by Microsoft. That’s all the pre-requisite you need, other than being the technology industry. From there we’ll cover:
- The Data Professional Career
- Installing, setting up and configuring the right Edition of SQL Server for the job (including SQL Azure)
- Database engine fundamentals – How does the engine work, what are the components, what can you configure and tune
- Transactions, Locking and Blocking
- Creating and managing databases
- Database options and their impact
- Database Objects including Tables, Views, Stored Procedures, Functions and more
- General maintenance including backups and recovery
- Security fundamentals including users, roles, and object security
- Performance tuning fundamentals including indexes and query research tools
- Multiple resources to help you get to the next level
In 8-hours. Come ready to learn. You’ll need a laptop, and complete focus for a few hours. You’ll leave with the ability to manage and work with a SQL Server system – and you’ll learn what to do next.
Who should go?
If you’re new to Relational Database Management Systems (RDBMS’s) but not technology, and you’re looking to expand your technical reach, coming from another platform (to be sure, there will be some repeat info here), want to explore a new tech career area, want to learn more about developing against an RDBMS or know someone who does.
The registration for the training day is here: https://www.regonline.co.uk/?eventID=1120017&rTypeID=242030
What else are you doing whilst (I love saying whilst) there?
I’m also pleased to be providing the keynote on Saturday. (I can’t wait to see what I’m going to say), as well as two other sessions – more on those soon. My daughter wants to be a Zoologist, so while we’re there we’ll be visiting the Zoology museum at one of the colleges, I’ll probably eat too much and potentially go punting. I’ll also mingle with you, my SQL Family, and we’ll just generally have a good time.
If you’re not busy in September, and even if you are, make plans to come check all this out. It promises to be awesome. (Americans think everything is awesome)
See you there.
Normally when I diagram a solution for a customer, I use whatever they are comfortable with. I do most of my work these days in OneNote, especially when it’s an Architecture Design Session (ADS), since I can capture notes, handwriting, drawings, web pages, whiteboards, camera shots and even voice. In fact you can search on most of those.
Simplicity is the rule – I just want to capture enough data to move to the next phase of the project and ensure everyone understands what we are doing. When we get to that next phase, I like to use Visio. It’s a vector-based drawing and diagraming tool, which means you can zoom in or out a great deal without a loss of definition, in most cases. For complicated diagrams, this is essential.
The basic shapes in Visio are fine – and there are some computer and network shapes I use there all the time. But I wanted something that would show the basic parts of Windows Azure, from our IaaS to our PaaS to the SaaS shapes, as well as security federation providers like Google or Yahoo that you can leverage in Azure.
So I created some shapes, and I’ll share them here.
Here’s the link to the file on my SkyDrive – understand that these are from Buck Woody, NOT Microsoft. They are neither official nor approved, and if they cause your machine to break Microsoft isn’t liable for that: http://sdrv.ms/QjalVR
Disclaimer, for people who need to be told this sort of thing:
Never trust any software packages, including those that you find here, until you understand exactly what it does and how it will act on your systems. Always check the script on a test system or Virtual Machine, not a production system. Yes, there are always multiple ways to do things, and this tool may not work in every situation, for everything. It’s just a graphic, people. All code on this site is performed by a professional stunt driver on a closed course. Your mileage may vary. Void where prohibited. Offer good for a limited time only. Keep out of reach of small children. Do not operate heavy machinery while using this software. If you experience blurry vision, indigestion or diarrhea during the operation of this software, see a physician immediately.
I think I'm going to actually submit this at some point....
I work from home – and I would find it difficult to work any other way. For decades I’ve worked in traditional offices, cubicle-farms, and open-plan work areas. I find them too bright, too loud, too distracting, and in some cases, too depressing to be effective. Working from home offers me a zero-commute, largely stress-free way of working that I really like. I just find it one of the most effective, efficient and enjoyable ways to work.
But there are some caveats.
I’ve read a lot of blogs that talk about how difficult it is to work from home, articles that explain how ineffective home workers are, and how it’s difficult to monitor and manage remote workers. I find those interesting, since I’ve not experienced that. I thought I might take a few moments to explain how I work at home, and the attributes that make this style of working most effective. Every person is different, so perhaps it’s a combination of factors that make working remotely successful for one person and not another.
Personal Work Style
I am a very self-motivated person. I am goal-oriented, which means that when I’m given an assignment, I start a work-back schedule and immediate sort out my time and start working the tasks to get to the goal. And I don’t have to be given a specific goal – if my company gives me the direction they want to go, I’ll make goals that take us both in that direction. That’s a large part of working remotely – you have to be self-motivated.
I also like to focus during certain periods of time. No music, no talking, no e-mail, twitter, or Facebook; no interruptions, just an hour or so of “heads-down” work. I don’t work like that all the time, but when I do, I want that extreme focus available. Working remotely allows me to control the environment enough to do that.
In fact, I don’t like having set tasks to do each day. I can certainly do that kind of work, but I’d much rather work towards a goal, and set up my own tasks.
To work remotely, you’ll need to be self-motivated as well. In many cases, those who work remotely don’t have a daily stand-up meeting or scrum that they are part of. That means no one is watching to see if they are on-task – and for some folks, that allows them not to be as focused as having that pressure of knowing they are being tracked.
You’ll need to be able to stay focused on the work you need to do. It is incredibly easy to be sidetracked when you work remotely. You have to be ruthless about looking forward to the goal, creating a schedule and staying on that schedule. I live and die by my Outlook Tasks. Every e-mail I get is turned into a task if there is anything needed from me. I make those tasks visible to my boss, so he knows at all times what I’m up to without bothering me for status. When I finish the work, I close the task.
You’ll need to be able to be “compartmentalized”. When you’re at work, be at work. When you’re done, shut it off. When you’re working at home, it’s far too easy for those lines to become blurred, and for your home and work life to mix. Some of that is unavoidable, but I minimize it as much as I can. Even my family helps – they know that when I’m in my room that serves as my office with the door closed, I’m not home. I’m at work. Unless it’s an emergency, they treat it as if I’ve left the house.
That doesn’t mean I work 9-5 – far from it. I get up very early, and make coffee, open up the house, and turn on the laptop. I check e-mail (but I don’t answer them yet) social networks, and my RSS feeds (I have several hundred I glance through). When my family wakes up a few minutes later, I stop work, we go for a walk around a pond near our home (about a half-a mile) rain or snow. We come back, I get back to work on the day’s tasks. I stop again, we eat breakfast together, and then my wife is off to work and my daughter is off to school. I’m now ready to start phone calls, client visits, or work on architectures and solutions. When I can I eat lunch, take the dog for another walk, and get back to work. My daughter comes home from school, and I stop and chat with her about her day. She goes off to do her homework, and I get back to work. When my wife gets home in the evenings, I stop work, cook dinner, and then read most nights when I’m not teaching college. On the weekends we go various places around Washington and Oregon, and on Sundays I go to church. I do have to work a weekend here or there, but I don’t work on Sunday – or even open the laptop very often – unless I have to. That’s my schedule, and it suits me not to have to sit in traffic or deal with office politics. I’m most effective this way.
Not every job can be done remotely.
I chose the Role I have at Microsoft carefully, and in the largest part because it allows me to work remotely. My job is to support customers when they are investigating using our technologies to solve a problem. It’s at various parts of the sales cycle, but I’m assigned a territory (the entire Pacific Northwest of the U.S.) to work directly with our clients and whatever team at Microsoft is helping them at the moment. I currently work with Windows Azure, specializing in things like architecting systems, data systems, and security. That means I’m either on a web-conference, at the client’s office, or working architecture designs. That lends itself well to working remotely.
So your work needs to be able to be done remotely. If you’re able to use e-mail and the phone/webcam to communicate, if your work doesn’t require a lot of in-person meetings, and if you’re able to work independently and then submit your part of the work to a larger group using a computer network, then you’re probably able to work remotely. Also, if your work involves visiting clients often you’re not in the office most of the time anyway – so you could probably work remotely then as well.
Having the location and tools to work remotely is essential to success. First, you need a place where you can work. I have a home office, a dedicated room in the house that I use for work. It has a door, and when I close that I can isolate myself for calls, web broadcasts, collaboration and to focus. For me, a specific, private room or place in the house is very important.
That being said, I very often take my office with me to another location. When the family leaves for the day, I can pick up my laptop (I use a Lenovo X220 with SSD’s and a lot of RAM, with Windows 8 and Microsoft Office) and head outside when the weather is nice. I grab a cup of coffee, head to the porch, and stay heads-down on the work. Sometimes I go to a coffee shop, sometimes I go to the Public Library, a University of Washington location, or just by a lake or stream. When I am remote I take my phone with me.
You’ll need a fast Internet connection – business class if you can get it – if you’re doing web conferences. You want to remain professional, and nothing says “I’m an amateur” faster than a spotty network connection, especially if you use an IP phone. My company doesn’t pay for the connection, I just treat it as my commute-money. It’s worth it. And you’ll need a backup. I do have a MiFi device in case I’m by that pond or mountain or when the Internet goes out – I don’t rely on public Internet when I’m out. And I try to be on my business class Internet when I’m on a call or web conference. If I have to I’ll drive in to a Microsoft office to use a dedicated connection if the one at home is out. I won’t compromise the client’s experience on my convenience.
I have an inexpensive server in the house, where I run Windows 2008 R2 Server. I have several VM’s there that I remote into, and those are my demo machines, development workstations and so on. I back that up to an external drive which I keep at a friend’s house. I also make sure all of my critical work files are kept in Windows Azure storage for a remote backup.
I use my regular laptop for just a few tools:
- OneNote – For everything. I use it for typing, a light spreadsheet and math tool, graphics, presenting (yup, that’s what I use), whiteboarding, everything. I use my Windows Live SkyDrive for all my notebooks, and then I open them using the local OneNote tool. That way I have the rich tool interface, backups of all my data, and when needed I can use the web OneNote to do my work on any computer connected to the Internet. I can even share out the NoteBooks (I do this all the time) and work with clients or internal teams real-time. It’s a one-product SharePoint, at least for me.
- Outlook – From e-mail to RSS feeds to calendar and tasks, I live and die on Outlook. Once again I use the “fat” client for almost everything local, but connected over the web interface whenever I need to, and of course that’s backed up on corporate.
- PowerPoint – don’t be a hater. I love PowerPoint. In fact, every time (every single time) I’ve seen someone whining about how bad PowerPoint is I find out they stink at using PowerPoint. If you take the time to learn it, you can do everything from presentations to simple designs, whiteboarding and even full on training sessions using it. I also store the Presos on my Skydrive, and I can (and have) presented from Office Live Apps.
- Visual Studio – I do all my coding, database and data work, and design work in VS. I check all my code into GIT or VSTS, depending on the client.
- Lync – One of the best communication tools I’ve used. It’s my IP phone, internal chat, internal groups, webcam presentation, and a really nice collaborative whiteboard tool. I do entire design sessions using only Lync.
You’ll have to decide whether you like a noisy, busy environment, or a quiet, serene one. I like both, depending on what I’m doing. I normally work mostly here at home listing to music, but from time to time I’ll get out where there are more people I can interact with.
You’ll find that working at home can be very solitary. The whole point of being away from everyone is that you’re away from everyone – but this can be a problem. You need periodic interaction. I have regular staff meetings online with my team, I stay connected and chat often using Lync, and I do visit client and Microsoft offices from time to time.
And I use social media. Twitter I use for general chatter, and I do this throughout the day when I’m waiting for a compile or some other task to finish. Facebook is where I post more family or longer interactions. LinkedIn, which I use a great deal, is for only work-related information, chats, groups and so on. Can these be time-wasters, or not be useful? Of course. That’s where the self-discipline comes in. I put into those networks exactly what I want out of them, and when I’m busy, I shut them off.
I don’t like e-mail. I get tons of it – but I try to use the phone whenever I can. I think that’s especially important for a remote worker. I also make sure my boss knows what I’m up to. I want to make sure come promotion time that he knows I’m effective, efficient, and valuable. That means chatting with him on a weekly basis, and letting him know my successes and challenges. I don’t want our first conversation to be at review time.
And I go to in-person events as often as I can. From PASS to SQL Saturdays, user groups, anything I can make time for. These are not part of my job – I’m not paid to do public speaking, nor is it a requirement of my job – but I’ll volunteer to speak so that I can go to an event.
The key is to develop your lines of peer-to-peer contacts with whatever tools you like so that you’re not an island. I use Lync, internal groups at Microsoft, and LinkedIn to stay up to date with my industry peers. There’s a lot of chaff in all of those, but I put the work in to make them effective for me.
Your company has to buy in to all this.
If they simply allow you (begrudgingly) to work at home, you’re doomed to fail. You’ll be left out of the loop, not invited to meetings, forgotten, and your professional brand will slowly wither and die. You have to get your manager and your company to see the value in your not taking up space in their building. You have to sell it.
Microsoft is very remote-worker friendly. They have an entire set of tools to make us successful. We have training for working remotely, and our managers are trained to have remote workers. Some do that well, others don’t. I don’t work for the managers that aren’t good at managing remote workers.
So it seems that there are a lot of factors that go into making a successful remote worker – it’s not just staying at home in your pajamas, checking e-mails now and again. It’s a combination of how you work, what the work is, how well you can stay connected, and the level your company supports you.
And I love it.
I’ve been teaching my daughter about budgeting. I’ve explained that most of the time the money coming in is from only one or two sources – and you can only change that from time to time. The money going out, however, is to many locations, and it changes all the time. She’s made a simple debits and credits spreadsheet, and I’m having her research each part of the budget. Her eyes grow wide when she finds out everything has a cost – the house, gas for the lawnmower, dishes, water for showers, food, electricity to run the fridge, a new fridge when that one breaks, everything has a cost. She asked me “how do you pay for all this?” It’s a sentiment many adults have looking at their own budgets – and one reason that some folks don’t even make a budget. It’s hard to face up to the realities of how much it costs to do what we want to do.
When we design a computing solution, it’s interesting to set up a similar budget, because we don’t always consider all of the costs associated with it. I’ve seen design sessions where the new software or servers are considered, but the “sunk” costs of personnel, networking, maintenance, increased storage, new sizes for backups and offsite storage and so on are not added in. They are already on premises, so they are assumed to be paid for already.
When you move to a distributed architecture, you'll see more costs directly reflected. Store something, pay for that storage. If the system is deployed and no one is using it, you’re still paying for it. As you watch those costs rise, you might be tempted to think that a distributed architecture costs more than an on-premises one.
And you might be right – for some solutions. I’ve worked with a few clients where moving to a distributed architecture doesn’t make financial sense – so we didn’t implement it. I still designed the system in a distributed fashion, however, so that when it does make sense there isn’t much re-architecting to do.
In other cases, however, if you consider all of the on-premises costs and compare those accurately to operating a system in the cloud, the distributed system is much cheaper. Again, I never recommend that you take a “here-or-there-only” mentality – I think a hybrid distributed system is usually best – but each solution is different. There simply is no “one size fits all” to architecting a solution.
As you design your solution, cost out each element. You might find that using a hybrid approach saves you money in one design and not in another. It’s a brave new world indeed.
So yes, in the cloud, everything costs money. But an on-premises solution also costs money – it’s just that “dad” (the company) is paying for it and we don’t always see it. When we go out on our own in the cloud, we need to ensure that we consider all of the costs.
(Last updated on 01/15/2013)
With such a large platform, Windows Azure has a lot of moving parts. We’ve done our best to keep the interface as simple as possible, while giving you the most control and visibility we can. However, as with most Microsoft products, there are multiple ways to do something – and I’ve always found that to be a good strength. Depending on the situation, I might want a graphical interface, a command-line interface, or just an API so I can incorporate the management into my own tools, or have third-party companies write other tools.
While by no means exhaustive, I thought I might put together a quick list of a few tools you can use to manage and monitor Windows Azure components, from our IaaS, SaaS and PaaS offerings. Some of the products focus on one area more than another, but all are available today. I’ll try and maintain this list to keep it current, but make sure you check the date of this post’s update – if it’s more than six months old, it’s most likely out of date. Things move fast in the cloud.
The Windows Azure Management Portal
The primary tool for managing Windows Azure is our portal – most everything you need is there, from creating new services to querying a database. There are two versions as of this writing – a Silverlight client version, and a newer HTML5 version. The latter is being updated constantly to be in parity with the Silverlight client.
There’s a balance in this portal between simplicity and power – we’re following the “less is more” approach, with increasing levels of detail as you work through the portal rather than overwhelming you with a single, long “more is more” page.
You can find the Portal here: http://windowsazure.com (then click “Log In” and then “Portal”)
Windows Azure Management API
You can also use programming tools to either write your own interface, or simply provide management functions directly within your solution. You have two options – you can use the more universal REST API’s, which area bit more complex but work with any system that can write to them, or the more approachable .NET API calls in code.
You can find the reference for the API’s here: http://msdn.microsoft.com/en-us/library/windowsazure/ee460799.aspx
All Class Libraries, for each part of Windows Azure: http://msdn.microsoft.com/en-us/library/ee393295.aspx
PowerShell is one of the most powerful scripting languages I’ve used with Windows – and it’s baked into all of our products. When you need to work with multiple servers, scripting is really the only way to go, and the Windows Azure PowerShell Command-Lets allow you to work across most any part of the platform – and can even be used within the services themselves. You can do everything with them from creating a new IaaS, PaaS or SaaS service, to controlling them and even working with security and more.
You can find more about the Command-Lets here: http://wappowershell.codeplex.com/documentation (older link, still works, will point you to the new ones as well)
We have command-line utilities for other operating systems as well: https://www.windowsazure.com/en-us/manage/downloads/
Video walkthrough of using the Command-Lets: http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-859T
System Center is actually a suite of graphical tools you can use to manage, deploy, control, monitor and tune software from Microsoft and even other platforms. This will be the primary tool we’ll recommend for managing a hybrid or contiguous management process – and as time goes on you’ll see more and more features put into System Center for the entire Windows Azure suite of products.
You can find the Management Pack and README for it here: http://www.microsoft.com/en-us/download/details.aspx?id=11324
SQL Server Management Studio / Data Tools / Visual Studio
SQL Server has two built-in management and development, and since Version 2008 R2, you can use them to manage Windows Azure Databases. Visual Studio also lets you connect to and manage portions of Windows Azure as well as Windows Azure Databases.
You can read more about Visual Studio here: http://msdn.microsoft.com/en-us/library/windowsazure/ee405484
You can read more about managing Windows Azure Subscriptions with Visual Studio here: http://fabriccontroller.net/blog/posts/manage-your-subscriptions-with-the-windows-azure-tools-for-visual-studio/
You can read more about the SQL tools here: http://msdn.microsoft.com/en-us/library/windowsazure/ee621784.aspx
Microsoft does not suggest or endorse a specific third-party product. We do, however, use them, and see lots of other customers use them. You can browse to these sites to learn more, and chat with their folks directly on how they support Windows Azure.
Cerebrata: Tools for managing from the command-line, graphical diagnostics, graphical storage management - http://www.cerebrata.com/
Quest Cloud Tools: Monitoring, Storage Management, and costing tools - http://communities.quest.com/community/cloud-tools
Paraleap: Monitoring tool - http://www.paraleap.com/AzureWatch
Cloudgraphs: Monitoring too - http://www.cloudgraphs.com/
Opstera: Monitoring for Windows Azure and a Scale-out pattern manager - http://www.opstera.com/products/Azureops/
Compuware: SaaS performance monitoring, load testing - http://www.compuware.com/application-performance-management/gomez-apm-products.html
SOASTA: Penetration and Security Testing - http://www.soasta.com/cloudtest/enterprise/
LoadStorm: Load-testing tool - http://loadstorm.com/windows-azure
New Relic: Application Monitoring - http://newrelic.com/azure
AppDynamics: Application Monitoring - http://www.appdynamics.com/azure.php
Manage Engine's Application Monitor: http://www.manageengine.com/products/applications_manager/windows-azure-monitoring.html
I ran across this blog entry that deals with storage clients - your mileage may vary, but he has some screen-shots and his impressions: http://cloud.dzone.com/articles/windows-azure-blob-storage
This is probably the most specific set of tools, and the list I’ll have to maintain most often. Smaller projects have a way of coming and going, so I’ll try and make sure this list is current.
Windows Azure MMC: (I actually use this one a lot) http://wapmmc.codeplex.com/
Windows Azure Diagnostics Monitor: http://archive.msdn.microsoft.com/wazdmon
Azure Application Monitor: http://azuremonitor.codeplex.com/
Azure Web Log: http://www.xentrik.net/software/azure_web_log.html
Cloud Ninja:Multi-Tennant billing and performance monitor - http://cnmb.codeplex.com/
Cloud Samurai: Multi-Tennant Management- http://cloudsamurai.codeplex.com/
Azure Storage Explorer: Storage management - azurestorageexplorer.codeplex.com
If you have additions to this list, please post them as a comment and I’ll research and then add them. Thanks!