- Table of Contents
- .NET Book Recommendations
- What Is .NET?
- The Microsoft .NET Framework
- The Common Language Runtime (CLR), the Common Type System (CTS), and the Common Language Specification (CLS)
- .NET Framework Class Library
- Visual Studio .NET
- .NET Enterprise Servers and .NET My Services
- .NET Compliant Languages
- C#
- Visual Basic .NET (VB .NET)
- ASP.NET
- XML Web Services
- ADO.NET
- XML.NET
- Windows Forms
- Why .NET?
- Displaying Errors with the Error Provider
- COM Interoperability
- Comparing Java and .NET
- Calling Unmanaged Code
- .NET Application Security
- Code Access Security
- .NET Standards Support
- Numeric Types in the .NET Framework
- Working with Strings
- Formatting Strings
- Trimming Character Strings
- Comparing Strings in .NET 2.0
- Arrays and Collections
- Arrays as Class Members
- Sorting a Multi-Dimensional Array
- Sorting a Multi-Dimensional Array with LINQ
- File I/O (System.IO)
- Working with File Names
- Using the File System
- Working with Files and Directories
- Monitoring the File System
- Working with Streams
- Working with Text Encodings
- Working with Date and Time
- Extending the DateTime Class
- Fun with Dates
- Exceptions
- Delegates
- Events
- Asynchronous Programming
- Asynchronous File I/O
- Timers
- Random Numbers
- Cryptographically Secure Random Numbers
- Serialization
- MultiThreading (System.Threading)
- Multi-Threading Overview
- The Managed Thread Pool
- Managed Threading
- Thread Synchronization
- Synchronizing Data Access
- Trace Debugging
- Tracing in .NET 2.0
- ASP.NET Trace
- Validating User Input in ASP.NET Web Pages
- Event Logging
- Monitoring Application Performance
- Accessing the Registry
- Accessing Environment Information
- Environment Variables in .NET 2.0
- Managing Windows Forms Applications
- Working with Email
- Working with Graphics
- Animating a Background
- Working with Images
- Drawing Cycloid Curves
- Simulating the Spirograph
- Building International Web Applications
- .NET Compact Framework
- Mobile Web Development with ASP.NET
- Speech Technologies
- Microsoft MapPoint Web Service
- Working with Typed DataSets
- Using Relationships in DataSets
- DataColumn Expressions
- Playing Simple Sounds
- Playing Sounds with .NET 2.0
- Returning an Image in a Web Page
- RSS
- Best Practices Project Structure
- Best Practices Application Blocks
- The Data Access Application Block
- The Exception Management Application Block
- Best Practices — Performance
- Best Practices — Performance and Scalability
- Best Practices - Testing
- Reading the Tea Leaves, 2005
- Predictions: A Look Back at 2005, and a Look Ahead to 2006
- .NET Downloads
- Application Deployment Overview
- Application Deployment — Versioning
- Application Deployment — Version Policy
- Application Deployment — Packaging and Distribution
- .NET Remoting Overview
- A Remoting Demonstration
- Remoting Configuration
- Remoting: Lifetimes and Leases
- Remoting: Other Issues
- Attributes
- Writing Custom Attributes
- Accessing Attributes in Code
- Reflection
- Class Design: Inheritance, Interface, or Composition?
- The TriTryst Game
- Console Applications in .NET 2.0
- New File I/O Methods in .NET 2.0
- Building Projects with MSBuild
- Unmanaged Callbacks in .NET 2.0
- Timer Troubles
- Non-Rectangular Windows Forms
- Windows Forms Transparency
- 10 Things I Hate About Visual Basic
- 10 Things I Hate About C#
- Background Processing with Idle Time
- Scaling Windows Forms
- Reading and Writing Binary Data
- New Memory Management Functions in .NET 2.0
- Compatibility Between .NET 1.1 and .NET 2.0
- Managed Debugging Assistants in .NET 2.0
- XDir: A Program for Viewing Directory Sizes
- The Microsoft.VisualBasic Namespace
- Operator Overloading
- Working with GPS Data
- Hidden Visual Studio Tools
- .NET 3.0
- The .NET 2.0 Stopwatch Class
- Nullable Types
- Drawing Rotated Text
- Unsafe Code
- Other .NET Languages
- Compiler Directives
- Safe Handles
- Predictions, 2007 Edition
- New Features in C# 3.0
- Generics
- Network Client Programming
- On the Misuse of Exceptions
- Maximum Object Size in .NET
- More on Maximum Object Sizes
- Keyed Collection Memory Limitations
- Matching String Endings
- Allocating Small Data Structures
- Grumbling About Limitations
- Some Thoughts on the Nature of What We Do
- Working with Predicates in Collections
- Working with DataReaders
- Outputting XML with XmlWriter
- Writing XML Data
- Working with Compression
- Another Look at Compressed Streams
- Compressing a Very Large File
- Canonical URIs
- Constructing URIs
- Using OneWayAttribute for Remote Calls
- Selecting a Garbage Collector
- Linked List
- Linked List Application - The MRU List
- Auto-implemented Properties in C#
- The HashSet Collection
- Looking Ahead: 2018
- An Experiment in Optimization
- A Larger Integer
- Extension Methods
- Language Integrated Query (LINQ)
- Variable Length Parameter Lists
- The ReaderWriterLockSlim Synchronization Primitive
- Sorting a Text File
- Sorting a Large Text File
- Using ListView with Large Data Sets
- LINQ One-Liners
- Regular Expression Optimization
- Random File I/O
- Computing the Size of a Structure
- More on Computing Structure Sizes
- UnmanagedMemoryStream
- Dynamically Loading Code
- Building a String Table
- Delegates Versus Function Pointers
- Visual Studio Editor Features
- A Simple Profile Timer
- New Features in C# 4.0
- IEnumerator or IList?
- New Features in .NET 4.0
- Set Operations with IEnumerable and HashSet
- Using File Locks
- Extending Object Functionality
- Clearing a HashSet
- When Hash Codes Matter
- Parsing Command Line Options
- Creating a Single-Instance Program
- Asynchronous Windows Forms Events
- The BackgroundWorker Component
- Fixing a Dumb Mistake
- Thinking About Multi-Threaded Programs
- JavaScript Object Notation
- Useful .NET-related Sites
- Markov Models
- Building an Order 0 Markov Model
- Higher Order Markov Models
- Webmaster's Guide to robots.txt
- An Overview of the Parallel Extensions to .NET
- Parallel Extensions Synchronization Objects
- Thread Safe Collections
- A Bug and a Conundrum
- Another Bug and an Answer
- Task Parallel Library
- Good and Bad Ideas in C#
- Parallel LINQ
- Copying Large Files
- Replacing File.Copy
- Learning from Our Mistakes
- Symbolic Links
- There Is No Easy Fix
- Tracking Hurricanes
- Examining Hurricane Data
- Searching for Multiple Strings
- Simple JSON Processing
- Aho-Corasick String Searching
- Writing a Web Crawler
- Web Crawler Politeness
- Source Control Management
- Subversion
- Communicating with Datagrams
- Fun with Actions and Funcs New
- The Future of Media
- The Importance of Metadata
- Of Comparison and IComparer
- IComparer, Comparer, IComparable, Oh My!
- Comparing Generic Types New
- A Simple HTTP Server New
- Informit Reference Library
Reading the Tea Leaves, 2005
Last updated Jan 13, 2005.
The powers that be asked us Guides to present our predictions for the next year in our respective spaces. My crystal ball is notoriously foggy and error-prone, but I'll give it a shot. In a year we'll all see how I did.
A critical mass of .NET-enabled machines in the hands of end users.
To date, most .NET installations are on servers and on office computers in organizations that have developed .NET based solutions. Most home users have had little reason to download and install the 25 megabyte .NET runtime. As a result, most of the .NET software available has been third party components and other tools for developers, server products, and applications that are targeted to the higher end (developers again) of the desktop market. With the economy on the rise, I believe two things will happen:
Many companies have put off upgrading their hardware since late 2000 or early 2001 when the tech bubble popped. These companies are struggling with older hardware running Windows 2000 Server, and Windows 2000 Professional or Windows XP on the desktops. Many organizations have refrained from upgrading to Windows XP SP2 because of perceived problems with the upgrade. I believe they will begin upgrading this year, installing Windows 2003 on their servers and Windows XP SP2 on the desktops. Both of those operating systems include the .NET Runtime version 1.1 in the default installation.
Home users, too, have held off upgrading their computers for the last four or five years, and they've resisted upgrading to Windows XP SP2 for a variety of reasons. But with upgraded hardware and software at work, many of these home users will want to upgrade their home machines to take advantage of the new features that they become accustomed to at the office. The majority of these users will install XP SP2.
The result is that we will begin to approach a critical mass of users who have the .NET runtime already installed. That critical mass will attract more developers to begin moving their products to .NET. This is something of an odd situation in that Microsoft's liberal licensing has always allowed developers to include the .NET runtime with their software distributions, but developers were reluctant to do so and users were somewhat reluctant to install it on their systems. There is a perceived stigma attached to installing a software package that requires an operating system upgrade. The inclusion of the .NET runtime in the standard operating system install will remove that stigma.
New versions of tools
On the developer front, we should see the release of Visual Studio .NET 2005,with all of its new productivity features. I think this will be a more difficult transition than the last one (to Visual Studio .NET 2003) for two reasons: more changes and new features, and more people using the product. The bigger hit will be the concurrent release of the .NET Framework version 2.0. Whereas I understand that Microsoft will make every effort to maintain backward compatibility with the 1.1 and 1.0 versions, some incompatibilities are inevitable. Those will cause problems, especially for code that relies on undocumented side effects of some API functions. It will become even more important for developers to ensure that their code runs on all versions of the Framework, which will increase their testing costs.
64 bit versions of Windows have been available in beta for some time now, but general availability of 64 bit hardware has been lagging. AMD's Athlon 64 and Opteron processors have received good reviews, and I expect a fair number of users to replace their aging Pentium-based machines with 64 bit AMD processors this year. If the 64 bit version of Windows XP ships this year, we will see a large number--perhaps a majority--of the users with 64 bit machines install the new 64 bit operating system. I don't expect that to have a big effect on the number of 64 bit applications available this year, but it will get developers thinking about what they can do with all the upgraded hardware, especially the huge addressable memory space.
New classes of applications
With 64 bit processors, high speed Internet connections, high clock speeds, inexpensive RAM and almost free disk space, our ability to obtain, process, and store information has far outstripped our ability to actually do anything useful with it. Developers add more glitz to their applications, but little real value. This isn't terribly surprising, as it's what users appear to want. Most developers will happily follow the crowd, giving the users flashier ways to accomplish the same old thing. The problem is that most users are happy with surfing the Web, writing email, listening to music, and playing the odd game once in a while. Users in general don't know what's possible, and so can't really suggest new and different applications.
There is hope, however. The abundant resources available on standard desktop computers over the next few years are just begging for somebody to come up with new or better ways to put that horsepower to work. I believe we're going to enter a new phase of distributed processing, where client computers pull data from the network (be it a home or corporate network or the Internet) and search that data for information relevant to the individual user. This is a step or two ahead of the current crop of RSS aggregators that simply download information from sites that the user identifies in advance. This will be the beginning of what I consider to be the true "Global Internet." The computer will be an active, almost thoughtful, tool in individuals' gathering and processing of information as opposed to its current role as a passive information display device.
In short, for those of us "in the trenches," things won't change much over the next year. We'll have faster computers and new tools with which to accomplish the same things that we've been working on for years. I believe this year begins a very interesting time for end users, though, where they will see many new and interesting ways to put their computers to use.



Account Sign In
View your cart