With v4.5, zip archival handling comes natively to .NET. No longer do you have to rely on 3rd party components to create, manage and extract zip files, though most of them are free.
The types you require to manage zip archives reside in System.IO.Compression namespace, in the System.IO.Compression.dll assembly and those types are ZipArchive and ZipArchiveEntry. The first one represents the zip file as a single entity while the latter represents an individual file in that zip. Note that ZipArchive acts like a pass-through stream, which means you should have a backing store (storage stream) such as a file on the disk.

Creating a zip file and packaging one or more files into it is relatively straight-forward. The following code creates a new zip file, Summary.zip, containing a single content file CS Summary.ppt.

You may provide a relative path in CreateEntry if you would like to keep files in hierarchical way in the archive. The following code iterates a zip file's contents and gets few basic details about each file in it:

Extracting a file from the zip archive is as easy as packaging one into the archive but just in opposite direction:

If you notice the above code listings for reading and writing zip files, we are dealing with multiple stream objects, even to create/read a single archive and write/extract a single entry into/from that archive. To ease the whole thing, .NET 4.5 has few convenient types with which you can create and read zip files with fewer lines of code. Basically, these types add extension methods to ZipArchive and ZipArchiveEntry types. Note that you have to add reference to the System.IO.Compression.FileSystem.dll assembly. The following code creates a new zip with a single file in it:

Of course, you can add as many files as you want to the archive by calling CreateEntryFromFile multiple times. As of this writing, this method doesn't support adding an entire folder to the zip just by specifying the folder name for the first parameter (or by any other means).
Extracting a file from zip is as easy the following code which extracts the first available file in the archive (assuming it is not a folder) and saves it to the file system:

MSDN Reference: System.IO.Compression Namespace
I never knew Stack Exchange, the base of many world-popular Q&A sites on varying topics, has so many cool open source libraries. Many of them seem to be performance-tuned for large web traffic. Worth taking a look: http://blog.stackoverflow.com/2012/02/stack-exchange-open-source-projects/
With the introduction of SQL Express LocalDB (part of SQL Server 2012 a.k.a. "Denali"), the available Microsoft SQL database options available now are:
- Regular SQL Server SKUs
- SQL Server Express
- SQL Server Compact Edition (CE)
- SQL Express LocalDB
LocalDB is a lightweight version of SQL Express with zero administration and low installation foot-print. Strictly speaking, LocalDB is not a new SQL Server edition by itself; rather, it is a database engine activation mode in which the SQL Server process (sqlservr.exe) runs as a child of the calling process but without exposing any connectivity surface. The engine runs as long as the parent process runs but as a private named instance. The name of the instance can be anything given at the time of creation. Once started, other applications cannot connect to it unless the instance is explicitly shared by its owner. MSDN says user instance feature of Express editions is deprecated and developers should switch to LocalDB going forward. LocalDB also has an automatic instance which is created & started automatically and public. Any application can connect to it and perform database operations. Technically, this automatic instance is also a named instance with a special name that reflects the engine version; for SQL Server 2012, it is v11.0. Hence, the automatic LocalDB instance is identified as (localdb)\v11.0. Any number of private instances can be spun off from single installed LocalDB bits.
From a programming perspective, the API surface remains the same, be it managed or native. In order to connect to a LocalDB instance, the Data Source keyword of the connection string should start with (localdb) followed by the instance name. Example:
SqlConnection con = new SqlConnection (@"Data Source=(localdb)\v11.0;Integrated Security=true;Initial Catalog=master"); Here is a n00b code!

As with user instances, AttachDbFileName keyword is also supported to connect to a database directly. Output from a SQL Server 2012 RC0 instance for the above code is shown below:

Note the following about LocalDB:
- SQL Express edition is upgradable to higher SKUs, but LocalDB is not. LocalDB is intended to be for developers without the overhead of regular SQL Server installations.
- All the database size limitations of Express apply to LocalDB as well.
- LocalDB instances do not use Win32 services; the engine is loaded on demand by the parent process.
- sqllocaldb.exe is the simple command line admin companion for LocalDB. It supports, creating, starting, stopping & deleting LocalDB instances (you cannot delete an automatic instance).
- LocalDB instances are named, user specific and private (except the auto instance).
- LocalDB stores system database files in user's AppData folder (see below). This means that when LocalDB is used from an application running as a non-interactive user account (including IIS), that user account should be configured to load user profiles, Otherwise, the instance starting process will fail.

