This was actually asked sometime ago, sort of - the answer is OpenAFS
It's not the answer. OpenAFS is not a local file system, which is what the original poster is asking about. OpenAFS is a distributed, networked file system implemented on top of an existing physical file system; it stores its files in whatever file system you're running, so on Windows it would be using NTFS or FAT.
Well NTFS also has it's "sucking" points as in "sucking performance". More than one disk read/write test (Sandra, and one used by Magix) has shown my NTFS partition on the same physical hard disk to be 1/4th (that's 25%) of the speed of my FAT32 partition.
You may want to turn off "last access" timestamping. It's a registry setting, and at least on NT 4.0 and Windows 2000, it is enabled by default; the equivalent option in Linux is the "noatime" mount option.
Also, NTFS is sensitive to fragmentation. Periodically defragmenting the file system -- including the MFT -- is highly recommended.
Yes, as long as you want stability and consistenty (as in error recovery, such as provided by metadata journaling), you are.
Windows supports FAT32 and ISO9660 out of the box. FAT32 does not provide enough error recovery to be recommendable. People using ISO9660 as a hard-drive file system are crazy masochists -- enough said. There are seemingly abandoned ports of Ext2 and ReiserFS out there. None of them are in any sense stable for production use.
Why aren't there more file systems available on Windows? The first clue is that Windows is not an open-source platform; open-source hackers tend to live on open-source platforms. The people who work on kernel-level development under Windows are likely to be pursuing commercial software from the outset.
Furthermore, Windows kernel development is something of a black art; it is hard enough that you need to have some vested interest in the platform in order to stay; you would want to live and breathe Windows kernel APIs. (APIs, incidentally, that don't seem constructed for use by humans; for example, due to the limited size of the kernel addressing space, there are several different "kinds" of memory you must carefully allocate and manage yourself. Add to this the awkwardness involved in debugging this stuff, the poor kernel-level development tools offered by Microsoft, the limited documentation, the fact that much third-party information is non-gratis, and of course that the kernel sources themselves are closed, and you have one painful hobby.) In short, you would want to become a kernel specialist.
These painfully-accrued skills are worth their weight in gold, and used to leverage careers as highly-paid consultants or highly-paid trainers, or both. And some, of course, are driver writers for hardware companies.
There's a further reason: Linux file system drivers, in my experience, are designed to be, well, Linux file system drivers. Witness the amount of effort taken by IBM and SGI to port their proprietary journaling file systems to Linux -- and this was from one Unix-like kernel to another. Windows' internal file-system driver API is completely different from Linux'. Porting one file system not only requires a lot of knowledge about the different kernel APIs, but also about the file system itself, because most likely the file-system code is not cleanly separated from the kernel-specific code; you can't just sit down and write an adapter layer. (This is actually mostly speculation, but based on casual perusal of some existing driver code.)
There will be viable, open-source file systems on Windows the day somebody takes the time and effort do implement (and maintain) one. As for myself, I bought the book and started; I gave up not because it was technically challenging, but because it was no fun, and there were more interesting knowledge out there that I wanted to store in my brain.
Total Recall was at best the disneyworld ride version of "We Can Remember It for You Wholesale."
Total Recall may not be faithful to the plot of the source material, but it is certainly is quite faithful to the tone of the story and of Dick's early work in general (at least if you ignore Verhoeven's annoying penchant for gratuitously graphic violence). Total Recall is also the only adaptation which had the decency to admit that it was merely inspired by the original story -- those are the very words used in the opening credits.
Honestly, it can't be about download speed. I've used Bittorrent before. It's slow. Unless the file you're trying to get is very popular, your download is going to be stalled for a long time, after which you'll be pulling a whopping 3KB/sec for hours on end. Maybe you'll top out at an underwhelming 40KB/sec. Color me unimpressed.
Just because BitTorrent doesn't work for you doesn't mean it doesn't work for anyone else.
Using BitTorrent, I am regularly downloading files, such as large Linux ISOs, at 500KB/s and higher. It usually takes a few minutes for a download to hit its stride, but I find that to be acceptable. Keep in mind that a BitTorrent server will send you data according to your ability to share; this is why users with asynchronous cable or ADSL connections experience slow downloads. With enough upstream bandwidth, BitTorrent flies.
What's more, you're missing the point of BitTorrent, the feature it was built upon -- the fact that it distributes load. No longer must the user serving the files invest in costly servers, costly bandwidth or unreliable, time-lagged mirror setups. With BitTorrent he can easily serve the file at low bandwidth, relying on downloaders to share the cost of uploading to other downloaders. When you're downloading your ISO at 500KB/s, you're hogging the server.
The best live modification system I have seen was Supercede -- from Paul Allen's company Asymetrix -- later acquired by Instantiations and then going the way of the dodo. (Instantiations is now an Eclipse follower, having retired their JOVE product.)
Microsoft Visual Studio's C++ debugger supports a limited form of live modification. In practice, it falls down pretty quickly; many kinds of changes require a full build and restart. It is so awkwardly implemented that it is, in my experience, rarely worth the effort to use it.
As of 1.4.2, Java supports live modification, or "HotSwap" as I believe they call it, as a generic JVM feature. Eclipse's interactive debugger supports this feature, as does other IDEs.
While Java's support seems much more lenient towards code changes than MSVC++, Java can only hot-swap code at the method/class level; if you modify something inside a loop while the loop is running, when you tell your debugger to continue execution, the JVM will replace the entire method and then run it from the beginning.
Regardless of the motives of third parties who are pushing for the opening of Java, such as IBM, making Java truly free is a good thing.
Opening up a development process tends to bring more brains to the table, and that exposure, history has taught us, tends up to open the technology up in ways we had not imagined before.
Consider the flurry of activity surrounding Python after its internal reorganization around the time of version 1.6 -- modified license, python-dev list, PEP system, more lenience towards experimental and backwards-compatibility-breaking changes -- after which we have fantastic new language features, as well as strange, clever new techology such as Stackless Python, Pyrex, Psyco, PyPy etc.
Or, indeed, consider Linux. We all know what happened with that little insignificant grass-roots project. If Linux had been closed off around version 2.0, would we have an O(1) scheduler today, or configurable swappiness, or hyperthreading, or pre-emptible kernel?
Regardless of the quality of Sun's engineers, Sun's hold on the Java is constraining its growth. For example, what if I have a wild new idea to make the JVM's synchronization locks lightweight enough to have barely any overhead at all, thus improving the speed of applications? There's a large barrier to incorporating that kind of change. With something like Python you can grab the CVS sources and start hacking. Just the existence of such a point of entry is enough to inspire curious visitors.
Does Java need hacking? Sure. While my main point is that Sun possesses a finite number of brains -- what wonderful ideas and inventions aren't happening at Sun? -- there are specific areas that will benefit from the attention of outside hackers. JVM performance is still lacking, for one. The bytecode instruction set is still to specific to Java-the-language, as opposed to Java-the-platform, leaving potential other language platforms with much to desire.
Furthermore, anyone who has struggled with a bug in Sun's Java implementation knows that the process to get a bug fixed is often arduous, sometimes impossible. Last I checked there were serious problems reported years ago and not yet fixed.
Any language needs to develop in order to catch up with the times. With Java, it has been going rather slowly. With 1.5, Java is, in many ways, playing catch-up with C#. Other technologies spend much time in the pipeline before they are ratified and implemented. JDO took years. Support for "web services" is lacking, at best.
To me it seems that Sun does not have the resources to drive Java development. Witness Eclipse, which did what Sun never could do: produce a solid IDE. Eclipse is a multiplatform program, yet appears native on every platform it runs on; and supports a myriad of modern technologies, such as background compilation, refactoring, version control, remote file systems, and profiling; and is also a teeming breeding ground for experimental technology, such as AOP, fine-grained source-level version control, graphical editng, and quality control. Eclipse built this house in record time. To see what Sun did, over a considerably longer period of time, check out the ancient, outdated monster that that is Netbeans/Forte.
In summary, Java is better off in the hands of the community, not Sun alone.
Re:"Even more open-source than it is already"...
on
Gosling on Opening Java
·
· Score: 2, Insightful
When you download java, you get the source files along with it. GPL is not the only license that makes something open source.
Both of the above assertions are true. However, in the context of the parent, they imply that because Java comes with source files, Java is open source, while is categorically false. The "open" in open source represents a freedom to modify and redistribute, which is encoded in the GPL and other open-source licenses. The sources that come with the Sun Java distribution -- which, incidentally, only cover the standard class libraries -- are not "free as in speech".
German industrial pioneers Einstürzende Neubauten already do this. After the show, you can pick up a freshly-printed CD thas has been recorded straight from the mixing board.
PostgreSQL has been using genetic algorithm internally for some time, to optimize query plans.
A code optimizer seems like a natural application for GAs. If you can prove a piece of code's logical equivalence to another's, you can have a code generator produce random versions of the same code (functions, loops, blocks) and then run that as a GA to find the best-performing version. On the other hand, compilation might take ages to run.
Of course, to talk about lip sync -- which is about matching audio to the movement of human lips, or matching the movement of lips to audio -- is misleading. This article is about video that is already lip-synced, but which suffers from a delay inherent in the viewing mechanism.
The problem applies equally well to any other kind of video/audio synchronization that when out of whack will appear unnerving to the viewer; for example, gunshots; car explosions; doors slamming; the little high-tech bleeps made whenever something appears on a computer screen; the wet slapping sounds of pelvic trusts against sweaty, naked female hind parts; etc.
But the only way you can work on it is by hitting one character at a time...
And sometimes you just kill them off, you sadist!
Really, you'd think a writer (especially Stephenson) would know the difference between computer keys (the little plastic things on your keyboard) and computer characters (the little invisible things in your computer's memory).
IBM AFS. Note that OpenAFS is a true fork of IBM's own code, and currently maintained by IBM and the community. Afaik, IBM AFS is no longer in active development. You don't need to buy anything except support.
What does it cost?
IBM AFS client licenses have historically been "very expensive" -- that's about all I know. If you need to ask, you probably can't afford it.:)
Back in 1997, I worked on a commercial game, and we struggling with the problem of level load time.
This was back when Pentiums and Windows 98 were the norm, so that was our target. We were mostly loading 2D graphics and sound effects. Enough that it could take anything from 20 to 60 seconds to load the next level -- quite unacceptable.
We did two things to improve loading time. The first was to reduce the perceived loading time -- instead of just a static picture, we changed the screen to be a rendered animation of the main character walking towards the next level. The animation frames were driven by the internal loading progress, so he walked rather haltingly, but it was effective.
The second was to use memory-mapped files. We put each level's files into a single, uncompressed, indexed file (a simple idea used, at the time, by Id's games) -- each a hundred megs or so -- and I then modified the code to map the level file into memory, and let each object (sound effect, animation frame, etc.) merely set its internal pointer to somewhere within the mapped region. In short: We handed the entire task of loading to the operating system. The load time was now near-instantaneous.
What really surprised me was how little impact this had on overall performance -- we had hundreds of animation objects on screen and lots of layered sound effects, and the frame rate hardly budged. For the first second or two, as each object access triggered a page fault, the frame rate would crawl a little, but we quickly solved that by pre-loading the largest and most commonly used objects.
The speed of memory mapping was particularly surprising considering it was Windows 98, not particularly well known for its sturdy virtual memory manager.
I'm sure memory mapping is a popular technology among game developers. More recent 3D games probably have their own, specialized VM systems. Far Cry, in particular, is impressive in the way it leads the player through huge (by current standards) landscapes, with no perceptible loading pauses.
Only 1 in 10 developers can get their head wrapped around the central concepts neatly enough for them to produce maintainable code on a realistic timeframe.
Then I suggest hiring more intelligent developers. Sorry, but TAL/METAL is as simple and straightforward as it gets.
METAL has its weaknesses (the worst of which is that macros aren't parameterizable), though, leading to some awkward code; I will grant you that.
Can't see how you can blame TAL for your woes, though.
So what you're saying is, TAL is basically a poorly-documented, not-as-well-researched, not-as-stable version of XSLT?
I'm not. TAL is well-documented and well-researched, and has different design requirements than XSLT.
Specifically, XSLT is traditionally applied to static documents. You could apply it to dynamic documents, but how do you generate the document? Not with XSLT. You could generate it with TAL, though, and use XSLT for the presentational transformation.
Some argue that template engines make applications easier to maintain and make for cleaner code. Others argue that template engines introduce unnecessary overhead and require too much additional processing power. Do the readers of Slashdot think that it is important to use templates or are they just an extra unnecessary layer?
There's no single answer. Like anything else, it depends on your application.
Templating gives you the flexibility of being able to change the look of the pages independently of the information it represents. Templating requires more planning and design, since it's part of a feedback loop that affects how the information is shaped.
For some applications, separating the presentation logic from the application logic is simply a necessity, and the pains taken to design around a template system is an investment from which you will reap the benefits later, either when you change the application logic or the presentation logic.
(Separation of application interfaces from application logic is usually equally important, not the least because it allows refactoring, ie. the continuously improvement of code without affecting interface compatibility.)
There are dozens of PHP template engines to choose from including Smarty, phplib, and bTemplate. Which template engines do you have experience with and which ones have the best performance?
I don't know any of them, as I don't use PHP unless forced to, so no comment on that. However, I have used a lot of template systems in my time, and the best one I have had the pleasure of working with so far is TAL.
TAL (Template Attribute Language) was originally implemented for Zope. It is, however, completely general, and has been enthusiastically received by the open source community, spawning several implementations, including an implementation for PHP.
One of the core ideas of TAL is that it's valid XML, and therefore valid XHTML, and it's designed in a way to does not intrude on the original markup. You can view a TAL template in a WYSIWYG editor like Dreamweaver, and it will look fine; moreover, if the template is well-written, it may even look like a static preview of the real, dynamically generated template.
TAL is in fact just one part of a trinity that also includes TALES (TAL Expression Syntax) and METAL (Macro Extensions for TAL).
TAL specifies the template structure. TALES is a way to refer to external information. And METAL lets you define template regions that acts as reusable macros: headers, copyrights, headlines, boxes, what have you. METAL greatly aids in supporting the idea of "skinning". Represent documents as TAL templates that refer to METAL macros, and to switch your "skin", just point them to a different set of macros.
TAL, which is based on XML, is a declarative language. It will take some time -- but not much -- to get used to. For example, to iterate over a list/array/whatever:
Here, we use tal:content to insert the person's details into the table cells. As you can see, TAL uses a path syntax: person/name means the attribute "name" of the variable "person
Indentation is Tab-Only
Like Python, Prothon uses indentation to control the block structure of the program instead of block/end or {}. However, Prothon only allows tabs for indentation. Any space in an indent will cause an error. This allows each programmer to set the editor to show the tab width to whatever he pleases and the Python problems of mixed spaces and tabs cannot happen in Prothon. It also allows for minimum typing.
Nobody seems to have told these guys that tabs are evil.
Python's whitespace-based indentation may be controversial, but it works. Tab characters have all sorts of evilness associated with them. If they had been implemented correctly and consistently across all UIs and transports, it would have been fine. But they're not.
Edna "allows you to access your MP3 collection from any networked computer. This software streams your MP3s via HTTP to any MP3 player that supports playing off a remote connection". It's about 1,000 lines of Python code, no database needed. It takes about 10 seconds to get up and running.
As an aside, where's Connie Willis' rabid fan base? Her books range from excellent to mindblowing, but I've never heard people fawn over her like they do LeGuin or the other tedious female sci-fi authors.
Here's one fan, based on reading To Say Nothing of the Dog. As brilliant as that book was, though, it was hardly more than a thrilling adventure story, a breezy, slapsticky time-travel romp with not much emotional or philosophical weight. Le Guin's stuff, on the other hand, is arguably Literature.
- This was actually asked sometime ago, sort of - the answer is OpenAFS
It's not the answer. OpenAFS is not a local file system, which is what the original poster is asking about. OpenAFS is a distributed, networked file system implemented on top of an existing physical file system; it stores its files in whatever file system you're running, so on Windows it would be using NTFS or FAT.-
Well NTFS also has it's "sucking" points as in "sucking performance". More than one disk read/write test (Sandra, and one used by Magix) has shown my NTFS partition on the same physical hard disk to be 1/4th (that's 25%) of the speed of my FAT32 partition.
You may want to turn off "last access" timestamping. It's a registry setting, and at least on NT 4.0 and Windows 2000, it is enabled by default; the equivalent option in Linux is the "noatime" mount option.Also, NTFS is sensitive to fragmentation. Periodically defragmenting the file system -- including the MFT -- is highly recommended.
Indeed. Seeing it being sold on Amazon and elsewhere for $300, I'm tempted to sell my own copy!
- Am I condemned to stay with NTFS?
Yes, as long as you want stability and consistenty (as in error recovery, such as provided by metadata journaling), you are.Windows supports FAT32 and ISO9660 out of the box. FAT32 does not provide enough error recovery to be recommendable. People using ISO9660 as a hard-drive file system are crazy masochists -- enough said. There are seemingly abandoned ports of Ext2 and ReiserFS out there. None of them are in any sense stable for production use.
Why aren't there more file systems available on Windows? The first clue is that Windows is not an open-source platform; open-source hackers tend to live on open-source platforms. The people who work on kernel-level development under Windows are likely to be pursuing commercial software from the outset.
Furthermore, Windows kernel development is something of a black art; it is hard enough that you need to have some vested interest in the platform in order to stay; you would want to live and breathe Windows kernel APIs. (APIs, incidentally, that don't seem constructed for use by humans; for example, due to the limited size of the kernel addressing space, there are several different "kinds" of memory you must carefully allocate and manage yourself. Add to this the awkwardness involved in debugging this stuff, the poor kernel-level development tools offered by Microsoft, the limited documentation, the fact that much third-party information is non-gratis, and of course that the kernel sources themselves are closed, and you have one painful hobby.) In short, you would want to become a kernel specialist.
These painfully-accrued skills are worth their weight in gold, and used to leverage careers as highly-paid consultants or highly-paid trainers, or both. And some, of course, are driver writers for hardware companies.
There's a further reason: Linux file system drivers, in my experience, are designed to be, well, Linux file system drivers. Witness the amount of effort taken by IBM and SGI to port their proprietary journaling file systems to Linux -- and this was from one Unix-like kernel to another. Windows' internal file-system driver API is completely different from Linux'. Porting one file system not only requires a lot of knowledge about the different kernel APIs, but also about the file system itself, because most likely the file-system code is not cleanly separated from the kernel-specific code; you can't just sit down and write an adapter layer. (This is actually mostly speculation, but based on casual perusal of some existing driver code.)
There will be viable, open-source file systems on Windows the day somebody takes the time and effort do implement (and maintain) one. As for myself, I bought the book and started; I gave up not because it was technically challenging, but because it was no fun, and there were more interesting knowledge out there that I wanted to store in my brain.
- Total Recall was at best the disneyworld ride version of "We Can Remember It for You Wholesale."
Total Recall may not be faithful to the plot of the source material, but it is certainly is quite faithful to the tone of the story and of Dick's early work in general (at least if you ignore Verhoeven's annoying penchant for gratuitously graphic violence). Total Recall is also the only adaptation which had the decency to admit that it was merely inspired by the original story -- those are the very words used in the opening credits.It's a short story. Adapting a short story into a full-length feature film that remains faithful to the original story takes more talent, artistry and loyalty to the source material than anyone in Hollywood is willing, or able, to provide. This could still turn out to be a good film, of course; they don't always screw up. Although chances are they will.
- Honestly, it can't be about download speed. I've used Bittorrent before. It's slow. Unless the file you're trying to get is very popular, your download is going to be stalled for a long time, after which you'll be pulling a whopping 3KB/sec for hours on end. Maybe you'll top out at an underwhelming 40KB/sec. Color me unimpressed.
Just because BitTorrent doesn't work for you doesn't mean it doesn't work for anyone else.Using BitTorrent, I am regularly downloading files, such as large Linux ISOs, at 500KB/s and higher. It usually takes a few minutes for a download to hit its stride, but I find that to be acceptable. Keep in mind that a BitTorrent server will send you data according to your ability to share; this is why users with asynchronous cable or ADSL connections experience slow downloads. With enough upstream bandwidth, BitTorrent flies.
What's more, you're missing the point of BitTorrent, the feature it was built upon -- the fact that it distributes load. No longer must the user serving the files invest in costly servers, costly bandwidth or unreliable, time-lagged mirror setups. With BitTorrent he can easily serve the file at low bandwidth, relying on downloaders to share the cost of uploading to other downloaders. When you're downloading your ISO at 500KB/s, you're hogging the server.
Microsoft Visual Studio's C++ debugger supports a limited form of live modification. In practice, it falls down pretty quickly; many kinds of changes require a full build and restart. It is so awkwardly implemented that it is, in my experience, rarely worth the effort to use it.
As of 1.4.2, Java supports live modification, or "HotSwap" as I believe they call it, as a generic JVM feature. Eclipse's interactive debugger supports this feature, as does other IDEs.
While Java's support seems much more lenient towards code changes than MSVC++, Java can only hot-swap code at the method/class level; if you modify something inside a loop while the loop is running, when you tell your debugger to continue execution, the JVM will replace the entire method and then run it from the beginning.
Opening up a development process tends to bring more brains to the table, and that exposure, history has taught us, tends up to open the technology up in ways we had not imagined before.
Consider the flurry of activity surrounding Python after its internal reorganization around the time of version 1.6 -- modified license, python-dev list, PEP system, more lenience towards experimental and backwards-compatibility-breaking changes -- after which we have fantastic new language features, as well as strange, clever new techology such as Stackless Python, Pyrex, Psyco, PyPy etc.
Or, indeed, consider Linux. We all know what happened with that little insignificant grass-roots project. If Linux had been closed off around version 2.0, would we have an O(1) scheduler today, or configurable swappiness, or hyperthreading, or pre-emptible kernel?
Regardless of the quality of Sun's engineers, Sun's hold on the Java is constraining its growth. For example, what if I have a wild new idea to make the JVM's synchronization locks lightweight enough to have barely any overhead at all, thus improving the speed of applications? There's a large barrier to incorporating that kind of change. With something like Python you can grab the CVS sources and start hacking. Just the existence of such a point of entry is enough to inspire curious visitors.
Does Java need hacking? Sure. While my main point is that Sun possesses a finite number of brains -- what wonderful ideas and inventions aren't happening at Sun? -- there are specific areas that will benefit from the attention of outside hackers. JVM performance is still lacking, for one. The bytecode instruction set is still to specific to Java-the-language, as opposed to Java-the-platform, leaving potential other language platforms with much to desire.
Furthermore, anyone who has struggled with a bug in Sun's Java implementation knows that the process to get a bug fixed is often arduous, sometimes impossible. Last I checked there were serious problems reported years ago and not yet fixed.
Any language needs to develop in order to catch up with the times. With Java, it has been going rather slowly. With 1.5, Java is, in many ways, playing catch-up with C#. Other technologies spend much time in the pipeline before they are ratified and implemented. JDO took years. Support for "web services" is lacking, at best.
To me it seems that Sun does not have the resources to drive Java development. Witness Eclipse, which did what Sun never could do: produce a solid IDE. Eclipse is a multiplatform program, yet appears native on every platform it runs on; and supports a myriad of modern technologies, such as background compilation, refactoring, version control, remote file systems, and profiling; and is also a teeming breeding ground for experimental technology, such as AOP, fine-grained source-level version control, graphical editng, and quality control. Eclipse built this house in record time. To see what Sun did, over a considerably longer period of time, check out the ancient, outdated monster that that is Netbeans/Forte.
In summary, Java is better off in the hands of the community, not Sun alone.
- When you download java, you get the source files along with it. GPL is not the only license that makes something open source.
Both of the above assertions are true. However, in the context of the parent, they imply that because Java comes with source files, Java is open source, while is categorically false. The "open" in open source represents a freedom to modify and redistribute, which is encoded in the GPL and other open-source licenses. The sources that come with the Sun Java distribution -- which, incidentally, only cover the standard class libraries -- are not "free as in speech".German industrial pioneers Einstürzende Neubauten already do this. After the show, you can pick up a freshly-printed CD thas has been recorded straight from the mixing board.
- This assertion is an untruthitude.
Untruthitude? How trepidacious of you.A code optimizer seems like a natural application for GAs. If you can prove a piece of code's logical equivalence to another's, you can have a code generator produce random versions of the same code (functions, loops, blocks) and then run that as a GA to find the best-performing version. On the other hand, compilation might take ages to run.
The problem applies equally well to any other kind of video/audio synchronization that when out of whack will appear unnerving to the viewer; for example, gunshots; car explosions; doors slamming; the little high-tech bleeps made whenever something appears on a computer screen; the wet slapping sounds of pelvic trusts against sweaty, naked female hind parts; etc.
And sometimes you just kill them off, you sadist!
Really, you'd think a writer (especially Stephenson) would know the difference between computer keys (the little plastic things on your keyboard) and computer characters (the little invisible things in your computer's memory).
-
How can I buy their product? Who sells it?
IBM AFS. Note that OpenAFS is a true fork of IBM's own code, and currently maintained by IBM and the community. Afaik, IBM AFS is no longer in active development. You don't need to buy anything except support.- What does it cost?
IBM AFS client licenses have historically been "very expensive" -- that's about all I know. If you need to ask, you probably can't afford it.While it looks interesting, the project is labeled as pre-alpha -- not ready for production use.
This was back when Pentiums and Windows 98 were the norm, so that was our target. We were mostly loading 2D graphics and sound effects. Enough that it could take anything from 20 to 60 seconds to load the next level -- quite unacceptable.
We did two things to improve loading time. The first was to reduce the perceived loading time -- instead of just a static picture, we changed the screen to be a rendered animation of the main character walking towards the next level. The animation frames were driven by the internal loading progress, so he walked rather haltingly, but it was effective.
The second was to use memory-mapped files. We put each level's files into a single, uncompressed, indexed file (a simple idea used, at the time, by Id's games) -- each a hundred megs or so -- and I then modified the code to map the level file into memory, and let each object (sound effect, animation frame, etc.) merely set its internal pointer to somewhere within the mapped region. In short: We handed the entire task of loading to the operating system. The load time was now near-instantaneous.
What really surprised me was how little impact this had on overall performance -- we had hundreds of animation objects on screen and lots of layered sound effects, and the frame rate hardly budged. For the first second or two, as each object access triggered a page fault, the frame rate would crawl a little, but we quickly solved that by pre-loading the largest and most commonly used objects.
The speed of memory mapping was particularly surprising considering it was Windows 98, not particularly well known for its sturdy virtual memory manager.
I'm sure memory mapping is a popular technology among game developers. More recent 3D games probably have their own, specialized VM systems. Far Cry, in particular, is impressive in the way it leads the player through huge (by current standards) landscapes, with no perceptible loading pauses.
With a name like that, I bet it's kinda crap.
- Only 1 in 10 developers can get their head wrapped around the central concepts neatly enough for them to produce maintainable code on a realistic timeframe.
Then I suggest hiring more intelligent developers. Sorry, but TAL/METAL is as simple and straightforward as it gets.METAL has its weaknesses (the worst of which is that macros aren't parameterizable), though, leading to some awkward code; I will grant you that.
Can't see how you can blame TAL for your woes, though.
- So what you're saying is, TAL is basically a poorly-documented, not-as-well-researched, not-as-stable version of XSLT?
I'm not. TAL is well-documented and well-researched, and has different design requirements than XSLT.Specifically, XSLT is traditionally applied to static documents. You could apply it to dynamic documents, but how do you generate the document? Not with XSLT. You could generate it with TAL, though, and use XSLT for the presentational transformation.
There's no single answer. Like anything else, it depends on your application.
Templating gives you the flexibility of being able to change the look of the pages independently of the information it represents. Templating requires more planning and design, since it's part of a feedback loop that affects how the information is shaped.
For some applications, separating the presentation logic from the application logic is simply a necessity, and the pains taken to design around a template system is an investment from which you will reap the benefits later, either when you change the application logic or the presentation logic.
(Separation of application interfaces from application logic is usually equally important, not the least because it allows refactoring, ie. the continuously improvement of code without affecting interface compatibility.)
I don't know any of them, as I don't use PHP unless forced to, so no comment on that. However, I have used a lot of template systems in my time, and the best one I have had the pleasure of working with so far is TAL.
TAL (Template Attribute Language) was originally implemented for Zope. It is, however, completely general, and has been enthusiastically received by the open source community, spawning several implementations, including an implementation for PHP.
One of the core ideas of TAL is that it's valid XML, and therefore valid XHTML, and it's designed in a way to does not intrude on the original markup. You can view a TAL template in a WYSIWYG editor like Dreamweaver, and it will look fine; moreover, if the template is well-written, it may even look like a static preview of the real, dynamically generated template.
TAL is in fact just one part of a trinity that also includes TALES (TAL Expression Syntax) and METAL (Macro Extensions for TAL).
TAL specifies the template structure. TALES is a way to refer to external information. And METAL lets you define template regions that acts as reusable macros: headers, copyrights, headlines, boxes, what have you. METAL greatly aids in supporting the idea of "skinning". Represent documents as TAL templates that refer to METAL macros, and to switch your "skin", just point them to a different set of macros.
TAL, which is based on XML, is a declarative language. It will take some time -- but not much -- to get used to. For example, to iterate over a list/array/whatever:
This goes over the elements in the "results" list, and for each element, assigns the value to the variable "person".
Here, we use tal:content to insert the person's details into the table cells. As you can see, TAL uses a path syntax: person/name means the attribute "name" of the variable "person
- Indentation is Tab-Only
Nobody seems to have told these guys that tabs are evil.Like Python, Prothon uses indentation to control the block structure of the program instead of block/end or {}. However, Prothon only allows tabs for indentation. Any space in an indent will cause an error. This allows each programmer to set the editor to show the tab width to whatever he pleases and the Python problems of mixed spaces and tabs cannot happen in Prothon. It also allows for minimum typing.
Python's whitespace-based indentation may be controversial, but it works. Tab characters have all sorts of evilness associated with them. If they had been implemented correctly and consistently across all UIs and transports, it would have been fine. But they're not.
Edna "allows you to access your MP3 collection from any networked computer. This software streams your MP3s via HTTP to any MP3 player that supports playing off a remote connection". It's about 1,000 lines of Python code, no database needed. It takes about 10 seconds to get up and running.
- As an aside, where's Connie Willis' rabid fan base? Her books range from excellent to mindblowing, but I've never heard people fawn over her like they do LeGuin or the other tedious female sci-fi authors.
Here's one fan, based on reading To Say Nothing of the Dog. As brilliant as that book was, though, it was hardly more than a thrilling adventure story, a breezy, slapsticky time-travel romp with not much emotional or philosophical weight. Le Guin's stuff, on the other hand, is arguably Literature.