Slashdot Mirror


Building Intelligent .NET Applications

Scott Forsyth writes "'Building Intelligent .NET Applications' is an excellent primer book into the world of Artificial Intelligence (AI) in the business world, specifically related to Microsoft technologies. It is an introduction to the world of Artificial Intelligence (AI) for .NET programmers. It is the first book I have seen that shows professional .NET developers how to incorporate AI into their daily programming. In this accessible guide, developers learn how to enhance new and existing .NET applications with intelligent agents, data mining, rule-based systems, and speech processing." Read the rest of Scott's review. Building Intelligent .NET Applications author Sara Morgan Rea pages 269 publisher Addison Wesley rating reviewer Scott Forsyth ISBN 0-321-24626-8 summary An excellent primer book into the world of Artificial Intelligence (AI) in the business world, specifically related to Microsoft technologies.

Sara dives quite deep into four different branches of the vast world of AI with a great balance of conceptual theory, code samples and real world scenarios. She leads the reader though the complete process of obtaining the technologies to full implication with complete code. Both Visual Basic.Net and C# can be downloaded online while the book gives all examples in Visual Basic.Net.

Sara explores four of the most popular AI technologies by building real-world sample applications that readers can use as the basis for their own applications. Some of the more interesting portions include; Applications that talk-critical for companies seeking to automate their call centers, Speech-enabled mobile applications, Multimodal speech applications, Data-mining predictions, which uncover trends and patterns in large quantities of data, Rule-based programming for applications that can be more reactive to their environments, Multiple software agents that are able to keep remote users up to date and sample applications for Windows and the Web.

The book starts out with a one chapter overview called "Instruction" which is exactly that. It introduces the reader to Business Artificial Intelligence and lays the groundwork for the rest of the book. Immediately in chapter two the book dives into Microsoft Speech Server which is the first of four main technologies that are covered in this book. Microsoft Speech Server is covered until Chapter 5 when the book dives into Data-Mining predictions. Chapter 7 gets into Rule-based systems and Chapter 8 into building Agents.

Chapter 9 finishes off the book with an excellent overview of Artificial Intelligence. In fact, for an overview of AI and Microsoft's investment into it now and in the near future, the final chapter of the book was my favorite. Sara painted an exciting picture of what is in store, as well as opening my eyes to things that exist already. AI isn't a thing of the distant future; in fact there is an exciting array of mature technologies in use and available today.

Personally I felt that Chapter 9 would have made a better introduction chapter. I didn't feel that Artificial Intelligent or Business AI was covered in much depth in the first chapter of the book. By the time chapter 2 dove in deep into the first branch of the four topics, I still had some unanswered overview questions in my mind. After reading Chapter 9 though, the need I felt for more general information was met.

Now with Microsoft Speech server, applications that can talk and interact intelligently with a user is not only possible, it's relatively easy and affordable, even for the small business. Developers can create powerful, intelligent applications that are specific to their business. You can create fully database-driven talking applications that understand speech, talk back (not like a rebellious 15-year-old) and respond differently to each unique situation. This can be used for a telephone application, someone sitting in front of a dumb terminal with audio capability or for a fully configured computer application. Dream big, the options are endless, the solutions are within reach.

Running reports against data has been common for decades, but consider intelligent agents that will dig, analyze, determine a new direction to dig by itself, and return relevant patterns and trends in the data that were never discovered before. Sara covers this very topic with theory, code examples, scenarios and clear and precise explanations.

Agents that self perpetuate, learn their new environment and respond accordingly are the way of the future. The most obvious and painfully in-your-face examples are malicious worms and spyware applications. Worms lodge themselves in an environment, take advantage of their new home by finding important information like a list of emails addresses, and then they spread automatically, continuing this vicious cycle. Spyware agents also install themselves in an environment and start interacting with it to get information to send back to their creator. Now, consider the endless possibilities where Agents can be used for good, and are in use today. The author covers this very topic.

I wouldn't say this book is a general overview of Business Intelligent Design, but rather a specific look at four major technologies and a few minor technologies. The Microsoft products covered are Microsoft Visual Studio.Net, Microsoft Speech Server and SASDK, Microsoft SQL Server, Online Analytical Processing (OLAP), BizTalk Server, Microsoft Agent, Background Intelligent Transfer Service (BITS) and I'm sure a couple other smaller technologies that I didn't list. In addition to these, Sara briefly covers SQL Server 2005, Analysis Services 2005, and Longhorn with Avalon, Indigo, and WinFS.

One of the characteristics of a good technical book is making the complex subjects sound simple. The author has done a tremendous job of that in this book. The range of topics that she covers at first glance seems complex, but at no point does she leave the reader overwhelmed. At the same time she doesn't over explain or drag on needlessly.

This book is about the IA (Intelligent Applications) part of AI (Artificial Intelligence). It focuses on Microsoft solutions for Speech solutions, Agents, Data Mining and Rule-Based Systems, and does a great job of it."