- There may be a delay when a local DB instance is created or started for the first time, causing the parent application to timeout.
- Multiple users on a computer can create and start database instances simultaneously using the same installed LocalDB bits. Unlike other SQL Server editions, LocalDB does not require multiple installations for multiple database engine instances.
- Current (pre-SQL Server 2012) versions of SQL Server Management Studio cannot connect to LocalDB instances using server name prefix "(localdb)". Instead they should use the raw named pipe path of the LocalDB instance (this can be retrieved using sqllocaldb utility):

Remember that the part of the named pipe path after # will change with every instance start and hence it cannot be hardcoded in the code. You can also use this named pipe path in the connection string from code. The following is a perfectly valid connection string & connects to the specified local DB instance:
SqlConnection con = new SqlConnection (@"Data Source=np:\\.\pipe\LOCALDB#B7BB9C55\tsql\query;Integrated Security=true;Initial Catalog=NorthWind");
Windows Server AppFabric version 1.1 has worthy improvements over its predecessor version. The first from my v1.1 favorites list is the ability to retrieve data from data sources when the client-requested data is not available in the cache ("cache miss") and also save modified cache data back to the data source - a complete round-trip (Microsoft calls this "read-through & write-behind"). My second one is the option to compress the cached data exchanged between the cache client and the cache server thus improving the network performance.
Similar to WCF, AppFabric 1.1 supports allows multiple cache configuration sections on the client side and choose which one to use in the code. If not chosen programmatically, the section named "default" is used automatically when the cache client starts. This latter is useful when testing cache clients in multiple environments like DEV, TESTING, STAGING and PROD since it requires just a single configuration change. Here is a sample client-side cache configuration section:


Without the above code, cache client will load the default section. If no default cache configuration section is specified and your code doesn't explicitly load a named section either, a runtime error will occur when you use the data cache factory.
Alright, back to the main topic of this post - data cache store provider. AppFabric 1.0 let you rely only on "cache-aside" programming model to handle any cache-miss scenarios. That is, your application is responsible for loading data from the data store (and store it in cache) if that data is not found in the cache. With v1.1, you can let AppFabric itself "fetch" the data from the data source whenever "cache miss" occurs, keep the fetched data in the cache and send it back to the client. Of course, we should fill the "how" part of the fetching process. Turning 180°, AppFabric v1.1 also makes it possible to save updated cache data (if happens) back to the data store. Like the read process, we have to plug in the "how" part of the persistence process.
AppFabric exposes read-ahead and write-behind mechanisms using familiar Provider design pattern. Implement the abstract class Microsoft.ApplicationServer.Caching.DataCacheStoreProvider in your assembly and hook it up with AppFabric cache. Note the following:
- Data cache store provider implementation assembly and its dependents should be deployed to GAC (strong naming implied)
- Provider is attached to a cache at the time of cache creation (
New-Cache) or later (Set-CacheConfig) - Provider class exposes a public constructor with two arguments: a string for the cache name and a Dictionary<string, string> for provider-specific parameters
Let's see a sample data cache store provider using NorthWind database:

AppFabric invokes the constructor in two occasions: (1) when the cache-cluster starts (2) when you attach the provider with a cache using either New-Cache or Set-CacheConfig. The Delete method is invoked when you remove a cache item from the cache (DataCache.Remove()).
Now the crucial part: the read and write methods. Let's implement the data store read methods first. Note that there are two overloaded read methods:

As said earlier, the reads methods are invoked when a cache item with requested key is not found in the cache (from my experiment so far, AppFabric usually calls the first overload). In order to make both methods behave consistently, the collection overload of read method internally calls the simple read method. A null return value from the simple read throws an exception on the cache-client! Let us complete the write methods as well.

Write methods are invoked when cached items are updated by cache clients (for example, calling DataCache.Put()). Unlike read, write and delete methods are not immediately called when cache items are updated or removed. Rather, AppFabric calls them in (configurable) regular intervals.
The final piece the Dispose() method:

