Yeah, but sometimes you have to tear things down to build them back up. Stocks can easily get overpriced, and selling short is one of the market pressures that brings them back to their correct market values. Sure, there are people who purchased the overpriced stock who are going to be upset when it turns out that they payed too much for their investment. But that's the nature of the market. Anybody who thinks that stock prices should only go up is a fool and shouldn't be investing in the first place.
There will be a resurgence in a few years, as the kids who grew up on the classic LucasArts and Sierra games, hit the peak of their careers and want to recreate their childhood. Reference Transformers, the Movie, and all the similar 1980's remakes that are being made nowdays.
The difference will be that they will have extremely better graphics, will be MMPORG/social networking front end hybrids, and will have hooks into real time data. Virtual online avatar worlds are the natural extensions of games like Indiana Jones or Kings Quest / Space Quest, once they go multiplayer and networked.
If you get more women involved in the puzzle creation, there will be less combat and more cleverness, also. Sierra, as a classic example, was founded by a husband and wife team, and that made a noticeable impact on the quality and types of games they produced.
Then of course, there will be the next generation crop of simulators from people who grew up on SimCity, SimEarth, SimLife, and all the early simulators. Expect academic savants, such as Cid Meier, to crop up and supply these niche applications. There is both a financial and academic market for these kinds of simulators, and you can bet that people will work to fill those niches.
Also, I would point out that there is a distinct difference between developing puzzle workflow and modeling 3D environments. A 3D environment is fairly easy to replicate, all things considered. There are architectural design tools, character design tools, and so forth. Less easy is generating a novel story line and novel puzzles.
3D is overrated. Those people who understand this will have to become digital artists to fill the market desire for non 3D, puzzle oriented games.
Going on the premise that China is the worlds first mature fascist government, would these tickets be considered unreasonable if the Olympics were being sponsored by a corporation? What if ExxonMobil hosted the Olympics? Or Walmart? Or HSBC? Or General Electric? If any of these companies hosted a sporting event, would it be unreasonable for them, as a business, to track this data within the tickets? My thinking is that China is simply becoming more of a corporate entity than a nation (albeit, a corporation with a billion employees). It seems like these tickets reflect that concept. Agree? Disagree?
I know people are probably going to mark me flamebait or troll on this one, but I have to point out that open source doesn't necessarily equal tech innovation, and in my opinion, it's probably a fallacy to think so. Tech innovation is a lot more than bits and bytes and computer code. To innovate, you generally need resources, and often exotic ones at that. For example, mag-lev trains using the next generation of iron-arsenic superconductors aren't going to be developed by open source, because they need massive amounts of, well, iron and arsenic. And you're not going to get the amount of those materials you need without going through the commodities market. So, mag-lev trains probably delayed because of the poor economy. I could site other examples, ranging from quantum computing to nanotech to neuro interfaces. The basic idea however, is that construction of new tech is slowed down via commodity and labor prices. Maybe you'll have independents working on stuff at home a bit more, and some of the current R&D projects will survive the drought. But those projects will have difficulty coming to market until the market improves. It's hard to get the funding to purchase research time with an MRI magnet if the economy sucks. I anticipate a lot more of hobby programmers at home reverse-engineering current projects, and bringing free alternatives to the market during the economic downturn. Not saying that its a good thing or a bad thing, but often times I see open-source as simply being a reverse-engineering endeavor, rather than a tech innovation endeavor. My personal opinion is that the open source mentality has a lot in common with various types of socialism (and communism?). I'd go so far as to say that the poor economy isn't going to foster tech innovation, as much as it's going to foster tech socialism.
Good questions. I would imagine that an immune system would be built as an application service layer. In of itself, that doesn't pose too many challenges, and is fairly straight forward. Getting the operating system support and application programming support can be provided by the developers who program the immune system in the first place, by conforming to the standards that vendors provide. If you wanted the immune system to be an application framework, which other applications could build on top of, then you would need to publish standards, get them adopted by vendors and committees, and that would take a much longer time.
I agree that the it takes many years for one generation of software to replace it's predecessor. It's a rather steady march, however. And, while it may be 5 or 10 years away, I see it as only one or two upgrades away. Unlike, say, exocortex software agents, quantum computing coprocessors, visual-cortex neural-interface, or superconducting mag-lev monorails; which, while they exist in the laboratory, are many more years away, I believe.
It's one of the benefits of modular object-oriented design. People have already built a lot of infrastructure to include and distribute anti-virus solutions. They'll continue using the Norton and Symantec application branding; will continue using an anti-virus layer; etc. They'll just recode the internals of the current anti-virus software in the next couple of upgrades, and add more application behavioral standards. I'm not sure the interface will change all that much; and if it does, there will probably be incremental steps. I would bed that, yes, there will be pop ups that say "Application X has been port-switching and communicating to servers we cannot get a security certificate from; application X has been sandboxed and marked for deletion. Would you like to look at the sandbox or continue with deletion?" I'll admit that coherent workflow and a good user interface will be important to the success of this technology. That being said, I don't think this is revolutionary, as much as it is evolutionary. They will leverage a lot of the existing sales, marketing, distribution, and technology infrastructure.
But to answer your question: I think that the internet is becoming something of an ecosystem of sorts. A lot of software is like plants and grass and trees and stuff; but some of it is being developed to behave like herbivores, carnivores, viruses, and the like. I think that the computer immune systems are going to gobble up and eat virus infected software, without much regard for the end user. If the application was infected and gobbled up, download a fresh copy (hopefully, virus free). That will be the way of things. When people are sick and tired of constantly worrying about zombie-botnets, invisible rootkits, keylogging worms, and backdoor trojans, they're going to say 'hell with it... yes, if it looks like an infection, kill it'. And the computer immune system is simply an extension of that mindset.
If you're interested in a Hugo and Locust award-winning book, which discusses some of these topics (amongst many others), check out accelerando, by Charles Stross. You can get the creative commons version here. The main character, Manx, uses a number of advanced technologies, ranging from software agents and reputation markets, to computer immune systems and AI neural nets. Very interesting read.
You may be right about a decade time frame, although I think it will be sooner. Things are speeding up.
These things mostly exist in laboratories already. It's really just a question of distribution to the masses. And, I dare say, that companies like Norton and Symantec are already investing in these technologies. Before long, the copies of Norton 2010 or Symantec 2012 are going to include immune systems. If not 2010 or 2012, then some other date in the future. So, getting it to market and getting it to early adopters won't be that difficult. Getting it to the masses, however, will be a bit more complicated. Unfortunately, open source software tends not to come with any support agreements; so, the difficult part of the process is going to be working with the big vendors, particularly Microsoft and Apple, and to get immune system technologies included in the OS builds. In the end, it's already technically feasible. It's a question of corporate policies, market financing, and politics.
Personally, having watched the evolution of viruses, worms, botnets, firewalls, spam, filters, rootkits, and trojans over the past 15 or 20 years, I think we're about two or three years away from seeing immune systems widely distributed. Things need to get a little worse before people start taking action to change policies, but we're almost at that point, I think. IBM's "Digital Immune System for Cyberspace" project shows that the market is actively developing these systems, they already exist in the labs, and they've been designed with the marketplace and commercialization in mind. This makes me think that we're going to be seeing this technology all over the place soon. IBM is going to shoot for the enterprise mainframe market (as always), and companies like Norton and Symantec are going to go for the mass-consumer distribution. I suspect they're already competing to see who's going to be first to the market.
So, I don't think it's so much decades in the future, as three to five years in the future.
What exactly is a "non rules-based monitoring process?" I thought I had some clue about security procedures, but I'm be hard pressed to describe what such a process might be. Even more importantly, what would it cost to implement? TFA is no help here, consisting of the usual hand-waving about the never-ending arms race between malware writers and the rest of us.
He's talking about computer immune systems. Here's a link to an IBM research paper from the top of the Google results for "virus immune system computers":
The basic idea is that computers and viruses are so advanced, that it's time to implement immune systems. Instead of comparing one's system against a large list of fairly static virus signature rules, an immune system could evolve and build the "rule" dynamically as it encounters and interacts with the virus. The semantic ambiguity in the statement is that he's referring to a "rule" as a state-based virus signature. In a "non rules-based system", such as an immune system, there would be behavioral standards, such as "only send out traffic on one port at a time, and send it out consistently on the same port". There might also be structural standards (ie. digital signatures on executable code) or functional standards (i.e. return an application manifest upon request that can be compared to a reference site). If an application doesn't conform to the behavioral, structural, and functional standards, then the immune system has leeway to gobble it up and dispose of it. One might argue with his semantics, and claim that the behavioral, structural, and functional standards in an immune system are also 'rules'. The thinking behind computer immune systems, however, is more along the lines of activation networks and neural nets which implement behavior standards as functional evaluations of code performance, rather than lists of static state-based virus signatures (which are called 'rules' in the jargon).
Put another way, instead of having a long list of 'rules' such as "foo.exe is a virus" or "any file with signature xyz is a virus", there would be standards such as "a process should communicate consistently on the same port and not port hop" or "a file shouldn't try to access certain areas of OS memory if it doesn't have a certain type of application manifest registered to OS developers". Yes, you could call those 'rules' also. But that's not what he's referring to in the article. In the article, when he says 'rules', he's referring to state-based virus signatures. A "non rules-based monitoring process" wouldn't use state-based signatures; instead, it would monitor the behavior of code against performance standards.
(yes, a 'standard' might be considered a "rule", if you want to argue semantics. They just happen to be using the term 'rule' in a jargon-specific manner.)
Sure what Icahn does is legal, but it should not be. As long as he and his ilk can make fat campaign contributions, it will likely stay that way.
That's kind of like saying that sure, when lions and tigers and bears eat other animals, it's legal, but it shouldn't be. Nice sentiment, but totally unrealistic. The fact of the matter is that carnivores and predators exist. You might not like what they do or how they go about doing it, but they're an important part of any ecosystem. Similarly, Icahn and his ilk play an important part in a capitalistic market. What they do isn't easy, pretty, or glamorous. They basically liquidate companies that are being run poorly, like a cheetah or lion takes down a wildebeest. In doing the difficult deed, they get rewarded generously, and keep the market streamlined and competitive and moving forward.
Unfortunately, capitalism doesn't actually require you to be a human in order to be an investor.
Corporations are legal entities unto themselves and can act in the roll of an investor. Guys like Icahn are surrounded by shell companies and other financial instruments which act as a buffer between he and the market. Icahn can act morally, immorally, in anywhere in between, and the shell company buffer he has set up is going to translate his actions and decisions into amoral financial processes. You can be sure that Icahn doesn't invest his own money directly into these projects. He's going to protect himself from liability by having a corporation he controls do the investments for him.
So, while Carl Icahn may have a responsibility to act in an ethical and moral fashion, the corporation he controls is only concerned about making money. Icahn may have a responsibility to act morally, but his corporation doesn't.
People already do have a living wage. The simple fact of the matter is that things like income are statistically distributed. There's always going to be an upper half of the distribution that is doing better than the lower half. And even those people in our so called 'poverty' bracket have access to things like refrigeration, roadways, public broadcast radiology and television, public flu inoculations, light bulbs, and so forth. Our level of 'poverty' is, in most of the ways that really count, significantly better than the wealthiest level of living a thousand years ago. Once you get refrigeration, light bulbs, and inoculations, the rest is simply a matter of Keeping Up With the Jones. In the big scheme of things, we already have a living wage.
And regarding Health Insurance, there is already an emergency care safety net in effect. If you have an emergency, an emergency can't turn you away, by law. I agree there are improvements to be made in that sector, although 80% coverage is already a significant portion of the population (way up from 500 years ago, when health insurance didn't exist).
In order to deal with our current problems, we have to start dealing with the problem of process restructuring and performance improvement. Anybody who has studied Six Sigma process improvement methodologies knows that to gain a 1 standard deviation often requires an order of magnitude of work and/or investments. Space program is an investment that can return those kinds of investments. Want research that result in better healthcare for the masses? Try the space program
(For example, developing fundamental advancements in understandings of physics that allows us to build better scanners and detectors, like MRI scanners, which can be used to provided better health care to the masses. One of the biggest problems with MRI scanners is that they take an hour to scan a patient. Want universal healthcare? Figure out a way to build an MRI scanner that does a scan in 5 minutes and doesn't require superconducting cryomagnets, and which can be installed anywhere (like x-ray machines at airports). Guess who would be in a position to do that kind of research? The space program, actually.)
There are some inroads happening regarding running OSX on a VM, particularly with OSX server. Costs you an extra license, but it's what people have been asking for. Check out the VMWare site, and search for OSX server.
Here is a link: http://blogs.vmware.com/vmtn/2008/01/virtual-leopa-1.html
I think the sentiment is "good programmers aren't employed as programmers" or "good programers tend to be employed in non-programming jobs". Which I might agree with. You're right though, it is an interesting thesis.
Sounds like you're confusing design decisions of your project with functionality of.NET. If you made a design decision to recode the parts that require P/Invoke, you'd be doing alot more inside the NET framework, and you'd be talking about how it does everything you want. If you're using P/Invoke to get at Win32 calls, it sounds like you haven't ported code or made the necessary design decisions to support a clean NET environment. Of course, those kinds of design decisions have to take into account budgets, skill sets, experience, legacy code, and all the rest. So maybe it's easier said than done.
I'm not going to go through your entire to-do list, although I will answer a couple of your questions.
Except for to confuse me, why do ICollections have a Count, when arrays have a Length? What's the meaningful semantic distinction that I'm missing here?
ICollections implement an IEnumerator interface and have an Enumerator object which counts the objects in a collection. Think of an enumerator as an odometer (like the one in your car). If the object implements ICollection, then it has an odometer, which you can get the count from. Arrays just have size.
Why do arrays have LongLength but with no corresponding LongCount for ICollections (3.5 adds LongCount as an extension method, but that gives it inconsistent (method) syntax, and of course it can never work because even if the collection were extended to support long lengths, an extension method can never exploit that fact, because the extension just works on IEnumerable which supports only an int Count)?
Again, difference between an attribute and a verb. LongLength is an attribute of an object, such as height or width. Whereas Count is like an odometer in your car. Your question is kind of like asking why can you travel tens of thousands of miles along the US highway, but my odometer in my car only goes up to 1000. Well, that's just the way the odometer was made. Length of trip is distance, whereas your odometer is a counter and is only a *measure* of distance. It's simply a distinction the language makes.
Why do arrays have LongLength, and not simply have Length be a long? It surely didn't take a whole lot of foresight to figure that one out, did it?
Chunking..NET gets used on both 32 and 64 bit platforms, and the performance penalty for splitting a 64 bit word into two is greater than using two 32 bit words. In the first case, you still have to use 64 bit words, but you pad the first 32 bits with zeros, and convert to 32 bit words. Requires an extra pass through the processor to calculate, whereas adding two 32 bit words into a 64 bit word is trivial. I'm not explaining this concept well, but if you look it up you'll find more info on the question you're asking. The design decision was based on current market saturation of 32 bit processors, and the LongLength was an added conversion for the 64bit programmers.
Where do I find reverse iteration/enumeration?
Where do I find bidirectional iteration/enumeration?
Using the odometer analogy as above, the enumerator only goes forward; although you *can* reset it. If you want to do reverse iteration, copy your collection into a new collections backwards, and iterate over that new object. Alternatively, for most reverse or bidirectional iterations, you'll simply want to ditch the 'foreach' loops, and use a simple 'for' loop. Then you can start high and use decrement iterators to count down. I also like to use decrementor collections which get an object removed with each pass of the for loop.
Why is there no generalized mechanism for storing my position in a container?
You need to get the IEnumerator object from the ICollection, using the GetEnumerator method. It will have a Position field.
Why is there no SortedSet?
Probably implemented somewhere else.
Why are there no static type-inferencing factories for read-only collections or singleton collections? When you have generics, factory methods are good, because factory methods can infer. Don't make me type IList myReadOnlyList = new ReadOnlyCollection(myList); the double specification of the type is spurious.
You're splitting hairs here. It's a strongly typed language. It's meant to be explicit, not inferential. In other projects, besides yours, double specifying types is needed and a useful (if not critical) feature.
Why is it named ReadOnlyCollection when it is in fact a IList?
Why is there no true ReadOnlyCollection (i.e. that is actually useful for collections)?
Why is it na
I'm in the same boat, and would have to agree. (I also run Visual Studio on a virtual machine running on my MacBook.) A lot of people forget that C# is an ANSI standard and, as such, is vendor independent..Net is a good implementation of it, and gets alot of things right. If you don't want to use a Win32 call, *then don't*. The point of C# is to create a namespace, and keep your *entire* application inside of that namespace. Use the.Net API to interface with the OS, not random files somewhere on the OS that are liable to change. I got the sense that the guy writing the article didn't like to research or look stuff up, or maybe had IntelliSense turned off on his copy of Visual Studio. Or something. He was obviously applying some old habits to the.NET environment, and hadn't studied some of the high-level design concepts behind it. That, in turn, would have informed him a bit better on how to approach some of his programming. In the end, it seems like he was splitting hairs and nitpicking.
I'm curious as to why you're using any Win32 calls at all. I've been developing in C# for about three years now, and I can't ever remember making a single Win32 call. And I've been developing some fairly robust applications... i.e. multithreaded, networked, double buffered graphics, disk io access, numerical optmization algorithms, etc. The closest I ever came was when I was trying to figure out the size of the desktop, but eventually I figured out how to do that inside of.Net also. Everything else has been somewhere inside of.Net. Granted, sometimes it's been difficult to track down where in the API to find a particular function; sometimes I've had to write some wrappers and funky helper methods; but, I've never had to resort to a Win32 call. At the same time, I've *decided* not to make any Win32 calls, for portability purposes (as I want my apps to eventually be Microsoft free and be able to run on Mono). So, whenever I run across a place where I *could* use a Win32 call, I sigh, and then start looking for another way to achieve the same task within the.Net framework. Takes longer, requires more research, but keeps the application all within my own namespace and maintains portability and independence from a single vendor.
I mean this is just my two cents, but it sounds to me like you haven't made a design decision to NOT use Win32 calls; and thereby, when you run into a situation where you *could* make one, it's a valid option, and you use it.
(On the other hand, you design goals could be more in keeping with systems programming than applications programing; in which case, I would say... well, what did you expect?)
Mono is the new game in town. It still has a ways to go, although there are both C# plugins for XCode, as well as the Cocoa# libraries which let you develop in Visual Studio and later use the Cocoa graphic widgets. You can develop a complete app in Visual Studio, run it under Mono on Mac, if you're willing to draw all of the graphics yourself (i.e. build your own buttons with rectangles, etc). Alternatively, you can use the Cocoa# bindings, although some of your work in Visual Studio will be 'blind' until you compile and run on Mac (i.e. you don't get to use the Visual Studio GUI Designer as much as you would in a Windows environment, and have to build up your GUI by hand, and check it by multiple compiles). It takes a bit of planning, harkens back to the old days of C programing, and probably isn't for the beginner coder, but you *can* develop on Visual Studio and build for Mac with Cocoa graphic widgets.
On balance, I'd say that Xcode is obviously better for writing a Mac GUI application, but Visual Studio and Mono is also an option, especially if you're willing to hand code your GUI.
Mmmm.... perhaps. But it could be the other way round, also. Vampire players could be attracted to the game because they have an innate interest in drinking blood to begin with; likewise, Wicca practitioners may be attracted to the Art because they innately sense life forces around them. In the end, I'd say that both life and LARP are iterative processes, and LARPing simply exhibits self-reinforcement of behaviors that are already there.
Question: How does iTunes render the iTunes Store if it doesn't have an embedded HTML rendering engine? Unless I'm mistaken, iTunes *does* have an embedded web viewer in it. And, last I checked, that web viewer is part of the Safari product. They're simply updating the HTML rendering engine in iTunes, and the HTML rendering technology is under the Safari namespace. It might even be downloading the UI shell for the HTML renderer and letting the user run it as a stand alone application. But Apple isn't downloading Safari to people's computers to get into the browser space. They're downloading an update to the iTunes HTML rendering engine that displays the iTunes Store.
Of course, since he's talking about a laser, it's possible he means to have the equipment on the ground (or moon, or earth orbit) and propel a much smaller craft. With sufficiently focused optics, you could propel a small probe the whole way to mars (in a week? My envelope just ran out of space...), though it would require some pretty heat-resistant mirrors. Fortunately, the energy requirements for that Newton drop by half when you factor reflection into the equation.
I highly recommend the book Accelerando by Charles Stross, which has an extended story arc which deals with exactly this idea. They're trying to get a coke-can sized space shuttle with a solar sail to a brown start about three light years away (which has an intergalatic router nearby), and they power the shuttle with a laser beam powered by a cable dragged through the jupiter atmosphere/magnetic field. I highly recommend the book. Amazing concepts throughout.
By the way, *fantastic* book, Michael! I read the entire thing, and it was 100% spot on. Opened up my eyes to design patterns that I hadn't been aware of, made me appreciate the importance of not re-inventing logging services, and that advice about using the soft references to prioritize garbage collection... simply awesome. You really took my knowledge of programming up a notch.
Anyhow, I had been thinking of dropping you a note saying how great that book was, and lo-and-behold, I read your post here on Slashdot and realized it was you... great job on the book!
What happened to my country, and will you cowards please give it back?
Baby Boomers. The largest generation ever in the United States, and raised to hide under their desks any time there is a fire alarm or attack, thanks to the Cold War. Rather than thinking rationally, bravely, or pragmatically, they think "hide under the desk". Which 'hide the Saturn V blueprints' is merely an extension of. And they're now reaching an age where they're being handed the reigns of the federal government.
If you're GenMe or GenY, you may get your country back when you're approximately 65 or 70 as the Baby Boomers die off. If you're a Baby Boomer yourself, sorry dude, you're probably stuck with the cowards through to the end.
(Also, if you're GenMe, I recommend getting over any delusions of 'social security' being viable when you retire, and start coming up with some alternative retirement plans... Baby Boomers are going to bankrupt the social security system and mortgage their kids futures without a second thought if it means an extra 5 or 10 years of living in retirement homes... Can't say that I wouldn't do what they're going to do if I were in their situation. Just being the realist and pointing out the cliff that we're driving towards...)
Computers are (by their very definition as well as by the word used to describe them) mathematical machines. A computer can essentially do NOTHING BUT calculate. It can in its core add, subtract, shift and move data around. How is this supposed to work without math?
I get where you're coming from, although I would split hairs and say that, by definition, computers read, write, move forward, or move backwards. Those functions are what formally define a Turing-complete system, also known as a universal machine. The universal machine then quickly lends itself to doing operations such as adding, subtracting, and so forth. Reading and writing are formally different than adding and subtracting; and its the reading/writing/moving which are definitial to Turing-completeness.
Reminds me of the software agents that Manfred Macx uses in the book accelerando. Excellent read, by the way, if you haven't already.
Absolutely destructive and devaluing of stocks.
Yeah, but sometimes you have to tear things down to build them back up. Stocks can easily get overpriced, and selling short is one of the market pressures that brings them back to their correct market values. Sure, there are people who purchased the overpriced stock who are going to be upset when it turns out that they payed too much for their investment. But that's the nature of the market. Anybody who thinks that stock prices should only go up is a fool and shouldn't be investing in the first place.
There will be a resurgence in a few years, as the kids who grew up on the classic LucasArts and Sierra games, hit the peak of their careers and want to recreate their childhood. Reference Transformers, the Movie, and all the similar 1980's remakes that are being made nowdays.
The difference will be that they will have extremely better graphics, will be MMPORG/social networking front end hybrids, and will have hooks into real time data. Virtual online avatar worlds are the natural extensions of games like Indiana Jones or Kings Quest / Space Quest, once they go multiplayer and networked.
If you get more women involved in the puzzle creation, there will be less combat and more cleverness, also. Sierra, as a classic example, was founded by a husband and wife team, and that made a noticeable impact on the quality and types of games they produced.
Then of course, there will be the next generation crop of simulators from people who grew up on SimCity, SimEarth, SimLife, and all the early simulators. Expect academic savants, such as Cid Meier, to crop up and supply these niche applications. There is both a financial and academic market for these kinds of simulators, and you can bet that people will work to fill those niches.
Also, I would point out that there is a distinct difference between developing puzzle workflow and modeling 3D environments. A 3D environment is fairly easy to replicate, all things considered. There are architectural design tools, character design tools, and so forth. Less easy is generating a novel story line and novel puzzles.
3D is overrated. Those people who understand this will have to become digital artists to fill the market desire for non 3D, puzzle oriented games.
Does this remind anybody else of the prime number ontological schema talked about in the Baroque Cycle (by Neal Stephenson)?
Going on the premise that China is the worlds first mature fascist government, would these tickets be considered unreasonable if the Olympics were being sponsored by a corporation? What if ExxonMobil hosted the Olympics? Or Walmart? Or HSBC? Or General Electric? If any of these companies hosted a sporting event, would it be unreasonable for them, as a business, to track this data within the tickets? My thinking is that China is simply becoming more of a corporate entity than a nation (albeit, a corporation with a billion employees). It seems like these tickets reflect that concept. Agree? Disagree?
I know people are probably going to mark me flamebait or troll on this one, but I have to point out that open source doesn't necessarily equal tech innovation, and in my opinion, it's probably a fallacy to think so. Tech innovation is a lot more than bits and bytes and computer code. To innovate, you generally need resources, and often exotic ones at that. For example, mag-lev trains using the next generation of iron-arsenic superconductors aren't going to be developed by open source, because they need massive amounts of, well, iron and arsenic. And you're not going to get the amount of those materials you need without going through the commodities market. So, mag-lev trains probably delayed because of the poor economy. I could site other examples, ranging from quantum computing to nanotech to neuro interfaces. The basic idea however, is that construction of new tech is slowed down via commodity and labor prices. Maybe you'll have independents working on stuff at home a bit more, and some of the current R&D projects will survive the drought. But those projects will have difficulty coming to market until the market improves. It's hard to get the funding to purchase research time with an MRI magnet if the economy sucks. I anticipate a lot more of hobby programmers at home reverse-engineering current projects, and bringing free alternatives to the market during the economic downturn. Not saying that its a good thing or a bad thing, but often times I see open-source as simply being a reverse-engineering endeavor, rather than a tech innovation endeavor. My personal opinion is that the open source mentality has a lot in common with various types of socialism (and communism?). I'd go so far as to say that the poor economy isn't going to foster tech innovation, as much as it's going to foster tech socialism.
Good questions. I would imagine that an immune system would be built as an application service layer. In of itself, that doesn't pose too many challenges, and is fairly straight forward. Getting the operating system support and application programming support can be provided by the developers who program the immune system in the first place, by conforming to the standards that vendors provide. If you wanted the immune system to be an application framework, which other applications could build on top of, then you would need to publish standards, get them adopted by vendors and committees, and that would take a much longer time.
I agree that the it takes many years for one generation of software to replace it's predecessor. It's a rather steady march, however. And, while it may be 5 or 10 years away, I see it as only one or two upgrades away. Unlike, say, exocortex software agents, quantum computing coprocessors, visual-cortex neural-interface, or superconducting mag-lev monorails; which, while they exist in the laboratory, are many more years away, I believe.
It's one of the benefits of modular object-oriented design. People have already built a lot of infrastructure to include and distribute anti-virus solutions. They'll continue using the Norton and Symantec application branding; will continue using an anti-virus layer; etc. They'll just recode the internals of the current anti-virus software in the next couple of upgrades, and add more application behavioral standards. I'm not sure the interface will change all that much; and if it does, there will probably be incremental steps. I would bed that, yes, there will be pop ups that say "Application X has been port-switching and communicating to servers we cannot get a security certificate from; application X has been sandboxed and marked for deletion. Would you like to look at the sandbox or continue with deletion?" I'll admit that coherent workflow and a good user interface will be important to the success of this technology. That being said, I don't think this is revolutionary, as much as it is evolutionary. They will leverage a lot of the existing sales, marketing, distribution, and technology infrastructure.
But to answer your question: I think that the internet is becoming something of an ecosystem of sorts. A lot of software is like plants and grass and trees and stuff; but some of it is being developed to behave like herbivores, carnivores, viruses, and the like. I think that the computer immune systems are going to gobble up and eat virus infected software, without much regard for the end user. If the application was infected and gobbled up, download a fresh copy (hopefully, virus free). That will be the way of things. When people are sick and tired of constantly worrying about zombie-botnets, invisible rootkits, keylogging worms, and backdoor trojans, they're going to say 'hell with it... yes, if it looks like an infection, kill it'. And the computer immune system is simply an extension of that mindset.
If you're interested in a Hugo and Locust award-winning book, which discusses some of these topics (amongst many others), check out accelerando, by Charles Stross. You can get the creative commons version here. The main character, Manx, uses a number of advanced technologies, ranging from software agents and reputation markets, to computer immune systems and AI neural nets. Very interesting read.
You may be right about a decade time frame, although I think it will be sooner. Things are speeding up.
These things mostly exist in laboratories already. It's really just a question of distribution to the masses. And, I dare say, that companies like Norton and Symantec are already investing in these technologies. Before long, the copies of Norton 2010 or Symantec 2012 are going to include immune systems. If not 2010 or 2012, then some other date in the future. So, getting it to market and getting it to early adopters won't be that difficult. Getting it to the masses, however, will be a bit more complicated. Unfortunately, open source software tends not to come with any support agreements; so, the difficult part of the process is going to be working with the big vendors, particularly Microsoft and Apple, and to get immune system technologies included in the OS builds. In the end, it's already technically feasible. It's a question of corporate policies, market financing, and politics.
Personally, having watched the evolution of viruses, worms, botnets, firewalls, spam, filters, rootkits, and trojans over the past 15 or 20 years, I think we're about two or three years away from seeing immune systems widely distributed. Things need to get a little worse before people start taking action to change policies, but we're almost at that point, I think. IBM's "Digital Immune System for Cyberspace" project shows that the market is actively developing these systems, they already exist in the labs, and they've been designed with the marketplace and commercialization in mind. This makes me think that we're going to be seeing this technology all over the place soon. IBM is going to shoot for the enterprise mainframe market (as always), and companies like Norton and Symantec are going to go for the mass-consumer distribution. I suspect they're already competing to see who's going to be first to the market.
So, I don't think it's so much decades in the future, as three to five years in the future.
What exactly is a "non rules-based monitoring process?" I thought I had some clue about security procedures, but I'm be hard pressed to describe what such a process might be. Even more importantly, what would it cost to implement? TFA is no help here, consisting of the usual hand-waving about the never-ending arms race between malware writers and the rest of us.
He's talking about computer immune systems. Here's a link to an IBM research paper from the top of the Google results for "virus immune system computers":
http://www.research.ibm.com/antivirus/SciPapers/Kephart/VB97/
The basic idea is that computers and viruses are so advanced, that it's time to implement immune systems. Instead of comparing one's system against a large list of fairly static virus signature rules, an immune system could evolve and build the "rule" dynamically as it encounters and interacts with the virus. The semantic ambiguity in the statement is that he's referring to a "rule" as a state-based virus signature. In a "non rules-based system", such as an immune system, there would be behavioral standards, such as "only send out traffic on one port at a time, and send it out consistently on the same port". There might also be structural standards (ie. digital signatures on executable code) or functional standards (i.e. return an application manifest upon request that can be compared to a reference site). If an application doesn't conform to the behavioral, structural, and functional standards, then the immune system has leeway to gobble it up and dispose of it. One might argue with his semantics, and claim that the behavioral, structural, and functional standards in an immune system are also 'rules'. The thinking behind computer immune systems, however, is more along the lines of activation networks and neural nets which implement behavior standards as functional evaluations of code performance, rather than lists of static state-based virus signatures (which are called 'rules' in the jargon).
Put another way, instead of having a long list of 'rules' such as "foo.exe is a virus" or "any file with signature xyz is a virus", there would be standards such as "a process should communicate consistently on the same port and not port hop" or "a file shouldn't try to access certain areas of OS memory if it doesn't have a certain type of application manifest registered to OS developers". Yes, you could call those 'rules' also. But that's not what he's referring to in the article. In the article, when he says 'rules', he's referring to state-based virus signatures. A "non rules-based monitoring process" wouldn't use state-based signatures; instead, it would monitor the behavior of code against performance standards.
(yes, a 'standard' might be considered a "rule", if you want to argue semantics. They just happen to be using the term 'rule' in a jargon-specific manner.)
That's kind of like saying that sure, when lions and tigers and bears eat other animals, it's legal, but it shouldn't be. Nice sentiment, but totally unrealistic. The fact of the matter is that carnivores and predators exist. You might not like what they do or how they go about doing it, but they're an important part of any ecosystem. Similarly, Icahn and his ilk play an important part in a capitalistic market. What they do isn't easy, pretty, or glamorous. They basically liquidate companies that are being run poorly, like a cheetah or lion takes down a wildebeest. In doing the difficult deed, they get rewarded generously, and keep the market streamlined and competitive and moving forward.
Unfortunately, capitalism doesn't actually require you to be a human in order to be an investor.
Corporations are legal entities unto themselves and can act in the roll of an investor. Guys like Icahn are surrounded by shell companies and other financial instruments which act as a buffer between he and the market. Icahn can act morally, immorally, in anywhere in between, and the shell company buffer he has set up is going to translate his actions and decisions into amoral financial processes. You can be sure that Icahn doesn't invest his own money directly into these projects. He's going to protect himself from liability by having a corporation he controls do the investments for him.
So, while Carl Icahn may have a responsibility to act in an ethical and moral fashion, the corporation he controls is only concerned about making money. Icahn may have a responsibility to act morally, but his corporation doesn't.
People already do have a living wage. The simple fact of the matter is that things like income are statistically distributed. There's always going to be an upper half of the distribution that is doing better than the lower half. And even those people in our so called 'poverty' bracket have access to things like refrigeration, roadways, public broadcast radiology and television, public flu inoculations, light bulbs, and so forth. Our level of 'poverty' is, in most of the ways that really count, significantly better than the wealthiest level of living a thousand years ago. Once you get refrigeration, light bulbs, and inoculations, the rest is simply a matter of Keeping Up With the Jones. In the big scheme of things, we already have a living wage.
And regarding Health Insurance, there is already an emergency care safety net in effect. If you have an emergency, an emergency can't turn you away, by law. I agree there are improvements to be made in that sector, although 80% coverage is already a significant portion of the population (way up from 500 years ago, when health insurance didn't exist).
In order to deal with our current problems, we have to start dealing with the problem of process restructuring and performance improvement. Anybody who has studied Six Sigma process improvement methodologies knows that to gain a 1 standard deviation often requires an order of magnitude of work and/or investments. Space program is an investment that can return those kinds of investments. Want research that result in better healthcare for the masses? Try the space program
(For example, developing fundamental advancements in understandings of physics that allows us to build better scanners and detectors, like MRI scanners, which can be used to provided better health care to the masses. One of the biggest problems with MRI scanners is that they take an hour to scan a patient. Want universal healthcare? Figure out a way to build an MRI scanner that does a scan in 5 minutes and doesn't require superconducting cryomagnets, and which can be installed anywhere (like x-ray machines at airports). Guess who would be in a position to do that kind of research? The space program, actually.)
There are some inroads happening regarding running OSX on a VM, particularly with OSX server. Costs you an extra license, but it's what people have been asking for. Check out the VMWare site, and search for OSX server. Here is a link: http://blogs.vmware.com/vmtn/2008/01/virtual-leopa-1.html
I think the sentiment is "good programmers aren't employed as programmers" or "good programers tend to be employed in non-programming jobs". Which I might agree with. You're right though, it is an interesting thesis.
Sounds like you're confusing design decisions of your project with functionality of .NET. If you made a design decision to recode the parts that require P/Invoke, you'd be doing alot more inside the NET framework, and you'd be talking about how it does everything you want. If you're using P/Invoke to get at Win32 calls, it sounds like you haven't ported code or made the necessary design decisions to support a clean NET environment. Of course, those kinds of design decisions have to take into account budgets, skill sets, experience, legacy code, and all the rest. So maybe it's easier said than done.
I'm not going to go through your entire to-do list, although I will answer a couple of your questions.
.NET gets used on both 32 and 64 bit platforms, and the performance penalty for splitting a 64 bit word into two is greater than using two 32 bit words. In the first case, you still have to use 64 bit words, but you pad the first 32 bits with zeros, and convert to 32 bit words. Requires an extra pass through the processor to calculate, whereas adding two 32 bit words into a 64 bit word is trivial. I'm not explaining this concept well, but if you look it up you'll find more info on the question you're asking. The design decision was based on current market saturation of 32 bit processors, and the LongLength was an added conversion for the 64bit programmers.
Except for to confuse me, why do ICollections have a Count, when arrays have a Length? What's the meaningful semantic distinction that I'm missing here? ICollections implement an IEnumerator interface and have an Enumerator object which counts the objects in a collection. Think of an enumerator as an odometer (like the one in your car). If the object implements ICollection, then it has an odometer, which you can get the count from. Arrays just have size.
Why do arrays have LongLength but with no corresponding LongCount for ICollections (3.5 adds LongCount as an extension method, but that gives it inconsistent (method) syntax, and of course it can never work because even if the collection were extended to support long lengths, an extension method can never exploit that fact, because the extension just works on IEnumerable which supports only an int Count)?
Again, difference between an attribute and a verb. LongLength is an attribute of an object, such as height or width. Whereas Count is like an odometer in your car. Your question is kind of like asking why can you travel tens of thousands of miles along the US highway, but my odometer in my car only goes up to 1000. Well, that's just the way the odometer was made. Length of trip is distance, whereas your odometer is a counter and is only a *measure* of distance. It's simply a distinction the language makes.
Why do arrays have LongLength, and not simply have Length be a long? It surely didn't take a whole lot of foresight to figure that one out, did it?
Chunking.
Where do I find reverse iteration/enumeration? Where do I find bidirectional iteration/enumeration?
Using the odometer analogy as above, the enumerator only goes forward; although you *can* reset it. If you want to do reverse iteration, copy your collection into a new collections backwards, and iterate over that new object. Alternatively, for most reverse or bidirectional iterations, you'll simply want to ditch the 'foreach' loops, and use a simple 'for' loop. Then you can start high and use decrement iterators to count down. I also like to use decrementor collections which get an object removed with each pass of the for loop.
Why is there no generalized mechanism for storing my position in a container?
You need to get the IEnumerator object from the ICollection, using the GetEnumerator method. It will have a Position field.
Why is there no SortedSet?
Probably implemented somewhere else.
Why are there no static type-inferencing factories for read-only collections or singleton collections? When you have generics, factory methods are good, because factory methods can infer. Don't make me type IList myReadOnlyList = new ReadOnlyCollection(myList); the double specification of the type is spurious.
You're splitting hairs here. It's a strongly typed language. It's meant to be explicit, not inferential. In other projects, besides yours, double specifying types is needed and a useful (if not critical) feature.
Why is it named ReadOnlyCollection when it is in fact a IList? Why is there no true ReadOnlyCollection (i.e. that is actually useful for collections)? Why is it na
I'm in the same boat, and would have to agree. (I also run Visual Studio on a virtual machine running on my MacBook.) A lot of people forget that C# is an ANSI standard and, as such, is vendor independent. .Net is a good implementation of it, and gets alot of things right. If you don't want to use a Win32 call, *then don't*. The point of C# is to create a namespace, and keep your *entire* application inside of that namespace. Use the .Net API to interface with the OS, not random files somewhere on the OS that are liable to change. I got the sense that the guy writing the article didn't like to research or look stuff up, or maybe had IntelliSense turned off on his copy of Visual Studio. Or something. He was obviously applying some old habits to the .NET environment, and hadn't studied some of the high-level design concepts behind it. That, in turn, would have informed him a bit better on how to approach some of his programming. In the end, it seems like he was splitting hairs and nitpicking.
I'm curious as to why you're using any Win32 calls at all. I've been developing in C# for about three years now, and I can't ever remember making a single Win32 call. And I've been developing some fairly robust applications... i.e. multithreaded, networked, double buffered graphics, disk io access, numerical optmization algorithms, etc. The closest I ever came was when I was trying to figure out the size of the desktop, but eventually I figured out how to do that inside of .Net also. Everything else has been somewhere inside of .Net. Granted, sometimes it's been difficult to track down where in the API to find a particular function; sometimes I've had to write some wrappers and funky helper methods; but, I've never had to resort to a Win32 call. At the same time, I've *decided* not to make any Win32 calls, for portability purposes (as I want my apps to eventually be Microsoft free and be able to run on Mono). So, whenever I run across a place where I *could* use a Win32 call, I sigh, and then start looking for another way to achieve the same task within the .Net framework. Takes longer, requires more research, but keeps the application all within my own namespace and maintains portability and independence from a single vendor.
I mean this is just my two cents, but it sounds to me like you haven't made a design decision to NOT use Win32 calls; and thereby, when you run into a situation where you *could* make one, it's a valid option, and you use it.
(On the other hand, you design goals could be more in keeping with systems programming than applications programing; in which case, I would say... well, what did you expect?)
Mono is the new game in town. It still has a ways to go, although there are both C# plugins for XCode, as well as the Cocoa# libraries which let you develop in Visual Studio and later use the Cocoa graphic widgets. You can develop a complete app in Visual Studio, run it under Mono on Mac, if you're willing to draw all of the graphics yourself (i.e. build your own buttons with rectangles, etc). Alternatively, you can use the Cocoa# bindings, although some of your work in Visual Studio will be 'blind' until you compile and run on Mac (i.e. you don't get to use the Visual Studio GUI Designer as much as you would in a Windows environment, and have to build up your GUI by hand, and check it by multiple compiles). It takes a bit of planning, harkens back to the old days of C programing, and probably isn't for the beginner coder, but you *can* develop on Visual Studio and build for Mac with Cocoa graphic widgets. On balance, I'd say that Xcode is obviously better for writing a Mac GUI application, but Visual Studio and Mono is also an option, especially if you're willing to hand code your GUI.
Mmmm.... perhaps. But it could be the other way round, also. Vampire players could be attracted to the game because they have an innate interest in drinking blood to begin with; likewise, Wicca practitioners may be attracted to the Art because they innately sense life forces around them. In the end, I'd say that both life and LARP are iterative processes, and LARPing simply exhibits self-reinforcement of behaviors that are already there.
Question: How does iTunes render the iTunes Store if it doesn't have an embedded HTML rendering engine? Unless I'm mistaken, iTunes *does* have an embedded web viewer in it. And, last I checked, that web viewer is part of the Safari product. They're simply updating the HTML rendering engine in iTunes, and the HTML rendering technology is under the Safari namespace. It might even be downloading the UI shell for the HTML renderer and letting the user run it as a stand alone application. But Apple isn't downloading Safari to people's computers to get into the browser space. They're downloading an update to the iTunes HTML rendering engine that displays the iTunes Store.
Of course, since he's talking about a laser, it's possible he means to have the equipment on the ground (or moon, or earth orbit) and propel a much smaller craft. With sufficiently focused optics, you could propel a small probe the whole way to mars (in a week? My envelope just ran out of space...), though it would require some pretty heat-resistant mirrors. Fortunately, the energy requirements for that Newton drop by half when you factor reflection into the equation.
I highly recommend the book Accelerando by Charles Stross, which has an extended story arc which deals with exactly this idea. They're trying to get a coke-can sized space shuttle with a solar sail to a brown start about three light years away (which has an intergalatic router nearby), and they power the shuttle with a laser beam powered by a cable dragged through the jupiter atmosphere/magnetic field. I highly recommend the book. Amazing concepts throughout.
MOD PARENT UP INSIGHTFULL!
By the way, *fantastic* book, Michael! I read the entire thing, and it was 100% spot on. Opened up my eyes to design patterns that I hadn't been aware of, made me appreciate the importance of not re-inventing logging services, and that advice about using the soft references to prioritize garbage collection... simply awesome. You really took my knowledge of programming up a notch.
Anyhow, I had been thinking of dropping you a note saying how great that book was, and lo-and-behold, I read your post here on Slashdot and realized it was you... great job on the book!
What happened to my country, and will you cowards please give it back?
Baby Boomers. The largest generation ever in the United States, and raised to hide under their desks any time there is a fire alarm or attack, thanks to the Cold War. Rather than thinking rationally, bravely, or pragmatically, they think "hide under the desk". Which 'hide the Saturn V blueprints' is merely an extension of. And they're now reaching an age where they're being handed the reigns of the federal government.
If you're GenMe or GenY, you may get your country back when you're approximately 65 or 70 as the Baby Boomers die off. If you're a Baby Boomer yourself, sorry dude, you're probably stuck with the cowards through to the end.
(Also, if you're GenMe, I recommend getting over any delusions of 'social security' being viable when you retire, and start coming up with some alternative retirement plans... Baby Boomers are going to bankrupt the social security system and mortgage their kids futures without a second thought if it means an extra 5 or 10 years of living in retirement homes... Can't say that I wouldn't do what they're going to do if I were in their situation. Just being the realist and pointing out the cliff that we're driving towards...)
Computers are (by their very definition as well as by the word used to describe them) mathematical machines. A computer can essentially do NOTHING BUT calculate. It can in its core add, subtract, shift and move data around. How is this supposed to work without math?
I get where you're coming from, although I would split hairs and say that, by definition, computers read, write, move forward, or move backwards. Those functions are what formally define a Turing-complete system, also known as a universal machine. The universal machine then quickly lends itself to doing operations such as adding, subtracting, and so forth. Reading and writing are formally different than adding and subtracting; and its the reading/writing/moving which are definitial to Turing-completeness.