You can purchase Building Intelligent .NET Applications from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

11 of 213 comments (clear)

  1. Re:Intelligent .Net Applications? by RetroGeek · · Score: 3, Informative

    Fast Java applications?

    Can we NOT put this to rest?

    I am building a large Java Web application. A page hits runs thousands of lines of code (parameter extraction/conditioning, input validation, session control, database SQL generation/ access, etc). And still (on a 2GHz machine, 2G RAM) the execution time (from intitial servlet entry to final JSP generation) is below 1 millisecond.

    --

    - - - - - - - - - - -
    I am a programmer. I am paid to produce syntax not grammar. Deal with it.
  2. Book Already Reviewed on Slashdot, Not That Great by Omega1045 · · Score: 5, Informative

    This exact book was reviewed a couple of months ago on Slashdot. Based on the strength of that review I went out and purchased this book. I was really unimpressed with it. It is much less a primer on how to program "AI" types of apps with .NET, and much more a manual of how to use Microsoft applications like their speech services and data mining. I do .NET for a living, which is to say that I am probably not an expert but am proficient. This book was not really aimed at .NET programming. It was aimed at "look at these cool MS apps" and "here is how to right click to enable data cubes". This book was really sub-par compared to many of the other tech books I have purchased in general. This is not to troll or to be flamebait; IMHO this book just is not very good and I have to wonder why it keeps being posted here.

    --

    Great ideas often receive violent opposition from mediocre minds. - Albert Einstein

  3. Re:Slashdot is broken by RingDev · · Score: 2, Informative

    I code in .Net in a business environment. We have 3 database systems (SQL Server, Sybase, OMD) 6+ currently active applications. Some of these apps are completely unrelated.

    Say the ACD Monitor (a PBX system that monitors our phone queues, shows queue history, employee work load and allows for growth projections) and the Lease Reporting system (handles data reporting and invoicing for a 3rd party leasing system).

    These two systems are completely seperate, but they share a LOT of code. We use a data abstraction layer for accessing data. So no matter which of the 3 database systems I'm hitting, I use the exact same code in the app. The base of that code is in a general library, then each database gets it's own library. For example, in our General.dll there is a 'BaseSQL_DO' class that handles base functionality for talking to SQL Server, automating prarameter lists, loading and updating data etc. Then there is an Employee.dll, that dll contains a list of classes like Employee_DO, Branch_DO, Department_DO, etc... each of those classes inherits from the BaseSQL_DO class.

    Now when we get to the ACD system, I can tie an ACD event, or a series of ACD events to a specific extention. And since the each employee's extention is tracked in the employee database, I can create a link and associate each ACD event with an employee.

    With the leasing system we track sales reps and zip codes. With this system I can tie any piece of leasing information with an employee too.

    The General.DLL also contains the LogManager that uses a SQL Server for all of our logging.

    Having all of this code boken into reusable modules has increased our stability and decreased our development time. I don't have to recreate a system to talk to the employee database for each system. I don't have to worry about coworkers using some strange means to access data. I don't have to worry about checking 18 different text file logs.

    Not only does this code interchage flawlessly with each of our windows applications, it also powers our web applications. And if the mono project would ever get the VB.Net compiler to work again we could run our automated tasks on a linux server.

    -Rick

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  4. Re:I thought there might actually be some discussi by CaymanIslandCarpedie · · Score: 4, Informative

    I am interested in how MS Speech Server works, is it hard to program against?

    I've played with this out of curiousity the first time about a month ago and was absolutly AMAZED! Now I'd never done any real voice recognition/voice synthisis programming before (unless you count some 1/2 assed playing around with MS Agents which I don't), so maybe it has been this easy for awhile (I really don't know) but I was floored at how easy it was.

    It is more or less like developing a normal VB or C# application. If you are just doing really simple stuff, the whole damn thing can basically be done via drag-and-drop. If you need to get more advanced of course you can dig into the code (mostly XML actually) to refine stuff. Another nice this is you do all this right in the VS.NET IDE. So if you are used to that its all pretty easy.

    I repeat that I've no real experience in other voice-enabled development environment so perhaps they are all this easy or others are much more powerful. As a first-timer expecting much complexity in VR work, I was completly blown away at how really trivial MS Speech Server and the related tools made it.

    --
    "reality has a well-known liberal bias" - Steven Colbert
  5. Re:I thought there might actually be some discussi by CastrTroy · · Score: 4, Informative

    The only problem that I have with .Net, and mostly just VS.Net, is that it tries to do everything for you, by holding your hand, and letting you drag and drop to do everything. But, then, it doesn't hold your hand enough, and every text box ends up with a name like textbox1, or something like that. So, instead you have to remember each of the properties that you have to change for each control so that variables are named correctly, and all the proper default values are filled in. Then if all someone knows how to do is drag and drop, which is a good portion of .Net programmers, then they have no idea what to do when something goes wrong. I think that .Net is a great platform, which is very powerful when you write the code yourself. But I think that Microsoft trying to turn programming into something that anybody can do is a big mistake. Programming robust,reliable, scalable systems requires knowledge that not everybody has. I say, leave the programming up to the people that know how, and keep everyone else far, far away.

    --

    Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  6. Re:I thought there might actually be .... by The+Real+Nem · · Score: 2, Informative

    The parent isn't really flaimbait. I made the mistake of adopting .NET v1.1 using a mixture of managed and unmanaged C++. v1.1 was crippled with several major design flaws that were an absolute nightmare for support. When v2.0 came along an fixed these design flaws I though I was in for a treat (after all Microsoft had emphasized compatibility in the framework) little did I know they would go and change the entire syntax on me. Some friendly changes:

    • Pointers for managed objects are now ^ not *.
    • Managed objects are allocated with gcnew and not new.
    • Any keyword starting with __ no longer does and some have been renamed.
    • Boxing is now implicit.
    • Managed arrays are completely different.

    Though I welcome many of these changes, upgrading code that is a mixture of managed and unmanaged objects (or even just managed objects) is an absolute nightmare. I've spent hours upon hours updating single classes or forms and what's worse s there isn't really any conversion tool to automate the process. Of course you don't HAVE to upgrade the code, the compiler still supports the old syntax, but using this feature just serves to cripple the entire IDE and many of the things that make it one of the best IDEs out there, you're trapped into upgrading.

    After this experience I've become extremely reluctant to recommend .NET to anyone (at least for C++).

  7. Re:I thought there might actually be some discussi by GoatMonkey2112 · · Score: 2, Informative

    It's all in how you use it. You don't necessarily have to use those features. Most of them are junk anyway. Especially the form designer for web pages, it produces worthless garbage code(if you call html code, but that's another topic).

    I have worked in both .net and Java using VS and JBuilder. The thing that I like about Java is that it forces you to write cleaner code at some points. Such as classes in a namespace being in separate files whereas in .net you can put all of your classes in one file and just put a namespace around it if you're lazy.

    My applications are either ASP.net or Java/Struts. They are conceptually the same. The Java people like to talk about Model View Controller like it is some huge thing the nobody can possibly understand. I'll tell you that for me switching from ASP.net to Java/Struts took about a week to learn. It's really not *that* different.

  8. Re:I thought there might actually be some discussi by jchenx · · Score: 3, Informative

    What you're describing, with the filling in of default values, is not something new with .NET. I saw it first-hand with earlier versions of VB.

    On that note, I can agree that automatically filling in objects with "textbox1" can be dangerous. I worked on a VB project with someone who wasn't a programmer and ran across these default names everywhere. When I had to re-write the code, it was difficult to read. But you know what? Bad coders are going to do bad things, no matter the language or development environment provides. If it wasn't filled in as "textbox1", he would have renamed it after some letter of the alphabet. I'll take "textbox1" over "x" anyday. (And sure enough, any variable that wasn't a UI object was named after letters in the alphabet)

    I've worked a lot with UI development in both Java (Swing) and C#. I can definately say that the .NET Framework makes things a lot easier. Yes, there's the added danger of "Joe User" now thinking that they're a super programmer, but does that mean language designers are supposed to make it languages difficult to use? That's just absurd. In any case, you could very well have the same thing in a non-.NET language as well (and I'm pretty sure there were some Java IDEs that did something very similar to what VS.NET does, in terms of UI drag-and-drop)

    If you think .NET is all about Microsoft trying to bring programming to the masses, I think you need to re-examine what it is about. You can easily argue the same thing with Java, or any other managed language. My take on the goals of these languages is to make development BETTER. "Easier" is a part of it, thanks to the elimination of "difficult-to-comprehend" concepts like pointers, and the addition of automatic garbage collection. Good programmers (and I'd like to think I'm one), could live forever in the C/C++ world, but having the benefits in .NET and Java are just too attractive. I'd rather worry about more difficult problems like concurrency, than worrying (as much) about memory management, pointer arithmetic, etc.

    --
    -- jchenx
  9. ironic by cosmicj · · Score: 1, Informative

    Isn't this: > Building Intelligent .NET Applications a logically impossible statement?

  10. Re:Slashdot is broken by shutdown+-p+now · · Score: 2, Informative
    But then again, running a just-in-time compiler means that every single time your application loads up, it's going to dog it until everything's been compiled. JIT is fine for long running apps, but sucks for the transient jobs.
    .NET runtime offers the ability to manually precompile an assembly into native code and cache it for later use. Look up ngen on MSDN for details.
  11. Re:Oh, Good Lord... by Ravatar · · Score: 2, Informative

    That's interesting, because I just started up Visual Studio and created a windows project. Built the default app in Release mode and started it, memory use went to 11MB (loading the runtime), then after about 10 seconds settled in at under 1MB.