Pretty straightforward! :-)
Assuming the provider assembly builds successfully and provided a strong name, you can associate it with a new cache as below (you can also use Set-CacheConfig cmdlet to enable or disable the provider for a cache):
New-Cache "ProviderEnabledCache" -ReadThroughEnabled true -WriteBehindEnabled true -WriteBehindInterval 60 -ProviderType "MsSqlDataCacheStoreProvider.CoreDataCacheProvider, CoreDataCacheStoreProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=21b666fac19955ad" -ProviderSettings @{"conStr"="Data Source=(local)\SQLEXPRESS;Initial Catalog=Northwind;Trusted_Connection=True"}
If everything went ok, the new cache should have been created with a data cache store provider enabled and attached to it. The most common reason for failed provider configuration is that one or more dependent assemblies (other than .NET framework assemblies) of the provider assembly missing in the cache host's GAC. Needless to say, you have to deploy this provider assembly (including its dependents) on all cache hosts.
Points to note:
- When the GAC is updated with a newer provider assembly, you have to restart the cache cluster for the new bit to get effect.
- You do not have to implement both read and write methods. For example, if your cache has only read-through option enabled, you may just have empty write methods. Similarly, when you have only write-behind enabled, your read methods can be placeholder implementations.
- Cache clients are not notified of uncaught exceptions thrown from write methods.
- Provider class should have a public instance constructor that accepts a
string and Dictionary<string, string> as parameters. Otherwise, the cache cluster will not start or will render unpredictable behavior.
Google celebrates 10billion + app downloads today. To mark this, it is giving away some great apps for just 10 cents ($0.10) for the next 10 days starting today! Some popular games and apps are for picks already! I got myself SoundHound Infinity!! :-) Watch out http://android-developers.blogspot.com/2011/12/10-billion-android-market-downloads-and.html for updates for next 10 days!!
While working on a SQL Server change notification library (for cache invalidation) recently, the SqlDependency change notification handler kept receiving a notification with SqlNotificationEventArgs.Info = Options, SqlNotificationEventArgs.Source = Statement and SqlNotificationEventArgs.Type = Subscribe thus failing with the subscription process. Using the lead SqlNotificationEventArgs.Info = Options, further diagnosis revealed that one of the SET options required for SQL Server query notification was not correct. The offending option was ARITHABORT, which was set to OFF (connection default) but should be ON. Except this, other SET options were correctly set by default however.
The obvious solution is to explicitly turn on ARITHABORT on the connection that would be used for notification subscription.

Please note that ARITHABORT should be set before running the SQL query to be monitored, otherwise the subscription process will still fail as above.
A very good read I came across after a long time that throws out lot of thoughts to ponder upon: http://codingthearchitecture.com/presentations/skillsmatter2011-the-frustrated-architect/
All right, mine is an open-market (pure Dell factory unlocked, no hacks/workarounds) Dell Venue Pro Windows Phone purchased in India. As excited as others, I thought I would update my device too to the latest greatest Mango RTM version. Since Microsoft didn't say DVP is not ready for Mango in its International Phone Update site (the US version does say Mango update not available for DVP) and the build number is different for international update (7.1.7720), I believed it would play well and ventured ahead to force update my device. After roughly an hour, every phone update symptom was positive: the device threw a successful update message, Zune showed the new Mango build from my device and the new default wallpaper on the phone was also changed to a mango pile photo. I was so excited and was just a touch away (well, six touches – SIM PIN) from diving into the Mango world!! After a second I touched the first digit, gosh… the DVP restarted itself!! Well, waited for it to come back to the SIM PIN number pad, tried again touching it – well, it restarted again. Thinking I messed up the update, I reverted to previous version via restoring in Zune. After consciously watching for about an hour and made sure the update went into the device well, I again touched the screen – huh, the device pressed itself for restart. Well, even third time was not a charm for me and finally I stayed with the old version itself (7.0.x).
Bottom-line – Dell Venue Pro is not ready for the latest Mango update yet!! It just doesn't like your touch yet! :-) I do not know if there was any success story yet! Please leave a comment if you know about one!
When Dell said they would support Mango later this Fall, I didn't realize they literally meant it!
Let's get it right. Virtualization is about reducing the physical footprint of IT infrastructure and maximizing the utilization of the same. It helps to drastically reduce cumulative maintenance and onetime procurement costs of physical hardware. Since a virtualized environment (VE) is a logical representation of a physical environment hosted on real hardware and sandboxed, it makes practically possible to host multiple VEs on a single physical computer and an enterprise's business and IT applications can be consolidated on to fewer physical hardware:

