Taking your developer library mobile with the iPhone
I have always been a big proponent of reading/understanding complex development topics really well before starting to use them in prototyping or a live environment. Developers/architects learn in different ways; however, I find myself uncomfortable coding something when I don't understand why/how things work. With all the information out there in the web 2.0 age (with all the development blogs), I still find that the best resources for information are books. I am in the process of starting my own book on a specific Business Intelligence topic and have learned to appreciate the dedication and time it takes to put a book together. The topic, individual chapters, code examples all have to flow and make logical sense for your desired target audience. Furthermore, books on development also have to go through a technical review process that can include multiple people. This usually makes a chapter or even several pages in a technical book much more valuable than someone's 2 a.m. rant on a blog.
Evolution of my technical resources
Phase I - Physical Resources
I started my technical library in late 1998 when I did some consulting work for BMG Online (They also owned booksonline.com which gave me access to many IT books that customers had returned or were defective). The only problem with all these resources is that they were physical and I had a pile of books under my desk at its peak (probably around 75). The other problem is that books aren't really portable and you just can't take 75 physical books with you.
Phase II - EBooks
In the last several years many publishers have started offering e-book versions of their books usually in PDF format. This format allowed the books to be stored on the network and located in multiple places (i.e., e-mail, network drive, internet drive, etc.). Ebooks also had some obvious nice features:
- If you wanted to print several pages out, you could easily
- You could share the books/some pages with your developer team(s)
- If there were a part of code you wanted to analyze, you could do it by simply selecting it and pasting it into Visual Studio and not have to download a seperate code zip file for just a snippet of interesting code
Phase III - Books on the Mobile & The Cloud
Having an ebook library that can be shared and on the internet is great; however, it does come with two drawbacks. The first drawback is that you still need a laptop/desktop to view ebook files. Secondly, you are still responsible for building your own library and creating a variety of feeds for reading yourself. Mobile devices and devices like the Amazon Kindle coupled with cloud services aim to solve some of these problems. This marriage of digital reader and service can bring entire massive libraries to your fingertips.
The Kindle and Kindle 2 from Amazon seem to be the rage in the recent months. Even many technical bloggers are talking about their new Kindle and how great it is. With the Kindle, you do not need a desktop/laptop to read an ebook online as the Kindle device is specifically geared for reading digital content online. I never have used the Kindle; however, I do like the concept as it is an evolution over having a bunch of PDF files on my HD or an internet drive. One of the issues I have with the Kindle is that you need to subscribe to feeds just to read blog articles. Even though they are nominal fees, I am not paying $1.99 to read Slashdot articles :) Furthermore, I do find having an entire seperate device just for reading ebooks a little overkill. This is why I have started porting my ebook library to the iPhone.
Google's approach is to index a great deal (if not all) of the books in the world at http://books.google.com and essentially brings a huge amount of books to your fingertips without having to own/download any of them. The great part about this is that they are now available on mobile phones as well.
Google Book Search also includes new titles like this:
Using your iPhone for your development library
Using GMail as your ebook storage and provider
For those who do not know, Gmail is fully integrated into the iPhone and provides you a decent amount of storage on the Internet that you can cache on the iPhone. This was my first stab at setting my developer library up -- by using Gmail on the iPhone to cache my attachments (which were PDF files) on the iPhone. I sent myself some e-mails and tagged them as an Ebook.
My Ebooks in my Gmail account
If you double click the attachment (if the file has been downloaded), then the ebook will launch in the PDF viewer.
The book (e-mail attachment) downloaded from my Gmail account and opened in iPhone's default PDF viewer
An Ebook opened in iPhone's default PDF viewer
I thought this was a great solution and started throwing all my PDF books into my gmail account...then came the issues. The first one I ran into was when I tried opening a large PDF file. I quickly found out the default iPhone PDF viewer cannot open PDF files over ~12 megabytes.
The second problem is that the default PDF viewer has really basic functionality. You can view the documents vertically/horizontally, zoom in and page by one page at a time. For a technical resource (some over 600 pages), we need a little more functionality beyond basic viewing. It would be nice to be able to open large documents, page faster, access Internet links embedded in the document, be able to jump to the current page where you left of reading and be able to bookmark certain key parts of the book.
Using a PDF Organizer on the iPhone
The great thing about the iPhone is that if we need some key functionality or need a software program to provide some functionality, we can head to the App Store and most likely someone is providing this functionality. This is what makes the iPhone superior over other devices -- that I can solve any problems I have with the device itself and not have to "sync" with my home desktop or install via a cable.
After doing a quick search on the App Store and checking out the reviews, I decided to go with the Felaur PDF Viewer as it had the highest ratings and it provided a lot of the functionality I wanted. The application (like most iPhone apps) was only $1.99 and I figured it was well worth the cost of trying it out. The only feature that was missing was the ability to click a link and be taken to a web page. The Felaur PDF Viewer allowed me to upload my PDF files for viewing by making the iPhone a web browser (pretty cool technique) and using my browser to upload the files.
iPhone App Store search on PDF files
The Felaur PDF Viewer works just as promised. Using the appliction, I can open large PDF files (The largest one I tried was about 30 megs), page quickly using a slider to acces any part of the book, add bookmarks to access any sections I want with one click of the button and if I close the book and do something else on the iPhone and open the book up, it remains on the page I was reading.
Screen shot shows the uploaded ebooks to the PDF viewer. They are stored locally on the iPhone's HD
Screen shot shows an ebook opened with the commercial viewer (Notice the slider bar so I can access any page quickly)
Another nice feature of the Felaur PDF Viewer is the ability to bookmark large resources. Screen shot below shows Jon Skeet's excellent C# with my bookmarks for reference allowing me to jump to any page
Now any of the technical books I have purchased are available to me online. I am a real big fan of the Manning books as they are quickly becoming one of the highest quality programming books out there (Reminds me of the quality Wrox (big red books) used to be in the late 90's and early 00's). Furthermore, all of their books are provided in physical and ebook format. They also have a MEAP program and it gives you the ability to access "in progress" books before they are officially released.
Not all the resources have to be purchased, nor do they have to be books to be high quality resources or valuable resources. Here are some other types of resources you could use:
Using Google Book Search for Technical Resources
Google has been scanning a huge amount of books and uploading them to the Internet and providing users the ability to view them. Google calls this project Google Book Search. They also provide a rudimentary way of paging and searching the books. What this means is that there is a huge number of books available online including many technical books. Furthermore, mobile access has started being offered to some of the books (I am sure that this will include all books in the future). Mobile access means that the book is formatted for a smaller screen. However, an iPhone or a mobile device with a full feature browser can browse the book just fine in the window. This is definitely the future in taking your technical resources online, as nothing needs to be downloaded or persisted to the hard drive. The books live "on the cloud" and all you need is internet access to start viewing what you want.
Browsing Google Book Search with the iPhone for technical resources
Google is touting its breakthrough agreement with authors and publishers to provide access to these books on the Internet. They have several access categories of books and the recent technical editions are all likely copyrighted. What is interesting is that Google's Book Search allows you to page through the book and randomly insert a statement that the book is copyrighted or these pages are missing. However, if you go back to the screen in a new browser window, you can go back and access that page again. (Hint: If you use a tool like Fiddler/Web Development Helper, it's not hard to see what is going on). Essentially, what I am saying is that even the copyrighted books are available for you to browse and download. I am not advocating this. In fact, I would be mad if I were an author and had my book up there and people reading it for FREE. I think that Google needs to address this loophole in Book Search.
Summary
In this article, I showed you how you can move your developer resources to electronic format and access them using a mobile device. For any developer that wishes to take his resources everywhere and access them anywhere, this is a must. There is so much out there to learn and consume. Combing the ability to consume resources using a local viewer or from "the cloud" using Google's Book Search service will allow you to consume more information. Having your resources organized on your mobile device will help someone who is an "information junkie" or who wants to be more efficient in accessing their resources faster. While this article targeted the iPhone device, I am sure you can do the same with some of the more recent mobile devices and Windows Pocket PC devices.
So what I am reading now?
Happy reading.
Windows 7 - Should a developer invest in the upcoming OS?
- Introduction
- IIS 7.0
- 64-bit Computin
- Virtualization
- DirectX
- Windows Azure
- Conclusion
Introduction
Windows 7 is the next Windows version being released by Microsoft this year. It is already getting a ton of positive buzz from the community about how much better it is than Windows Vista in terms of performance and new features. However, looking at the features currently being announced for Windows 7, many of these appear to be visual tweaks and there aren't many new revolutionary features being added. This is why many people (including myself) feel that that Windows 7 feels more like a service pack to Vista rather than a new OS.
Microsoft not only adds features to the OS, but additional OS add-ons sometimes are only provided to the "current" operating systems. This is especially important for developers who rely on their development environments working properly on the operating system in which they decide to invest. Developers (especially web developers) also need to concern themselves with developing on workstation environments that have server equivalents. For example, Vista has IIS 7.0 and it is the server equivalent of the IIS in Windows 2008 Server.
Windows 7 builds on Windows Vista and its feature set. Therefore, when evaluating Windows 7, it is also important to consider the features Vista has added. Below is a list of items I came up with that I feel are important to developers working on the Microsoft platform. Obviously, depending on what you do, some of these things might be more important than others.
IIS 7.0 (Vista & Windows 7)
IIS is Microsoft's web server platform (If you don't know what IIS is, you probably got here by mistake). IIS in its early days was decoupled from the Operating System. However, since Windows 2000, Microsoft has essentially coupled the version of IIS with the OS offering. The current offering of IIS is version 7.0 and it offers a huge number of benefits over IIS 6.0. Version 7.0 is currently available for Vista, Windows 2008 and Windows 7 users. IIS 7.0 has its own team in Microsoft, and the team is actively rolling out new features in updates/service packs to the operating systems. These enhacements are geared towards the server operating systems; however, they need to roll the features into the workstation OSes (Vista, Windows 7) as well since not every developer can afford a "legal" license of Windows 2008 Server. A good example of this is Vista SP1 bringing IIS 7.0 features to match the server equivalent of Windows 2008 Server IIS 7.0. This is pretty important if you are targeting hosting your application in IIS 7.0.
Picture from Tim Sneath's article on comparing IIS 7.0 before SP1 (left) and after SP1 (right)
Why should you care about IIS 7.0? IIS 7.0 has huge performance improvements over previous IIS verions, security improvements, new features, etc. This article is not about how great IIS 7.0 is. Needless to say, it is a platform developers need to start considering more when designing their architecture/hosting strategies. Microsoft also recently announced a service release to IIS 7.0 which will be included in Windows Server 2008 R2. One of the key enhancements to this version is the ability to support multiple CLR versions at once (.NET 4.0). This will obviously be a big change that developers need to worry about. Furthermore, Microsoft announced during the PDC 2008 that some of the features of WCF 4.0/WF 4.0 will require WAS (Windows Process Activation Service). Therefore, having an OS that will support some of these features will be critical for developers to be able to develop, publish and test their work locally.
The question does remain: Will Vista get all of these new changes and get all future IIS enhacements or will they eventually be rolled into Windows 7 only? There is a service pack 2 slated for Vista later this year. So my guess would be that it's safe to assume that the recently announced service released to IIS 7.0 (7.5 ?) will probably be rolled into that service pack for Vista.
Important Note: You do have to be very careful which version you purchase of Vista/Windows 7 in order to enjoy all the benefits of IIS 7.0 on a workstation OS. This is a good link to the features in IIS 7.0 available on Windows 2008/Vista. As you can see, the Ultimate/Business versions of the OS pretty much have all the features that Windows 2008 IIS 7.0 offers.
64-bit computing (Vista & Windows 7)
64-bit versions of Microsoft's products have been around for a while now. However, older 64-bit OSes (i.e., Windows XP) gained little traction because of limited driver support and the hardware back in 2001 was limited in 64-bit offerings. This has all changed recently because almost every recent server/workstation hardware is 64-bit compatible. Furthermore, 64-bit OSes are much more stable and have a greater range of support. Vista and Windows 7 do a great job of supporting 64-bit on a workstation.
The biggest benefit of running a 64-bit OS is that you gain more addressable memory and can actually utilize more than 4 gig on your laptop/workstation. This can be a huge performance boost if you're running memory hogs like IIS, virtual machines, SQL Server, etc. Furthermore, certain enterprise applications love what 64-bit offers. For example, some of the tests I ran on SQL Server 2005/2008 show that 64-bit vs 32-bit gains an extra 10-15% in performance. For people who run really large systems (i.e., data warehouses with large amounts of data), this can add up to minutes/hours of processing time saved.
64-bit is the current platform for enterprise applications. There is no extra cost for the 64-bit premium and as I mentioned before, almost all current hardware is already 64-bit compatible. Application architecture seems to be the only road block preventing 64-bit adoption and it is a no-brainer for new projects. This is also important as some of Microsoft's enterprise applications are 64-bit only (i.e., Microsoft Exchange) and in the near future, this trend will continue. I could see some version of SQL Server/WCF/WF/Biztalk in the near future to be only available for 64-bit processes, and you do not want to have a development environment that can't handle it.
Virtualization (Vista (basic) & Windows 7 (full))
Virtualization used to be a buzzword a couple of years ago. Now its benefits are coming into fruition big time via enterprise support and implmentations. I remember a few years ago being at the SQL Server 2005 launch event and noting how Microsoft stressed that all their presenters were presenting for the first time with the same exact Virtual PC image. The beauty of this was one single image set up properly with all the necessary demos was distributed to all the presenters and all they had to do was fire it up and they knew exactly where everything was (no self-installing or maintaining their own software). This is a trivial example of how virtualization can help a company succeed in delivering a conference; but virtualization's key benefit: isolating environments and making them deployable to multiple workstations.
Windows 2008 Server x64 allows you to host Microsoft's software virtualization implementation called Hyper-V. What makes Microsoft's virtualization offering unique is that it is essentially a free add-on ($27.00 extra per OS license) to Windows 2008 Server rather than a hardware/software investment from vendors like VMWare. Vista SP1 does allow you to manage Hyper-V with an add-on and this obviously allows you to connect/manage different virtual image settings.
However, Windows 7 will take virtualization to the next level. Anyone who has played with Microsoft virtualization offerings can note that local images are stored as VHD files. Essentially, what users have done before is they have been able to copy this VHD file and load it almost like an application from their current OS. The downside of course is that your main OS has to allocate its share of resources and the image takes up a lot as well. In Windows 7, users will be able to directly boot to a VHD bypassing loading their main OS. It will be essentially like having another OS partition available (only this one will be virtual).
If Microsoft can streamline the configuration and booting process, this will be a huge win for them in the virtualization space. Microsoft already releases a lot of their beta products with virtual machines. A great example of this is the Visual Studio 2010 (.NET 4.0, VS Studio, C# 4.0, WCF 4.0, etc.) image. The entire environment is already pre-installed for you and ready to go for you to test out. This example can be taken much further. In your specific companies, you can deploy full-blown developer environments to their local workstations with all the software pre-configured. I always have these conversations with developers; "works here fine" or "blows up on this machine, don't know why". Having the ability to create and isolate a development environment correctly once and deploy it to all your developers is a big win for productivity. Vendors like VMWare already allow you to do this; however, with Windows 7/Windows 2008, the ROI of virtualization will be far greater.
Windows 7 and Windows 2008 have kernel enhacement changes made to their OSes, so they understand running hyper-v/virtual images without loading the whole OS. Windows 7 developers won't have to load an entire OS and then load a large image and carve out large amounts of resources to run that VM (i.e. 2 gig of RAM). This should make running virtual images very performant and a very attractive way to distribute external/internal development environments.
DirectX (Vista and Windows 7)
For Gaming & Multmedia Development
DirectX is a set of APIs offered by Microsoft for multimedia and game programming. DirectX is a good example of how Microsoft gets into the game and simply crushes the competition. Since the last few versions, there is no other framework that includes all the multimedia features that DirectX does.
Well before Vista's release, Microsoft was touting how they were adding a new fresh DirectX 10.x that was fully re-written and I heard interviews with product managers claiming 50% performance improvements. Seemingly, just like everything in Vista, this fell well short of the enhaced expectations. Since then, Microsoft announced DirectX 11 which will be available for both Vista and Windows 7 OSes. DirectX 11 is really exciting because it includes true multi-threading support (I was really suprised that DrectX 10.x doesn't do this really well). This is probably going to be the biggest performance boost to gamers: All higher-end gaming rigs are now quad core (or better in the future) processors.
If you are not a game/multimedia developer, you probably don't care about this too much. However, if you are in the gaming industry, this is obviously a cornerstone of picking the proper development OS. However, having said that, what true hardcore developer isn't a gamer at heart? I know that right next to all my SDKs and APIs, I have just as many cutting-edge games installed. Crysis on my 2560x1600 30" monitor looks really nice :)
For WPF
WPF for example leverages DirectX as its rendering engine for some of its tasks. I am not sure how this will progress as new versions of WPF materialize (.NET 4.0). But it is probably safe to assume that some of the effects/shaders you will be able to use in WPF will probably rely on DirectX specific versions. A good example of this is the WPF Effect Library which uses the DirectX engine's pixel shaders for some neat effects. Currently, you do not need Vista/Windows 7 to execute these effects. However, DirectX 10.x includes Pixel Shader 4.0 and DirectX 11 includes Pixel Shader 5.0. Obviously, as the pixel shaders include more capabilities, it is safe to assume some of these effects will be consumed by WPF. Therefore, you will eventually need a higher level shader in order to do some of the more advanced effects.
Clear example of Pixel Shader advances (2.0 vs 3.0)
This is also something to note for Silverlight developers as in Silverlight 3 we are supposed to get "hardware" acceleration and 3D support. The easy way to achieve this is by using DirectX engine under the covers. However, for compatibility, this would probably kill a lot of Silverlight's features on a Mac. I don't know if there is more information on this, but it is something to look out for if you are a WPF/Silverlight developer.
Windows Azure (Windows Vista & Windows 7)
Windows Azure is Microsoft's Web/Cloud OS that was announced at the PDC 2008 in October. Windows Azure combines cloud storage in Microsoft DataCenters with several enterprise services. Applications created for Windows Azure can be consumed via the web or on the desktop/mobile devices via an Azure client. This is not meant to be an intro to Azure; however, if you want to quickly get a high level understanding of what Azure is all about, I recommend checking this article out: Windows Azure - Breaking It Down.
To get started with Windows Azure, you need to install the Azure SDK (The full version is currently under private beta). The catch is that you need Windows Vista SP1 in order for this to work. There is a great thread here that explains the details, which essentially boils down to having certain IIS 7.0 processes "simulate" the cloud environment. Included there is also a link from someone who was able to get it to work on XP. Obviously, the supported version is only for Windows Vista SP1 currently (and eventually Windows 7).
Note: Windows Azure is a brand and what it will exactly include is still up in the air. Not everything is based in Azure. For example, certain parts of Azure and features like Live Services DO NOT/will not have a requirement of Vista/Windows 7. However, trying to guess what those items are months before Azure is released is anybody's guess (maybe except at Microsoft). Microsoft is moving more and more things into the "service offerings". For example, last week (January 23rd) Microsoft announced that the ProClarity BI product (which allows end users to build Dashboards/Analytics/Scorecards) will essentially be moved as a service under SharePoint. Maybe Microsoft offers a similar service for Azure developers (?)...kind of how Google allows users to use analytics/BI for Google Analytics.
Other
There are obviously numerous other examples and productivity enhancements included with Vista and Windows 7 for developers. Windows 7 performs much faster than Vista in most benchmarks. It will include a new TaskBar which is programmable for minimizing clicks, etc. If you are a driver/SDK developer for a particular OS, having the OS installed is obviously a no brainer in these kind of situations. Windows Vista also includes additional cryptography enhacement. All these things are important; however, they seem to be geared towards a smaller developer audience.
Jump Lists in Windows 7 (imagine Visual Studio 2010 or other dev products with nice lists)
Conclusion
Windows 7 is going to build on a lot of features that Vista already includes for developers. Many of these features already exist in Vista and Windows 7 will merely enhance them. If you are working with Vista, you can take advantage of many of these features. Development shops on Windows XP need to seriously evaluate their upgrade paths for their next OS. Vista is a good choice if you want to get started on any of these new upcoming technologies (i.e., Azure). However, waiting for Windows 7 might be a better choice as it will extend the next time an upgrade is required in the OS lifecycle. Windows XP is clearly showing signs of a "semi-supported OS". Microsoft likes to suppport the latest two versions of any product. Once Windows 7 comes out, developers have to be very cognizant of this that the new upcoming beta/SDK might simply not work in their Windows XP environment.
Windows 7 - Should a developer invest in the upcoming OS?
Windows XP or earlier: You need to plan for this accordingly as XP will be missing some big features geared toward .NET developers in the short term. Upgrading to Vista/Windows 7 is largely a personal choice (if a consultant) or a corporate choice (if on a work computer). Not upgrading to a "current" OS also presents the developer with the danger of any new upcoming SDKs or even the .NET framework future versions not being supported.
Windows Vista: Windows 7 simply enhances some of the features previously introduced in Vista. If you are on Vista, you won't gain much as a developer in terms of pure features. However some of the virtualization, performance and possible IIS 7.5 extensions might warrant an upgrade at least on your second development environment.
Note: Uses who purchase a computer with Vista after July of 2009 will get a free upgrade coupon for Windows 7. Furthermore, I recommend any developer to attend Microsoft's launch events. I have gotten a couple licenses of Vista Ultimate this way, they are given away to attendees for FREE amongst other software. Microsoft recently started giving away software (full versions) about 3-4 years ago at their events.