Essential .NET, Volume I
After chapter one's history of the evolution from COM to the CLR, the book takes a bottom-up approach to the CLR, starting with a deep and detailed six chapter look into the core elements of the platform. Chapter two begins with assemblies, the programmatic units in the CLR, and the implications of their construction. We learn how they are versioned, loaded and built, and why therefore they may be written in as many .NET languages as required. There's real depth to the material here -- you really do touch the bottom of the abyss, so to speak -- but it's countered with occasional levity that keeps this a readable book instead of a dense reference manual. The same is true of all the text. To wit, there's even some irony; "To allow old dogs to avoid learning new tricks, there is finalization," he declares in the next section on the Common Type System.
It's here that we discover how different types and interfaces are distinguished from themselves and from one another, and how their variations and relationships are kept separate by the CLR. It's refreshing to note that the proverbial big picture is never very far away from the commentary. After taking time to explore the avenues for types and interfaces, Box notes that types themselves aren't very interesting until you start working with instances of those types, and we're off again working through another thirty pages on how object instances preserve a sense of identity, how they are cast into other types and how they incorporate themselves into the concepts of reflection and metadata. Only then do we look at the actual lifecycle of an object, its creation, modification and disposal. The attention to detail is great, and there's little ambiguity in the text, but with that comes a slowness to this section that may leave readers frustrated.
One recurring theme of the book is the idea that while there is a very proper way and set of rules for doing things, there will always be circumstances in application development which call for exceptions to be made to those rules and made possible by .NET. This is true at a small scale and, as chapters six and seven prove, at a large one too, covering as they do how the CLR calls and runs methods first on a single machine and then over a wire. How does the runtime treat methods called explicitly, implicitly through a delegate, asynchronously, or as a combination of the three? How do remote calls and types bridge whatever gaps they must cross and activate the remote objects and methods they're targeting? The answers are here.
Essential .NET reflects Box's pride in .NET and also his slight dissatisfaction with it. You can sense that while he knows .NET version 1 is an improvement over COM, it's not as good as it could be and things are still be done in v2 and beyond. Chapter eight's look at AppDomains and in particular its discourse on threading within and through AppDomains is a good example of this. Meanwhile, we finally come full circle in our investigation of the CLR, seeing how the assemblies we built in Chapter 2 are resolved and executed within AppDomains. Exceptions to rules being included, we also see how objects references are marshaled across AppDomains for inter-application communication if this is required.
The last two chapters look at wider topics around the CLR in as much detail as they can for topics which have entire books dedicated to just them. Chapter nine covers code-access security and chapter ten topics which are not of the CLR but which be can be addressed from within a .NET application: explicit memory management, using p/invoke to import COM methods from DLLs and so on. Both are concisely written and to the point, but unsurprisingly leave you feeling like there's more to these topics than is covered here. Chapter nine is a great and clear introduction to code-level security, for example, but you'll get a lot more out of Michael Howard's book, Writing Secure Code if you want to know more.
Essential .NET isn't an easy read but everyone should try to read it at least once. Focusing on the CLR itself and how it deals with the components of an application means that it truly is aimed at the community of .NET developers as a whole (including those building and using alternate implementations of the CLR). The provided code examples are expressed in C#, but this is incidental, really, and won't stop VB.NET, J# or any other developers getting a great deal out of this book.
This is a dense, complex volume that requires a fair amount of effort to understand and use, and to some extent this may put people off. On the other hand, it is so packed with great nuggets of information that they may be inspired to keep reading. Of course, there is the question of whether this book will actually improve your .NET development skills, but in riposte, you can honestly say that no volume details the CLR and its potential so well, and that this alone is worth the book's cover price.
You can purchase Essential .NET, Volume One from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Isn't that an oxymoron?
(Thank God I got that joke out of the way.)
Bash script for FP whores
This one is a great addition to the book shelf, you all know how to do certain things with .NET languages but this book clarifies nicely why you are actually doing it. Also, it introduces nice new .NET library/bytecode concepts which hardcore Visual basic 6/VC++ 6 users might not have come across before.
There is no god
impressive adult response...
"Patriotism is supporting your country all the time, and your government when it deserves it." Mark Twain.
Get it? C-sharp? Because he uses knives...and they have to be sharp?
The important thing is that I am happy with me.
I hate liberals. If you are a liberal, do not reply.
how come it's more than one volume?
Je t'aime Stéphanie
The first couple of chapters do rehash the metadata structure (that is, assemblies, modules and members), which anyone who has been using .NET should already have covered in the text you've been using up until this point. Obviously these chapters will prove tedious if you are already familiar with the concepts, however they are probably too terse to serve as a useful introduction. There are better texts for getting up to speed on that.
However the latter two thirds of the book are excellent. I particularly enjoyed the precise, informative discussion of contexts, MarshalByRefObject, ContextBoundObject and method call interception. The book occasionally delves into implementation details of the Microsoft's CLR 1.0. These are extremely interesting and practically useful insights.
That said, there are occasionally annoying typographical mistakes in the figures.
I hate liberals. If you are a liberal, do not reply.
Donald Knuth will be writing THE definitive book on bytecode languages in TAOCP volumes 11-12. I don't see any reason to dick around with some amateur's feeble attempt.
nobody on Slashdot gives a RATS FUCKING ASS about fucking Winbloze shit!
.NET is slowly growing, for good or bad. If you want your family to starve to serve the OSS cause, go ahead. But, I wanna eat, dude. the 90's are gone. It is grovel time.
I don't like many aspects of the Microsoft Way either, but MS projects pay the bills better than OSS projects for some reason for me. If I was well-to-do, I might subsidize my slide over to OSS. But the tech economy is a wreck right now and I take what I can get. The demand for
Table-ized A.I.
Their blogs may be the only clue to the higher level of thinking that they operate at
Well let's not get delusions of grandeur here...
Some of us had no idea CLR was going to replace COM. We all wanted COM to die a horrible death and now you've ruined the surprise. On top of that, you give away the fact that .NET is the first of a series. I suspect we won't get a real ending, but a cliffhanger that guarantees we show up for the sequel.
So what do you think Microsoft should of done to increase the value of their server offerings?
love is just extroverted narcissism
You might think a web log run by a guy named "CmdrTaco" might provide some useful information on enchiladas and the like.
I'm surprised that someone so focused on the evils of proprietary systems would be decrying C#. After all, C# is a ratified standard, while Java was pulled from standardization so Sun could maintain control of the language.
Were it not for the patents conspicuously taken out to prevent interoperable implementations, this would be true and CLR/C# would be a better alternative than Java.
Before everyone starts scoffing at how much Micro$oft sucks, I just want to say that .NET is really the best product that MS has produced in a very long time. And when I say .NET I am referring to both the object library and the .NET server. /. when I say that I would rather be on a UNIX based platform, but like many of you due to my job I am forced to deal with a Windows Server environment if I like it or not, and as much as I have tried to hate it, I have actually been quite impressed with what you can do with Visual Studio and .NET .NET web application you use the same code (meaning VB.NET, C# etc, as opposed to ASP, or VB Script) that you would use when writing a desktop app, and the fist time the page is accessed, the web server compiles all the code into dll's on the fly. Converting my existing ASP apps into .NET has tripled the performance using the same hardware. This method is very very fast. Fast to develop and fast to benchmark. It would take me months to write a C/C++ cgi app to do the same thing that I can pump out in an afternoon with VB.NET. And more intuitive I might add.
I'm with the rest of
When you write a
Go ahead and flame me now.
Sigs are out of style, so I'm not going to use one...oh wait..
...The idea of some marketing guy noticing that his ISP's address ends in ".net" and thinking "Gee, what a cool way to align my marketing message with the corporate flavor-of-the-week"--or however it originated--is so intensely irritating to me that .NET could be the greatest thing in the world and I still wouldn't want to learn about it.
.NET means, either.
I never did find out what "Microsoft BackOffice" and digital_nervous_system were supposed to mean. My guess is that I won't need to find out what
Actually, isn't Microsoft de-emphasizing ".NET" and calling it something else in order to call less attention to the community's general lack of interest in it?
I wonder what Volume II will be called?
You can sense that while he [Don Box] knows .NET version 1 is an improvement over COM, it's not as good as it could be and things are still be done in v2 and beyond
This could be an interesting read. The reviewer's comment on Box's impression of .NET confirms the wisdom of my decision not to be an early adopter of .NET, if I take it up at all. Although Box is a MS-centric developer, he discusses the issues involved in app development with candor as well as detail.
Always look on the briight side of life! (whistle, whistle)
You know, the "registries" and "assemblies" are getting so complex that I would rather they be stored and managed in a relational database. The rules and tools for relational databases are better understood and apply to many areas, reducing one's learning curve and let's them use existing tools to analyze data and structures. I can look at the schemas and data dictionaries (schemas with extra info, such as field descriptions), and fairly quickly get a feel for how the different entities work and relate to each other.
A proprietary structure just ends up reinventing a lot of database wheels like concurrency, backups, change logging, etc., and has unfamiliar access protocols, often mirroring the "navigational databases" of the 1960's.
I know, some of you say that I have an "if all you have is a hammer, then everything is a nail" view about RDBMS (relational databases), but when structures become non-trivial, then nothing beats a RDBMS in most cases. If it walks like a database and quacks like a database, then perhaps it is time to use a database.
Table-ized A.I.
Java Vs C#
Java and C# = 239, C# = 736 OR 497 for C# alone, Java = 4596 OR 4357 for Java alone, Java Wins outright 4357 to 497.
In fact Java is more in demand than C++ (3081) or Visual Basic ( 2252 )
J2EE Vs .NET .NET = 23, .NET = 1392 or 1369 for .NET alone,
J2EE = 2120 or 2097 for J2EE alone,
J2EE wins by points 2097 to 1369.
J2EE AND
According to theory, .NET should be picking up the bulk of Visual Basic Developers...
.NET WITH Visual Basic,
Visual Basic AND J2EE AND .NET = 5,
Visual Basic AND .NET = 58 or 53 alone,
Visual Basic AND J2EE = 168 or 163 for J2EE alone,
J2EE wins by points 163 to 53.
J2EE With Visual Basic Vs
In comparison to the number of Visual Basic based jobs, there is very little demand for the shift towards the backward incompatable Visual Basic.NET.
According to theory, C# should be picking up the bulk of Visual Basic Developers...
Java With Visual Basic Vs C# WITH Visual Basic
Visual Basic AND Java AND C# = 65, Visual Basic AND C# = 250 or 185 alone, Visual Basic AND Java = 696 or 534 alone, Java wins by points 534 to 185.
According to theory, C# should be picking up the bulk of the C++ developers...
Java With C++ Vs C# WITH C++
C++ AND Java AND C# = 149, C++ AND C# = 311 or 162 alone, C++ AND Java = 1242 or 1093 alone, Java wins outright 1093 to 162.
You can also check out the book on Safari
--- P,L,G
At least this review didn't give away the ending.
- Despite popular opinion, I am not perfect.
Why Microsoft people don't take this site serious you mean...heh. Maybe your brain isn't cross platform compliant? :)
This is my sig. There are many like it but this one is mine.
...touche.
You should always write web application using a platform that allows you to use the same infra-structure you use for desktop application. Besides the learning curve problem, it also helps when you wnat to mix them both ("weblize" a destop app, for instance).
That said, ASP and VB.NET are not the answer. Using non-portable languages to write web apps is a very bad idea.
It would take me months to write a C/C++ cgi app
Where are you from, 1994? If you really need unmantainable spagetthi like ASP, you can use PHP (portable across all known platforms), but you have Java (Tomcat) and Python (Zope) that allow you to use very high-level structures with a higher productivity (in my experience) than any Windows-only solution. No one writes C cgis anymore...
Offtopic. Thanks.
Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
The big difference between the ASP.NET paradigm and that of, say, Java Servlet Pages, or XSP, etc. lies in the event-based nature of ASP.NET pages.
.aspx page). The .aspx page is parsed on each request, but the code-behing is pre-compiled.
Each ASP.NET page is an instance of the "Page" class, or one of its sub-classes. The "Page Lifecycle" defines the various phases that apply each time a page is accessed. The "Page" is simply the top-level node in the "control tree", and each control in the tree does the following for all its children (recursively):
1. initialization
2. handle postback data
3. state management
4. handle events
5. pre-render stuff
6. render to HTML (or whatever)
7. clean up
Most of your code will pertain to numbers 4 and 5 above, if done correctly.
It's not immediately intuitive, coming from a Web App developer's perspective, but does provide a good general structure and mechanism.
In addition, each Page is split into its actual class (the so-called "code-behind page"), and its representation as markup (the
ASP.NET provides a robust programming model for web applications, but it also provides a lot of built-in mechanisms for doing common stuff. Authentication, Authorization, Caching, DataBinding, XML, conditional rendering, templating, data access through ADO.NET, internationalization, Debugging and Tracing utilities, and more.
That said, I find the event-based programming model quite difficult to master. If used improperly, you can end up running the same code many times; for instance of you populate a given control (say a dropdown) from a database, and do so in response to many different events. Better to flag things and then fetch just once from the DB prior to rendering.
Thoughts?
PS: At the moment, you can't mix multiple languages (C#, VB.NET) within a single Web App.
Actually, I know I already replied to this, but now I'm just curious. What patents does Microsoft actually have on C#? I would assume they would have patents on .NET, but C# as its own entity is certified by both ECMA and ISO boards. How much of it could they patent, if it's a formal standard?
Java wins the "buzz word war" outright because it is an inucmbant platform with solid marketing for the past 5+ years. .NET is a new platform (about 1 year after release) that has not been adopted by most of the Microsoft clientelle.
.NET, I think an "upset" is in order.
Lets revisit these results in two years.
Considering M$'s deep pockets and commitment to
I sincerely hope I get a chance to meta-mod these...
I really do
Computer Science is Applied Philosophy
This is just a resounding voice saying 'no thanks'
This is my sig. There are many like it but this one is mine.
I don't like many aspects of the Microsoft Way either, but MS projects pay the bills better than OSS projects for some reason for me. If I was well-to-do, I might subsidize my slide over to OSS. But the tech economy is a wreck right now and I take what I can get.
Almost every job posting I see out there for Java has some kind of OSS technology attached - be it Linux, Apache, Tomcat, even JBoss. Things like Struts are also gaining leverage out there.
If you know Java/J2EE and have decent skills, it's getting MUCH better out there. I'm in Colorado, and we got killed. So if it's improving here...
Computer Science is Applied Philosophy
It *is* cross platform! ... it runs on more than one release of Windows ...
Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
To use your own words, why don't you come back and post when you have a clue?
If you "don't program in Java or C#", refrain from talking from the top of your head about something you can't know.
And "all this platform compatibility is a moot point" only in your dreams. Java is far from perfect but its cross-platform enough to make it a far superior platform for web and network development in general. Only the very young and inexperient amateurs mock the importance of being able to choose any system running on any hardware for you applications.
and emiting the most obnoxious of smells.
You can pick up a description of the VM and write one from scratch if you are so inclined, and the JCP controls how the platform develops - in all ways that matter, Java is a standard.
Have a look at www.jcp.org if you want to see a more developer accessible standards process.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Calcium
Lime
Rust
Its an industrial metal cleaner...
How can the antichrist ever be off topic?
Thanks for your support!
Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
C# seems like a very nice programming language, but I really don't give a damn about .NET--as far as I'm concerned, Microsoft has never been able to put together a good set of APIs and .NET doesn't look like that has changed.
What I would like to see is a book on Mono, the core ECMA C# APIs, and the Mono-specific APIs like Gtk#. Is anybody working on that?
You are right, obviously. That is one of things platforms like Tomcat, Zope and .NET do for you: they give you an environment where you can mantain information about a client in-between requests.
I find Java in the server specially productive, since I can use the whole library with very little concern for the web-specific code in the front (ie, I can easily isolate the view from the model and the controller). The same goes for Zope (with a little more work). But I agree that Perl and CPAN may also be good. It would depend on you previous experience and particular preference.
they have on some other parts of .net like windows.forms, ASP.NET and ADO.NET ... but not C# the language. the slashdot community is so pathetically ill informed.
check out the mono faq for more info:
http://go-mono.com/faq.html#patents
Just for your further info here is some of the way it is being done;
...
Trusted Computing Frequently Asked Questions
- TCPA / Palladium / NGSCB / TCG
Version 1.0
Ross Anderson
Translations into German, Spanish, Italian, Dutch, Chinese, Norwegian, Swedish, Finnish, Hungarian, Hebrew and French. This document is released under the GNU Free Documentation License.
Additions since July 2002 are at the foot of this document. See also the Economics and Security Resource Page which gives a lot of background to the issues raised here.
Microsoft has renamed Palladium NGSCB - for `Next Generation Secure Computing Base' and pronounced `enscub', while TCPA has been renamed (somewhat brusquely) as TCG - for the Trusted Computing Group. Meanwhile, opposition is mounting. Expect further twists and turns as the battle develops. And read on
1. What are TCPA and Palladium?
TCPA stands for the Trusted Computing Platform Alliance, an initiative led by Intel. Their stated goal is `a new computing platform for the next century that will provide for improved trust in the PC platform.' Palladium is software that Microsoft says it plans to incorporate in future versions of Windows; it will build on the TCPA hardware, and will add some extra features. Palladium has recently been renamed NGSCB while TCPA has been renamed TCG; however I'll continue to refer to them here by their original names as they are still more widely used.
2. What does TCPA / Palladium do, in ordinary English?
It provides a computing platform on which you can't tamper with the applications, and where these applications can communicate securely with the vendor. The obvious application is digital rights management (DRM): Disney will be able to sell you DVDs that will decrypt and run on a Palladium platform, but which you won't be able to copy. The music industry will be able to sell you music downloads that you won't be able to swap. They will be able to sell you CDs that you'll only be able to play three times, or only on your birthday. All sorts of new marketing possibilities will open up.
TCPA / Palladium will also make it much harder for you to run unlicensed software. Pirate software can be detected and deleted remotely. It will also make it easier for people to rent software rather than buying it; and if you stop paying the rent, then not only does the software stop working but so may the files it created. For years, Bill Gates has dreamed of finding a way to make the Chinese pay for software: Palladium could be the answer to his prayer.
There are many other possibilities. Governments will be able to arrange things so that all Word documents created on civil servants' PCs are `born classified' and can't be leaked electronically to journalists. Auction sites might insist that you use trusted proxy software for bidding, so that you can't bid tactically at the auction. Cheating at computer games could be made more difficult.
There is a downside too. There will be remote censorship: the mechanisms designed to delete pirated music under remote control may be used to delete documents that a court (or a software company) has decided are offensive - this could be anything from pornography to writings that criticise political leaders. Software companies can also make it harder for you to switch to their competitors' products; for example, Word could encrypt all your documents using keys that only Microsoft products have access to; this would mean that you could only read them using Microsoft products, not with any competing word processor.
3. So I won't be able to play MP3s on my PC any more?
With existing MP3s, you may be all right for some time. Microsoft says that Palladium won't make anything suddenly stop working. But a recent software update for Windows Media Player has caused controversy by insisting that users agree to future anti-piracy measures, which may include measures that delete pirated content found on your computer. Also, some programs
OH THE SHAME I fell off the wagon and use sigs again!
Yeah, I think that one kinda fell flat.
Sharp. . . flat. . . get it. . ?
Oh, nevermind, I'm going home.
!#@%*)anks for hanging up the phone, dear.
The only Java implementations you can get are all based on code licensed from Sun. With the JCP, Sun stifles innovation and progress. And Sun holds numerous patents on Java technologies, making it unlikely that the platform will ever be truly open. With so much control over Java, it is particularly worrisome to see Sun's market evaporate--Sun is a company on the way down, and the question is: what will they do to/with Java before they hit bottom? An SCO-like scenario involving Sun, IBM, and open source implementations seems entirely plausible.
.NET are attempts by two big competitors to establish new proprietary platforms and to do an end-run around open source systems like Linux. If a large fraction of the software on Linux were done in Java, for example, Sun could basically give their own platform an advantage by tinkering with the Java-on-Linux implementation.
.NET compatible set of libraries (which you shouldn't use and which may be encumbered by patents), it is getting its own, native set of APIs.
Both Java and
The solution? Don't use either. Mono may be a way out because, in addition to a
But if you want to avoid the issue altogether, just don't use either Java or C#--there are plenty of good alternatives around. In fact, most software these days should probably be written in languages like Python, with a few core C/C++ libraries for numerical and other high-performance subroutines.
Almost every job posting I see out there for Java has some kind of OSS technology attached
Most of my experience in OSS is in PHP-related projects, not Java. I personally don't really like Java. It's API's are goofy and it takes too much damned code to do the simplest things, but that is another story.
The bottom line is that I don't get many inquiries about PHP these days. Microsoft stuff generates more contracts and inquiries.
Table-ized A.I.
I'll take umbrage with the kneejerk "Java has been doing this for years" comments. Must every idea be so mind-bendingly unique to be deemed useful? Should we all start buying Ford Model-A cars instead of Durangos (or whatever) because Henry Ford "was doing that 100 years ago!"? Are the CLR-based language features a lot like Java? Yes. Should every derivative product be denounced as coming to the table too late? I think not. Once more, .NET ( the bits for developers anyway) brings some better things to the table as well (as evidenced by Sun getting into the leapfrog game with Java v.Next features - Metadata (Attributes), etc).
very few Slashdot submitters or editors show basic competance
That would be competence.
Amazon has it with free shipping!
Anyone else notice that some of his books, while quite chock full of information, are fairly dense material? I'm think of Essential XML.. he's a clear and understandable speaker, but I'm not sure I've seen that translate into his written stuff..
~ The Fudge Report @ http://mywebpages.comcast.net/fudgereport/
Web Forms is not a fancy name for servlets. They're classes extending the System.Web.Forms.Page class to define behavior, with a separate file defining UI layout.
C# is not an alias for Java(tm), it's an embraced extension of several proprietary languages that was then ratified as a standard.
The CLR is not a JVM. Maybe you might liken an AppDomain to a single JVM.
Web Services are merely classes invoking one another utilizing a STANDARD based upon XML. And if you don't see/need the utility derrived therin, then that is your concern.
And how exactly did Java(tm) address versioning?
meh.
Linus Torvalds can lick Steve Ballmer's scrotum!
Does he have to sign an SCO-like Non-Disclosure Agreement to do it?
Table-ized A.I.
You mean the java whose creator wrote this???
Saying Android is a family of phones is akin to saying Linux is a family of PCs.
...that some companies still have 'Windows 5.0' on their sheets as lists of systems with operating experience, I don't see how this is relavent.
Right now 'Java' is the en vogue thing to ask for on a resume. C# hasn't reached that level yet. It's still a buzzword to the HR types.
As a rock-in-roll Physicist once said, No matter where you go, there you are.
They're running out of common terms to steal and obfuscate, aren't they?
In a world where developers are baying for customers' attentions, very few people can claim to command that of the developer. Their blogs may be the only clue to the higher level of thinking that they operate at, creating the answers to why and when code works in addition to the perennial how
(Score: -5, Please pass the doobie over here )
Tired of being "punished" by the Slashdot $rtbl since 2002. I'm now over at http://soylentnews.org/ .
This is one of the best .NET books, the first of a series of pretty good books, by those involved deeply with the framework.
.NET framework, and is of special interest if you are interested in the advanced features of the Common Language Runtime like method interception, transparent proxies, application domains and metadata.
This book covers the technicalities in the
Compiler writers, framework developers and those who need to get the most out of the framework will be interested in this title.
I can not recommend this book enough. Don has done a fantastic job. It helped the Mono developers understand the low-level technical features of the framework.
Miguel.
This whole .NET thing may have its technical merits.
.NET? Yes, you can.
The truth is that we play by different rules. Can you make money pushing coke? Yes, you can. Can you build web applications with
why would a read a book by a guy who makes up words like "portence"?
C# and the CLI (ECMA standards 334 and 335) have no patent fees attached to it, it is completely patent free.
;-)
The ironic thing is that *today* the fastest fully open source Java VM that can run Eclipse is Mono plus IKVM.NET (the open source Java VM that generates CIL code on the flight
Miguel.
Everything you write in Java has to be written in Java. I know there are Java purists out there who may think that rocks, but it could be beneficial to be able to pick and choose languages for the task at hand. The multi-language innovation is really neat to me. Some languages make string processing a snap, some don't.
.Net, Java, manually coded Perl, whatever. It seems to me MS studied Java's strengths, copied those, added new things Java didn't think of (other language support), and avoided some of Java's pitfalls (C# is a standard, as is .Net), and that including web services is really a separate thing aside from their incorporation in Visual Studio.NET.
Web services don't have to be anything other than classes interacting through XML - isn't that enough? That's a significant advance in code re-use that I see, much more important than object oriented programming I think. So often code that has been written doesn't work for a new language version, a new business process requires significant changes and everything gets rewritten, or other incompatibilities crop up. Since the cardinal rule MS wrote for COM objects was 'the interface is sacred' (I know, do as I say, not as I do, and I agree there) that always bugged me. So now you write a web service. Can be used by all your other apps, you can port your other apps to different language/OS/etc and still take advantage of it. I don't care what technology is behind a web service, just that web services themselves are future-friendly and seem to lead to the semantic web quite nicely. MS's contribution here isn't revolutionary, but it will get more people using it. The main benefit of web services is that I don't care whether you're serving it up from
And your general approach. From what I've heard Longhorn will do this with the filesystem, but I haven't heard anything about registry.
Bloated registries with old, invalid data are one of the main places to cause windows problems. I find left over keys after doing the manufacturer uninstall all the time. Tying the registry record to the core application record in the new filesystem seems like a simple way to enforce referential integrity here at the one place where the lack of it causes so many headaches for windows users everywhere.
No surprise he can get good info on .NET.
The post was not a troll. the truth about the .Net framework is that it is designed eventually to only alow tcpa key coded web pages to be displayed on an MS browser. Anyone who is stupid enough to think that MS is not in the business of trying to lock up all internet communication deserves what is coming. Something that will make you raise your right arm and alow access to your wallet in salute! Really read this guy he is biased but he is right! http://www.cl.cam.ac.uk/users/rja14/tcpa-faq.html
OH THE SHAME I fell off the wagon and use sigs again!
How often do you port mission critical systems to other OS's? Or even other databases?
Did you grossly miscalculate the processing needs in the requirements phase? What's the deal?
Nothing ironic here, move along :-)
:-)
My guess is that the reason that Kaffe is not particularly fast is that there are already three very high quality JVMs freely available for Linux.
In fact, I know that it is the existence of these VMs that are enabling a large number of major companies to move to Linux.
It would be interesting to compare the collective investment in Java-on-Linux to that of Mono-on-Linux. My guess would be about 6 orders of magnitude in favor of Java, but of course this might be slightly out...
99 little buttons to push on my screen 99 little buttons to push
Mouse one down and push it around 98 little buttons to push
(repeat 98 times)
There are no more little buttons to mouse on my screen no more buttons to mouse. My mouse it is hung and just for some fun I'll cfdisk the whole fucking thing!
OH THE SHAME I fell off the wagon and use sigs again!
I'm seeing a lot of blind flaming about .net, so here's my overall response. .net (all lowercase, not ".NET") is Microsoft rearchitecting Windows across the board. You don't use the Win32 API any more; you use the .NET libraries. You don't write applications in raw C++ any more, you use C# or another higher-level language that targets the CLR (Microsoft gave advance information to a number of indepdendent language developers, encouraging them to port their products to .net). Security issues caused by low-level buffer overruns have vanished. You get a nice Visual Basic-like environment for creating GUIs. This is all a great idea.
.NET and C# are much better than the Win32 API and C++, there's a general staidness to it all. It feels like we've moved from 1985 to where we should have been in 1994. C# feels wonderful if you're a C++ programmer who never used Turbo Pascal or Visual Basic (or if you're a Turbo Pascal or Visual Basic programmer annoyed with C++), but it feels overly complex if you've used a dynamic language like Python, Smalltalk, or Lisp. The OOPness of .NET is very heavy and static. And it's all still based on a compile-run cycle, which is hard to go back to once you've gotten away from it.
.NET, and even though Microsoft is showing a lot of initiative and is willing to throw out a lot cruft we've all gotten used to, I don't think it's enough. The result is still complex enough and elaborate enough that it's tough to bank on it as the future.
The downside is that while
Personally, even though I think Microsoft is correcting a lot of past mistakes with
Hmmm, Essential
I said: .NET -- installing Linux/FreeBSD, Apache, Java and Tomcat."
"Essential
Moderators say:
40% Offtopic
40% Funny
20% Overrated
60% Fanboy
Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
How did I get from "young and inexperient" to "naive"? My head hurts, I'm going to leave now.
it takes too much damned code to do the simplest things, but that is another story.
That's a side effect of OO, but if you're proficient with Java I don't think it's as much of an issue. However, well written OO is great in a medium-sized and larger apps.
I don't know much about PHP, although as much as I feel that .NET is not worth the effort, it's a vast improvement over what was available in the past from MS. That being said, there are many OSS tools that work within a Java/J2EE environment that are adding a lot of value. In the end, that's the one thing I don't think MS can touch and which undermines their .NET initiative.
The java OSS tools add a lot of value and these same OSS developers won't do the same for .NET. Mono developers were met with hostility and as much as MS crows about .NET "standards" they're doing everything they can to keep it closed. That deosn't bode well with OSS folks.
Computer Science is Applied Philosophy
Essential COM .NET
.ORG and Essential .GOV?
Essential
So what's next, Essential
Time flies like an arrow. Fruit flies like a banana.
If stop thinking "whole systems" and start thinking "components", the opportunities become endless. Within any given large company you will usually have different systems running (within any given small to medium company you will eventually different systems) and by "going portable" you will be able to offer new services where previously there were none. Objected oriented programming sometimes works exactly as our mothers said it should...
My point is not, as I posted in another answer, being able to port my company's "mission-critical-do not-touch-we-die-if-breaks" system at will. My point is being able to offer services in many platforms. A code once run anywhere type of thing. That without even touching the "wild CEO" problem as in "John, I decided to buy Solaris this year - care to port those web apps for me? It would be fine to have then by Monday for a demo in the board meeting..."
IMHO the biggest problem with .net webforms compared to say java server faces or tapestry (use google if you need information on any of those - java got good documentation ;) is the inherent problem with the way webforms are developed.
.net and that's a port of Struts.
You can't (well, not without serious trouble - you can't use those nifty "wizards" of VS.NET - there you lost the "productivity" buzzword) easily use the common model 2 web development paradigm.
The problem is that in webforms you're supposed to be using a "page" with code-behing technology as entrance (thus coupling the view with the controller). Put another way: the code-behind belongs to the page - Controller belongs to the View != MVC where each are seperate (making large projects harder to develop and maintain due to those hard bindings).
I.e. there is no similarity to as in java where you have a front servlet (a.k.a. Controllor) and a java bean (Model) and a jsp/html page (View) with no hard bindings (you can, if you want, specify th bindings in the web.xml file for the controller servlet). There are a lot of MVC architectures available for J2EE developers. So far I've only heard of one for
And how exactly did Java(tm) address versioning? Well, http://java.sun.com/j2se/1.4.2/docs/guide/versioni ng/spec/versioningTOC.html
Package based versioning - biggest problem is that most open-source (I don't really care about other commercial projects as I don't use them ;) projects don't use this :(
Sorry to bring you the news, but you really should get out more
http://grunge.cs.tu-berlin.de/~tolk/vmlanguages.h
Among the most interesting of those you find
- jython (python running on the java vm - the fastest python implementation?)
- eiffel
- smalltalk
- nice (indeed a very nice
;) language - a little bloated syntax though)
- sather
- ada
- ruby
- javascript (rhino)
- aspectj (first AOP language)
- forth
- fortran and last but not least a very promising language called
- Kava
http://www.research.ibm.com/people/d/dfb/papers.h
t ml#Bacon01Kava
So, again, your point aboutThank you. I actually did go and read it.
.Net, learning Java from a guy I am simultaneously teaching .Net to. Info like this is much appreciated. I wonder - with the high churn/release cycle of many OSS projects, why don't more use Package?
My experience is largely in
meh.
Well, just guessing here, maybe because the majority of java developers aren't even aware that it exists and if they are believe that it's not needed :)
More like a cross between C++ and Object Pascal in Delphi. Seriously. That anyone could hold Java up for originality boggles the mind.
I'm talking transactions that do more than just insert a new order into a database. Something that actually has to coordinate a transaction across several remote systems and insure the transaction follows well defined process. Can .NET do these types of transactions? Sure, but it will require a lot of hard work and dedication to reach 1K transactions per second. If you want to reach fault tolerant transactions across a cluster of servers, you're best option today is to use Java. Microsoft officially doesn't have any plans to build a stateful application server that provides object persistence management.
What kind of crack are you smoking?
.Net apps are noticeably faster than Java apps
.NET uses a "virtual machine" too. That doesn't mean that it doesn't generate native code. In fact, wth virtual method inlining and hotspot optimisation, Java's JITs are currently much more advanced than .NET's.
Actually, the CLR uses a Just-In-Time compiler to compile to native instructions.
And so does Java. And it has been for years.
On the other hand, Java uses a virtual machine to run inside a sandbox; no native code there, hence
So?
But ofcourse you were trying to use as many technical terms as you could to cover the fact that you know fuck all.
You misunderstand me (not for the first time today, I notice), I was not talking about client-side issues. The problem is, not all companies use the same system. We're a small but fancy development shop. If the client wants our systems to run under Windows, they will. If the client wants them under Unix, there they will be. It is fine to build in ASP.NET if you can be absolutely sure your system won't have to run on anythng but Windows. I don't have this luxury. Time proved us that a cross-platform language and infra-structure would give us more market penetration. We're still alive and kicking after all these years.
Oh...I understand the "Higher thinking" of most developers.
As someone who chose the networking path (real networking...not the bootcamp bred fare currently litering the corporatescape), I've had to fix, kludge, and work around the products of such superior intellects for nearly 10 years.
Please, this prima donna approach to developers as the darlings of anything silicon is ridiculous. They're smart, but there are lots of other people out there just as smart that do other things with computers. The company who recognizes *all* of it's brainpower--not just the coders--is a superior company indeed.
Companies should compete on implementations, not standards. We already had a perfectly good web application platform specification in J2EE. What Microsoft should have done is make a better JDK and application server. Instead, they rip off Java and create their own platform, yet again showing their total contempt for the best interests of the market.
Write your components as web services. Now change the OS, language, database, whatever. Now you can write in code optimized for the particular hardware/OS you're on, while allowing the code to be called from anywhere - on the same box, on the same LAN, or by your business partners in Austin. So who cares if the code is portable?
that's very interesting. how does the jvm do at handling garbage collection, etc. for a typeless language like javascript when it's used to strongly typed java?
But now you add the network variable into the equation. All will be fine until you have time constraints to deal with. Those may kill you in a bad day. Besides, you are restricted to connected users. For desktop stand-alone applications it is an unnecessary burden on the end-user.
Desktop stand alone? I thought you were talking server apps. Have you ever written a desktop standalone app in Java? Amazingly I've never bought a commercial standalone product that required the jvm to run, nor would I consider it. Or are you talking custom business apps? For small business custom business apps in a standard company (running windows) the economics of writing RAD in Visual Studio slaughter Java. You don't spend time defining classes and interfaces for a small custom app. In a company running Linux, well it's obviously a tech company and nobody there would listen even if MS were better for their problem, so sure Java might be fine. Even for business apps though, when you're on an intranet usually a web app would be my preference over client/server - managing software releases is a drag compared to just updating the web server, and in an IE environment you can offload a lot to client side vbscript so the response time is close to client/server.
First, you wouldn't even know you needed jvm to run. If needed, it would be installed along with the application.
Second, Java slow performance in the desktop is now more a myth than a fact: we tested applications with complex (Swing) GUIs in machines from Windows95/K6/32MB RAM up to new shinny XP/P4/256 MB. Its performance was more than acceptable at the low end, indistinguishible from anything else at the high end. When I say acceptable I don't mean "acceptable for us Linux geeks ifyouhavewindowsyoumustlikeitslow", I mean acceptable for our (large) clients. The point is that if you pay attention to the performance pitfalls you will be fine (for instance, recently I was able to accelerate a routine by an order of magnitude or more - from 220 sec to 1 sec or less - because the programmer forgot the ancient String/StringBuffer pitfall).
Third, it may be hard for Windows-only developers (who necessarily listen to a lot of MS marketing speechs) to believe, but it is actually a selling point to tell the client you can deliver his application for the three major platforms (Windows/Mac/Linux) at the same time without any additional cost. Specially for clients with a large Mac base or with a "inclusive" marketing strategy.
Let's say I buy a game. It's not going to be written in Java. Let's say I buy music processing software. It's not going to be written in Java. That's all the software I buy personally, and it needs to be optimized for particular hardware/OS to have decent performance. What kind of apps are you talking about? Can you give an example, because I just don't see what commercial software you'd write that you wouldn't want to optimize for a particular hardware/OS.
So again, are you talking about custom business apps? Small-medium custom business apps have always been the focus of MS Studio, and it excels there.
But you say the client wants to sell this product for multiple OS's - what kind of product is this? When games have a Linux version, it's ported over. When something like Photoshop has releases for the Mac and Windows, the Windows one is ported over. I'm not talking out my ass here.... Photoshop, Premiere, ProTools, SoundForge, there are always separate versions written for the different OSs, and it's necessary. With anything really complex like that you'll want to take advantage of whatever's built into the OS or hardware (DirectX, OpenGL, AGP cards, etc). The differentiation of one product from another in a field is small in most cases, and getting every advantage you can from the OS you're running on helps your product stand out.
I just don't see the niche you're talking about if it's not back-end server software. Can you provide examples? Have you actually done this development yourself?
220 seconds to 1 second. This was obviously not a product you sold on the shelf. So was it a custom app for internal use in a company? Was this released? Did your project have performance requirements or code reviews? I can't imagine a business app needing 220 seconds to do anything.
I agree with almost all you said. Some applications (image/processor intensive like Premiere or Photoshop) and games (3D Shooters, for instance) need all power a processor can give you and more.
To give one concrete example (we have more of those) of what I am talking about, we are currently developing an educational software (a "text exploring" software, based upon a particular methodology - it has basic text processing capabilities plus a host of text oriented features). The client absolutely needed it for Mac and Windows and found it very pleasing to have it for Linux too. One thing you must notice that bellow a certain amount of time, the user won't note any difference - and Java is enough for this: no fancy annimation, no intensive processor task and a nice user interface. We are entering beta now and have not found any performance problems.
So, I am talking about a custom app, but it is not exactly a business one. It will be used by thousands of users (mainly students).
PS: the 220 to 1 sec was a mistake correction (I can't think of anything that needs 220 seconds too...:). Remember, I was talking about Java performance pitfalls. If you use a String instead a of an StringBuffer for a string that will be modified, you suffer a great time penalty in Java - in this particular case the program needed to interact through the text and change it completely twice (hence the 220 sec - it was also an n^2 algorithm - junior programmers sometimes just can't help it...:))
The educational software market is probably a perfect example for you. You never know if the school will be running windows, mac, or, very rarely, linux. And there aren't constant minor updates as business rules change, so the maintenance issue doesn't push for web instead of client app. Just PLEASE don't write any Math Blaster type apps :)
I can also see the use of this in certain scientific apps. Education and science aren't problem spaces I'm familiar with, and would seem to benefit from cross-platform compatibility, and to make more sense as a client app rather than a web app. The needs are particular to the problem space, for the problem space I work in (web databases, ecommerce, intranets) these abilities don't offer any value to the client so they don't sway me to java at all. It's partly personal prejudice too, I just don't like the C/C++/Java syntax style on an aesthetic level. We tend to make aesthetic judgements about things right off the bat, and then think of 100 auxiliary reasons to back up that judgement which are really beside the point.