Virtualization helps in reducing infrastructure complexity (less hardware), power (more green) and cuts overall operational overhead.
Cloud offers the same infrastructure & cost benefits of virtualization - reduced physical hardware and associated operational/maintenance overhead. Almost all the cloud service providers today have implemented their cloud platform using virtualization and that is what confuses people more about virtualization and cloud. Simply put, virtualization is one of the ways of implementing cloud. In other words, nothing stops one from implementing a cloud infrastructure with hundreds of blade servers instead of virtualization, for example. Not just that, cloud enables sharing compute power/resources - RAM, disk space, processors, network bandwidth from a central pool of those resources on-demand basis.

US Federal Government's National Institute of Standards and Technology (NIST) lists the following characteristics as essential for cloud model:
- On-demand self-service (cloud provisioning by consumers themselves)
- Broad network access (from a variety of/heterogeneous devices and software apps)
- Service usage to be measurable (monitoring & measuring resource usage - CPU, memory, disk space, network bandwidth, etc.)
- Elasticity (Cloud resources to be easily provisioned for increased & reduced load)
- Resource pooling (Computing resources pooled to be able to transparently share among multiple cloud consumers based on their demand)
As you can see, the above require capabilities much more than just virtualization part.
Think virtualization & cloud computing in parallel to classic ASP.NET web services & SOA. While ASP.NET web services are a means of realizing SOA, they are not SOA by themselves.
The whole Internet is buzzing with Steve Jobs' resignation as Apple CEO and the possible effects it might have on Apple and its products. There are people who hate, admire, get inspired and feel hatred about him. But, someone who shaped and revolutionized the digital world with his products not in the seat of CEO doesn't mean of his company doesn't mean end of all. In fact, he will continue to be with Apple but might not be in the same capacity and not so close to the team, due to whatever reason and I respect. In my opinion, Apple will continue to amaze the world because Steve has sown the seeds already.
- It's not Steve who designed iPhone, iPad, iPod, etc. all by himself but his talented engineers he assembled, motivated and inspired for so long. The core skills he has implanted for decades in Apple makes him the leader.
- Simplicity & user-centric design: Steve and Jonathan Ives (VP of Design) have created for Apple better than anyone for any company. I would say simplicity is Steve's signature style. Form-factor and design of today's many Apple consumer products will tell the success of Steve & Jonathan!
- Not many have given so much importance to usability as Steve & his team have.
- The culture of always looking for better things without settling for what they are, that he has infused into the organization and imbibed by many in Apple today will go a long way.
- Of course, it was not with failure also (Steve is good in accepting failure too)! Apple had some not-so-great products but as everyone else it learned the lessons, recognized the potential and applied both in future vision!
- In my perspective, Steve is a leader of innovation: from the bare metal lab to consumers' heart, he has paved way for unique "experience" in everything in between. Innovation is not always about new things, but doing things differently too!
- With due credit for other companies and individuals, Steve has set the standard for today's mobile devices, be it a phone or a media player. Not just the devices, the applets on them, developing those applets, bringing them on to devices, advertising and making everyone profit from the whole ecosystem was the result of Steve and his team!
I am always inspired by this man of "innovation for simplicity"! Hats off to Steve!!
As I noted in my previous post, before an organization starts spending a penny for EA, it should identify the real needs of EA from various perspectives and figure out subjectively the impact of having or not having EA and ways how EA can be sustained on a long run. Think about this: are there too many systems running to fulfill the business needs? If yes, then there are chances of inconsistencies among those systems and spending lot of budget on maintaining them. What is the justification for their existence? Perhaps an integrated solution such as ERP or CRM could replace many of those applications and save cost quickly - a critical output that can come from EA (there wouldn't have been so many systems and move to an integrated suite after spending lot of money on maintaining for so long, had there been EA in the first place!).
- EA is a multipronged approach to optimize business operations with the help of IT and it is a transformational work, hence the business is likely to realize the EA ROI only after months or years.
- Let alone the immature and yet evolving state, unless EA is accepted and owned totally, ROI is hard to realize even after months and years – better stick to the rules!
- Identify all the benefits EA adoption/implementation will bring in and assess each of its values, which will ultimately tell you how successful your EA is. Example:
- Reduced manual work/optimized workflow/automated processes all saving employee time translating to per hour cost saving or quicker time-to-market
- Removing or linking redundant systems, saving associated hardware, software & maintenance cost
- Consolidation of business units to remove duplicate business processes, services, work force, etc.
- Buy/build a new system (additional cost) but will show the cumulative benefits (better ROI) in future
- Processes/tools/models for improved service quality/better customer satisfaction resulting in more revenue
- Risk avoidance, regulatory compliance for improved corporate governance
- System integration for real-time data/reports/analyses in order to enable the business to make strategic decisions on time before the competition gets there (strategic agility)
- Success criteria vary for each core organization dimension (business/strategy, IT, finance, operations, compliance, sales/marketing) because each one's priorities, objectives and definition of success are different. ROI can be effectively measured only if the framework includes all stakeholder metrics/parameters.
- Determine when to measure the EA maturity in the adoption lifecycle and the depth of measure (project level Vs. function level Vs. division) for accurate depiction of the reality
Measuring EA's success and validating ROI is not possible if its decisions do not result in tangible business benefits and measurable impact.
Weeks back I had an opportunity to watch a panel discussion on why businesses haven't fully accepted enterprise architecture holistically (or why enterprise architecture discipline is in the way, it is today) and some top challenges around enterprise architecture/architects (EA) today. It was great to see some top folks from major IT organizations in the panelist group talking about their experience and knowledge in evangelizing EA in their own organizations as wells as their customers.
The Crux
The summing point of all is that almost every organization that has embarked on enterprise architecture journey are in the same boat: they know the problems surrounding enterprise architecture but do not know how to address them strategically and bigger than all is the lack of buy in from business for EA. Businesses don't see EA as a value add but as just part of the IT organization and such a situation could prove costly for them down the years. One of the points made out in the discussion was that architecture is most often seen as an ad-hoc task: architect walks in, recommend architecture and solution, leave and that's all. In order words, architecture is considered as a project management-like activity rather than a value-adding long term engagement. It's partly to do with architects themselves:
- They have different professional attributes and each one's viewpoints towards problems vary (generally influenced by the organizational culture and technology disciplines they work with most) without willing to compromise
- Often work in silos without engaging other stakeholders
- Tend to not communicate well
- "My way or the highway" kind of style - not every so often will you see architects coming to a common ground - if you talk to N number of architects about a problem, chances are that you get N different solutions
Enterprise Architect Qualities
What qualifies someone as an enterprise architect ultimately? The definition of "enterprise architecture" itself varies for every organization and so are its roles and responsibilities, let alone the human part. As a panelist noted (and I agree too that), enterprise architects need to possess behavioral skills and domain knowledge in addition to being technically savvy. The last part is sometimes optional, since enterprise architects involve with bigger scheme of things in enterprise IT including strategy roadmap, aligning IT investment with business and bridge IT and business. Nevertheless, he/she should be able to blend with upstream (business exec.) and downstream (technical/IT) crowd. Some view EA is something to do with IT and not the business, which is not the case by any means. Instead of giving fairy tale pictures of how things should work and the IT utopia, EAs have to work at detailed level (not coding), see through the ground reality (collect metrics, analyze & give constant feedback to the teams) and enable the business make informed decisions. EA is political too as it requires performing balancing act between multiple departments, divisions and stakeholders. Today, enterprise architecture looks arbitrary as opposed to be not being so!

Is EA Required?
First of all, an organization should do a self-check to see if it really needs EA. Think about the cost of not having EA than funding it (or vice versa). If the organization is not looking for a "change", namely cutting cost, improving operational efficiency, service excellence, merger & acquisitions, etc. then it may not require EA at all. If deemed necessary, then the next hurdle is to get the buy in of all the stakeholders because people will not be ready to give up what they have owned to someone else, if EA requires it, for example. Next, there is no guarantee that EA will result in desired business success due to dynamic nature of the enterprise (people, process, technology, supply, demand and customer), thus delivering potentially outdated recommendations and unusable frameworks. Finally, who is responsible for "selling" EA into the whole organization and sponsors it? EA is marked for failure when the business doesn't commit required resources (human, budget and time), faces resistance to change from the down-level, expects immediate ROI and lacks readiness for EA.
What about the "ROI" aspect of EI? Stay tuned.
One of my favorite bloggers JDM has put down beautiful lessons learned from the unique man Steve Jobs here: http://goo.gl/3KrM2
Here are my most favorite ones from JD's list:
#1 "Beginners don’t have baggage." – When you free of worries, big list of things to do and tough targets to achieve, it really frees you up to think a lot and plan for yourself. As JD says quoting Steve, you can be more creative also!
#4 "Design by committee doesn’t work" – It’s not a matter of assembling a group of experts and asking them to think for the end users would like. Rather ask the users directly with options and ideas! That will in turn make the users “fine tune” what they want and tell you about it! I have also practically seen this with many of the customers. Unless you show/tell them of what a feature or a product will look like, they are clueless. And doing so helps them streamline their thoughts around the “themes” of ideas you have shown.
#6 "Don’t live someone else’s life" – Well said. Many people want to be someone else without looking at their own value and capabilities. Be your own!
#9 "Get out of the way for the moving force" – Be an enabler for your people.
#10 "If they fall in love with the company, everything else takes care of itself" – Make your employees feel passionate about working for your organization and let them feel the value and worth of it. Goes with #9 also.
#22 "What you don’t do defines you as much as what you do" – Doesn't need much explanation!
Overall, I like all of JD's. Don't miss his post and you can also read his excellent book “Getting Results the Agile Way” online here: http://sourcesofinsight.com/getting-results-the-agile-way/
Of late, I have been making my hands dirty with iOS development and obviously Objective-C. Coming from .NET/C# background (lending the OOPS knowledge) and knowing the C language already (pointers, memory, etc.), learning Objective-C was not difficult for me; just that I had to get accustomed to the “odd” syntax and a few conventions of the language and the environment. In fact, Apple has got an wonderfully superb documentation of the language and the surrounding frameworks (iOS and Mac) and libraries and as such with good time investment, one can get to it easily (well, I am still on the learning curve of the whole thing)! The only area where I stumbled a bit was the memory management (yea, I badly missed GC) area but all along it was a good experience and interesting to manually “pilot” the aircraft instead of putting it into “auto-pilot”!
With whatever I have picked up in the language and the iOS platform so far, I thought I would develop a super-duper simple application and that is Color Mixer on iPhone :-)

