- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
I didn't take a database course which discussed NF until my Masters degree, after some time working in the field. I learned that every database I'd ever designed have been in 3NF from the start. I had a lot of trouble with the exercises in class, which would give you a badly designed database, and than ask you to put in into 1NF. I would immediately put it into 3NF. ("But why would you want me to fix it wrong?")
Admin
Shared libraries don't really exist in .NET, unless they're in the GAC. Of course, multiple apps can use their own copies of the same dll. For example, log4net and SandBar are components that live in dlls deployed with the application. If another app also wants to use those dlls, they bring along their own copies. Since it's just a copy of the same dll, this doesn't necessarily mean code duplication.
The only disadvantage of this is to do with the size of the dll - if 100 apps use the same one, then you need to download and store that 100 times. The GAC gives you a way out of that, however.
Yup, this is all stored within the dll. You can access it by looking at the file properties, or by going to C:\Windows\Assembly. (replace "windows" with "winnt" if needed).
Admin
Ummm. BOGGLE
I absolutely have to be missing something here.
Surely the point of a dynamically linked library is that it can be shared. I mean, linking dynamically as opposed to statically hits performance, so carrying around a dll so that you and only you can link to it seems insane. Just fucking link statically, surely? Assuming .net allows this, but I guess it must.
A similar WTF exists under MacOSX / OpenStep - an app can carry its own versions of a shared framework, (or .so, if it so desires), but who would fucking want to? OSX does, to its credit, allow those libraries to be shared with other apps, but even that is a WTF - what happens if the library is actually needed by another app and you delete the container?
And multiple copies of the same library mean duplication. by definition, as that's what a copy is. It's code duplication whichever way you cut it.
Right. So the file is presumably named something like 'myfunkylibrary_v123.dll'? Otherwise I couldn't have multiple versions living in the same place, right, cause NTFS is teh suxx0r[0]? Otherwise I have to install multiple versions all over the fucking place and have a central repository that links versions to files. Maybe that's what c:\Windows\Assembly does? And if that's the case, what happens when that gets all fucked up?
I'm sorry if I'm asking stupid questions here, I know jack shit about .NET, come from 20+ years of serious unix and mainframe development and am slightly worried that .net is based around another "registry"[1][2]. I actually fail to see, as described, how this goes any way to actually solving what is, admittedly, a difficult problem[3].
Simon
[0] Well, not much more so than most other filesystems, but hey. [1] A concept that sort of worked 20 years ago when I first came across it in the mainframe world, and doesn't work now [2] I could, and arguably should, google this stuff up. but I prefer to get some feedback from peple who supposedly know it.[4] [3] Speshly if you're drunk, which I am. [4] Filtering out the fanboyisms, of course.
Admin
That statement incorrectly assumes that such a thing currently exists.
But what do I know? I still think Xanadu will eventually get finished...
Admin
It's a valid point. I don't know enough about how .NET links assemblies. There's a reference in the assembly to dependencies, and it cries if you don't have the required files, so I suspect that, despite having multiple files, it is actually linking statically. You can use Assembly.LoadFrom() to dynamically load an assembly.
Why not just have everything in the one file? I can't really say. It doesn't bother me that much, though.
But you didn't need to type it twice. That's what I meant. Code duplication (to me, anyway) is when you have to figure out how to do it, then someone else has to figure it out again, or has to copy and paste the code. With a duplicated file, an automated build can copy the file.
No, not quite. The dll is still called the same thing, it's just that the filenames don't have to be unique in the GAC. The GAC is a special folder where the normal file identification rules don't apply.
Ok, you have myfunkylibrary.dll. It has a version number property of 1.2.3. You install another version, called myfunkylibrary.dll, with a version number of 1.2.4. Because the version number property is different, the file is different and does not overwrite v1.2.3. When your app wants v1.2.3 of the library, it specifies v1.2.3 in the reference, and gets v1.2.3.
Actually, it's a bit more complicated than that (isn't everything) because it also takes into account public key (which I belive must be regenerated with each new version), culture (language), and so on. It's not a registry, it's just that when Windows references files in that folder, it takes into account more than just the filename.
When/if that all gets fucked up... Pretty much the same thing as you always get when your machine fucks up - you go to your backups or your System Restore repository.
Admin
Actually, they are (fucking) statically linked. Remember that .Net Assemblies are made up of bytecodes, which are natively compiled & statically linked at run-time.
An shared libraries should be shared, but the world is filled with some very bad programmers (you need me to tell you that here?), so that AppFoo, which was written to use SharedLibV1, can't be trusted to work with SharedLibV2 (It's it's usually impossible to tell which author of which app is to blame). That is commonly known as "DLL-Hell".
Yeah, and hard drives are under to a dollar a GIGABYTE. (And most .Net assemblies are under 100KB)
Basically, you copy version 123 of myfunkylibrary.dll to that directory, and it's automatically renamed myfunkylibrary_v123.dll. Copy it to another directory, and it gets it's old name back.
Admin
Darn, how did I forget that?
Admin
This works with plain Win32 dlls as well (C, VB, Delphi, Python, etc), it's just harder because you have to create the manifests yourself, and presumably update them every version.
If done correctly there is no reason to worry about DLL hell, you just link to the latest version of the file that matches your specs exactly. Just update the manifest to link to a newer one.
If you'd like to see some of this in action in XP, check out windows\winsxs, you can find the manifests and various versions of some system files in there. I don't know too much about it, just that it's a prototype for introducing the whole shebang in .Net and Vista.
I do know that if you delete the folder (lookit all them files wastin' space!) most programs will fail with a missing gdiplus.dll error. >.>
Admin
The problem is not so much with disk space, although that can be a problem, but with disambiguating at runtime. Under most systems, shared libraries get loaded once, so 2 apps using the same shared library will be sharing a copy of the code segment. This can make an enormous amount of difference to load-time performance, as well as overall memory footprint.
Under most OSs, it's not reasonably feasible to disambiguate between multiple copies of the same file at runtime, so if app a loads libfoo from location a, and app b loads libfoo from location b, both will be loaded into memory, even if, for example, both the location a and location b versions are symlinks to a version in location c
Of course, if .NET statically links everything at runtime, all bets are off. It just becomes a deferred loading mechanism, at least for those assemblies carried around with the app. Of course, that's going to mean that if you have 20 apps running log4net, there will be 20 instances of the log4net code floating around in memory, and the compile-link step will be carried out 20 times too.
Ah, okay. OS voodoo. Yes, that scares me. It seems an over-complex solution to a problem that is largely solved elsewhere. Remember, DLL hell is generally speaking only a problem on windows...
Thanks for the explanations, though
Simon
Admin
Well, if you open up a cmd prompt, cd into that directory (c:\windows\assembly) and do use a command like tree or dir /s/b, you'll get an idea of what's going on.
Admin
The problem is not only with space on either disk or memory, but with maintainability: Let's have 100 apps use the same Library (as already assumed above), and each app brings with it a copy of this library.
Now they find a major security risk with that library, but lucky you they fix it in one day.
If there were only one library, that each app references, then you were really lucky, because replace one file and everything is fixed.
But as I understand the situation,now you will have to wait for 100 vendors to update their app or provide a patch that will replace this broken library.
And I doubt GAC will solve this, because an app that requests version 1.2.4 (which is broken) will never see the fixed 1.2.5, so the app remains broken until the vendor will provide a patch, even though you already installed the fixed version on system.
cu
Admin
Well, that's one reason why I mentioned Windows Installer - it can create the manifests for you at install-time, you just have to putall the info for the manifests in yourself.
Admin
Uh, and where did I claim they were essential?
It's amazing how you can call my explanations "a nice feature" in the first paragraph, and in the next you completely misrepresent my assertions as unexplained. If you're looking for specific, concrete applications then you have deliberately ignored my statement that "others have given more specific demonstrations". Who do you think you're convincing?
What I'm going to write should be completely obvious, but you've missed it entirely: The concept of abstraction transcends any specific area of computer science. Fully-featured symbolic links allow the separation of physical and logical model. It's amazing what lengths someone will go to rationalize inferiority.
Admin
You what? That was the whole basis for your argument! That NTFS sucked because it didn't have them (except it does, just not quite as funky). If they're not essential, then your argument falls apart, because NTFS can't suck just because of that. (See below)
Who do you think you're convincing?
There's a difference between "essential" and "a nice feature". For example, folders are essential. File access security is essential. If you don't have these, then the FS sucks. With them (as well as all other essential features), you have a workable OS. Maybe not the best, but it doesn't suck. Symbolic links are a nice feature, but not essential. You were claiming they were essential, but they're not.
Are you still confused?
Separation isn't always desired. In some cases it is, but not always. In some cases it just leads to confusion. I wonder how many people have seen symbolic links and said "hey, cool", set up millions of links to all kinds of files, and then got conused when they think a link is a copy. I'm not saying they're harmful, but they can be if not used correctly.
When I browse my file system, I'm not programming. In fact, my file system should act in a similar way to a file cabinet (hence the terms "file" and "folder"). It should be simple. Symbolic links are really for specific cases. Windows (and *nix running KDE or Gnome or X, most likely) has enough trouble keeping application shortcuts organised, so you want to add a load more unnessecary symlinks? No thanks.
It's also interesting how you claim that you never said symlinks were essential, then in the next breath say they're essential, isn't it? How am I supposed to take notice of you, when you can't even keep track of your own posts?
Admin
Well, CP/M 68k had neither folders nor file access security (though you could hide them and make them read-only), but still it was a VERY workable OS in its time.
Now do you still think, folders and file security are _essential_ features by your definition?
cu
Admin
You've committed the cardinal sin of misinterpreting a subjective term. Suck is a term relative to each individual that uses it, and its application has nothing to do with essential features. Fuck, computers aren't essential, they just make things nicer. That's all this is about.
Bullshit, neither of these are essential. People have gotten by for years without either.
I agree!
Again, bullshit. Find this claim and quote it. This is a bald-faced lie.
I neither stated nor implied that separation was always desired. The administrator can decide if this abstraction is necessary given the featureset available to him. Just because an administrator can create directories doesn't mean that the administrator is going to go buck-wild making directories that confuse everyone. Don't blame the tool for your shortcomings.
Hahahahahahaha.
Admin
So when you implied (I sure hope you are not denying that you implied this?) that NTFS sucks, you weren't actually trying to imply that? Make up your goddamned mind! Or was your original post just you being an MS-bashing troll?
Ok, we can simplify this greatly (since you seem )
A) Does NTFS "suck"? No, it does not.
B) Does NTFS have symlinks? Yes, they're just called junctions, and admittedly not quite as funky as symlinks are on *nix.
C) Are symlinks essential? Nope. They're a nice feature, nothing more.
D) Are file-based symlinks essential? (That is, does NTFS suck because it only links directories?) Er, read the above. Symlinks aren't any more than a nice feature in the first place. They're still a nice feature even if they can only be used on directories.
E) Is separation essential. Hell, no, in fact if not done correctly, it can really screw things up. Separation is great in programming, but then a file system shouldn't require programming skills.
Anything you disagree with here?
Admin
Can you read? I implied that NTFS sucks with about as much grace as an elephant can figure skate.
This statement is a fallacy of induction. I clearly bashed NTFS, not MS. Shame on you for mistaking a company with a filesystem.
Yeah, you call it "funky", I call it "not crippled". I'm sure you're very happy with your non-funky, inferior filesystem. Oh, and symbolic links are a function of the file system not the operating system, so it is completely wrong to say "on *nix".
Read my post dumbass.
You know the Amish? I think their lifestyle sucks and I can give my reasoning. But they sure as hell don't think it sucks. This is your #1 error throughout the misconception-laden drivel you call a post. Your willfull misrepresentation is staggering. You have no intellectual integrity whatsoever.
Admin
Whether you did it gracelessly or not, you made the implication.
So you were being an NTFS-bashing troll, then? Also, by extension, you were bashing MS, since MS produce the system.
*nix is the only OS that uses etc, as far as I know (does Be use it? I don't know). My knowledge about that is probably incomplete. Thanks for pointing the error.
Why should I read it again? Are you somehow able to edit your posts to make them sensible.
So say "IMHO", dumbass
Admin
One more thing: Chris, you seem like an otherwise intelligent person, but your posts read like something from /.
Admin
Reading this thread, the exact same could be said of you. People in glass houses, and all that.
Admin
I'm not pushing hate of anything. I'm not saying "Windows sucks because it's not Linux" or anything along those lines. So I'm not sure what you're on about.
Admin
No, but you've called him out as an idiot for having an opinion of something which clashes with your own. That's the historical bases of many a slashdot flamefest, and your reply here to make yourself seem innocent of all wrongs is quite keeping in that.
Admin
I've done no such thing. I never said he was an idiot (in fact, I said I thought he wasn't an idiot), and it's got nothing to do with my opinions (ok, maybe just a little - if it had been anti-Linux, I might have laughed at it).
I had a go at him because he presented his opinion (that NTFS sucks) as a fact, citing absence of symlinks as reasoning. Other people informed him that symlinks do exist in NTFS. From then, he said/implied that NTFS still sucked because NTFS symlinks aren't as feature-rich as the etc ones. I maintain that this difference does not make NTFS suck.
It's not his opinion that got me fired up, it's the way he put it forward.
Admin
um.. Do you think you could lean how to use [ quote ] tags? When I try to post a message quoting you, your message is reformat, removing line breaks, so trying to sort out your comments from the lines you quote is rather diffcult...
So, how do those other OSes do it (without using a registry-like device) Nonsense. It happens anywhere there are shared libraries. It the effects of scale again. 95% of the computers in the world run Windows, so 95% of the shared-library problems are with Windows, with some mitigating factors which shift the appearance. (With Macs, due to the limited app market, it's very unlikely you'll be using AppA with SharedLibraryB from different vendors; With Linux, if AppA stops working with SharedLibraryB, the general response is : "You have the source code-- fix it yourself".)Not quite. Trust level is controlled by the user. Hence those 100 apps could each request "myfunkylibrary" sans version number, and they are given v123. When v124 come out, they could use that (you may have to copy it to every directory). If one crashes with v124, you can say "only use v123". If it's a high security app, the app designed can say "only run with v123", to prevent someone from hacking it by slipping a bogus v124 in.
In .Net assemblies can be "weakly-name" (just the filename), and "strongly-name" (which includes the filename, version number, contents CRC, locale info, and, I think, and encryption key).
Admin
At which point, I called you out for the same thing as you did him; presenting your opinions as fact. It's your opinion that NTFS doesn't suck because it does have the same basic features as the etc FS. You called him out as an 'anti-MS troll' for that opinion, which had nothing to do with the issue at hand.
I've said it once already and feel it bears repeating; People in glass houses should not throw stones.
Admin
@James: Who were you talking to here? Me? I wasn't aware of any formatting problem with my posts. I use [ quote ] tags just by typing them, which is how I thought I was supposed to use them...
Grrrr.... I don't actually think I'm guilty of this - I've never expressed my opinions, except that NTFS doesn't suck. I take that as a fact. I think if you say that NTFS sucks and, for example, etc doesn't, then you need to come up with real reasons why that is. Symlinks on files as opposed to directories just isn't good enough a reason. I take that as a fact. Maybe I am guilty as putting my opinions forward as fact, but I don't think I am, though IIRC it all started with people challenging Chris for putting his opinions forward as fact.
Now, I do admit to that - I did call him out as an "anti-MS troll". And I still do, because he is. And it has everything to do with the issue at hand, if the issue at hand is whether NTFS sucks or not. Admittedly, that's not the original topic of this thread.
Admin
I thought it was obvious I was expressing an opinion: There is no objective definition of suck. No fact you can point at and prove. It is meant to convey emotion not logic. Emotions which are different for everyone.
Are people that think WinME sucks anti-MS as well? Are people that use slurs like "XP's fischer price theme" anti-MS? Are people anti-MS if they hate Clippy? Are people anti-MS if they think NTFS sucks?
No, no, no, and no. Shades of gray. No black and white opinions here.
I'm not an anti-MS troll. I think they've done a lot of great things, and .Net is currently my favored development platform. I also think they've done a lot of stupid things, and -- like everyone else -- they deserve to get called on it.
Thanks. Sorry, I do get carried away sometimes.
Admin
All right, sorry, I get carried away soemtimes as well. Maybe I just read (past tense) /. too much but it seems like everyone just wants to have a pop at MS. I'm not an MS fan, really, but if they have a good product (and IMHO NTFS is a good product) then why not recognise that? But people don't want to do that - they just want to have a pop at MS, and it really does get tiresome.
Admittedly they have done a lot of stupid things, but no-one seems to list the stupid things that, say Apple has done, or IBM, or the Linux community. The most annoying thing is that a person new to computing would easily get the impression that the only thing you need to do to be better than MS is to not be MS, and that when choosing a software product, they just have to go "if it's not MS, I'll take it", rather than do an actual comparison on what the software can actually do.
I suppose I first got annoyed when people (way back in the mists of time) tried to claim that MS distributing IE with Windows was them trying to take control of everything, but when Linux does the same thing with Konqueror, it's just providing a feature-rich OS.
NTFS isn't perfect, but then neither is etc.
Admin
Well, isn't Konqueror standards compliants (as much as possible in the browser space)? Then it is understandable
If MS ship IE with their own little changes to the standards and everyone is basically using it by default it's somewhat of a problem. Overall, the fact that this issue was looked at seriously by courts is quite telling I think.
Peace.
zorro.
Admin
Sorry that was meant to say ext.
Admin
Not really - courts respond to public opinion as much as any other government institute. If the public opinion (rightly or wrongly) is that MS is evil, then that's what the courts will decide.
And Konqueror isn't actually compliant any more than IE is - the difference is in bits where the standards are unclear. For example, on the subject of :hover in CSS stylesheets being supported on elements other than links, this was never (AFAIK) set in stone, it just existed as more of a proposal.
Admin
Sure they do, all the time. People are constantly railing about Linux is hard to install or has bad driver support, how its user interfaces haven't been up to snuff, how one-button mice suck, etc. There was a thread here just a little while ago where some guy with a poor head for logic inducted that Open Source was bad because of a bad Ubuntu experience. While it's easy to point out his inductive error, I agree with the specifics of his complaints.
Well, I wouldn't say that. KHTML (Konq's engine) really is more compliant than Trident (IE's engine). Take a look at this comparison chart: http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29.
Still, a mere chart doesn't tell us what the impact of very specific bugs are. Some pieces are used much moreso than others, and can thus lead to significant amounts of pain. No bug that I'm aware of has had the impact of the Internet Explorer box model bug. This is responsible for an unbelievable number of misrendered sites.
The recommendation never defines the elements to which :hover applies, but it doesn't restrict them to links specifically. The current implementation is an extremely lazy interpretation of the text.
Admin
A poor example, since IIRC he was verbally ripped to pieces. That's what usually happens to people who criticise Linux on forums - they get blasted into submission.
Which has been fixed. It's also a fairly insignificant bug, resulting in slightly narrower text. In most cases, the user probably wasn't even aware that anything was amiss.
Why? They've followed the spec. In a company such as MS, programmers are practically forbidden to do anything that's not in the spec, so they were just following their development practices. What you call lazy they call safe (since a programmer adding :hover to all elements might have caused more problems).
Admin
Think "/." is for script kiddies?
Go and check out comments on "digg.com"
Admin
If you're a causual browser, I can see where you might get that idea, but if you're a web developer who's attempted to create a site that's both easier to maintain than a mess of tables and displays cross-browser reasonably well.... it's driven a few of us to funny farms and premature baldness. If it looked insignificant, that was only the patience of the web designer to work around it, because it could cause overlapping this, one-word column that, and non-wrapping paragraphs here.
At times I wondered if I was using IE6 or IE3, some elements came out so badly.
I'm happy that it's been largely or entirely fixed in IE7, but the last five years (and the next 2 as people slowly upgrade) have been hell for designers who want something more complex than your average MT blog - while being CSS compliant without the pandemonium of tables. And I'm one of those people who get pissed off at the constant complaining about IE.
(Gecko and KHTML have had their share of box-model bugs crop up, as well, but rarely have they made it into release versions.)
Admin
JamesCurran wrote:
I know how to use [ quote ] tags. On all other bloody forums apart from this one. Unfortunately, this particular one doesn't like safari and won't let me quote at all. Well, it might. sometimes. if I pray to exactly the right elder gods. Sorry. You'll have to live with it or kick Alex into installing something that works.
then I wrote:
then James wrote:
Using symlinks and search paths, generally. It's not perfect, but it works and has worked for a very long time.
I appreciate that, with .NET, MS are trying to solve a problem that has never been fully fixed (although BeOS might have done a pretty good job, I can't remember the specifics under Be though).
The problems:
Versioning : this is actually a metadata issue; how do you represent metadata when your filesystem does not support it? unix-like systems generally use file naming and symlinks to 'latest', this is a kludge. Trust: again, this is metadata. How do you know you can trust a library? unix-like systems tend to ignore this. Java deals with it by embedding the signature.
It seems to me that MS have tried quite hard to solve the problem, but have had to resort to a central repository approach, which is horribly hacky. Of course, without symlinks or metadata support in the filesystem(s) they couldn't do much else, I guess.
<snip DLL hell discussion>Well, I was being slightly fatuous when I made the comment, but your rebuttals are wrong.
Under any unix-like system, different versions of shared libraries can and do coexist side-by-side. Even the most horrific shared library issue I've come across (the great linux libc migration) was solvable using the 'kludgy' symlink-and-versioned-filename solution to a large extent.
Dependency hell, that exists - installing package x requires y which requires z which requires 'a' version 123. It's a pain, but that's what packaging systems are for. But DLL hell is very very rare under unix-a-likes, and it generally only happens when you have an old package that relies on the 'latest' version of a library, where the 'latest' version of that library has moved on so far that it's no longer compatible.
As for the "With Macs, due to the limited app market..." comment, I'm afraid you crossed my troll boundary. My mac runs apple-specific software, pretty much anything compilable under a sane unix, and all your windows stuff as well. Yeah, I feel very limited as to what apps I can run...
The final comment was not made by me, but you have neatly bypassed or ignored the point, which was that if you have 100 apps carrying assemblies around in their own package, and one of those assemblies is found to have a hole, you have 100 places to patch, not one.
Regards
Simon
Admin
I'm both. And neither. I'm not really a web developer, though I have worked on websites, but only in support of my main role as build engineer. But when I browse around the web (which I do a lot) I'm not thinking about HTML tags, I just want to get to a particular piece of information. ATM, IE does that better. I find it strange that I should care about what HTML tags make up a page when all I want to do is read the information (which could be anything from a news article to bus timetables to game reviews to online manuals). It'd be like watching news on the TV and complaining that the newscaster's suit is the wrong colour. If the site didn't work, then I might care, but it usually does, and better in IE than in Firefox.
I have also experienced situations in development where Firefox didn't work and IE did. There was a case where a change control document in XML format had to have an XSL transform applied so that it was readable in a report-style format. In IE, everything worked fine, but in FF, a horizontal line (I think it was actually a <p> tag with the background colour set to dark blue, but I can't quite remember) always appeared really thick, and none of the columns would actually line up. It was like it was constantly resizing everything to fit the text, whereas IE just displayed it all nice and neat. I tried changing the height of the horizontal line, but to no avail.
My guess is that in FF the <p> tag has a minimum height. AFAIK, that's not in the spec.
Admin
Admin
Chris F and johnl, u two are the biggest bunch of users I have seen in a long time. Get a life.
Admin
*losers
Admin
Just because we like having a discussion? I'm glad I at least have something I give a rat's arse about. I pity you, I really do.
Admin
[:'(] Waaaaaaaah people aren't spending their time the way I want them too waaaaaaah [:'(]
Admin
Nice rewording...