Oh god, that makes my day! Java's going to be a real player now. Not that it wasn't already =P
EDIT: Oh and Myndfyre, this is why Java > .NET. Just wanted to grind your gears .
.NET 2.0 and
.NET 1.0 in source forms. Check out the date published for 1.0 -- November 5,
2002. Looks like .NET beat Java to the punch. Oooh. Guess you're not as cool as you thought.
As far as your question goes, I've answered it too many times. Here's the last one I posted on this forum (and the ensuing melee):
http://www.x86labs.org:81/forum/index.php/topic,4467.msg49300.html#msg49300
Well, like I said, I understand the hobbyist perspective, and now that VC is free, I think your second point is fairly well-negated, particularly considering the awesome debugger that's in VC. And, as to your third point, yes, I do shell out the money for software that I like. When appropriate. I do not support software piracy, and I do like to support the companies whose software I like.
Incidentally, I open-source most of my software because I generally think others can benefit from it, and I'm too self-conscious to think that I could make money from anything I've written.
That's no excuse. If you don't know what a socket is in Unix or how they work, you can easily 'man net' or 'man netintro' that explains the network routines. Documentation is meant to be thorogh. If you didn't understand something MSDN was saying and it offered no explanation for a concept, then it wasn't thorogh enough.
Speaking of sockets, but I've heard Yoni comment that MSDN does not explain very well how to do proper socket programming and that Skywing had taught him.
man net
I disagree; I think it *is* a valid excuse. Socket programming in .NET was also something that I struggled with, and in fact I still try to avoid it as much as possible because I sometimes worry that I don't have the error handling correct or something (network I/O, as opposed to file I/O, is a time-specific operation, and sometimes you have to wait and poll for data; it's not that I don't know how to use the API, but I sometimes feel that my handling of these kinds of operational program structures is just off. (Of course, others have felt the same way, which is why polling is now "out" in favor of I/O completion ports).
It looks like Microsoft is starting to get it ... however, you're still bound to buying different versions of Windows for diferent functionality. I don't thik Windows is very portable and its obvious that it demands a lot from hardware to run. Unix is very portable, NetBSD alone exists for dozens upon dozens of platforms, and it provides all the functionality that you need Windows * version to do.
Well, then - I hate to sound repetitive - but, if it provides
all of the functionality that Windows provides, and that users need, why isn't NetBSD taking market? Platform independence is over-emphasized, and it sounds special, but NetBSD really isn't platform-independent, and - let's be honest - the only thing that Microsoft would need to do to move platforms is provide a new HAL and maybe tweak the kernel according to the memory management demands of the system.
A command interpretor is known as a shell. I'm glad they adopted the terminal/shell concept.
Microsoft has supported the "shell concept" since MS-DOS. I used the Norton Utilities 6.0 command shell as my environment in MS-DOS 6.0. I never loaded command.com.
You wouldn't need a specific windows kernel because it is a true microkernel. Most Unixes use a monolithic kernel (minus say Mach...thats Microkernel). Although, I believe you gain a subtle performance gain by compiling certain drivers into the kernel. Ability to compile a kernel also gives you control over kernel specific features such as SMP, preemption, IPv6 support and a variety of other features.
Windows isn't really true microkernel - it's a bit of a hybrid in that the HAL provides interfaces that drivers must implement in order to work, and so the HAL defines the types of hardware supported by Windows. Windows can't work with hardware that doesn't have some kind of intrinsic representation in the HAL. Of course, even the most obscure devices can be made to work by, say, writing a miniport of a bus driver and then layering the functionality by calling, say, DeviceIoControl. The Windows API just doesn't provide functionality specific to the device until it's been incorporated into the HAL.
Because of the all-mechanism-no-policy nature of Unix, Unix doesn't force the use of a GUI environment nor does it even have a GUI. Your question about tablet machines really depends on what Xorg or XFree86 can do. That said, I would be really surprised if some X API didn't exist for touch screens. Furthermore, I would be surprised if some applications that use this API didn't exist.
What I can tell you for sure is that there is no Window Manager or Desktop Environment that I know of that allows control with a stylus that I know of ... maybe Gnome or KDE.
One solution would be to write a daemon that interfaces with X and acts like, say, moused.
Like I said, I realize that I'm sure there's something out there that mimics some tablet functionality. But I guess what I'm saying is - okay, tablets are a cool thing. Windows has supported them for 3 years (or more). Since Linux has no "policy," it doesn't define a way for me to expect it to work across distributions, etc. And I know I couldn't expect to write something like that on my own, at least, not nearly as robust as the Windows implementation.
It's a minor point that I'm sure could be argued across platforms, but it was an example on my mind.
You shouldn't need a kernel debugger to diagnose problems. One thing I wish Windows had was a console where the kernel could print errors ... Windows has no such thing. The event logger is not verbose or detailed enough. The boot log is okay.
I'm sorry, I misspoke because the kernel debugger is the same application as, for instance, the crash dump analysis application.
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000066, memory referenced
Arg2: 000000ff, IRQL
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: 804e5deb, address which referenced memory
Debugging Details:
------------------
FAULTING_MODULE: 804d7000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 433d2dd2
READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
00000066
CURRENT_IRQL: ff
FAULTING_IP:
nt!KeReadStateEvent+56
804e5deb 66394616 cmp word ptr [esi+16h],ax
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
BUGCHECK_STR: 0xA
LAST_CONTROL_TRANSFER: from 804e5deb to 804e0aac
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
b4cda8c0 804e5deb badb0d00 00000000 b4cda910 nt!Kei386EoiHelper+0x2883
b4cda940 804ecdf2 b4cdac98 00000000 00000000 nt!KeReadStateEvent+0x56
b4cda99c 804ecd6a 88b0c528 b4cda9e8 b4cda9dc nt!IoGetBaseFileSystemDeviceObject+0x779
b4cda9ec 804dc819 00000000 00000000 00000000 nt!IoGetBaseFileSystemDeviceObject+0x6f1
b4cdaa0c 804e84ec 00000103 89a6e008 f76dc64f nt!ExReleaseResourceLite+0x280
b4cdaa18 f76dc64f 89a6e1a8 b4cdaa54 8a302470 nt!KeResetEvent+0x1f
b4cdaa2c bae49985 89a6e1a4 887b4b38 00000082 VMNetSrv+0x564f
00000000 00000000 00000000 00000000 00000000 NDIS!NdisDprFreePacketNonInterlocked+0x1b0
STACK_COMMAND: kb
FOLLOWUP_IP:
VMNetSrv+564f
f76dc64f 015d4c add dword ptr [ebp+4Ch],ebx
SYMBOL_STACK_INDEX: 6
SYMBOL_NAME: VMNetSrv+564f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: VMNetSrv
IMAGE_NAME: VMNetSrv.sys
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner
---------
The above is the WinDbg analysis of the memory.dmp file I generated by typing "!analyze -v" once the dump file was loaded (I removed the "wrong symbols" notices because I don't have the symbols installed). The bugcheck was initiated when I installed a Linksys Wireless-N network card driver. We can see from the stack trace analysis that the problem initiated in an NDIS call and was apparently faulting in a VMNetSrv.sys. At the very least this tells us that a network device was faulting - they usually don't just break. Of course I knew that I had just installed the faulting device.
Thats only a fraction of what you can do with md. Regardless, you can't do things like update or view hardware parameters.
To demonstrate just one among things I can do with ACPI:
dev.acpi_ibm.0.%desc: IBM ThinkPad ACPI Extras
dev.acpi_ibm.0.%driver: acpi_ibm
dev.acpi_ibm.0.%location: handle=\_SB_.PCI0.LPC_.EC__.HKEY
dev.acpi_ibm.0.%pnpinfo: _HID=IBM0068 _UID=0
dev.acpi_ibm.0.%parent: acpi0
dev.acpi_ibm.0.initialmask: 2060
dev.acpi_ibm.0.availmask: 16777215
dev.acpi_ibm.0.events: 0
dev.acpi_ibm.0.eventmask: 2060
dev.acpi_ibm.0.hotkey: 3487
dev.acpi_ibm.0.lcd_brightness: 7
dev.acpi_ibm.0.volume: 14
dev.acpi_ibm.0.mute: 0
dev.acpi_ibm.0.thinklight: 0
dev.acpi_ibm.0.bluetooth: 0
dev.acpi_ibm.0.wlan: 1
dev.acpi_ibm.0.fan_speed: 4025
dev.acpi_ibm.0.fan: 1
dev.acpi_ibm.0.thermal: 46 43 34 48 33 -1 23 -1
Many of these, like 'thinklight', 'volume' and so forth can be modified.
You do not get this kind of flexability in Windows at all. This is a trivial demonstration, you can do other things like define the max UDP packet size, adjust caching, tune file systems and much much much more.
NOTE: The mask mibs are for devd...devd is a daemon that reacts to hardware events ... it is scriptable, very flexible indeed.
That's just an example. Low-level hardware access *is* available in Windows, too. You just need to write a driver.
In the Linux world, most things come precompiled, although, in BSD you do have to often compile your applications. You can do everything on Unix that you can do on Windows minus gaming, that includes taxes, writing reports and so forth. Very rarily do you have to hack the OS source or drivers and friends.
Yeah, I know. I was making a hidden implication that software like OpenOffice just can't compete with Microsoft Office, for instance.
A power user is any user who can use, and usually requires, special and sophisticated features ... usually they are users who are curious about how things work underneath. They are making a transition between using software to writing software.
So, do you consider me a "power user"? I read books like
Windows Internals for shits and giggles (it's actually really cool, and I hope projects like ReactOS are using design principles from it), and I write software. Or is it that I'm not a programmer because I only write Windows software?
The device driver I wrote was for a course ... of course I don't normally write drivers, its extremely difficult. But I would like to bring to your attention that for our last project we had to write a device driver for real hardware, many had trouble finding hardware, new and old, for this project because there are already so many device drivers available. As much as I dislike Linux...Linux supports thousands if not hundreds of devices.
In my assembly language course, which I *hated*, we had to interface with the SDK-86, which is basically a rudimentary hardware debugger and numeric keypad for the 8086. They were horrid days! (At least debugging the 80186 let us use a connected terminal running a debugger... ugh).
Incidentally, I probably could have sent you hardware that Linux doesn't play nice with.
You should have done work on Winmodems or something! Just think of the headaches you would have saved.