I know it is just a K-school app but having been pampered by Visual Studio, C# and .NET and enjoyed its luxury for years now, developing this one without that much pampering was bit of an exercise and exciting too for me!
A new tool that enables you to create a single assembly shat can be shared by multiple .NET runtime environments, namely Silverlight, Windows Phone 7 and XBOX Gaming. Of course, you can target the desktop .NET runtime also when building class libraries but since the former ones include only a subset of the desktop .NET runtime, you only get the common denominator assemblies.
Download | MSDN Documentation
Microsoft officially released first video previewing its next windows OS version. From the video available from its PR site, it looks like the new OS will have a completely new UI starting from the Start button. Inspired by the Metro theme of Windows Phone 7, Windows 8 appears to have a deep integration with social networking and more adapted for touch UIs.
See the video from here: http://goo.gl/skmNq
Some (official, not ripped or scanned) free e-books form MS Press: http://goo.gl/9GcD2
There are eight e-books ranging from development, IT and Office.
Today my Dell Venue Pro popped up a message that a new update is available.

Since my DVP came with Copy/Paste feature update out-of-the-box, I am not expecting anything significant from this update. The Zune software also detected the update (including one for itself):

It took about 45 minutes to download, backup current phone and finally complete the update (phone backup took the most). After update, here is the updated version info:

All went well!
Just installed the GM seed of iOS 4.3 on my iPad. As announced in the recent iPad2 release, the new version has two new options:
- Set the side switch (the one above volume key on the right side) functionality: Mute or Lock Rotation.
- Sharing your iTunes library with any iOS 4.3 device (within the same network)
The multi-tasking gesture function that was originally announced to be a developer preview feature, now looks to be making its way to the final release also.
Here is the option to set the 1st feature:

The multi-tasking feature basically lets you switch between open applications with left/right swipe and see the open application list with 'swipe up'. You can still double-press the Home button for the latter.
Now the 2nd - Home Sharing: This option as you probably know, lets you stream your iTunes library on your PC or Mac to other iOS 4.3 devices in the same network. In order to do this, you should first enable Home Sharing in iTunes (I did this in iTunes 4.2/Windows 7):

You will also be required to login with your Apple ID when you turn on Home Sharing. Once done, you can enable Home Sharing on your iOS 4.3 devices and see the shared iTunes library; you should again login on the device with the same Apple ID used for Home Sharing in iTunes. Let me repeat: your iTunes host PC/Mac and iOS 4.3 devices should be on the same network.

After providing the same Home Sharing Apple ID, open your iPod application to view the shared library:

Select your shared Library and you all set to enjoy your iTunes home sharing/streaming!! (the albums you see below are from my iTunes library on my Windows 7 box)

I am yet to install the 4.3 GM on my iPhone. Not expecting any surprises…
More Posts
Next page »